package org.hawk.modelio;
import java.util.HashSet;
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.InternalEObject;
import org.hawk.core.model.*;
public class ModelioObject implements IHawkObject {
protected EObject eob;
public ModelioObject(EObject o) {
eob = o;
}
public EObject getEObject() {
return eob;
}
@Override
public boolean isProxy() {
return eob.eIsProxy();
}
@Override
public String proxyURI() {
return ((InternalEObject) eob).eProxyURI().fragment();
}
@Override
public String getUri() {
String uri = org.eclipse.emf.ecore.util.EcoreUtil.getURI(eob)
.toString();
if (uri == null || uri == "" || uri == "/" || uri == "//")
System.err.println("URI error on: " + eob);
return uri;
}
@Override
public String getUriFragment() {
String frag = org.eclipse.emf.ecore.util.EcoreUtil.getURI(eob)
.fragment();
if (frag == null || frag == "" || frag == "/")
System.err.println("fragment error on: "
+ org.eclipse.emf.ecore.util.EcoreUtil.getURI(eob)
.toString());
return frag;
}
@Override
public IHawkClassifier getType() {
return new ModelioClass(eob.eClass());
}
@Override
public boolean isSet(IHawkStructuralFeature hsf) {
return eob.eIsSet(eob.eClass().getEStructuralFeature(hsf.getName()));
}
@Override
public Object get(IHawkAttribute attribute) {
return eob
.eGet(eob.eClass().getEStructuralFeature(attribute.getName()));
}
@SuppressWarnings("unchecked")
@Override
public Object get(IHawkReference reference, boolean b) {
Object ret;
Object source = eob.eGet(
eob.eClass().getEStructuralFeature(reference.getName()), b);
if (source instanceof Iterable<?>) {
ret = new HashSet<EObject>();
for (EObject e : ((Iterable<EObject>) source)) {
((HashSet<ModelioObject>) ret).add(new ModelioObject(e));
}
} else
ret = new ModelioObject((EObject) source);
return ret;
}
@Override
public boolean equals(Object o) {
if (o instanceof ModelioObject)
return eob.equals(((ModelioObject) o).getEObject());
else
return false;
}
@Override
public int hashCode() {
return eob.hashCode();
}
@Override
public String toString() {
String ret = "";
ret += ">" + eob + "\n";
for (EAttribute e : eob.eClass().getEAllAttributes())
ret += e + " : "+ eob.eGet(e);
ret += "\n";
return ret;
}
}