diff options
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/PackageManager.java')
-rw-r--r-- | plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/PackageManager.java | 58 |
1 files changed, 36 insertions, 22 deletions
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/PackageManager.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/PackageManager.java index 9c0b9b0279..287bba0501 100644 --- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/PackageManager.java +++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/PackageManager.java @@ -12,10 +12,13 @@ package org.eclipse.emf.cdo.internal.server; import org.eclipse.emf.cdo.internal.protocol.model.CDOPackageImpl; import org.eclipse.emf.cdo.internal.protocol.model.CDOPackageManagerImpl; -import org.eclipse.emf.cdo.protocol.CDOIDRange; import org.eclipse.emf.cdo.server.IPackageManager; +import org.eclipse.emf.cdo.server.IStoreReader; +import org.eclipse.emf.cdo.server.IStoreWriter; import org.eclipse.net4j.util.ImplementationError; +import org.eclipse.net4j.util.transaction.ITransaction; +import org.eclipse.net4j.util.transaction.ITransactionalOperation; /** * @author Eike Stepper @@ -34,37 +37,21 @@ public class PackageManager extends CDOPackageManagerImpl implements IPackageMan return repository; } - @Override - public void addPackage(CDOPackageImpl cdoPackage) + public void addPackages(ITransaction<IStoreWriter> storeTransaction, CDOPackageImpl[] cdoPackages) { - CDOIDRange metaIDRange = cdoPackage.getMetaIDRange(); - if (metaIDRange != null && metaIDRange.isTemporary()) - { - CDOIDRange newRange = repository.getMetaIDRange(metaIDRange.getCount()); - cdoPackage.setMetaIDRange(newRange); - } - - if (cdoPackage.isSystem()) - { - addPackageToCache(cdoPackage); - } - else + for (CDOPackageImpl cdoPackage : cdoPackages) { - repository.getStore().addPackage(this, cdoPackage); + storeTransaction.execute(new AddPackageOperation(cdoPackage)); } } - public void addPackageToCache(CDOPackageImpl cdoPackage) - { - super.addPackage(cdoPackage); - } - @Override protected void resolve(CDOPackageImpl cdoPackage) { if (!cdoPackage.isSystem()) { - repository.getStore().loadPackage(cdoPackage); + IStoreReader storeReader = StoreUtil.getReader(); + storeReader.readPackage(cdoPackage); } } @@ -73,4 +60,31 @@ public class PackageManager extends CDOPackageManagerImpl implements IPackageMan { throw new ImplementationError("No generated model on server side"); } + + /** + * @author Eike Stepper + */ + private final class AddPackageOperation implements ITransactionalOperation<IStoreWriter> + { + private CDOPackageImpl cdoPackage; + + private AddPackageOperation(CDOPackageImpl cdoPackage) + { + this.cdoPackage = cdoPackage; + } + + public void phase1(IStoreWriter storeWriter) throws Exception + { + storeWriter.writePackage(cdoPackage); + } + + public void phase2(IStoreWriter storeWriter) + { + addPackage(cdoPackage); + } + + public void undoPhase1(IStoreWriter storeWriter) + { + } + } } |