diff options
author | Eike Stepper | 2008-10-29 08:03:24 +0000 |
---|---|---|
committer | Eike Stepper | 2008-10-29 08:03:24 +0000 |
commit | 11373f0a4fd47dad69cbd1c9501a29925964ade1 (patch) | |
tree | 7e9ae2ccdd4394091a2b274635e8ffd2a5b5f3f9 | |
parent | cb8b43f5d8471781e3d81ee9fd176cbab2760652 (diff) | |
download | cdo-11373f0a4fd47dad69cbd1c9501a29925964ade1.tar.gz cdo-11373f0a4fd47dad69cbd1c9501a29925964ade1.tar.xz cdo-11373f0a4fd47dad69cbd1c9501a29925964ade1.zip |
[252311] [POLISH] Consolidate IStoreAccessor, IStoreReader and IStoreWriter APIs
https://bugs.eclipse.org/bugs/show_bug.cgi?id=252311
4 files changed, 158 insertions, 162 deletions
diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStoreAccessor.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStoreAccessor.java index bf199ddc2c..ba6d4d9ad8 100644 --- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStoreAccessor.java +++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/DBStoreAccessor.java @@ -395,114 +395,113 @@ public class DBStoreAccessor extends StoreAccessor implements IDBStoreAccessor } @Override - protected void writePackages(CDOPackage... cdoPackages) + protected void writePackages(CDOPackage[] cdoPackages) { - super.writePackages(cdoPackages); - Set<IDBTable> affectedTables = mapPackages(cdoPackages); - getStore().getDBAdapter().createTables(affectedTables, getConnection()); - } - - @Override - protected void writePackage(CDOPackage cdoPackage) - { - int id = getStore().getNextPackageID(); - PackageServerInfo.setDBID(cdoPackage, id); - if (TRACER.isEnabled()) + new PackageWriter(cdoPackages) { - TRACER.format("Writing package: {0} --> {1}", cdoPackage, id); - } + @Override + protected void writePackage(InternalCDOPackage cdoPackage) + { + int id = getStore().getNextPackageID(); + PackageServerInfo.setDBID(cdoPackage, id); + if (TRACER.isEnabled()) + { + TRACER.format("Writing package: {0} --> {1}", cdoPackage, id); + } - String packageURI = cdoPackage.getPackageURI(); - String name = cdoPackage.getName(); - String ecore = cdoPackage.getEcore(); - boolean dynamic = cdoPackage.isDynamic(); - CDOIDMetaRange metaIDRange = cdoPackage.getMetaIDRange(); - long lowerBound = metaIDRange == null ? 0L : ((CDOIDMeta)metaIDRange.getLowerBound()).getLongValue(); - long upperBound = metaIDRange == null ? 0L : ((CDOIDMeta)metaIDRange.getUpperBound()).getLongValue(); - String parentURI = cdoPackage.getParentURI(); + String packageURI = cdoPackage.getPackageURI(); + String name = cdoPackage.getName(); + String ecore = cdoPackage.getEcore(); + boolean dynamic = cdoPackage.isDynamic(); + CDOIDMetaRange metaIDRange = cdoPackage.getMetaIDRange(); + long lowerBound = metaIDRange == null ? 0L : ((CDOIDMeta)metaIDRange.getLowerBound()).getLongValue(); + long upperBound = metaIDRange == null ? 0L : ((CDOIDMeta)metaIDRange.getUpperBound()).getLongValue(); + String parentURI = cdoPackage.getParentURI(); - String sql = "INSERT INTO " + CDODBSchema.PACKAGES + " VALUES (?, ?, ?, ?, ?, ?, ?, ?)"; - DBUtil.trace(sql); - PreparedStatement pstmt = null; + String sql = "INSERT INTO " + CDODBSchema.PACKAGES + " VALUES (?, ?, ?, ?, ?, ?, ?, ?)"; + DBUtil.trace(sql); + PreparedStatement pstmt = null; - try - { - pstmt = getConnection().prepareStatement(sql); - pstmt.setInt(1, id); - pstmt.setString(2, packageURI); - pstmt.setString(3, name); - pstmt.setString(4, ecore); - pstmt.setBoolean(5, dynamic); - pstmt.setLong(6, lowerBound); - pstmt.setLong(7, upperBound); - pstmt.setString(8, parentURI); - - if (pstmt.execute()) - { - throw new DBException("No result set expected"); + try + { + pstmt = getConnection().prepareStatement(sql); + pstmt.setInt(1, id); + pstmt.setString(2, packageURI); + pstmt.setString(3, name); + pstmt.setString(4, ecore); + pstmt.setBoolean(5, dynamic); + pstmt.setLong(6, lowerBound); + pstmt.setLong(7, upperBound); + pstmt.setString(8, parentURI); + + if (pstmt.execute()) + { + throw new DBException("No result set expected"); + } + + if (pstmt.getUpdateCount() == 0) + { + throw new DBException("No row inserted into table " + CDODBSchema.PACKAGES); + } + } + catch (SQLException ex) + { + throw new DBException(ex); + } + finally + { + DBUtil.close(pstmt); + } } - if (pstmt.getUpdateCount() == 0) + @Override + protected void writeClass(InternalCDOClass cdoClass) { - throw new DBException("No row inserted into table " + CDODBSchema.PACKAGES); + int id = getStore().getNextClassID(); + ClassServerInfo.setDBID(cdoClass, id); + + CDOPackage cdoPackage = cdoClass.getContainingPackage(); + int packageID = ServerInfo.getDBID(cdoPackage); + int classifierID = cdoClass.getClassifierID(); + String name = cdoClass.getName(); + boolean isAbstract = cdoClass.isAbstract(); + DBUtil.insertRow(getConnection(), getStore().getDBAdapter(), CDODBSchema.CLASSES, id, packageID, classifierID, + name, isAbstract); } - } - catch (SQLException ex) - { - throw new DBException(ex); - } - finally - { - DBUtil.close(pstmt); - } - - super.writePackage(cdoPackage); - } - - @Override - protected void writeClass(InternalCDOClass cdoClass) - { - int id = getStore().getNextClassID(); - ClassServerInfo.setDBID(cdoClass, id); - - CDOPackage cdoPackage = cdoClass.getContainingPackage(); - int packageID = ServerInfo.getDBID(cdoPackage); - int classifierID = cdoClass.getClassifierID(); - String name = cdoClass.getName(); - boolean isAbstract = cdoClass.isAbstract(); - DBUtil.insertRow(getConnection(), getStore().getDBAdapter(), CDODBSchema.CLASSES, id, packageID, classifierID, - name, isAbstract); - super.writeClass(cdoClass); - } + @Override + protected void writeSuperType(InternalCDOClass type, CDOClassProxy superType) + { + int id = ClassServerInfo.getDBID(type); + String packageURI = superType.getPackageURI(); + int classifierID = superType.getClassifierID(); + DBUtil.insertRow(getConnection(), getStore().getDBAdapter(), CDODBSchema.SUPERTYPES, id, packageURI, + classifierID); + } - @Override - protected void writeSuperType(InternalCDOClass type, CDOClassProxy superType) - { - int id = ClassServerInfo.getDBID(type); - String packageURI = superType.getPackageURI(); - int classifierID = superType.getClassifierID(); - DBUtil.insertRow(getConnection(), getStore().getDBAdapter(), CDODBSchema.SUPERTYPES, id, packageURI, classifierID); - } + @Override + protected void writeFeature(InternalCDOFeature feature) + { + int id = getStore().getNextFeatureID(); + FeatureServerInfo.setDBID(feature, id); + + int classID = ServerInfo.getDBID(feature.getContainingClass()); + String name = feature.getName(); + int featureID = feature.getFeatureID(); + int type = feature.getType().getTypeID(); + CDOClassProxy reference = (feature).getReferenceTypeProxy(); + String packageURI = reference == null ? null : reference.getPackageURI(); + int classifierID = reference == null ? 0 : reference.getClassifierID(); + boolean many = feature.isMany(); + boolean containment = feature.isContainment(); + int idx = feature.getFeatureIndex(); + DBUtil.insertRow(getConnection(), getStore().getDBAdapter(), CDODBSchema.FEATURES, id, classID, featureID, + name, type, packageURI, classifierID, many, containment, idx); + } + }.run(); - @Override - protected void writeFeature(CDOFeature feature) - { - int id = getStore().getNextFeatureID(); - FeatureServerInfo.setDBID(feature, id); - - int classID = ServerInfo.getDBID(feature.getContainingClass()); - String name = feature.getName(); - int featureID = feature.getFeatureID(); - int type = feature.getType().getTypeID(); - CDOClassProxy reference = ((InternalCDOFeature)feature).getReferenceTypeProxy(); - String packageURI = reference == null ? null : reference.getPackageURI(); - int classifierID = reference == null ? 0 : reference.getClassifierID(); - boolean many = feature.isMany(); - boolean containment = feature.isContainment(); - int idx = feature.getFeatureIndex(); - DBUtil.insertRow(getConnection(), getStore().getDBAdapter(), CDODBSchema.FEATURES, id, classID, featureID, name, - type, packageURI, classifierID, many, containment, idx); + Set<IDBTable> affectedTables = mapPackages(cdoPackages); + getStore().getDBAdapter().createTables(affectedTables, getConnection()); } @Override diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreAccessor.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreAccessor.java index f43251d854..d94fd752ab 100644 --- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreAccessor.java +++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/HibernateStoreAccessor.java @@ -13,7 +13,6 @@ package org.eclipse.emf.cdo.server.internal.hibernate; import org.eclipse.emf.cdo.common.id.CDOID; import org.eclipse.emf.cdo.common.id.CDOIDTemp; -import org.eclipse.emf.cdo.common.model.CDOClassProxy; import org.eclipse.emf.cdo.common.model.CDOClassRef; import org.eclipse.emf.cdo.common.model.CDOFeature; import org.eclipse.emf.cdo.common.model.CDOPackage; @@ -30,7 +29,6 @@ import org.eclipse.emf.cdo.server.hibernate.IHibernateStoreAccessor; import org.eclipse.emf.cdo.server.hibernate.id.CDOIDHibernate; import org.eclipse.emf.cdo.server.internal.hibernate.bundle.OM; import org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.PersistableListHolder; -import org.eclipse.emf.cdo.spi.common.InternalCDOClass; import org.eclipse.emf.cdo.spi.common.InternalCDORevision; import org.eclipse.net4j.util.WrappedException; @@ -432,7 +430,7 @@ public class HibernateStoreAccessor extends StoreAccessor implements IHibernateS } @Override - protected void writePackages(CDOPackage... cdoPackages) + protected void writePackages(CDOPackage[] cdoPackages) { if (cdoPackages != null && cdoPackages.length != 0) { @@ -444,30 +442,6 @@ public class HibernateStoreAccessor extends StoreAccessor implements IHibernateS } @Override - protected void writePackage(CDOPackage cdoPackage) - { - throw new UnsupportedOperationException("Should not be called"); - } - - @Override - protected void writeClass(InternalCDOClass cdoClass) - { - throw new UnsupportedOperationException("Should not be called, should be handled by hibernate cascade"); - } - - @Override - protected void writeFeature(CDOFeature feature) - { - throw new UnsupportedOperationException("Should not be called, should be handled by hibernate cascade"); - } - - @Override - protected void writeSuperType(InternalCDOClass type, CDOClassProxy superType) - { - throw new UnsupportedOperationException("Should not be called, should be handled by hibernate cascade"); - } - - @Override protected void writeRevisions(CDORevision[] revisions) { // Don't do anything it is done at commit diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/MEMStoreAccessor.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/MEMStoreAccessor.java index 38f65e5693..9f99f1ee37 100644 --- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/MEMStoreAccessor.java +++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/MEMStoreAccessor.java @@ -162,7 +162,7 @@ public class MEMStoreAccessor extends StoreAccessor } @Override - protected void writePackages(CDOPackage... cdoPackages) + protected void writePackages(CDOPackage[] cdoPackages) { // Do nothing } diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/StoreAccessor.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/StoreAccessor.java index 059fe8cdbd..7ddfe966c5 100644 --- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/StoreAccessor.java +++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/StoreAccessor.java @@ -25,6 +25,8 @@ import org.eclipse.emf.cdo.server.ISession; import org.eclipse.emf.cdo.server.IStoreAccessor; import org.eclipse.emf.cdo.server.ITransaction; import org.eclipse.emf.cdo.spi.common.InternalCDOClass; +import org.eclipse.emf.cdo.spi.common.InternalCDOFeature; +import org.eclipse.emf.cdo.spi.common.InternalCDOPackage; import org.eclipse.emf.cdo.spi.common.InternalCDORevision; import org.eclipse.net4j.util.lifecycle.Lifecycle; @@ -183,44 +185,7 @@ public abstract class StoreAccessor extends Lifecycle implements IStoreAccessor } } - protected void writePackages(CDOPackage... cdoPackages) - { - for (CDOPackage cdoPackage : cdoPackages) - { - writePackage(cdoPackage); - } - } - - protected void writePackage(CDOPackage cdoPackage) - { - for (CDOClass cdoClass : cdoPackage.getClasses()) - { - writeClass((InternalCDOClass)cdoClass); - } - } - - protected void writeClass(InternalCDOClass cdoClass) - { - for (CDOClassProxy superType : cdoClass.getSuperTypeProxies()) - { - writeSuperType(cdoClass, superType); - } - - for (CDOFeature feature : cdoClass.getFeatures()) - { - writeFeature(feature); - } - } - - protected void writeSuperType(InternalCDOClass type, CDOClassProxy superType) - { - throw new UnsupportedOperationException(); - } - - protected void writeFeature(CDOFeature feature) - { - throw new UnsupportedOperationException(); - } + protected abstract void writePackages(CDOPackage[] cdoPackages); protected abstract void writeRevisions(CDORevision[] revisions); @@ -255,4 +220,62 @@ public abstract class StoreAccessor extends Lifecycle implements IStoreAccessor * @since 2.0 */ protected abstract void doUnpassivate() throws Exception; + + /** + * @author Eike Stepper + * @since 2.0 + */ + public static abstract class PackageWriter implements Runnable + { + private CDOPackage[] cdoPackages; + + public PackageWriter(CDOPackage[] cdoPackages) + { + this.cdoPackages = cdoPackages; + } + + public CDOPackage[] getCDOPackages() + { + return cdoPackages; + } + + public void run() + { + for (CDOPackage cdoPackage : cdoPackages) + { + runPackage(cdoPackage); + } + } + + protected void runPackage(CDOPackage cdoPackage) + { + writePackage((InternalCDOPackage)cdoPackage); + for (CDOClass cdoClass : cdoPackage.getClasses()) + { + runClass((InternalCDOClass)cdoClass); + } + } + + protected void runClass(InternalCDOClass cdoClass) + { + writeClass(cdoClass); + for (CDOClassProxy superType : cdoClass.getSuperTypeProxies()) + { + writeSuperType(cdoClass, superType); + } + + for (CDOFeature feature : cdoClass.getFeatures()) + { + writeFeature((InternalCDOFeature)feature); + } + } + + protected abstract void writePackage(InternalCDOPackage cdoPackage); + + protected abstract void writeClass(InternalCDOClass cdoClass); + + protected abstract void writeSuperType(InternalCDOClass type, CDOClassProxy superType); + + protected abstract void writeFeature(InternalCDOFeature feature); + } } |