001    package org.trails.component.search;
002    
003    import org.apache.tapestry.BaseComponent;
004    import org.apache.tapestry.IMarkupWriter;
005    import org.apache.tapestry.IRequestCycle;
006    import org.apache.tapestry.annotations.InjectObject;
007    import org.apache.tapestry.annotations.Parameter;
008    import org.hibernate.criterion.DetachedCriteria;
009    import org.hibernate.criterion.Restrictions;
010    import org.trails.descriptor.IPropertyDescriptor;
011    import org.trails.validation.ValidatorTranslatorService;
012    
013    public abstract class SimpleSearchField extends BaseComponent
014    {
015    
016            @Parameter
017            public abstract Object getValue();
018    
019            public abstract void setValue(Object Value);
020    
021            @Parameter(required = false, defaultValue = "page.criteria")
022            public abstract DetachedCriteria getCriteria();
023    
024            public abstract void setCriteria(DetachedCriteria Criteria);
025    
026            @Parameter(required = true)
027            public abstract IPropertyDescriptor getPropertyDescriptor();
028    
029            public abstract void setPropertyDescriptor(IPropertyDescriptor PropertyDescriptor);
030    
031            @InjectObject("service:trails.core.ValidatorTranslatorService")
032            public abstract ValidatorTranslatorService getValidatorTranslatorService();
033    
034            public void buildCriterion()
035            {
036                    if (getValue() != null)
037                    {
038                            getCriteria().add(Restrictions.eq(getPropertyDescriptor().getName(), getValue()));
039                    }
040            }
041    
042            @Override
043            protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
044            {
045                    // TODO Auto-generated method stub
046                    super.renderComponent(writer, cycle);
047                    if (cycle.isRewinding())
048                    {
049                            buildCriterion();
050                    }
051            }
052    
053    
054    }