Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOClassifierImpl.java')
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOClassifierImpl.java162
1 files changed, 148 insertions, 14 deletions
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOClassifierImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOClassifierImpl.java
index 5bf57d767a..18cd83e3c5 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOClassifierImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOClassifierImpl.java
@@ -13,7 +13,8 @@ package org.eclipse.emf.cdo.internal.common.model;
import org.eclipse.emf.cdo.common.CDODataInput;
import org.eclipse.emf.cdo.common.CDODataOutput;
import org.eclipse.emf.cdo.common.model.CDOPackage;
-import org.eclipse.emf.cdo.spi.common.InternalCDOClassifier;
+import org.eclipse.emf.cdo.common.model.CDOPackageManager;
+import org.eclipse.emf.cdo.spi.common.model.InternalCDOClassifier;
import java.io.IOException;
@@ -22,29 +23,22 @@ import java.io.IOException;
*/
public abstract class CDOClassifierImpl extends CDONamedElementImpl implements InternalCDOClassifier
{
+ private CDOPackage containingPackage;
+
private int classifierID;
protected CDOClassifierImpl()
{
}
- protected CDOClassifierImpl(CDOPackage containingPackage, int classifierID, String name)
- {
- super(containingPackage, name);
- this.classifierID = classifierID;
- }
-
- protected CDOClassifierImpl(CDOPackage containingPackage, CDODataInput in) throws IOException
+ public CDOPackage getContainingPackage()
{
- super(containingPackage, in);
- classifierID = in.readInt();
+ return containingPackage;
}
- @Override
- public void write(CDODataOutput out) throws IOException
+ public void setContainingPackage(CDOPackage containingPackage)
{
- super.write(out);
- out.writeInt(classifierID);
+ this.containingPackage = containingPackage;
}
public int getClassifierID()
@@ -57,8 +51,148 @@ public abstract class CDOClassifierImpl extends CDONamedElementImpl implements I
this.classifierID = classifierID;
}
+ public CDOPackageManager getPackageManager()
+ {
+ return containingPackage.getPackageManager();
+ }
+
public String getQualifiedName()
{
return getContainingPackage().getQualifiedName() + "." + getName();
}
+
+ @Override
+ public void read(CDODataInput in, boolean proxy) throws IOException
+ {
+ super.read(in, proxy);
+ classifierID = in.readInt();
+ }
+
+ @Override
+ public void write(CDODataOutput out, boolean proxy) throws IOException
+ {
+ super.write(out, proxy);
+ out.writeInt(classifierID);
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ public static abstract class Ref implements InternalCDOClassifier
+ {
+ private transient CDOPackageManager packageManager;
+
+ private String packageURI;
+
+ private int classifierID;
+
+ private transient InternalCDOClassifier classifier;
+
+ public Ref(CDOPackageManager packageManager, String packageURI, int classifierID)
+ {
+ this.packageManager = packageManager;
+ this.packageURI = packageURI;
+ this.classifierID = classifierID;
+ }
+
+ public CDOPackageManager getPackageManager()
+ {
+ return packageManager;
+ }
+
+ public String getPackageURI()
+ {
+ return packageURI;
+ }
+
+ public int getClassifierID()
+ {
+ return classifierID;
+ }
+
+ public void setClassifierID(int classifierId)
+ {
+ classifier.setClassifierID(classifierId);
+ }
+
+ public synchronized boolean isResolved()
+ {
+ return classifier != null;
+ }
+
+ public synchronized InternalCDOClassifier resolve()
+ {
+ if (classifier == null)
+ {
+ CDOPackage cdoPackage = packageManager.lookupPackage(packageURI);
+ if (cdoPackage == null)
+ {
+ throw new IllegalStateException("Package not found: " + packageURI);
+ }
+
+ classifier = (InternalCDOClassifier)cdoPackage.lookupClassifier(classifierID);
+ if (classifier == null)
+ {
+ throw new IllegalStateException("Classifier not found in package" + packageURI + ": " + classifierID);
+ }
+ }
+
+ return classifier;
+ }
+
+ public CDOPackage getContainingPackage()
+ {
+ return resolve().getContainingPackage();
+ }
+
+ public void setContainingPackage(CDOPackage containingPackage)
+ {
+ classifier.setContainingPackage(containingPackage);
+ }
+
+ public String getName()
+ {
+ return resolve().getName();
+ }
+
+ public void setName(String name)
+ {
+ classifier.setName(name);
+ }
+
+ public String getQualifiedName()
+ {
+ return resolve().getQualifiedName();
+ }
+
+ public Object getClientInfo()
+ {
+ return resolve().getClientInfo();
+ }
+
+ public void setClientInfo(Object clientInfo)
+ {
+ classifier.setClientInfo(clientInfo);
+ }
+
+ public Object getServerInfo()
+ {
+ return resolve().getServerInfo();
+ }
+
+ public void setServerInfo(Object serverInfo)
+ {
+ classifier.setServerInfo(serverInfo);
+ }
+
+ public void read(CDODataInput in, boolean proxy) throws IOException
+ {
+ classifier.read(in, proxy);
+ }
+
+ public void write(CDODataOutput out, boolean proxy) throws IOException
+ {
+ classifier.write(out, proxy);
+ }
+ }
}

Back to the top