package er.directtoweb.components.misc;
import org.apache.log4j.Logger;
import com.webobjects.appserver.WOContext;
import com.webobjects.eocontrol.EOQualifier;
import com.webobjects.foundation.NSArray;
import er.directtoweb.components.ERDCustomQueryComponent;
import er.extensions.appserver.ERXDisplayGroup;
import er.extensions.eof.ERXEOControlUtilities;
import er.extensions.eof.qualifiers.ERXRegExQualifier;
/**
* Allows you to query a set of keys - supplied by queryAttributes - with a regular expression query.
* As an example, you could query your User entity by login, email and name in one go.
* @binding queryAttributes NSArray of attributes to query
* @binding displayGroup display group (must be a subclass of ERXDisplayGroup)
* @author ak
*/
public class ERDQueryAnyKey extends ERDCustomQueryComponent {
/**
* 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;
/** logging support */
private static final Logger log = Logger.getLogger(ERDQueryAnyKey.class);
private Object _value;
/**
* Public constructor
* @param context the context
*/
public ERDQueryAnyKey(WOContext context) {
super(context);
}
public Object value() {
return _value;
}
public NSArray queryAttributes() {
NSArray result = (NSArray)valueForBinding("queryAttributes");
if(result == null) {
result = ERXEOControlUtilities.stringAttributeListForEntityNamed(session().defaultEditingContext(), (String) valueForBinding("entityName"));
}
return result;
}
public void setValue(Object newValue) {
_value = newValue;
//log.info(displayGroup());
ERXDisplayGroup dg = (ERXDisplayGroup)displayGroup();
EOQualifier q = null;
if(newValue != null) {
if(newValue != null && newValue.toString().indexOf("*") == 0) {
newValue = newValue.toString().substring(1);
}
if(false) {
q = ERXEOControlUtilities.qualifierMatchingAnyKey(queryAttributes(), EOQualifier.QualifierOperatorCaseInsensitiveLike, "*" +newValue + "*");
} else {
q = ERXEOControlUtilities.qualifierMatchingAnyKey(queryAttributes(), ERXRegExQualifier.MatchesSelector, newValue);
}
}
dg.setQualifierForKey(q, key());
}
}