diff options
author | Ibrahim Sallam | 2010-05-16 06:15:02 +0000 |
---|---|---|
committer | Ibrahim Sallam | 2010-05-16 06:15:02 +0000 |
commit | c44de545715af902f2949a12f4af3bdc372ce179 (patch) | |
tree | 7f3a25bfa4e0675c3a055417fe25140d311b8c27 | |
parent | b5eb5b67cd5b997a5285ae789ee44662765f25fb (diff) | |
download | cdo-c44de545715af902f2949a12f4af3bdc372ce179.tar.gz cdo-c44de545715af902f2949a12f4af3bdc372ce179.tar.xz cdo-c44de545715af902f2949a12f4af3bdc372ce179.zip |
Changed the Package storage management to use ooMap
Changed the way we named Objectivity Package based on the model.
2 files changed, 87 insertions, 65 deletions
diff --git a/plugins/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyClassProposed.java b/plugins/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyClassProposed.java index 8ad52fcdf3..abebf2ce86 100644 --- a/plugins/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyClassProposed.java +++ b/plugins/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyClassProposed.java @@ -55,7 +55,7 @@ public class ObjyClassProposed public void propose() { - String className = ObjySchema.getObjectivityClassName(eClass, onlyStructure); + String className = ObjySchema.formObjectivityClassName(eClass, onlyStructure); Proposed_Class proposedooClass = null; @@ -80,7 +80,7 @@ public class ObjyClassProposed ObjySchema.createObjyClassSchema(eSuperObject, itrOnlyStructure); - String superClassName = ObjySchema.getObjectivityClassName(eSuperObject, itrOnlyStructure); + String superClassName = ObjySchema.formObjectivityClassName(eSuperObject, itrOnlyStructure); proposedooClass.add_base_class(com.objy.as.app.d_Module.LAST, // Position d_Access_Kind.d_PUBLIC, // Access kind superClassName); // Base class name*/ @@ -142,7 +142,7 @@ public class ObjyClassProposed public void evolve(d_Class dClass) { - String className = ObjySchema.getObjectivityClassName(eClass, onlyStructure); + String className = ObjySchema.formObjectivityClassName(eClass, onlyStructure); Proposed_Class proposedooClass = null; @@ -224,7 +224,7 @@ public class ObjyClassProposed for (EClass classifier : toBeEvolve) { - String localName = ObjySchema.getObjectivityClassName(classifier, false); + String localName = ObjySchema.formObjectivityClassName(classifier, false); d_Class localDClass = ObjySchema.getTopModule().resolve_class(localName); if (localDClass == null) { diff --git a/plugins/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyPackageHandler.java b/plugins/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyPackageHandler.java index 23f58346d5..89dff3a7e0 100644 --- a/plugins/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyPackageHandler.java +++ b/plugins/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/db/ObjyPackageHandler.java @@ -16,11 +16,11 @@ import org.eclipse.emf.cdo.common.model.CDOModelUtil; import org.eclipse.emf.cdo.common.model.CDOPackageRegistry; import org.eclipse.emf.cdo.common.model.CDOPackageUnit; import org.eclipse.emf.cdo.common.model.EMFUtil; -import org.eclipse.emf.cdo.server.internal.objectivity.ObjectivityStore; import org.eclipse.emf.cdo.server.internal.objectivity.bundle.OM; import org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyPackageInfo; import org.eclipse.emf.cdo.server.internal.objectivity.schema.ObjyPackageUnit; import org.eclipse.emf.cdo.server.internal.objectivity.utils.OBJYCDOIDUtil; +import org.eclipse.emf.cdo.server.internal.objectivity.utils.ObjyDb; import org.eclipse.emf.cdo.server.internal.objectivity.utils.SmartLock; import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageInfo; import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageUnit; @@ -30,6 +30,11 @@ import org.eclipse.net4j.util.om.trace.ContextTracer; import org.eclipse.emf.ecore.EPackage; +import com.objy.db.app.Session; +import com.objy.db.app.ooId; +import com.objy.db.app.ooObj; +import com.objy.db.util.ooMap; + import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -47,24 +52,36 @@ public class ObjyPackageHandler private static final ContextTracer TRACER_INFO = new ContextTracer(OM.INFO, ObjyPackageHandler.class); - private ObjyScope objyScope = null; + protected ooId packageMapId; + + // private ObjectivityStore store = null; - private ObjectivityStore store = null; + private boolean zipped = true; - private boolean zipped = false; + public ObjyPackageHandler() + { + // this.store = store; + packageMapId = ObjyDb.getOrCreatePackageMap(); + } - public ObjyPackageHandler(ObjectivityStore store, ObjyScope objyScope, boolean zipped) + /*** + * Factory method to create the PackageMap, which is an ooMap + */ + public static ooId create(ooId scopeContOid) { - this.store = store; - this.objyScope = objyScope; - this.zipped = zipped; + ooMap map = new ooMap(); + ooObj clusterObject = ooObj.create_ooObj(scopeContOid); + clusterObject.cluster(map); + return map.getOid(); } - public void writePackages(InternalCDOPackageUnit packageUnit, OMMonitor monitor) + public void writePackages(CDOPackageRegistry packageRegistry, InternalCDOPackageUnit packageUnit, OMMonitor monitor) { try { - SmartLock.lock(objyScope.getContainerObj()); + ooMap packageMap = getMap(); + + SmartLock.lock(packageMap.getContainer()); InternalCDOPackageInfo[] packageInfos = packageUnit.getPackageInfos(); monitor.begin(1 + packageInfos.length); @@ -73,37 +90,41 @@ public class ObjyPackageHandler TRACER_INFO.format("Writing package unit: {0}", packageUnit); //$NON-NLS-1$ } - byte[] ePackageAsBytes = getEPackageBytes(packageUnit); + byte[] ePackageAsBytes = getEPackageBytes(packageRegistry, packageUnit); - ObjyPackageUnit ooPackageUnit = new ObjyPackageUnit(ePackageAsBytes.length); - objyScope.getContainerObj().cluster(ooPackageUnit); + ObjyPackageUnit objyPackageUnit = new ObjyPackageUnit(ePackageAsBytes.length); + packageMap.cluster(objyPackageUnit); - ooPackageUnit.setId(packageUnit.getID()); - ooPackageUnit.setOrdinal(packageUnit.getOriginalType().ordinal()); - ooPackageUnit.setTimeStamp(packageUnit.getTimeStamp()); - ooPackageUnit.setPackageAsBytes(ePackageAsBytes); + objyPackageUnit.setId(packageUnit.getID()); + objyPackageUnit.setOrdinal(packageUnit.getOriginalType().ordinal()); + objyPackageUnit.setTimeStamp(packageUnit.getTimeStamp()); + objyPackageUnit.setPackageAsBytes(ePackageAsBytes); if (TRACER_DEBUG.isEnabled()) { - TRACER_DEBUG.trace("... writing OoPackageUnit.getId(): " + ooPackageUnit.getId()); + TRACER_DEBUG.trace("... writing ObjyPackageUnit.getId(): " + objyPackageUnit.getId()); } - ObjyPackageInfo ooPackageInfo; + ObjyPackageInfo objyPackageInfo; for (InternalCDOPackageInfo packageInfo : packageInfos) { - ooPackageInfo = createPackageInfo(packageInfo, monitor); // Don't fork monitor - ooPackageUnit.addPackageInfo(ooPackageInfo); + objyPackageInfo = createPackageInfo(packageInfo, monitor); // Don't fork monitor + objyPackageUnit.addPackageInfo(objyPackageInfo); // make sure we have the mapping between the Package name an the nsURI // set mapping between package name and the nsURI // getStore().addPackageMapping(packageInfo.getPackageURI(), ooPackageInfo.getPackageName()); // getStore().addPackageMapping(ooPackageInfo.getPackageName(), packageInfo.getPackageURI()); - getStore().addPackageMapping(packageInfo.getPackageURI(), ooPackageInfo.getPackageUniqueName()); - getStore().addPackageMapping(ooPackageInfo.getPackageUniqueName(), packageInfo.getPackageURI()); + String objyPackageName = ObjySchema.getObjyPackageName(packageInfo.getPackageURI()); + ObjySchema.setPackageNameMapping(packageInfo.getPackageURI(), objyPackageName); + ObjySchema.setPackageNameMapping(objyPackageName, packageInfo.getPackageURI()); - // we might as well create the schema in Objy. + // we might as well create the schema in Objy, although I`m not sure if we needed for the ecore pacakge. EPackage ePackage = packageInfo.getEPackage(); ObjySchema.registerEPackage(ePackage); } + + // add the package unit to the map. + packageMap.add(objyPackageUnit, objyPackageUnit.getId()); } finally { @@ -133,34 +154,26 @@ public class ObjyPackageHandler return ooPackageInfo; } - private byte[] getEPackageBytes(InternalCDOPackageUnit packageUnit) + private byte[] getEPackageBytes(CDOPackageRegistry packageRegistry, InternalCDOPackageUnit packageUnit) { EPackage ePackage = packageUnit.getTopLevelPackageInfo().getEPackage(); - return EMFUtil.getEPackageBytes(ePackage, zipped, getPackageRegistry()); - } - - private CDOPackageRegistry getPackageRegistry() - { - return getStore().getRepository().getPackageRegistry(); - } - - private ObjectivityStore getStore() - { - return store; + return EMFUtil.getEPackageBytes(ePackage, zipped, packageRegistry); } public Collection<InternalCDOPackageUnit> readPackageUnits() { final Map<ObjyPackageUnit, InternalCDOPackageUnit> packageUnitsMap = new HashMap<ObjyPackageUnit, InternalCDOPackageUnit>(); - Iterator<?> itr = objyScope.getDatabaseObj().scan(ObjyPackageUnit.class.getName()); + ooMap packageMap = getMap(); + + Iterator<?> itr = packageMap.elements(); while (itr.hasNext()) { - ObjyPackageUnit ooPackageUnit = (ObjyPackageUnit)itr.next(); + ObjyPackageUnit objyPackageUnit = (ObjyPackageUnit)itr.next(); InternalCDOPackageUnit packageUnit = createPackageUnit(); - packageUnit.setOriginalType(CDOPackageUnit.Type.values()[ooPackageUnit.getOrdinal()]); - packageUnit.setTimeStamp(ooPackageUnit.getTimeStamp()); - packageUnitsMap.put(ooPackageUnit, packageUnit); + packageUnit.setOriginalType(CDOPackageUnit.Type.values()[objyPackageUnit.getOrdinal()]); + packageUnit.setTimeStamp(objyPackageUnit.getTimeStamp()); + packageUnitsMap.put(objyPackageUnit, packageUnit); if (TRACER_INFO.isEnabled()) { TRACER_INFO.format("Read package unit: {0}", packageUnit); //$NON-NLS-1$ @@ -171,18 +184,19 @@ public class ObjyPackageHandler for (Entry<ObjyPackageUnit, InternalCDOPackageUnit> entry : packageUnitsMap.entrySet()) { // scan the relationship. - List<ObjyPackageInfo> ooPackageInfoList = entry.getKey().getPackageInfos(); + List<ObjyPackageInfo> objyPackageInfoList = entry.getKey().getPackageInfos(); List<InternalCDOPackageInfo> packageInfoList = new ArrayList<InternalCDOPackageInfo>(); // create the package infos. - for (ObjyPackageInfo ooPackageInfo : ooPackageInfoList) + for (ObjyPackageInfo objyPackageInfo : objyPackageInfoList) { - InternalCDOPackageInfo packageInfo = createPackageInfo(ooPackageInfo); + InternalCDOPackageInfo packageInfo = createPackageInfo(objyPackageInfo); packageInfoList.add(packageInfo); - // set mapping between package name and the nsURI + // set mapping between package URI and the package name used in Objy Schema. // getStore().addPackageMapping(packageInfo.getPackageURI(), ooPackageInfo.getPackageName()); // getStore().addPackageMapping(ooPackageInfo.getPackageName(), packageInfo.getPackageURI()); - getStore().addPackageMapping(packageInfo.getPackageURI(), ooPackageInfo.getPackageUniqueName()); - getStore().addPackageMapping(ooPackageInfo.getPackageUniqueName(), packageInfo.getPackageURI()); + String objyPackageName = ObjySchema.getObjyPackageName(packageInfo.getPackageURI()); + ObjySchema.setPackageNameMapping(packageInfo.getPackageURI(), objyPackageName); + ObjySchema.setPackageNameMapping(objyPackageName, packageInfo.getPackageURI()); } // add the package infos to the unit. InternalCDOPackageInfo[] array = packageInfoList.toArray(new InternalCDOPackageInfo[packageInfoList.size()]); @@ -227,25 +241,33 @@ public class ObjyPackageHandler { byte[] bytes = null; - // TODO - we should use the predicate query. - Iterator<?> itr = objyScope.getDatabaseObj().scan(ObjyPackageUnit.class.getName()); - System.out.println("Looking for packageUnit.ID(): " + packageUnit.getID()); - while (itr.hasNext()) + ooMap map = getMap(); + String packageUnitId = packageUnit.getID(); + if (TRACER_INFO.isEnabled()) { - ObjyPackageUnit ooPackageUnit = (ObjyPackageUnit)itr.next(); - System.out.println("... found OoPackageUnit.getId(): " + ooPackageUnit.getId()); - if (ooPackageUnit.getId().equals(packageUnit.getID())) + TRACER_INFO.format("Looking for package unit with ID: {0}", packageUnitId); //$NON-NLS-1$ + } + if (map.isMember(packageUnitId)) + { + if (TRACER_INFO.isEnabled()) { - if (TRACER_INFO.isEnabled()) - { - TRACER_INFO.format("Read package unit with ID: {0}", packageUnit.getID()); //$NON-NLS-1$ - } - // this is our package... - bytes = ooPackageUnit.getPackageAsBytes(); - break; + TRACER_INFO.format("Reading package unit with ID: {0}", packageUnitId); //$NON-NLS-1$ } + ObjyPackageUnit objyPackageUnit = (ObjyPackageUnit)map.lookup(packageUnitId); + // this is our package... + bytes = objyPackageUnit.getPackageAsBytes(); } return bytes; } + /*** + * This function assume we are in an Objy transaction. + */ + private ooMap getMap() + { + ooMap map = null; + map = (ooMap)Session.getCurrent().getFD().objectFrom(packageMapId); + return map; + } + } |