summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEgidijus Vaishnora2011-04-04 06:35:36 (EDT)
committerEgidijus Vaishnora2011-04-04 06:35:36 (EDT)
commitc67a8466f29f319ac89456068aa9bd81654d1229 (patch)
treeee1dcef593e6e4d724025ca78a381db0fc68b5e8
parentf2400aa3df9614e5177df7111dd829047530e718 (diff)
downloadcdo-c67a8466f29f319ac89456068aa9bd81654d1229.zip
cdo-c67a8466f29f319ac89456068aa9bd81654d1229.tar.gz
cdo-c67a8466f29f319ac89456068aa9bd81654d1229.tar.bz2
[340961] Allow partial model loading https://bugs.eclipse.org/bugs/show_bug.cgi?id=340961
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/BaseCDORevision.java51
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4ORevision.java16
-rw-r--r--plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadRevisionsIndication.java1
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java7
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AllConfigs.java1
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/bugzilla/Bugzilla_340961_Test.java327
6 files changed, 386 insertions, 17 deletions
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/BaseCDORevision.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/BaseCDORevision.java
index c27caa3..1d2f0e4 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/BaseCDORevision.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/BaseCDORevision.java
@@ -124,7 +124,25 @@ public abstract class BaseCDORevision extends AbstractCDORevision
*/
public void read(CDODataInput in) throws IOException
{
- READING.start(this);
+ if (READING.isEnabled())
+ {
+ READING.start(this);
+ }
+
+ readSystemValues(in);
+ readValues(in);
+
+ if (READING.isEnabled())
+ {
+ READING.stop(this);
+ }
+ }
+
+ /**
+ * @since 4.0
+ */
+ protected void readSystemValues(CDODataInput in) throws IOException
+ {
EClassifier classifier = in.readCDOClassifierRefAndResolve();
CDOClassInfo classInfo = CDOModelUtil.getClassInfo((EClass)classifier);
setClassInfo(classInfo);
@@ -140,6 +158,7 @@ public abstract class BaseCDORevision extends AbstractCDORevision
resourceID = in.readCDOID();
containerID = in.readCDOID();
containingFeatureID = in.readInt();
+
if (TRACER.isEnabled())
{
TRACER
@@ -147,15 +166,35 @@ public abstract class BaseCDORevision extends AbstractCDORevision
"Reading revision: ID={0}, className={1}, version={2}, branchPoint={3}, revised={4}, resource={5}, container={6}, featureID={7}", //$NON-NLS-1$
id, getEClass().getName(), version, branchPoint, revised, resourceID, containerID, containingFeatureID);
}
-
- readValues(in);
- READING.stop(this);
}
+ /**
+ * @since 4.0
+ */
public void write(CDODataOutput out, int referenceChunk) throws IOException
{
+ if (WRITING.isEnabled())
+ {
+ WRITING.start(this);
+ }
+
+ writeSystemValues(out);
+ writeValues(out, referenceChunk);
+
+ if (WRITING.isEnabled())
+ {
+ WRITING.stop(this);
+ }
+ }
+
+ /**
+ * @since 4.0
+ */
+ protected void writeSystemValues(CDODataOutput out) throws IOException
+ {
EClass eClass = getEClass();
CDOClassifierRef classRef = new CDOClassifierRef(eClass);
+
if (TRACER.isEnabled())
{
TRACER
@@ -164,8 +203,6 @@ public abstract class BaseCDORevision extends AbstractCDORevision
id, eClass.getName(), getVersion(), branchPoint, revised, resourceID, containerID, containingFeatureID);
}
- WRITING.start(this);
-
out.writeCDOClassifierRef(classRef);
out.writeCDOID(id);
out.writeCDOBranchPoint(branchPoint);
@@ -178,8 +215,6 @@ public abstract class BaseCDORevision extends AbstractCDORevision
out.writeCDOID(resourceID);
out.writeCDOID(out.getIDProvider().provideCDOID(containerID));
out.writeInt(containingFeatureID);
- writeValues(out, referenceChunk);
- WRITING.stop(this);
}
/**
diff --git a/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4ORevision.java b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4ORevision.java
index ee29d80..a4ae8d3 100644
--- a/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4ORevision.java
+++ b/plugins/org.eclipse.emf.cdo.server.db4o/src/org/eclipse/emf/cdo/server/internal/db4o/DB4ORevision.java
@@ -12,7 +12,6 @@
package org.eclipse.emf.cdo.server.internal.db4o;
import org.eclipse.emf.cdo.common.branch.CDOBranch;
-import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.id.CDOIDExternal;
import org.eclipse.emf.cdo.common.id.CDOIDUtil;
@@ -22,10 +21,12 @@ import org.eclipse.emf.cdo.common.revision.CDOListFactory;
import org.eclipse.emf.cdo.common.revision.CDORevision;
import org.eclipse.emf.cdo.common.revision.CDORevisionFactory;
import org.eclipse.emf.cdo.common.revision.CDORevisionUtil;
+import org.eclipse.emf.cdo.server.IRepository;
import org.eclipse.emf.cdo.server.IStore;
import org.eclipse.emf.cdo.spi.common.revision.CDOFeatureMapEntry;
import org.eclipse.emf.cdo.spi.common.revision.InternalCDOList;
import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionManager;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EPackage;
@@ -282,18 +283,19 @@ public class DB4ORevision
public static InternalCDORevision getCDORevision(IStore store, DB4ORevision primitiveRevision)
{
+ IRepository repository = store.getRepository();
+ CDORevisionFactory factory = ((InternalCDORevisionManager)repository.getRevisionManager()).getFactory();
+ CDOBranch branch = repository.getBranchManager().getMainBranch();
+
String nsURI = primitiveRevision.getPackageURI();
String className = primitiveRevision.getClassName();
- EPackage ePackage = store.getRepository().getPackageRegistry().getEPackage(nsURI);
+ EPackage ePackage = repository.getPackageRegistry().getEPackage(nsURI);
EClass eClass = (EClass)ePackage.getEClassifier(className);
- InternalCDORevision revision = (InternalCDORevision)CDORevisionFactory.DEFAULT.createRevision(eClass);
-
- CDOBranch branch = store.getRepository().getBranchManager().getMainBranch();
- CDOBranchPoint point = branch.getPoint(primitiveRevision.getTimeStamp());
+ InternalCDORevision revision = (InternalCDORevision)factory.createRevision(eClass);
revision.setID(getCDOID(primitiveRevision.getID()));
revision.setVersion(primitiveRevision.getVersion());
- revision.setBranchPoint(point);
+ revision.setBranchPoint(branch.getPoint(primitiveRevision.getTimeStamp()));
revision.setRevised(primitiveRevision.getRevised());
revision.setResourceID(getCDOID(primitiveRevision.getResourceID()));
revision.setContainerID(getCDOID(primitiveRevision.getContainerID()));
diff --git a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadRevisionsIndication.java b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadRevisionsIndication.java
index 8dc6756..d36c33e 100644
--- a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadRevisionsIndication.java
+++ b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/LoadRevisionsIndication.java
@@ -183,6 +183,7 @@ public class LoadRevisionsIndication extends CDOReadIndication
for (int i = 0; i < size; i++)
{
RevisionInfo info = infos[i];
+ info.setResult(revisions[i]);
info.writeResult(out, referenceChunk);
}
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java
index 2347eed..bf1f8a0 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java
@@ -33,6 +33,7 @@ import org.eclipse.emf.cdo.common.model.EMFUtil;
import org.eclipse.emf.cdo.common.protocol.CDODataOutput;
import org.eclipse.emf.cdo.common.protocol.CDOProtocolConstants;
import org.eclipse.emf.cdo.common.revision.CDORevision;
+import org.eclipse.emf.cdo.common.revision.CDORevisionFactory;
import org.eclipse.emf.cdo.common.revision.CDORevisionHandler;
import org.eclipse.emf.cdo.common.revision.CDORevisionUtil;
import org.eclipse.emf.cdo.common.util.CDOCommonUtil;
@@ -42,7 +43,6 @@ import org.eclipse.emf.cdo.common.util.RepositoryTypeChangedEvent;
import org.eclipse.emf.cdo.eresource.EresourcePackage;
import org.eclipse.emf.cdo.etypes.EtypesPackage;
import org.eclipse.emf.cdo.internal.common.model.CDOPackageRegistryImpl;
-import org.eclipse.emf.cdo.internal.common.revision.CDORevisionImpl;
import org.eclipse.emf.cdo.internal.server.bundle.OM;
import org.eclipse.emf.cdo.server.IQueryHandler;
import org.eclipse.emf.cdo.server.IQueryHandlerProvider;
@@ -1413,7 +1413,10 @@ public class Repository extends Container<Object> implements InternalRepository
CDOBranchPoint head = branchManager.getMainBranch().getHead();
CDOIDTemp tempID = CDOIDUtil.createTempObject(1);
- InternalCDORevision rootResource = new CDORevisionImpl(EresourcePackage.Literals.CDO_RESOURCE);
+ CDORevisionFactory factory = getRevisionManager().getFactory();
+ InternalCDORevision rootResource = (InternalCDORevision)factory
+ .createRevision(EresourcePackage.Literals.CDO_RESOURCE);
+
rootResource.setBranchPoint(head);
rootResource.setContainerID(CDOID.NULL);
rootResource.setContainingFeatureID(0);
diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AllConfigs.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AllConfigs.java
index 3b550f0..9e0e5a8 100644
--- a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AllConfigs.java
+++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AllConfigs.java
@@ -215,5 +215,6 @@ public abstract class AllConfigs extends ConfigTestSuite
testClasses.add(Bugzilla_338779_Test.class);
testClasses.add(Bugzilla_339461_Test.class);
testClasses.add(Bugzilla_339313_Test.class);
+ testClasses.add(Bugzilla_340961_Test.class);
}
}
diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/bugzilla/Bugzilla_340961_Test.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/bugzilla/Bugzilla_340961_Test.java
new file mode 100644
index 0000000..b15f315
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/bugzilla/Bugzilla_340961_Test.java
@@ -0,0 +1,327 @@
+/**
+ * Copyright (c) 2004 - 2011 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.bugzilla;
+
+import org.eclipse.emf.cdo.CDOObject;
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.protocol.CDODataInput;
+import org.eclipse.emf.cdo.common.protocol.CDODataOutput;
+import org.eclipse.emf.cdo.common.revision.CDORevision;
+import org.eclipse.emf.cdo.common.revision.CDORevisionFactory;
+import org.eclipse.emf.cdo.common.revision.CDORevisionManager;
+import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.internal.common.revision.CDORevisionImpl;
+import org.eclipse.emf.cdo.server.IRepository.ReadAccessHandler;
+import org.eclipse.emf.cdo.server.ISession;
+import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionManager;
+import org.eclipse.emf.cdo.tests.AbstractCDOTest;
+import org.eclipse.emf.cdo.tests.config.impl.RepositoryConfig;
+import org.eclipse.emf.cdo.tests.model1.Category;
+import org.eclipse.emf.cdo.tests.util.TestRevisionManager;
+import org.eclipse.emf.cdo.transaction.CDOTransaction;
+import org.eclipse.emf.cdo.util.CDOUtil;
+import org.eclipse.emf.cdo.util.CommitException;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import junit.framework.Assert;
+
+/**
+ * @author Egidijus Vaisnora
+ */
+public class Bugzilla_340961_Test extends AbstractCDOTest
+{
+ private PartialReadAccessHandler handler = new PartialReadAccessHandler();
+
+ private final CDORevisionFactory revisionFactory = new CDORevisionFactory()
+ {
+ public CDORevision createRevision(EClass eClass)
+ {
+ return new CustomCDORevision(eClass);
+ }
+ };
+
+ @Override
+ protected void doSetUp() throws Exception
+ {
+ InternalCDORevisionManager internalCDORevisionManager = (InternalCDORevisionManager)getRepositoryConfig()
+ .getTestProperty(RepositoryConfig.PROP_TEST_REVISION_MANAGER);
+ if (internalCDORevisionManager == null)
+ {
+ internalCDORevisionManager = new TestRevisionManager();
+ getRepositoryConfig().getTestProperties().put(RepositoryConfig.PROP_TEST_REVISION_MANAGER,
+ internalCDORevisionManager);
+ }
+
+ internalCDORevisionManager.setFactory(revisionFactory);
+ super.doSetUp();
+ getRepository().addHandler(handler);
+ }
+
+ @Override
+ public void tearDown() throws Exception
+ {
+ getRepository().removeHandler(handler);
+ super.tearDown();
+ }
+
+ /**
+ * @category Session
+ */
+ @Override
+ public CDOSession openSession()
+ {
+ CDOSession openSession = super.openSession();
+ CDORevisionManager revisionManager = openSession.getRevisionManager();
+ ((InternalCDORevisionManager)revisionManager).deactivate();
+ ((InternalCDORevisionManager)revisionManager).setFactory(revisionFactory);
+ ((InternalCDORevisionManager)revisionManager).activate();
+ return openSession;
+ }
+
+ /**
+ * Create object structure of 3 in a containment, where middle object is "protected" Tests if custom revision was
+ * successfully delivered to client. Tests if editing non-protected child elements is allowed
+ */
+ public void testObjectChilds() throws CommitException, IOException
+ {
+ CDOID closedCdoID = null;
+ CDOID rootObjectID = null;
+ {
+ // init
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOResource openResource = transaction.createResource(getResourcePath("openResource"));
+ Category rootObject = getModel1Factory().createCategory();
+ openResource.getContents().add(rootObject);
+ rootObject.getCategories().add(getModel1Factory().createCategory());
+ Category closedCategory = getModel1Factory().createCategory();
+ rootObject.getCategories().add(closedCategory);
+ closedCategory.setName("ProtectedName");
+ closedCategory.getCategories().add(getModel1Factory().createCategory());
+ rootObject.getCategories().add(getModel1Factory().createCategory());
+ transaction.commit();
+ Assert.assertEquals("ProtectedName", closedCategory.getName());
+ Assert.assertEquals(1, closedCategory.getCategories().size());
+ closedCdoID = CDOUtil.getCDOObject(closedCategory).cdoID();
+ rootObjectID = CDOUtil.getCDOObject(rootObject).cdoID();
+ handler.setProtectedIDs(Arrays.asList(new CDOID[] { closedCdoID }));
+ session.close();
+ }
+
+ {
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOResource openResource = transaction.getResource(getResourcePath("openResource"));
+ Assert.assertEquals(1, openResource.getContents().size());
+
+ // checking if protected object is empty - not readable for user
+ CDOObject object = transaction.getObject(closedCdoID);
+ CDOUtil.load(object, object.cdoView());
+ Category eObject = (Category)CDOUtil.getEObject(object);
+ Assert.assertEquals(null, eObject.getName());
+ Assert.assertEquals(0, eObject.getCategories().size());
+
+ Category rootCategory = (Category)CDOUtil.getEObject(transaction.getObject(rootObjectID));
+ Assert.assertEquals(3, rootCategory.getCategories().size());
+
+ // simple editing not protected elements. It must not fail
+ EcoreUtil.delete(rootCategory.getCategories().get(0), false);
+ transaction.commit();
+ EcoreUtil.delete(rootCategory.getCategories().get(1), false);
+ transaction.commit();
+ rootCategory.getCategories().add(getModel1Factory().createCategory());
+ transaction.commit();
+ session.close();
+ }
+
+ {
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ Category rootCategory = (Category)CDOUtil.getEObject(transaction.getObject(rootObjectID));
+ Assert.assertEquals(2, rootCategory.getCategories().size());
+ session.close();
+ }
+
+ }
+
+ /**
+ * Test covers case when one user retrieves restricted revision "empty", however another user has rights to see whole
+ * revision. Server must ensure to give different copies for users
+ */
+ public void testMultiUserWork() throws CommitException
+ {
+ CDOID closedCdoID = null;
+ {
+ // init
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOResource openResource = transaction.createResource(getResourcePath("test"));
+ Category rootObject = getModel1Factory().createCategory();
+ openResource.getContents().add(rootObject);
+ Category closedCategory = getModel1Factory().createCategory();
+ rootObject.getCategories().add(closedCategory);
+ closedCategory.setName("ProtectedName");
+ closedCategory.getCategories().add(getModel1Factory().createCategory());
+ transaction.commit();
+
+ Assert.assertEquals("ProtectedName", closedCategory.getName());
+ Assert.assertEquals(1, closedCategory.getCategories().size());
+ closedCdoID = CDOUtil.getCDOObject(closedCategory).cdoID();
+ handler.setProtectedIDs(Arrays.asList(new CDOID[] { closedCdoID }));
+ session.close();
+ }
+
+ {
+ // asserting that closed object cannot be read. Let say one user cannot see it
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOResource openResource = transaction.getResource(getResourcePath("test"));
+ Assert.assertEquals(1, openResource.getContents().size());
+
+ // checking if protected object is empty - not readable for user
+ CDOObject object = transaction.getObject(closedCdoID);
+ CDOUtil.load(object, object.cdoView());
+ Category eObject = (Category)CDOUtil.getEObject(object);
+ Assert.assertEquals(null, eObject.getName());
+ Assert.assertEquals(0, eObject.getCategories().size());
+ session.close();
+ }
+
+ {
+ // opening closed object and checking if another user can see it
+ handler.setProtectedIDs(Arrays.asList(new CDOID[] {}));
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOResource openResource = transaction.getResource(getResourcePath("test"));
+ Assert.assertEquals(1, openResource.getContents().size());
+
+ // checking if protected object is empty - not readable for user
+ CDOObject object = transaction.getObject(closedCdoID);
+ CDOUtil.load(object, object.cdoView());
+ Category eObject = (Category)CDOUtil.getEObject(object);
+ Assert.assertEquals("ProtectedName", eObject.getName());
+ Assert.assertEquals(1, eObject.getCategories().size());
+ session.close();
+ }
+ }
+
+ /**
+ * @author Egidijus Vaisnora
+ */
+ private static final class PartialReadAccessHandler implements ReadAccessHandler
+ {
+ private List<CDOID> ids = Collections.emptyList();
+
+ public PartialReadAccessHandler()
+ {
+ }
+
+ public void setProtectedIDs(List<CDOID> protectedIds)
+ {
+ ids = protectedIds;
+ }
+
+ public void handleRevisionsBeforeSending(ISession session, CDORevision[] revisions,
+ List<CDORevision> additionalRevisions) throws RuntimeException
+ {
+ for (int i = 0; i < revisions.length; i++)
+ {
+ if (revisions[i] != null && ids.contains(revisions[i].getID()))
+ {
+ revisions[i] = makePartialRevision((InternalCDORevision)revisions[i]);
+ }
+ }
+
+ for (int i = 0; i < additionalRevisions.size(); i++)
+ {
+ CDORevision cdoRevision = additionalRevisions.get(i);
+ if (cdoRevision != null && ids.contains(cdoRevision.getID()))
+ {
+ additionalRevisions.set(i, makePartialRevision((InternalCDORevision)cdoRevision));
+ }
+ }
+ }
+
+ private InternalCDORevision makePartialRevision(InternalCDORevision revision)
+ {
+ InternalCDORevision ret = revision.copy();
+ EStructuralFeature[] allPersistentFeatures = ret.getClassInfo().getAllPersistentFeatures();
+ for (int i = 0; i < allPersistentFeatures.length; i++)
+ {
+ ret.clear(allPersistentFeatures[i]);
+ }
+
+ return ret;
+ }
+ }
+
+ /**
+ * @author Egidijus Vaisnora
+ */
+ private static final class CustomCDORevision extends CDORevisionImpl
+ {
+ public static final byte NORMAL = 0;
+
+ private byte mark = NORMAL;
+
+ public CustomCDORevision(EClass eClass)
+ {
+ super(eClass);
+ }
+
+ protected CustomCDORevision(CustomCDORevision source)
+ {
+ super(source);
+ mark = source.getMark();
+ }
+
+ public byte getMark()
+ {
+ return mark;
+ }
+
+ public void setMark(byte mark)
+ {
+ this.mark = mark;
+ }
+
+ @Override
+ public InternalCDORevision copy()
+ {
+ return new CustomCDORevision(this);
+ }
+
+ @Override
+ protected void readSystemValues(CDODataInput in) throws IOException
+ {
+ super.readSystemValues(in);
+ setMark(in.readByte());
+ }
+
+ @Override
+ protected void writeSystemValues(CDODataOutput out) throws IOException
+ {
+ super.writeSystemValues(out);
+ out.writeByte(getMark());
+ }
+
+ }
+}