package org.openflexo.foundation.ontology.xsd;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.logging.Level;
import org.openflexo.foundation.Inspectors;
import org.openflexo.foundation.ontology.OntologyClass;
import org.openflexo.toolbox.StringUtils;
public class XSOntClass extends AbstractXSOntObject implements OntologyClass, XSOntologyURIDefinitions {
private static final java.util.logging.Logger logger = org.openflexo.logging.FlexoLogger.getLogger(XSOntClass.class.getPackage()
.getName());
private final List<XSOntClass> superClasses = new ArrayList<XSOntClass>();
protected XSOntClass(XSOntology ontology, String name, String uri) {
super(ontology, name, uri);
}
@Override
public boolean isSuperClassOf(OntologyClass aClass) {
if (aClass instanceof XSOntClass == false) {
return false;
}
if (aClass == this || equalsToConcept(aClass)) {
return true;
}
for (XSOntClass c : ((XSOntClass) aClass).getSuperClasses()) {
if (isSuperClassOf(c)) {
return true;
}
}
return false;
}
@Override
public List<XSOntClass> getSuperClasses() {
return superClasses;
}
@Override
public Set<XSOntClass> getAllSuperClasses() {
Set<XSOntClass> result = new HashSet<XSOntClass>();
result.addAll(getSuperClasses());
for (XSOntClass c : getSuperClasses()) {
result.addAll(c.getAllSuperClasses());
}
return result;
}
@Override
public Object addSuperClass(OntologyClass aClass) {
if (aClass instanceof XSOntClass == false) {
if (logger.isLoggable(Level.WARNING)) {
logger.warning("Class " + aClass + " is not a XSOntClass");
}
return null;
}
superClasses.add((XSOntClass) aClass);
return null;
}
@Override
public boolean isNamedClass() {
return StringUtils.isNotEmpty(getURI());
}
@Override
public boolean isThing() {
return isNamedClass() && getURI().equals(XS_THING_URI);
}
@Override
public String getDisplayableDescription() {
// TODO tell where it's from (element/complex type)
return getName();
}
@Override
public boolean isOntologyClass() {
return true;
}
@Override
public String getClassNameKey() {
return "XSD_ontology_class";
}
@Override
public String getInspectorName() {
if (getIsReadOnly()) {
return Inspectors.VE.ONTOLOGY_CLASS_READ_ONLY_INSPECTOR;
} else {
return Inspectors.VE.ONTOLOGY_CLASS_INSPECTOR;
}
}
}