Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/AbstractHorizontalMappingStrategy.java')
-rw-r--r--plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/AbstractHorizontalMappingStrategy.java65
1 files changed, 65 insertions, 0 deletions
diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/AbstractHorizontalMappingStrategy.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/AbstractHorizontalMappingStrategy.java
index 8e3d98a136..509309e198 100644
--- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/AbstractHorizontalMappingStrategy.java
+++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/AbstractHorizontalMappingStrategy.java
@@ -12,6 +12,7 @@
package org.eclipse.emf.cdo.server.internal.db.mapping.horizontal;
import org.eclipse.emf.cdo.common.CDOCommonRepository.IDGenerationLocation;
+import org.eclipse.emf.cdo.common.branch.CDOBranch;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.model.CDOClassifierRef;
import org.eclipse.emf.cdo.common.protocol.CDODataInput;
@@ -26,11 +27,14 @@ import org.eclipse.emf.cdo.server.db.IDBStore;
import org.eclipse.emf.cdo.server.db.IDBStoreAccessor;
import org.eclipse.emf.cdo.server.db.IIDHandler;
import org.eclipse.emf.cdo.server.db.mapping.IClassMapping;
+import org.eclipse.emf.cdo.server.db.mapping.IClassMappingBulkSupport;
import org.eclipse.emf.cdo.server.db.mapping.IListMapping;
import org.eclipse.emf.cdo.server.internal.db.CDODBSchema;
import org.eclipse.emf.cdo.server.internal.db.IObjectTypeMapper;
+import org.eclipse.emf.cdo.server.internal.db.IObjectTypeMapperBulkSupport;
import org.eclipse.emf.cdo.server.internal.db.bundle.OM;
import org.eclipse.emf.cdo.server.internal.db.mapping.AbstractMappingStrategy;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
import org.eclipse.net4j.db.DBException;
import org.eclipse.net4j.db.DBUtil;
@@ -52,6 +56,8 @@ import java.sql.SQLException;
import java.sql.Statement;
import java.util.Collection;
import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
/**
* * This abstract base class refines {@link AbstractMappingStrategy} by implementing aspects common to horizontal
@@ -370,6 +376,46 @@ public abstract class AbstractHorizontalMappingStrategy extends AbstractMappingS
}
@Override
+ public void writeBulkRevisions(IDBStoreAccessor accessor, Map<EClass, List<InternalCDORevision>> revisionsPerClass,
+ Map<CDOID, EClass> newObjectTypes, CDOBranch branch, long timeStamp, OMMonitor monitor)
+ {
+ monitor.begin(revisionsPerClass.size() + (newObjectTypes.isEmpty() ? 0 : 1));
+
+ try
+ {
+ for (Entry<EClass, List<InternalCDORevision>> entry : revisionsPerClass.entrySet())
+ {
+ EClass eClass = entry.getKey();
+ List<InternalCDORevision> revisions = entry.getValue();
+
+ IClassMappingBulkSupport classMapping = (IClassMappingBulkSupport)getClassMapping(eClass);
+ classMapping.writeBulkRevisions(accessor, revisions, branch, timeStamp, monitor.fork());
+ }
+
+ if (!newObjectTypes.isEmpty())
+ {
+ if (objectTypeMapper instanceof IObjectTypeMapperBulkSupport)
+ {
+ IObjectTypeMapperBulkSupport bulkSupport = (IObjectTypeMapperBulkSupport)objectTypeMapper;
+ bulkSupport.putObjectTypes(accessor, newObjectTypes, timeStamp, monitor.fork());
+ }
+ else
+ {
+ putObjectTypes(accessor, newObjectTypes, timeStamp, monitor.fork());
+ }
+ }
+ }
+ catch (SQLException ex)
+ {
+ throw new DBException(ex);
+ }
+ finally
+ {
+ monitor.done();
+ }
+ }
+
+ @Override
protected void doActivate() throws Exception
{
super.doActivate();
@@ -426,6 +472,25 @@ public abstract class AbstractHorizontalMappingStrategy extends AbstractMappingS
return objectTypeCacheSize;
}
+ private void putObjectTypes(IDBStoreAccessor accessor, Map<CDOID, EClass> newObjectTypes, long timeStamp,
+ OMMonitor monitor)
+ {
+ monitor.begin(newObjectTypes.size());
+
+ try
+ {
+ for (Entry<CDOID, EClass> entry : newObjectTypes.entrySet())
+ {
+ putObjectType(accessor, timeStamp, entry.getKey(), entry.getValue());
+ monitor.worked();
+ }
+ }
+ finally
+ {
+ monitor.done();
+ }
+ }
+
/**
* This is an intermediate implementation. It should be changed after classmappings support a general way to implement
* queries ...

Back to the top