Package er.neo4jadaptor.query.neo4j_by_pk

Source Code of er.neo4jadaptor.query.neo4j_by_pk.ValueMap

package er.neo4jadaptor.query.neo4j_by_pk;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.webobjects.eoaccess.EOAttribute;
import com.webobjects.eoaccess.EOEntity;
import com.webobjects.eocontrol.EOAndQualifier;
import com.webobjects.eocontrol.EOKeyValueQualifier;
import com.webobjects.eocontrol.EOOrQualifier;
import com.webobjects.eocontrol.EOQualifier;

import er.extensions.eof.qualifiers.ERXInQualifier;
import er.neo4jadaptor.ersatz.webobjects.NSTranslator;

public class ValueMap {
  @SuppressWarnings("unused")
  private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(ValueMap.class);
 
  private final Map<EOAttribute, List<Object>> map = new HashMap<EOAttribute, List<Object>>();
 
  public ValueMap(EOEntity entity, EOQualifier q) {
    collectPossibleValues(entity, q);
  }

  private void collectPossibleValues(EOEntity entity, EOQualifier q) {
    if (q == null) {
      return;
    }
    if (q instanceof EOKeyValueQualifier) {
      EOKeyValueQualifier kvQualifier = (EOKeyValueQualifier) q;
     
      if (kvQualifier.selector().equals(EOKeyValueQualifier.QualifierOperatorEqual)) {
        String key = kvQualifier.key();
        EOAttribute att = entity.attributeNamed(key);
       
        if (att != null) {
          if (q instanceof ERXInQualifier) {
            for (Object v : ((ERXInQualifier) q).values()) {
              Object value = NSTranslator.instance.toNeutralValue(v, att);
             
              add(att, value);             
            }
          } else {
            Object value = NSTranslator.instance.toNeutralValue(kvQualifier.value(), att);
         
            add(att, value);
          }
        }
      }
      return;
    }
    if (q instanceof EOAndQualifier) {
      for (EOQualifier qp : ((EOAndQualifier) q).qualifiers()) {
        collectPossibleValues(entity, qp);
      }
    }
    if (q instanceof EOOrQualifier) {
      for (EOQualifier qp : ((EOOrQualifier) q).qualifiers()) {
        collectPossibleValues(entity, qp);
      }
    }
  }
 
  private void add(EOAttribute att, Object value) {
    List<Object> list = map.get(att);
   
    if (list == null) {
      list = new ArrayList<Object>();
      map.put(att, list);
    }
    list.add(value);
  }
 
  public List<Object> getValuesForAttribute(EOAttribute att) {
    return map.get(att);
  }
 
  public Collection<EOAttribute> getAttributes() {
    return map.keySet();
  }
 
  public EOAttribute getMostFrequentAttribute() {
    Map.Entry<EOAttribute, List<Object>> entry = null;
   
    for (Map.Entry<EOAttribute, List<Object>> e : map.entrySet()) {
      if (entry == null) {
        entry = e;
      } else {
        if (e.getValue().size() > entry.getValue().size()) {
          entry = e;
        }
      }
    }
    if (entry == null) {
      return null;
    } else {
      return entry.getKey();
    }
  }
}
TOP

Related Classes of er.neo4jadaptor.query.neo4j_by_pk.ValueMap

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.