package com.sap.runlet.interpreter;
import java.util.Collection;
import java.util.List;
import com.sap.runlet.abstractinterpreter.Side;
import com.sap.runlet.abstractinterpreter.util.ModelAdapter;
import data.classes.Association;
import data.classes.AssociationEnd;
import data.classes.ClassTypeDefinition;
import data.classes.SapClass;
import data.classes.TypeDefinition;
public class RunletModelAdapter implements ModelAdapter<Association, AssociationEnd, SapClass, TypeDefinition, ClassTypeDefinition> {
@Override
public boolean aConformsToB(TypeDefinition a, TypeDefinition b) {
return a.conformsTo(b);
}
@Override
public SapClass getClazz(ClassTypeDefinition classUsage) {
return classUsage.getClazz();
}
@Override
public String getClassUsageName(ClassTypeDefinition classUsage) {
return classUsage.getClazz().getName();
}
@Override
public String getClassName(SapClass clazz) {
return clazz.getName();
}
@Override
public boolean isValueType(SapClass clazz) {
return clazz.isValueType();
}
@Override
public Association getAssociation(AssociationEnd end) {
return end.getAssociation();
}
@Override
public String getEndName(AssociationEnd end) {
return end.getName();
}
@Override
public SapClass getEndType(AssociationEnd end) {
return end.getType().getClazz();
}
@Override
public List<AssociationEnd> getEnds(Association association) {
return association.getEnds();
}
@Override
public String getAssociationName(Association association) {
return association.getName();
}
@Override
public Side getSideOfEnd(AssociationEnd end) {
if (end.getAssociation().getEnds().get(Side.LEFT.endNumber()).equals(end)) {
return Side.LEFT;
} else {
return Side.RIGHT;
}
}
@Override
public boolean isOrdered(AssociationEnd end) {
return end.getType().isOrdered();
}
@Override
public boolean isUnique(AssociationEnd end) {
return end.getType().isUnique();
}
@Override
public AssociationEnd otherEnd(AssociationEnd end) {
return getEnds(getAssociation(end)).get(getSideOfEnd(end).otherEndNumber());
}
@Override
public Collection<AssociationEnd> getConformsToAssociationEnds(SapClass clazz) {
return clazz.getConformsToAssociationEnds();
}
@Override
public boolean isContributesToEquality(AssociationEnd end) {
return end.isContributesToEquality();
}
@Override
public boolean isComposite(AssociationEnd end) {
return end.isComposite();
}
@Override
public Collection<AssociationEnd> getEqualityRelevantAssociationEnds(SapClass clazz) {
return clazz.getEqualityRelevantAssociationEnds();
}
@Override
public boolean isMany(AssociationEnd end) {
return end.getType().getUpperMultiplicity() != 1;
}
@Override
public Collection<AssociationEnd> getConformsToCompositeChildAssociationEnds(SapClass clazz) {
return clazz.getConformsToCompositeChildAssociationEnds();
}
@Override
public ClassTypeDefinition getClassUsage(AssociationEnd end) {
return end.getType();
}
}