diff options
24 files changed, 433 insertions, 104 deletions
diff --git a/plugins/org.eclipse.emf.cdo.server.db/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.cdo.server.db/META-INF/MANIFEST.MF index 7ddee3f2e3..e14b998fea 100644 --- a/plugins/org.eclipse.emf.cdo.server.db/META-INF/MANIFEST.MF +++ b/plugins/org.eclipse.emf.cdo.server.db/META-INF/MANIFEST.MF @@ -9,7 +9,5 @@ Require-Bundle: org.eclipse.core.runtime, org.eclipse.net4j.db;visibility:=reexport, org.eclipse.emf.cdo.server;visibility:=reexport Export-Package: org.eclipse.emf.cdo.server.db;version="0.8.0", - org.eclipse.emf.cdo.server.internal.db;version="0.8.0", - org.eclipse.emf.cdo.server.internal.db.info;version="0.8.0", - org.eclipse.emf.cdo.server.internal.db.mapping;version="0.8.0" + org.eclipse.emf.cdo.server.internal.db;version="0.8.0" Eclipse-LazyStart: true diff --git a/plugins/org.eclipse.emf.cdo.server.db/plugin.xml b/plugins/org.eclipse.emf.cdo.server.db/plugin.xml index 3ff96e79b5..11f901fecd 100644 --- a/plugins/org.eclipse.emf.cdo.server.db/plugin.xml +++ b/plugins/org.eclipse.emf.cdo.server.db/plugin.xml @@ -15,11 +15,11 @@ <extension point="org.eclipse.emf.cdo.server.db.mappingStrategies"> <mappingStrategy - class="org.eclipse.emf.cdo.server.internal.db.mapping.HorizontalMappingStrategy" + class="org.eclipse.emf.cdo.server.internal.db.HorizontalMappingStrategy" type="horizontal"> </mappingStrategy> <mappingStrategy - class="org.eclipse.emf.cdo.server.internal.db.mapping.VerticalMappingStrategy" + class="org.eclipse.emf.cdo.server.internal.db.VerticalMappingStrategy" type="vertical"> </mappingStrategy> </extension> diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/db/IMapping.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/db/IMapping.java new file mode 100644 index 0000000000..8010982ea3 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/db/IMapping.java @@ -0,0 +1,33 @@ +/*************************************************************************** + * Copyright (c) 2004 - 2007 Eike Stepper, Germany. + * 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: + * Eike Stepper - initial API and implementation + **************************************************************************/ +package org.eclipse.emf.cdo.server.db; + +import org.eclipse.emf.cdo.internal.protocol.revision.CDORevisionImpl; +import org.eclipse.emf.cdo.protocol.model.CDOClass; +import org.eclipse.emf.cdo.server.IStoreWriter; + +import org.eclipse.net4j.db.IDBTable; + +import java.util.Set; + +/** + * @author Eike Stepper + */ +public interface IMapping +{ + public IMappingStrategy getMappingStrategy(); + + public CDOClass getCDOClass(); + + public Set<IDBTable> getAffectedTables(); + + public void writeRevision(IStoreWriter writer, CDORevisionImpl revision); +} diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/db/IMappingStrategy.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/db/IMappingStrategy.java index c6f828a45c..1508d1e5b3 100644 --- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/db/IMappingStrategy.java +++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/db/IMappingStrategy.java @@ -11,15 +11,11 @@ package org.eclipse.emf.cdo.server.db; import org.eclipse.emf.cdo.internal.protocol.model.CDOPackageImpl; -import org.eclipse.emf.cdo.internal.protocol.revision.CDORevisionImpl; -import org.eclipse.emf.cdo.protocol.CDOID; -import org.eclipse.emf.cdo.protocol.model.CDOClassRef; -import org.eclipse.emf.cdo.protocol.revision.CDORevision; +import org.eclipse.emf.cdo.protocol.model.CDOClass; import org.eclipse.net4j.db.IDBSchema; import org.eclipse.net4j.db.IDBTable; -import java.sql.Connection; import java.util.Map; import java.util.Set; @@ -40,20 +36,10 @@ public interface IMappingStrategy public void setProperties(Map<String, String> properties); + public IMapping getMapping(CDOClass cdoClass); + /** * @return A collection of the affected tables. */ public Set<IDBTable> map(CDOPackageImpl[] cdoPackages); - - public void writeRevision(Connection connection, CDORevisionImpl revision); - - public CDORevision readRevision(Connection connection, CDOID id); - - public CDORevision readRevision(Connection connection, CDOID id, long timeStamp); - - public CDOID readResourceID(Connection connection, String path); - - public String readResourcePath(Connection connection, CDOID id); - - public CDOClassRef readObjectType(Connection connection, CDOID id); } diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/info/ClassServerInfo.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/ClassServerInfo.java index 07825c7cfb..332b1902af 100644 --- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/info/ClassServerInfo.java +++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/ClassServerInfo.java @@ -8,30 +8,30 @@ * Contributors: * Eike Stepper - initial API and implementation **************************************************************************/ -package org.eclipse.emf.cdo.server.internal.db.info; +package org.eclipse.emf.cdo.server.internal.db; import org.eclipse.emf.cdo.protocol.model.CDOClass; -import org.eclipse.emf.cdo.server.internal.db.mapping.ClassMapper; +import org.eclipse.emf.cdo.server.db.IMapping; /** * @author Eike Stepper */ public final class ClassServerInfo extends ServerInfo { - private ClassMapper mapper; + private IMapping mapping; public ClassServerInfo(int id) { super(id); } - public static ClassMapper getMapper(CDOClass cdoClass) + public static IMapping getMapping(CDOClass cdoClass) { - return ((ClassServerInfo)cdoClass.getServerInfo()).mapper; + return ((ClassServerInfo)cdoClass.getServerInfo()).mapping; } - public static void setMapper(CDOClass cdoClass, ClassMapper mapper) + public static void setMapping(CDOClass cdoClass, IMapping mapping) { - ((ClassServerInfo)cdoClass.getServerInfo()).mapper = mapper; + ((ClassServerInfo)cdoClass.getServerInfo()).mapping = mapping; } } 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 d03e2fc20a..087d1b5a62 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 @@ -28,12 +28,9 @@ import org.eclipse.emf.cdo.server.ISession; import org.eclipse.emf.cdo.server.IStoreReader; import org.eclipse.emf.cdo.server.IStoreWriter; import org.eclipse.emf.cdo.server.IView; +import org.eclipse.emf.cdo.server.db.IMapping; import org.eclipse.emf.cdo.server.db.IMappingStrategy; import org.eclipse.emf.cdo.server.internal.db.bundle.OM; -import org.eclipse.emf.cdo.server.internal.db.info.ClassServerInfo; -import org.eclipse.emf.cdo.server.internal.db.info.FeatureServerInfo; -import org.eclipse.emf.cdo.server.internal.db.info.PackageServerInfo; -import org.eclipse.emf.cdo.server.internal.db.info.ServerInfo; import org.eclipse.net4j.db.DBException; import org.eclipse.net4j.db.DBUtil; @@ -176,7 +173,7 @@ public class DBStoreAccessor implements IStoreReader, IStoreWriter store.getDBAdapter().createTables(affectedTables, connection); } - public void writeClass(CDOClassImpl cdoClass) + protected void writeClass(CDOClassImpl cdoClass) { int id = store.getNextClassID(); cdoClass.setServerInfo(new ClassServerInfo(id)); @@ -199,14 +196,14 @@ public class DBStoreAccessor implements IStoreReader, IStoreWriter } } - public void writeSuperType(int type, CDOClassProxy superType) + protected void writeSuperType(int type, CDOClassProxy superType) { String packageURI = superType.getPackageURI(); int classifierID = superType.getClassifierID(); DBUtil.insertRow(connection, CDODBSchema.SUPERTYPES, type, packageURI, classifierID); } - public void writeFeature(CDOFeatureImpl feature) + protected void writeFeature(CDOFeatureImpl feature) { int id = store.getNextFeatureID(); feature.setServerInfo(new FeatureServerInfo(id)); @@ -225,11 +222,6 @@ public class DBStoreAccessor implements IStoreReader, IStoreWriter many, containment, idx); } - public void writeRevision(CDORevisionImpl revision) - { - store.getMappingStrategy().writeRevision(connection, revision); - } - public Collection<CDOPackageInfo> readPackageInfos() { final Collection<CDOPackageInfo> result = new ArrayList(0); @@ -266,7 +258,7 @@ public class DBStoreAccessor implements IStoreReader, IStoreWriter store.getMappingStrategy().map(cdoPackages); } - public void readClasses(final CDOPackageImpl cdoPackage) + protected void readClasses(final CDOPackageImpl cdoPackage) { IDBRowHandler rowHandler = new IDBRowHandler() { @@ -290,7 +282,7 @@ public class DBStoreAccessor implements IStoreReader, IStoreWriter CDODBSchema.CLASSES_NAME, CDODBSchema.CLASSES_ABSTRACT); } - public void readSuperTypes(final CDOClassImpl cdoClass, int classID) + protected void readSuperTypes(final CDOClassImpl cdoClass, int classID) { IDBRowHandler rowHandler = new IDBRowHandler() { @@ -308,7 +300,7 @@ public class DBStoreAccessor implements IStoreReader, IStoreWriter CDODBSchema.SUPERTYPES_SUPERTYPE_CLASSIFIER); } - public void readFeatures(final CDOClassImpl cdoClass, int classID) + protected void readFeatures(final CDOClassImpl cdoClass, int classID) { IDBRowHandler rowHandler = new IDBRowHandler() { @@ -346,29 +338,47 @@ public class DBStoreAccessor implements IStoreReader, IStoreWriter CDODBSchema.FEATURES_REFERENCE_CLASSIFIER, CDODBSchema.FEATURES_MANY, CDODBSchema.FEATURES_CONTAINMENT); } + public void writeRevision(CDORevisionImpl revision) + { + if (TRACER.isEnabled()) + { + TRACER.format("Inserting revision: {0}", revision); + } + + CDOClassImpl cdoClass = revision.getCDOClass(); + IMapping mapping = ClassServerInfo.getMapping(cdoClass); + + mapping.writeRevision(this, revision); + } + public CDORevision readRevision(CDOID id) { - return store.getMappingStrategy().readRevision(connection, id); + // TODO Implement method DBStoreAccessor.readRevision() + throw new UnsupportedOperationException("Not yet implemented"); } public CDORevision readRevision(CDOID id, long timeStamp) { - return store.getMappingStrategy().readRevision(connection, id, timeStamp); + // TODO Implement method DBStoreAccessor.enclosing_method() + throw new UnsupportedOperationException("Not yet implemented"); } public CDOID readResourceID(String path) { - return store.getMappingStrategy().readResourceID(connection, path); + // TODO Implement method DBStoreAccessor.readResourceID() + throw new UnsupportedOperationException("Not yet implemented"); } public String readResourcePath(CDOID id) { - return store.getMappingStrategy().readResourcePath(connection, id); + // TODO Implement method DBStoreAccessor.readResourcePath() + throw new UnsupportedOperationException("Not yet implemented"); } public CDOClassRef readObjectType(CDOID id) { - return store.getMappingStrategy().readObjectType(connection, id); + // TODO Implement method DBStoreAccessor.readObjectType() + throw new UnsupportedOperationException("Not yet implemented"); } /** diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/AttributeMapper.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/FeatureMapper.java index f69e675a88..66599d018d 100644 --- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/AttributeMapper.java +++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/FeatureMapper.java @@ -8,12 +8,32 @@ * Contributors: * Eike Stepper - initial API and implementation **************************************************************************/ -package org.eclipse.emf.cdo.server.internal.db.mapping; +package org.eclipse.emf.cdo.server.internal.db; + +import org.eclipse.emf.cdo.protocol.model.CDOFeature; /** * @author Eike Stepper */ -public final class AttributeMapper +public class FeatureMapper { + private CDOFeature feature; + + private int index; + + public FeatureMapper(CDOFeature feature, int index) + { + this.feature = feature; + this.index = index; + } + + public CDOFeature getFeature() + { + return feature; + } + public int getIndex() + { + return index; + } } diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/info/FeatureServerInfo.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/FeatureServerInfo.java index 2f395a8d47..ecd595a925 100644 --- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/info/FeatureServerInfo.java +++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/FeatureServerInfo.java @@ -8,7 +8,7 @@ * Contributors: * Eike Stepper - initial API and implementation **************************************************************************/ -package org.eclipse.emf.cdo.server.internal.db.info; +package org.eclipse.emf.cdo.server.internal.db; import org.eclipse.net4j.db.IDBField; @@ -27,11 +27,13 @@ public final class FeatureServerInfo extends ServerInfo super(id); } + @Deprecated public IDBField getField(Object context) { return fields == null ? null : fields.get(context); } + @Deprecated public void addField(Object context, IDBField field) { if (fields == null) @@ -49,6 +51,7 @@ public final class FeatureServerInfo extends ServerInfo fields.put(context, field); } + @Deprecated public IDBField removeField(Object context) { if (fields == null) diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/FullInfoMapping.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/FullInfoMapping.java new file mode 100644 index 0000000000..bc5f2ab443 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/FullInfoMapping.java @@ -0,0 +1,38 @@ +/*************************************************************************** + * Copyright (c) 2004 - 2007 Eike Stepper, Germany. + * 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: + * Eike Stepper - initial API and implementation + **************************************************************************/ +package org.eclipse.emf.cdo.server.internal.db; + +import org.eclipse.emf.cdo.internal.protocol.revision.CDORevisionImpl; +import org.eclipse.emf.cdo.protocol.model.CDOClass; +import org.eclipse.emf.cdo.server.IStoreWriter; +import org.eclipse.emf.cdo.server.db.IMappingStrategy; + +/** + * @author Eike Stepper + */ +public abstract class FullInfoMapping extends IDInfoMapping +{ + public FullInfoMapping(IMappingStrategy mappingStrategy, CDOClass cdoClass) + { + super(mappingStrategy, cdoClass); + } + + @Override + public void writeRevision(IStoreWriter writer, CDORevisionImpl revision) + { + super.writeRevision(writer, revision); + writeFullInfo(writer, revision); + } + + protected void writeFullInfo(IStoreWriter writer, CDORevisionImpl revision) + { + } +} diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/HorizontalMapping.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/HorizontalMapping.java new file mode 100644 index 0000000000..436b73174c --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/HorizontalMapping.java @@ -0,0 +1,33 @@ +/*************************************************************************** + * Copyright (c) 2004 - 2007 Eike Stepper, Germany. + * 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: + * Eike Stepper - initial API and implementation + **************************************************************************/ +package org.eclipse.emf.cdo.server.internal.db; + +import org.eclipse.emf.cdo.internal.protocol.revision.CDORevisionImpl; +import org.eclipse.emf.cdo.protocol.model.CDOClass; +import org.eclipse.emf.cdo.server.IStoreWriter; +import org.eclipse.emf.cdo.server.db.IMappingStrategy; + +/** + * @author Eike Stepper + */ +public class HorizontalMapping extends FullInfoMapping +{ + public HorizontalMapping(IMappingStrategy mappingStrategy, CDOClass cdoClass) + { + super(mappingStrategy, cdoClass); + } + + @Override + public void writeRevision(IStoreWriter writer, CDORevisionImpl revision) + { + super.writeRevision(writer, revision); + } +} diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/HorizontalMappingStrategy.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/HorizontalMappingStrategy.java index ddcc465fe1..6cb9e3f988 100644 --- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/HorizontalMappingStrategy.java +++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/HorizontalMappingStrategy.java @@ -8,10 +8,11 @@ * Contributors: * Eike Stepper - initial API and implementation **************************************************************************/ -package org.eclipse.emf.cdo.server.internal.db.mapping; +package org.eclipse.emf.cdo.server.internal.db; import org.eclipse.emf.cdo.protocol.model.CDOClass; import org.eclipse.emf.cdo.protocol.model.CDOFeature; +import org.eclipse.emf.cdo.server.db.IMapping; import org.eclipse.net4j.db.IDBField; import org.eclipse.net4j.db.IDBTable; @@ -33,6 +34,12 @@ public class HorizontalMappingStrategy extends StandardMappingStrategy } @Override + protected IMapping createMapping(CDOClass cdoClass) + { + return new HorizontalMapping(this, cdoClass); + } + + @Override protected IDBField mapFeature(CDOClass cdoClass, CDOFeature cdoFeature, Set<IDBTable> affectedTables) { if (cdoClass.isAbstract()) diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/IDInfoMapping.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/IDInfoMapping.java new file mode 100644 index 0000000000..6d960c5c14 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/IDInfoMapping.java @@ -0,0 +1,36 @@ +/*************************************************************************** + * Copyright (c) 2004 - 2007 Eike Stepper, Germany. + * 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: + * Eike Stepper - initial API and implementation + **************************************************************************/ +package org.eclipse.emf.cdo.server.internal.db; + +import org.eclipse.emf.cdo.internal.protocol.revision.CDORevisionImpl; +import org.eclipse.emf.cdo.protocol.model.CDOClass; +import org.eclipse.emf.cdo.server.IStoreWriter; +import org.eclipse.emf.cdo.server.db.IMappingStrategy; + +/** + * @author Eike Stepper + */ +public abstract class IDInfoMapping extends Mapping +{ + public IDInfoMapping(IMappingStrategy mappingStrategy, CDOClass cdoClass) + { + super(mappingStrategy, cdoClass); + } + + public void writeRevision(IStoreWriter writer, CDORevisionImpl revision) + { + writeIDInfo(writer, revision); + } + + protected void writeIDInfo(IStoreWriter writer, CDORevisionImpl revision) + { + } +} diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/Mapping.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/Mapping.java new file mode 100644 index 0000000000..ae78a0acc9 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/Mapping.java @@ -0,0 +1,57 @@ +/*************************************************************************** + * Copyright (c) 2004 - 2007 Eike Stepper, Germany. + * 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: + * Eike Stepper - initial API and implementation + **************************************************************************/ +package org.eclipse.emf.cdo.server.internal.db; + +import org.eclipse.emf.cdo.protocol.model.CDOClass; +import org.eclipse.emf.cdo.server.db.IMapping; +import org.eclipse.emf.cdo.server.db.IMappingStrategy; + +import org.eclipse.net4j.db.IDBTable; + +import java.util.HashSet; +import java.util.Set; + +/** + * @author Eike Stepper + */ +public abstract class Mapping implements IMapping +{ + private IMappingStrategy mappingStrategy; + + private CDOClass cdoClass; + + private Set<IDBTable> affectedTables = new HashSet(); + + public Mapping(IMappingStrategy mappingStrategy, CDOClass cdoClass) + { + this.mappingStrategy = mappingStrategy; + this.cdoClass = cdoClass; + } + + public IMappingStrategy getMappingStrategy() + { + return mappingStrategy; + } + + public CDOClass getCDOClass() + { + return cdoClass; + } + + public Set<IDBTable> getAffectedTables() + { + return affectedTables; + } + + // protected abstract List<FeatureMapper> getAttributeMappers(); + // + // protected abstract List<FeatureMapper> getReferenceMappers(); +} diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/MappingStrategy.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/MappingStrategy.java index 5d43ec0a5b..c3af05f366 100644 --- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/MappingStrategy.java +++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/MappingStrategy.java @@ -8,12 +8,13 @@ * Contributors: * Eike Stepper - initial API and implementation **************************************************************************/ -package org.eclipse.emf.cdo.server.internal.db.mapping; +package org.eclipse.emf.cdo.server.internal.db; import org.eclipse.emf.cdo.protocol.model.CDOClass; import org.eclipse.emf.cdo.protocol.model.CDOFeature; import org.eclipse.emf.cdo.protocol.model.CDOType; import org.eclipse.emf.cdo.server.db.IDBStore; +import org.eclipse.emf.cdo.server.db.IMapping; import org.eclipse.emf.cdo.server.db.IMappingStrategy; import org.eclipse.emf.cdo.server.internal.db.bundle.OM; @@ -83,6 +84,25 @@ public abstract class MappingStrategy implements IMappingStrategy return schema; } + public IMapping getMapping(CDOClass cdoClass) + { + IMapping mapping = ClassServerInfo.getMapping(cdoClass); + if (mapping == NoMapping.INSTANCE) + { + return null; + } + + if (mapping == null) + { + mapping = createMapping(cdoClass); + ClassServerInfo.setMapping(cdoClass, mapping == null ? NoMapping.INSTANCE : mapping); + } + + return mapping; + } + + protected abstract IMapping createMapping(CDOClass cdoClass); + @Override public String toString() { diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/NoMapping.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/NoMapping.java new file mode 100644 index 0000000000..7dcbf63f20 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/NoMapping.java @@ -0,0 +1,53 @@ +/*************************************************************************** + * Copyright (c) 2004 - 2007 Eike Stepper, Germany. + * 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: + * Eike Stepper - initial API and implementation + **************************************************************************/ +package org.eclipse.emf.cdo.server.internal.db; + +import org.eclipse.emf.cdo.internal.protocol.revision.CDORevisionImpl; +import org.eclipse.emf.cdo.protocol.model.CDOClass; +import org.eclipse.emf.cdo.server.IStoreWriter; +import org.eclipse.emf.cdo.server.db.IMapping; +import org.eclipse.emf.cdo.server.db.IMappingStrategy; + +import org.eclipse.net4j.db.IDBTable; + +import java.util.Collections; +import java.util.Set; + +/** + * @author Eike Stepper + */ +public class NoMapping implements IMapping +{ + public static final IMapping INSTANCE = new NoMapping(); + + private NoMapping() + { + } + + public IMappingStrategy getMappingStrategy() + { + return null; + } + + public CDOClass getCDOClass() + { + return null; + } + + public Set<IDBTable> getAffectedTables() + { + return Collections.emptySet(); + } + + public void writeRevision(IStoreWriter writer, CDORevisionImpl revision) + { + } +} diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/info/PackageServerInfo.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/PackageServerInfo.java index 6c0e451c60..8bc61325ad 100644 --- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/info/PackageServerInfo.java +++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/PackageServerInfo.java @@ -8,7 +8,7 @@ * Contributors: * Eike Stepper - initial API and implementation **************************************************************************/ -package org.eclipse.emf.cdo.server.internal.db.info; +package org.eclipse.emf.cdo.server.internal.db; import org.eclipse.emf.cdo.protocol.model.CDOPackage; diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/Precedence.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/Precedence.java index f5354c61d8..e8830f6ece 100644 --- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/Precedence.java +++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/Precedence.java @@ -8,7 +8,7 @@ * Contributors: * Eike Stepper - initial API and implementation **************************************************************************/ -package org.eclipse.emf.cdo.server.internal.db.mapping; +package org.eclipse.emf.cdo.server.internal.db; /** * @author Eike Stepper diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/ClassMapper.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/RootMapping.java index f050ea7658..d3f3c4677c 100644 --- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/ClassMapper.java +++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/RootMapping.java @@ -8,19 +8,18 @@ * Contributors: * Eike Stepper - initial API and implementation **************************************************************************/ -package org.eclipse.emf.cdo.server.internal.db.mapping; +package org.eclipse.emf.cdo.server.internal.db; -import java.util.List; +import org.eclipse.emf.cdo.protocol.model.CDOClass; +import org.eclipse.emf.cdo.server.db.IMappingStrategy; /** * @author Eike Stepper */ -public final class ClassMapper +public class RootMapping extends FullInfoMapping { - private List<AttributeMapper> attributeMappers; - - public List<AttributeMapper> getAttributeMappers() + public RootMapping(IMappingStrategy mappingStrategy, CDOClass cdoClass) { - return attributeMappers; + super(mappingStrategy, cdoClass); } } diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/info/ServerInfo.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/ServerInfo.java index f162fa81f3..d0b02f934c 100644 --- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/info/ServerInfo.java +++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/ServerInfo.java @@ -8,7 +8,7 @@ * Contributors: * Eike Stepper - initial API and implementation **************************************************************************/ -package org.eclipse.emf.cdo.server.internal.db.info; +package org.eclipse.emf.cdo.server.internal.db; import org.eclipse.emf.cdo.protocol.model.CDOModelElement; diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/StandardMappingStrategy.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/StandardMappingStrategy.java index eb87430cf0..f45cd46082 100644 --- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/StandardMappingStrategy.java +++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/StandardMappingStrategy.java @@ -8,7 +8,7 @@ * Contributors: * Eike Stepper - initial API and implementation **************************************************************************/ -package org.eclipse.emf.cdo.server.internal.db.mapping; +package org.eclipse.emf.cdo.server.internal.db; import org.eclipse.emf.cdo.internal.protocol.model.CDOClassImpl; import org.eclipse.emf.cdo.internal.protocol.model.CDOFeatureImpl; @@ -16,15 +16,10 @@ import org.eclipse.emf.cdo.internal.protocol.model.CDOPackageImpl; import org.eclipse.emf.cdo.internal.protocol.revision.CDORevisionImpl; import org.eclipse.emf.cdo.protocol.CDOID; import org.eclipse.emf.cdo.protocol.model.CDOClass; -import org.eclipse.emf.cdo.protocol.model.CDOClassRef; import org.eclipse.emf.cdo.protocol.model.CDOFeature; import org.eclipse.emf.cdo.protocol.model.CDOPackage; -import org.eclipse.emf.cdo.protocol.revision.CDORevision; import org.eclipse.emf.cdo.server.IRepository; import org.eclipse.emf.cdo.server.internal.db.bundle.OM; -import org.eclipse.emf.cdo.server.internal.db.info.FeatureServerInfo; -import org.eclipse.emf.cdo.server.internal.db.info.PackageServerInfo; -import org.eclipse.emf.cdo.server.internal.db.info.ServerInfo; import org.eclipse.net4j.db.DBUtil; import org.eclipse.net4j.db.IDBField; @@ -221,6 +216,7 @@ public abstract class StandardMappingStrategy extends MappingStrategy return classMapping; } + @Deprecated public void writeRevision(Connection connection, CDORevisionImpl revision) { if (TRACER.isEnabled()) @@ -229,12 +225,6 @@ public abstract class StandardMappingStrategy extends MappingStrategy } CDOClassImpl cdoClass = revision.getCDOClass(); - // ClassMapper classMapper = ClassServerInfo.getMapper(cdoClass); - // List<AttributeMapper> attributeMappers = - // classMapper.getAttributeMappers(); - // - // Map<IDBTable, FeatureMapper[]> featureMappers = classMapping.getTables(); - ClassMapping classMapping = getClassMapping(cdoClass); Map<IDBTable, FeatureMapping[]> tables = classMapping.getTables(); Entry<IDBTable, FeatureMapping[]> entry = tables.entrySet().iterator().next(); @@ -267,31 +257,6 @@ public abstract class StandardMappingStrategy extends MappingStrategy DBUtil.insertRow(connection, table, values); } - public CDORevision readRevision(Connection connection, CDOID id) - { - return null; - } - - public CDORevision readRevision(Connection connection, CDOID id, long timeStamp) - { - return null; - } - - public CDOID readResourceID(Connection connection, String path) - { - return null; - } - - public String readResourcePath(Connection connection, CDOID id) - { - return null; - } - - public CDOClassRef readObjectType(Connection connection, CDOID id) - { - return null; - } - /** * @author Eike Stepper */ diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/ToMany.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/ToMany.java index 54374c8430..d80ed73cc0 100644 --- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/ToMany.java +++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/ToMany.java @@ -8,7 +8,7 @@ * Contributors: * Eike Stepper - initial API and implementation **************************************************************************/ -package org.eclipse.emf.cdo.server.internal.db.mapping; +package org.eclipse.emf.cdo.server.internal.db; /** * @author Eike Stepper diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/ToOne.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/ToOne.java index a4b2f8450a..4fd27d6bb1 100644 --- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/ToOne.java +++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/ToOne.java @@ -8,7 +8,7 @@ * Contributors: * Eike Stepper - initial API and implementation **************************************************************************/ -package org.eclipse.emf.cdo.server.internal.db.mapping; +package org.eclipse.emf.cdo.server.internal.db; /** * @author Eike Stepper diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/VerticalMapping.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/VerticalMapping.java new file mode 100644 index 0000000000..7ca02dcba7 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/VerticalMapping.java @@ -0,0 +1,64 @@ +/*************************************************************************** + * Copyright (c) 2004 - 2007 Eike Stepper, Germany. + * 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: + * Eike Stepper - initial API and implementation + **************************************************************************/ +package org.eclipse.emf.cdo.server.internal.db; + +import org.eclipse.emf.cdo.internal.protocol.revision.CDORevisionImpl; +import org.eclipse.emf.cdo.protocol.model.CDOClass; +import org.eclipse.emf.cdo.server.IStoreWriter; +import org.eclipse.emf.cdo.server.db.IMapping; +import org.eclipse.emf.cdo.server.db.IMappingStrategy; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author Eike Stepper + */ +public class VerticalMapping extends IDInfoMapping +{ + private List<IMapping> superMappings; + + public VerticalMapping(IMappingStrategy mappingStrategy, CDOClass cdoClass) + { + super(mappingStrategy, cdoClass); + for (CDOClass superType : cdoClass.getSuperTypes()) + { + IMapping superMapping = mappingStrategy.getMapping(superType); + if (superMapping != null) + { + if (superMappings == null) + { + superMappings = new ArrayList(0); + } + + superMappings.add(superMapping); + } + } + } + + public List<IMapping> getSuperMappings() + { + return superMappings; + } + + @Override + public void writeRevision(IStoreWriter writer, CDORevisionImpl revision) + { + super.writeRevision(writer, revision); + if (superMappings != null) + { + for (IMapping superMapping : superMappings) + { + superMapping.writeRevision(writer, revision); + } + } + } +} diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/VerticalMappingStrategy.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/VerticalMappingStrategy.java index 61807d5cd9..79f8790b21 100644 --- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/VerticalMappingStrategy.java +++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/VerticalMappingStrategy.java @@ -8,10 +8,11 @@ * Contributors: * Eike Stepper - initial API and implementation **************************************************************************/ -package org.eclipse.emf.cdo.server.internal.db.mapping; +package org.eclipse.emf.cdo.server.internal.db; import org.eclipse.emf.cdo.protocol.model.CDOClass; import org.eclipse.emf.cdo.protocol.model.CDOFeature; +import org.eclipse.emf.cdo.server.db.IMapping; import org.eclipse.net4j.db.IDBField; import org.eclipse.net4j.db.IDBSchema; @@ -35,6 +36,12 @@ public class VerticalMappingStrategy extends StandardMappingStrategy } @Override + protected IMapping createMapping(CDOClass cdoClass) + { + return new VerticalMapping(this, cdoClass); + } + + @Override protected IDBSchema createSchema() { IDBSchema schema = super.createSchema(); |