diff options
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyResourceList.java')
-rw-r--r-- | plugins/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyResourceList.java | 566 |
1 files changed, 283 insertions, 283 deletions
diff --git a/plugins/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyResourceList.java b/plugins/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyResourceList.java index 0cee1b8fad..0893ccd092 100644 --- a/plugins/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyResourceList.java +++ b/plugins/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyResourceList.java @@ -1,283 +1,283 @@ -/*
- * Copyright (c) 2004 - 2012 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:
- * Ibrahim Sallam - initial API and implementation
- */
-package org.eclipse.emf.cdo.server.internal.objectivity.schema;
-
-import org.eclipse.emf.cdo.common.branch.CDOBranch;
-import org.eclipse.emf.cdo.common.id.CDOID;
-import org.eclipse.emf.cdo.eresource.EresourcePackage;
-import org.eclipse.emf.cdo.server.internal.objectivity.ObjectivityStoreAccessor;
-import org.eclipse.emf.cdo.server.internal.objectivity.bundle.OM;
-import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyObject;
-import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyObjectManager;
-import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjySchema;
-import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjySession;
-import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
-
-import org.eclipse.net4j.util.om.trace.ContextTracer;
-
-import org.eclipse.emf.ecore.EStructuralFeature;
-
-import com.objy.as.app.Class_Object;
-import com.objy.as.app.Proposed_Class;
-import com.objy.as.app.d_Access_Kind;
-import com.objy.as.app.d_Module;
-import com.objy.db.ObjyRuntimeException;
-import com.objy.db.app.ooId;
-import com.objy.db.app.ooObj;
-import com.objy.db.util.ooTreeListX;
-
-/***
- * OoResouceList is a specialized ooArrayListId, where all elements are of type Resourc(Node|Folder). The class will
- * allow adding, validating and removing resources From the list.
- *
- * @author ibrahim
- */
-public class ObjyResourceList
-{
-
- private static final ContextTracer TRACER_DEBUG = new ContextTracer(OM.DEBUG, ObjyProxy.class);
-
- static public String className = "ooResourceList";
-
- static public String Attribute_arrayName = "oo_array";
-
- private ObjySession objySession;
-
- protected Class_Object classObject;
-
- protected ObjyArrayListId list = null;
-
- protected ooId objectId;
-
- private static final EStructuralFeature featureName = EresourcePackage.Literals.CDO_RESOURCE_NODE__NAME;
-
- // we could use this "EresourcePackage.eINSTANCE.getCDOResourceNode_Name()" instead of above.
-
- public static void buildSchema()
- {
- d_Module top_mod = ObjySchema.getTopModule();
- if (top_mod.resolve_class(ObjyResourceList.className) == null
- && top_mod.resolve_proposed_class(ObjyResourceList.className) == null)
- {
-
- if (TRACER_DEBUG.isEnabled())
- {
- TRACER_DEBUG.trace("Schema not found for ooArrayListId. Adding ooArrayListId");
- }
-
- boolean inProcess = top_mod.proposed_classes().hasNext();
-
- // Proposed_Class A = new Proposed_Class(ooArrayListId.ClassName);
- Proposed_Class propClass = top_mod.propose_new_class(ObjyResourceList.className);
-
- propClass.add_base_class(com.objy.as.app.d_Module.LAST, com.objy.as.app.d_Access_Kind.d_PUBLIC,
- ObjyBase.CLASS_NAME /* "ooObj" */);
-
- propClass.add_ref_attribute(com.objy.as.app.d_Module.LAST, // Access kind
- d_Access_Kind.d_PUBLIC, // Access kind
- ObjyResourceList.Attribute_arrayName, // Attribute name
- 1, // # elements in fixed-size array
- ObjyArrayListId.className, false); // Default value // Default value
-
- // top_mod.propose_new_class(A);
- if (!inProcess)
- {
- top_mod.activate_proposals(true, true);
- }
-
- if (TRACER_DEBUG.isEnabled())
- {
- TRACER_DEBUG.trace("SCHEMA changed : ooArrayListId added");
- }
- }
-
- }
-
- public ObjyResourceList(ObjySession objySession, ObjyObject objyObject)
- {
- classObject = objyObject.ooClassObject();
- this.objySession = objySession;
- objectId = objyObject.ooId();
- }
-
- // public OoResourceList(ObjySession objySession, Class_Object classObject)
- // {
- // this.classObject = classObject;
- // this.objySession = objySession;
- // }
-
- private ObjyArrayListId getList()
- {
- if (list != null)
- {
- return list;
- }
-
- try
- {
- // Class_Position position = classObject.position_in_class(ObjyResourceList.Attribute_arrayName);
- ooId oid = classObject.nget_ooId(ObjyResourceList.Attribute_arrayName);
- if (!oid.isNull())
- {
- list = new ObjyArrayListId(Class_Object.class_object_from_oid(oid));
- }
- }
- catch (ObjyRuntimeException e)
- {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- return list;
- }
-
- public void remove(ObjyObject objyObject)
- {
- int size = (int)getList().size();
- for (int i = 0; i < size; i++)
- {
- if (objyObject.ooId().equals(getList().get(i)))
- {
- getList().remove(i);
- break;
- }
- }
- }
-
- public void add(ObjyObject objyObject)
- {
- // TODO - we need to make sure that objyObject is a resource!!!
- getList().add(objyObject.ooId());
- }
-
- // public void checkDuplicateResources(ObjectivityStoreAccessor storeAccessor, CDORevision revision)
- // throws IllegalStateException
- // {
- // CDOID folderID = (CDOID)revision.data().getContainerID();
- // String name = (String)revision.data().get(EresourcePackage.eINSTANCE.getCDOResourceNode_Name(), 0);
- // CDOID existingID = storeAccessor.readResourceID(folderID, name, revision.getBranch().getHead());
- // if (existingID != CDOID.NULL && !existingID.equals(revision.getID()))
- // {
- // throw new IllegalStateException("Duplicate resource or folder: " + name + " in folder " + folderID); //$NON-NLS-1$ //$NON-NLS-2$
- // }
- // }
-
- public void checkDuplicateResources(ObjectivityStoreAccessor storeAccessor, InternalCDORevision revision)
- throws IllegalStateException
- {
- // CDOID folderID = (CDOID)revision.data().getContainerID();
- CDOID folderId = (CDOID)revision.data().getContainerID();
- String name = (String)revision.data().get(EresourcePackage.eINSTANCE.getCDOResourceNode_Name(), 0);
-
- // ooId folderId = objyObject.getEContainerAsOid();
- // String name = OoResourceList.getResourceName(objyObject);
-
- // iterate over all resource in the list, and verify if we have both name and folderID.
- int size = (int)getList().size();
- ObjyObjectManager objyObjectManager = storeAccessor.getObjySession().getObjectManager();
- for (int i = 0; i < size; i++)
- {
- ObjyObject resource = getResource(i);
- ObjyObject resourceRevision = resource;
- // get the proper revision of the resource (might need to refactor this code, see readRevision())
- if (storeAccessor.getStore().isRequiredToSupportBranches())
- {
- try
- {
- resourceRevision = resource.getRevision(revision.getTimeStamp(), revision.getBranch().getID(),
- objyObjectManager);
- }
- catch (RuntimeException ex)
- {
- ex.printStackTrace();
- }
- }
- else if (storeAccessor.getStore().isRequiredToSupportAudits())
- {
- try
- {
- resourceRevision = resource.getRevision(revision.getTimeStamp(), CDOBranch.MAIN_BRANCH_ID, objyObjectManager);
- }
- catch (RuntimeException ex)
- {
- ex.printStackTrace();
- }
- }
-
- if (resourceRevision == null || resourceRevision.getVersion() < 0)
- {
- continue;
- }
-
- // int v = resource.getVersion();
- CDOID resourceFolderId = (CDOID)resourceRevision.getEContainer();
- String resourceName = ObjyResourceList.getResourceName(resourceRevision);
- if (resourceFolderId != null && resourceFolderId.equals(folderId) && resourceName != null
- && resourceName.equals(name))
- {
- throw new IllegalStateException("Duplicate resource or folder: " + name + " in folder: " + folderId); //$NON-NLS-1$
- }
- }
- }
-
- public ObjyObject getResource(int index)
- {
- return objySession.getObjectManager().getObject(getList().get(index));
- }
-
- public static String getResourceName(ObjyObject objyObject)
- {
- String name = (String)objyObject.get(featureName);
- return name;
- }
-
- public static ObjyObject create(ooId nearOid)
- {
- Class_Object classObject = Class_Object.new_persistent_object(ObjySchema.getObjyClass(ObjyResourceList.className)
- .getASClass(), nearOid, false);
- // ObjyObjectManager.newInternalObjCount++;
- // Class_Position position = classObject.position_in_class(ObjyResourceList.Attribute_arrayName);
- // Class_Object arrayClassObject = Class_Object.new_persistent_object(
- // ObjySchema.getTopModule().resolve_class(ObjyArrayListId.className), classObject.objectID(), false);
- // // ooId arrayOid = arrayClassObject.objectID();
- ooTreeListX list = new ooTreeListX(10, false);
- // ObjyObjectManager.newInternalObjCount++;
- ooObj anObj = ooObj.create_ooObj(classObject.objectID());
- anObj.cluster(list);
- // System.out.println("initObject: " + anObj.getOid().getStoreString() + " treeListX: "
- // // + list.getOid().getStoreString());
- classObject.nset_ooId(ObjyResourceList.Attribute_arrayName, list.getOid());
-
- // classObject.set_ooId(position, arrayClassObject.objectID());
- // ObjyArrayListId.initObject(arrayClassObject);
- ObjyObject objyObject = null;
- try
- {
- objyObject = new ObjyObject(classObject);
- }
- catch (RuntimeException ex)
- {
- ex.printStackTrace();
- }
-
- return objyObject;
- }
-
- public ooId ooId()
- {
- return objectId;
- }
-
- public int size()
- {
- return (int)getList().size();
- }
-
-}
+/* + * Copyright (c) 2004 - 2012 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: + * Ibrahim Sallam - initial API and implementation + */ +package org.eclipse.emf.cdo.server.internal.objectivity.schema; + +import org.eclipse.emf.cdo.common.branch.CDOBranch; +import org.eclipse.emf.cdo.common.id.CDOID; +import org.eclipse.emf.cdo.eresource.EresourcePackage; +import org.eclipse.emf.cdo.server.internal.objectivity.ObjectivityStoreAccessor; +import org.eclipse.emf.cdo.server.internal.objectivity.bundle.OM; +import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyObject; +import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyObjectManager; +import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjySchema; +import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjySession; +import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision; + +import org.eclipse.net4j.util.om.trace.ContextTracer; + +import org.eclipse.emf.ecore.EStructuralFeature; + +import com.objy.as.app.Class_Object; +import com.objy.as.app.Proposed_Class; +import com.objy.as.app.d_Access_Kind; +import com.objy.as.app.d_Module; +import com.objy.db.ObjyRuntimeException; +import com.objy.db.app.ooId; +import com.objy.db.app.ooObj; +import com.objy.db.util.ooTreeListX; + +/*** + * OoResouceList is a specialized ooArrayListId, where all elements are of type Resourc(Node|Folder). The class will + * allow adding, validating and removing resources From the list. + * + * @author ibrahim + */ +public class ObjyResourceList +{ + + private static final ContextTracer TRACER_DEBUG = new ContextTracer(OM.DEBUG, ObjyProxy.class); + + static public String className = "ooResourceList"; + + static public String Attribute_arrayName = "oo_array"; + + private ObjySession objySession; + + protected Class_Object classObject; + + protected ObjyArrayListId list = null; + + protected ooId objectId; + + private static final EStructuralFeature featureName = EresourcePackage.Literals.CDO_RESOURCE_NODE__NAME; + + // we could use this "EresourcePackage.eINSTANCE.getCDOResourceNode_Name()" instead of above. + + public static void buildSchema() + { + d_Module top_mod = ObjySchema.getTopModule(); + if (top_mod.resolve_class(ObjyResourceList.className) == null + && top_mod.resolve_proposed_class(ObjyResourceList.className) == null) + { + + if (TRACER_DEBUG.isEnabled()) + { + TRACER_DEBUG.trace("Schema not found for ooArrayListId. Adding ooArrayListId"); + } + + boolean inProcess = top_mod.proposed_classes().hasNext(); + + // Proposed_Class A = new Proposed_Class(ooArrayListId.ClassName); + Proposed_Class propClass = top_mod.propose_new_class(ObjyResourceList.className); + + propClass.add_base_class(com.objy.as.app.d_Module.LAST, com.objy.as.app.d_Access_Kind.d_PUBLIC, + ObjyBase.CLASS_NAME /* "ooObj" */); + + propClass.add_ref_attribute(com.objy.as.app.d_Module.LAST, // Access kind + d_Access_Kind.d_PUBLIC, // Access kind + ObjyResourceList.Attribute_arrayName, // Attribute name + 1, // # elements in fixed-size array + ObjyArrayListId.className, false); // Default value // Default value + + // top_mod.propose_new_class(A); + if (!inProcess) + { + top_mod.activate_proposals(true, true); + } + + if (TRACER_DEBUG.isEnabled()) + { + TRACER_DEBUG.trace("SCHEMA changed : ooArrayListId added"); + } + } + + } + + public ObjyResourceList(ObjySession objySession, ObjyObject objyObject) + { + classObject = objyObject.ooClassObject(); + this.objySession = objySession; + objectId = objyObject.ooId(); + } + + // public OoResourceList(ObjySession objySession, Class_Object classObject) + // { + // this.classObject = classObject; + // this.objySession = objySession; + // } + + private ObjyArrayListId getList() + { + if (list != null) + { + return list; + } + + try + { + // Class_Position position = classObject.position_in_class(ObjyResourceList.Attribute_arrayName); + ooId oid = classObject.nget_ooId(ObjyResourceList.Attribute_arrayName); + if (!oid.isNull()) + { + list = new ObjyArrayListId(Class_Object.class_object_from_oid(oid)); + } + } + catch (ObjyRuntimeException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return list; + } + + public void remove(ObjyObject objyObject) + { + int size = (int)getList().size(); + for (int i = 0; i < size; i++) + { + if (objyObject.ooId().equals(getList().get(i))) + { + getList().remove(i); + break; + } + } + } + + public void add(ObjyObject objyObject) + { + // TODO - we need to make sure that objyObject is a resource!!! + getList().add(objyObject.ooId()); + } + + // public void checkDuplicateResources(ObjectivityStoreAccessor storeAccessor, CDORevision revision) + // throws IllegalStateException + // { + // CDOID folderID = (CDOID)revision.data().getContainerID(); + // String name = (String)revision.data().get(EresourcePackage.eINSTANCE.getCDOResourceNode_Name(), 0); + // CDOID existingID = storeAccessor.readResourceID(folderID, name, revision.getBranch().getHead()); + // if (existingID != CDOID.NULL && !existingID.equals(revision.getID())) + // { + // throw new IllegalStateException("Duplicate resource or folder: " + name + " in folder " + folderID); //$NON-NLS-1$ //$NON-NLS-2$ + // } + // } + + public void checkDuplicateResources(ObjectivityStoreAccessor storeAccessor, InternalCDORevision revision) + throws IllegalStateException + { + // CDOID folderID = (CDOID)revision.data().getContainerID(); + CDOID folderId = (CDOID)revision.data().getContainerID(); + String name = (String)revision.data().get(EresourcePackage.eINSTANCE.getCDOResourceNode_Name(), 0); + + // ooId folderId = objyObject.getEContainerAsOid(); + // String name = OoResourceList.getResourceName(objyObject); + + // iterate over all resource in the list, and verify if we have both name and folderID. + int size = (int)getList().size(); + ObjyObjectManager objyObjectManager = storeAccessor.getObjySession().getObjectManager(); + for (int i = 0; i < size; i++) + { + ObjyObject resource = getResource(i); + ObjyObject resourceRevision = resource; + // get the proper revision of the resource (might need to refactor this code, see readRevision()) + if (storeAccessor.getStore().isRequiredToSupportBranches()) + { + try + { + resourceRevision = resource.getRevision(revision.getTimeStamp(), revision.getBranch().getID(), + objyObjectManager); + } + catch (RuntimeException ex) + { + ex.printStackTrace(); + } + } + else if (storeAccessor.getStore().isRequiredToSupportAudits()) + { + try + { + resourceRevision = resource.getRevision(revision.getTimeStamp(), CDOBranch.MAIN_BRANCH_ID, objyObjectManager); + } + catch (RuntimeException ex) + { + ex.printStackTrace(); + } + } + + if (resourceRevision == null || resourceRevision.getVersion() < 0) + { + continue; + } + + // int v = resource.getVersion(); + CDOID resourceFolderId = (CDOID)resourceRevision.getEContainer(); + String resourceName = ObjyResourceList.getResourceName(resourceRevision); + if (resourceFolderId != null && resourceFolderId.equals(folderId) && resourceName != null + && resourceName.equals(name)) + { + throw new IllegalStateException("Duplicate resource or folder: " + name + " in folder: " + folderId); //$NON-NLS-1$ + } + } + } + + public ObjyObject getResource(int index) + { + return objySession.getObjectManager().getObject(getList().get(index)); + } + + public static String getResourceName(ObjyObject objyObject) + { + String name = (String)objyObject.get(featureName); + return name; + } + + public static ObjyObject create(ooId nearOid) + { + Class_Object classObject = Class_Object.new_persistent_object(ObjySchema.getObjyClass(ObjyResourceList.className) + .getASClass(), nearOid, false); + // ObjyObjectManager.newInternalObjCount++; + // Class_Position position = classObject.position_in_class(ObjyResourceList.Attribute_arrayName); + // Class_Object arrayClassObject = Class_Object.new_persistent_object( + // ObjySchema.getTopModule().resolve_class(ObjyArrayListId.className), classObject.objectID(), false); + // // ooId arrayOid = arrayClassObject.objectID(); + ooTreeListX list = new ooTreeListX(10, false); + // ObjyObjectManager.newInternalObjCount++; + ooObj anObj = ooObj.create_ooObj(classObject.objectID()); + anObj.cluster(list); + // System.out.println("initObject: " + anObj.getOid().getStoreString() + " treeListX: " + // // + list.getOid().getStoreString()); + classObject.nset_ooId(ObjyResourceList.Attribute_arrayName, list.getOid()); + + // classObject.set_ooId(position, arrayClassObject.objectID()); + // ObjyArrayListId.initObject(arrayClassObject); + ObjyObject objyObject = null; + try + { + objyObject = new ObjyObject(classObject); + } + catch (RuntimeException ex) + { + ex.printStackTrace(); + } + + return objyObject; + } + + public ooId ooId() + { + return objectId; + } + + public int size() + { + return (int)getList().size(); + } + +} |