package org.openflexo.foundation.viewpoint.binding; import java.lang.reflect.Type; import java.util.Hashtable; import java.util.Vector; import java.util.logging.Logger; import org.openflexo.antar.binding.AbstractBinding.BindingEvaluationContext; import org.openflexo.antar.binding.Bindable; import org.openflexo.antar.binding.BindingPathElement; import org.openflexo.antar.binding.BindingVariable; import org.openflexo.antar.binding.SimplePathElement; import org.openflexo.foundation.ontology.EditionPatternInstance; import org.openflexo.foundation.viewpoint.EditionPattern; import org.openflexo.foundation.viewpoint.PatternRole; public class EditionPatternPathElement<E extends Bindable> implements BindingVariable<EditionPatternInstance>, SimplePathElement<EditionPatternInstance> { static final Logger logger = Logger.getLogger(EditionPatternPathElement.class.getPackage().getName()); private E container; private String name; private EditionPattern editionPattern; private Hashtable<PatternRole, BindingPathElement> elements; private Vector<BindingPathElement> allElements; public EditionPatternPathElement(EditionPattern anEditionPattern, E container) { this(null, anEditionPattern, container); } public EditionPatternPathElement(String name, EditionPattern anEditionPattern, E container) { this.name = name; this.editionPattern = anEditionPattern; this.container = container; elements = new Hashtable<PatternRole, BindingPathElement>(); allElements = new Vector<BindingPathElement>(); if (editionPattern != null) { for (PatternRole pr : editionPattern.getPatternRoles()) { BindingPathElement<?> newPathElement = null; newPathElement = PatternRolePathElement.makePatternRolePathElement(pr, anEditionPattern); elements.put(pr, newPathElement); allElements.add(newPathElement); } } } public Vector<BindingPathElement> getAllElements() { return allElements; } public BindingPathElement getPathElement(PatternRole pr) { return elements.get(pr); } @Override public Class<E> getDeclaringClass() { if (container != null) { return (Class<E>) container.getClass(); } return null; } @Override public Type getType() { return editionPattern; } @Override public String getSerializationRepresentation() { if (name != null) { return name; } return editionPattern.getName(); } @Override public boolean isBindingValid() { return true; } @Override public String getLabel() { return getSerializationRepresentation(); } @Override public String getTooltipText(Type resultingType) { return editionPattern.getDescription(); } @Override public boolean isSettable() { return false; } @Override public E getContainer() { return container; } @Override public String getVariableName() { return getSerializationRepresentation(); } @Override public EditionPatternInstance getBindingValue(Object target, BindingEvaluationContext context) { logger.warning("What to return as " + getVariableName() + " with a " + target + " ? " + (target != null ? "(" + target.getClass().getSimpleName() + ")" : "")); return null; } @Override public void setBindingValue(EditionPatternInstance value, Object target, BindingEvaluationContext context) { // Not settable } public EditionPattern getEditionPattern() { return editionPattern; } }