Package er.directtoweb.components

Source Code of er.directtoweb.components.ERDQuickSearch

package er.directtoweb.components;

import com.webobjects.appserver.WOComponent;
import com.webobjects.appserver.WOContext;
import com.webobjects.appserver.WOResponse;
import com.webobjects.directtoweb.D2W;
import com.webobjects.directtoweb.ListPageInterface;
import com.webobjects.eoaccess.EODatabaseDataSource;
import com.webobjects.eocontrol.EOAndQualifier;
import com.webobjects.eocontrol.EOEditingContext;
import com.webobjects.eocontrol.EOFetchSpecification;
import com.webobjects.eocontrol.EOQualifier;
import com.webobjects.foundation.NSArray;

import er.extensions.eof.ERXEOControlUtilities;

/**
* Simple search for that can be dropped on a page wrapper and pops up a list page.
* You can either let it create a list page or bind queryDatasource and searchAction and let the parent do the work.
* @author ak
*
*/
public class ERDQuickSearch extends ERDCustomComponent {
  /**
   * Do I need to update serialVersionUID?
   * See section 5.6 <cite>Type Changes Affecting Serialization</cite> on page 51 of the
   * <a href="http://java.sun.com/j2se/1.4/pdf/serial-spec.pdf">Java Object Serialization Spec</a>
   */
  private static final long serialVersionUID = 1L;

  public ERDQuickSearch(WOContext context) {
    super(context);
  }

  @Override
  public boolean synchronizesVariablesWithBindings() {
        return false;
    }

    public String searchValue;
   
    @Override
    public void appendToResponse(WOResponse r, WOContext c) {
      searchValue = defaultValue();
      super.appendToResponse(r, c);
    }

    public WOComponent searchAction() {
        ListPageInterface lpi = null;
        if(searchValue != null) {
            String listConfigurationName = (String) valueForBinding("listConfigurationName");
            String entityName = (String) valueForBinding("entityName");
            EODatabaseDataSource ds = queryDatasource(entityName);
            if(hasBinding("queryDatasource")) {
                setValueForBinding(ds, "queryDatasource");
                return (WOComponent) performParentAction("searchAction");
            }
            if(listConfigurationName != null) {
                lpi = (ListPageInterface) D2W.factory().pageForConfigurationNamed(listConfigurationName, session());
            } else {
                lpi = D2W.factory().listPageForEntityNamed(entityName, session());
            }
            lpi.setDataSource(ds);
            lpi.setNextPage(context().page());
        }
        return (WOComponent)lpi;
    }

    private EODatabaseDataSource queryDatasource(String entityName) {
        EOEditingContext ec = session().defaultEditingContext();
        EODatabaseDataSource ds = new EODatabaseDataSource(ec, entityName);
        NSArray searchKeys = (NSArray) valueForBinding("searchKeys");
        if(searchKeys == null) {
            searchKeys = ERXEOControlUtilities.stringAttributeListForEntityNamed(ec, entityName);
        }
        EOQualifier qualifier = ERXEOControlUtilities.qualifierMatchingAnyKey(searchKeys, EOQualifier.QualifierOperatorCaseInsensitiveLike, "*" + searchValue + "*");
        EOQualifier restrictingQualifier = (EOQualifier) valueForBinding("extraRestrictingQualifier");
        if(restrictingQualifier != null) {
            qualifier = new EOAndQualifier(new NSArray(new Object[]{qualifier, restrictingQualifier}));
        }
        EOFetchSpecification fs = new EOFetchSpecification(entityName, qualifier, null);
        ds.setFetchSpecification(fs);
        return ds;
    }

    public boolean disabled() {
      return valueForBinding("entityName") == null;
    }
   
    public String defaultValue() {
        return (String) valueForBinding("defaultValue");
    }
}
TOP

Related Classes of er.directtoweb.components.ERDQuickSearch

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.