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.foundation.viewpoint.EditionScheme;
import org.openflexo.foundation.viewpoint.PatternRole;
public class EditionSchemePathElement<E extends Bindable> implements BindingVariable<EditionScheme> {
static final Logger logger = Logger.getLogger(EditionSchemePathElement.class.getPackage().getName());
private E container;
private EditionScheme editionScheme;
private EditionSchemeParameterListPathElement parametersElement;
private Hashtable<PatternRole, BindingPathElement> elements;
private Vector<BindingPathElement> allElements;
public EditionSchemePathElement(EditionScheme anEditionScheme, E container) {
this.editionScheme = anEditionScheme;
this.container = container;
elements = new Hashtable<PatternRole, BindingPathElement>();
allElements = new Vector<BindingPathElement>();
parametersElement = new EditionSchemeParameterListPathElement(editionScheme, this);
for (PatternRole pr : anEditionScheme.getEditionPattern().getPatternRoles()) {
BindingPathElement<?> newPathElement = PatternRolePathElement.makePatternRolePathElement(pr, editionScheme);
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 EditionScheme.class;
}
@Override
public String getSerializationRepresentation() {
return editionScheme.getName();
}
@Override
public boolean isBindingValid() {
return true;
}
@Override
public String getLabel() {
return getSerializationRepresentation();
}
@Override
public String getTooltipText(Type resultingType) {
return editionScheme.getDescription();
}
@Override
public boolean isSettable() {
return false;
}
@Override
public E getContainer() {
return container;
}
@Override
public String getVariableName() {
return getSerializationRepresentation();
}
@Override
public EditionScheme getBindingValue(Object target, BindingEvaluationContext context) {
return editionScheme;
}
@Override
public void setBindingValue(EditionScheme value, Object target, BindingEvaluationContext context) {
// Not settable
}
public EditionScheme getEditionScheme() {
return editionScheme;
}
}