You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2012/12/13 01:01:07 UTC
[29/52] [partial] ISIS-188: renaming packages in line with
groupId:artifactId
http://git-wip-us.apache.org/repos/asf/isis/blob/951a0fe4/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/ForeignKeyCollectionMapper.java
----------------------------------------------------------------------
diff --git a/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/ForeignKeyCollectionMapper.java b/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/ForeignKeyCollectionMapper.java
deleted file mode 100644
index 6561038..0000000
--- a/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/ForeignKeyCollectionMapper.java
+++ /dev/null
@@ -1,379 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.isis.runtimes.dflt.objectstores.sql.auto;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.log4j.Logger;
-
-import org.apache.isis.core.commons.debug.DebugBuilder;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.oid.Oid;
-import org.apache.isis.core.metamodel.adapter.oid.RootOid;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
-import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
-import org.apache.isis.runtimes.dflt.objectstores.sql.CollectionMapper;
-import org.apache.isis.runtimes.dflt.objectstores.sql.DatabaseConnector;
-import org.apache.isis.runtimes.dflt.objectstores.sql.FieldMappingLookup;
-import org.apache.isis.runtimes.dflt.objectstores.sql.IdMapping;
-import org.apache.isis.runtimes.dflt.objectstores.sql.IdMappingAbstract;
-import org.apache.isis.runtimes.dflt.objectstores.sql.ObjectMapping;
-import org.apache.isis.runtimes.dflt.objectstores.sql.ObjectMappingLookup;
-import org.apache.isis.runtimes.dflt.objectstores.sql.Results;
-import org.apache.isis.runtimes.dflt.objectstores.sql.Sql;
-import org.apache.isis.runtimes.dflt.objectstores.sql.VersionMapping;
-import org.apache.isis.runtimes.dflt.objectstores.sql.mapping.FieldMapping;
-import org.apache.isis.runtimes.dflt.objectstores.sql.mapping.ObjectReferenceMapping;
-import org.apache.isis.runtimes.dflt.runtime.persistence.PersistorUtil;
-
-/**
- * Stores 1-to-many collections by creating a foreign-key column in the table
- * for the incoming objectAssociation class. This assumes this the class is only
- * ever in 1 collection parent.
- *
- * @version $Rev$ $Date$
- */
-public class ForeignKeyCollectionMapper extends AbstractAutoMapper implements CollectionMapper {
- private static final Logger LOG = Logger.getLogger(ForeignKeyCollectionMapper.class);
- private final ObjectAssociation field;
- private final IdMapping idMapping;
- private final VersionMapping versionMapping;
- private final ObjectReferenceMapping foreignKeyMapping;
- private String foreignKeyName;
- private String columnName;
- private final ObjectMappingLookup objectMapperLookup2;
-
- private ObjectMapping originalMapping = null;
-
- public ForeignKeyCollectionMapper(final ObjectAssociation objectAssociation, final String parameterBase, final FieldMappingLookup lookup, final ObjectMappingLookup objectMapperLookup) {
- super(objectAssociation.getSpecification().getFullIdentifier(), parameterBase, lookup, objectMapperLookup);
-
- this.field = objectAssociation;
-
- objectMapperLookup2 = objectMapperLookup;
-
- idMapping = lookup.createIdMapping();
- versionMapping = lookup.createVersionMapping();
-
- setColumnName(determineColumnName(objectAssociation));
- foreignKeyName = Sql.sqlName("fk_" + getColumnName());
-
- foreignKeyName = Sql.identifier(foreignKeyName);
- foreignKeyMapping = lookup.createMapping(columnName, specification);
- }
-
- protected ForeignKeyCollectionMapper(final FieldMappingLookup lookup, final AbstractAutoMapper abstractAutoMapper, final ObjectAssociation field) {
- super(lookup, abstractAutoMapper, field.getSpecification().getFullIdentifier());
-
- this.field = field;
- objectMapperLookup2 = null;
-
- idMapping = lookup.createIdMapping();
- versionMapping = lookup.createVersionMapping();
-
- setColumnName(determineColumnName(field));
- foreignKeyName = Sql.sqlName("fk_" + getColumnName());
-
- foreignKeyName = Sql.identifier(foreignKeyName);
- foreignKeyMapping = lookup.createMapping(columnName, specification);
- }
-
- protected String determineColumnName(final ObjectAssociation objectAssociation) {
- return objectAssociation.getSpecification().getShortIdentifier();
- }
-
- public String getColumnName() {
- return columnName;
- }
-
- public void setColumnName(final String columnName) {
- this.columnName = columnName;
- }
-
- protected VersionMapping getVersionMapping() {
- return versionMapping;
- }
-
- protected ObjectReferenceMapping getForeignKeyMapping() {
- return foreignKeyMapping;
- }
-
- protected String getForeignKeyName() {
- return foreignKeyName;
- }
-
- @Override
- public void startup(final DatabaseConnector connector) {
- if (originalMapping == null) {
- originalMapping = objectMappingLookup.getMapping(specification, null);
- }
- originalMapping.startup(connector, objectMapperLookup2);
- super.startup(connector);
- }
-
- @Override
- public boolean needsTables(final DatabaseConnector connection) {
- return !connection.hasColumn(table, foreignKeyName);
- }
-
- @Override
- public void createTables(final DatabaseConnector connection) {
- if (connection.hasTable(table)) {
- final StringBuffer sql = new StringBuffer();
- sql.append("alter table ");
- sql.append(table);
- sql.append(" add ");
- appendColumnDefinitions(sql);
- connection.update(sql.toString());
- } else {
- final StringBuffer sql = new StringBuffer();
- sql.append("create table ");
- sql.append(table);
- sql.append(" (");
- idMapping.appendCreateColumnDefinitions(sql);
- sql.append(", ");
-
- appendColumnDefinitions(sql);
-
- // for (final FieldMapping mapping : fieldMappings) {
- // mapping.appendColumnDefinitions(sql);
- // sql.append(",");
- // }
- // sql.append(versionMapping.appendColumnDefinitions());
- sql.append(")");
- connection.update(sql.toString());
- }
- }
-
- public IdMappingAbstract getIdMapping() {
- return idMapping;
- }
-
- protected void appendCollectionUpdateColumnsToNull(final StringBuffer sql) {
- sql.append(foreignKeyName + "=NULL ");
- }
-
- protected void appendCollectionWhereValues(final DatabaseConnector connector, final ObjectAdapter parent, final StringBuffer sql) {
- foreignKeyMapping.appendUpdateValues(connector, sql, parent);
- }
-
- protected void appendCollectionUpdateValues(final DatabaseConnector connector, final ObjectAdapter parent, final StringBuffer sql) {
- appendCollectionWhereValues(connector, parent, sql);
- }
-
- protected void appendColumnDefinitions(final StringBuffer sql) {
- foreignKeyMapping.appendColumnDefinitions(sql);
- }
-
- @Override
- public void loadInternalCollection(final DatabaseConnector connector, final ObjectAdapter parentAdapter) {
-
- final ObjectAdapter collectionAdapter = field.get(parentAdapter);
- if (!collectionAdapter.canTransitionToResolving()) {
- return;
- }
-
- if(LOG.isDebugEnabled()) {
- LOG.debug("loading internal collection " + field);
- }
- final List<ObjectAdapter> list = new ArrayList<ObjectAdapter>();
- try {
- PersistorUtil.startResolving(collectionAdapter);
-
- loadCollectionIntoList(connector, parentAdapter, table, specification, getIdMapping(), fieldMappingByField, versionMapping, list);
-
- final CollectionFacet collectionFacet = collectionAdapter.getSpecification().getFacet(CollectionFacet.class);
- collectionFacet.init(collectionAdapter, list.toArray(new ObjectAdapter[list.size()]));
-
- } finally {
- PersistorUtil.toEndState(collectionAdapter);
- }
-
- // TODO: Need to finalise this behaviour. At the moment, all
- // collections will get infinitely resolved. I
- // don't think this is desirable.
- for (final ObjectAdapter field : list) {
- // final ObjectMapping mapping =
- // objectMappingLookup.getMapping(field, connector);
- if (field.getSpecification().isOfType(parentAdapter.getSpecification())) {
- loadInternalCollection(connector, field);
- }
- }
- }
-
- protected void loadCollectionIntoList(final DatabaseConnector connector, final ObjectAdapter parent, final String table, final ObjectSpecification specification, final IdMappingAbstract idMappingAbstract, final Map<ObjectAssociation, FieldMapping> fieldMappingByField, final VersionMapping versionMapping,
- final List<ObjectAdapter> list) {
-
- final StringBuffer sql = new StringBuffer();
- sql.append("select ");
- idMappingAbstract.appendColumnNames(sql);
-
- sql.append(", ");
- final String columnList = columnList(fieldMappingByField);
- if (columnList.length() > 0) {
- sql.append(columnList);
- sql.append(", ");
- }
- sql.append(versionMapping.appendColumnNames());
- sql.append(" from ");
- sql.append(table);
- sql.append(" where ");
- appendCollectionWhereValues(connector, parent, sql);
-
- final Results rs = connector.select(sql.toString());
- while (rs.next()) {
- final Oid oid = idMappingAbstract.recreateOid(rs, specification);
- final ObjectAdapter element = getAdapter(specification, oid);
- loadFields(element, rs, fieldMappingByField);
- LOG.debug(" element " + element.getOid());
- list.add(element);
- }
- rs.close();
- }
-
- protected void loadFields(final ObjectAdapter adapter, final Results rs, final Map<ObjectAssociation, FieldMapping> fieldMappingByField) {
- if (!adapter.canTransitionToResolving()) {
- return;
- }
-
- try {
- PersistorUtil.startResolving(adapter);
- for (final FieldMapping mapping : fieldMappingByField.values()) {
- mapping.initializeField(adapter, rs);
- }
- adapter.setVersion(versionMapping.getLock(rs));
- } finally {
- PersistorUtil.toEndState(adapter);
- }
- }
-
- /**
- * Override this in the Polymorphic case to return just the elements that
- * are appropriate for the subclass currently being handled.
- *
- * @param collection
- * @return those elements that ought to be used.
- */
- protected Iterator<ObjectAdapter> getElementsForCollectionAsIterator(final ObjectAdapter collection) {
- final CollectionFacet collectionFacet = collection.getSpecification().getFacet(CollectionFacet.class);
- final Iterable<ObjectAdapter> elements = collectionFacet.iterable(collection);
- return elements.iterator();
- }
-
- @Override
- public void saveInternalCollection(final DatabaseConnector connector, final ObjectAdapter parent) {
- final ObjectAdapter collection = field.get(parent);
- if(LOG.isDebugEnabled()) {
- LOG.debug("Saving internal collection " + collection);
- }
-
- final Iterator<ObjectAdapter> elements = getElementsForCollectionAsIterator(collection);
-
- // TODO What is needed to allow a collection update (add/remove) to mark
- // the collection as dirty?
- // checkIfDirty(collection);
-
- if (elements.hasNext() == false) {
- return;
- }
-
- clearCollectionParent(connector, parent);
-
- resetCollectionParent(connector, parent, elements);
- }
-
- protected void clearCollectionParent(final DatabaseConnector connector, final ObjectAdapter parent) {
- // Delete collection parent
- final StringBuffer sql = new StringBuffer();
- sql.append("update ");
- sql.append(table);
- sql.append(" set ");
- appendCollectionUpdateColumnsToNull(sql);
- sql.append(" where ");
- appendCollectionWhereValues(connector, parent, sql);
- connector.update(sql.toString());
- }
-
- protected void resetCollectionParent(final DatabaseConnector connector, final ObjectAdapter parent, final Iterator<ObjectAdapter> elements) {
- // Reinstall collection parent
- final StringBuffer update = new StringBuffer();
- update.append("update ");
- update.append(table);
- update.append(" set ");
- appendCollectionUpdateValues(connector, parent, update);
- update.append(" where ");
-
- idMapping.appendColumnNames(update);
-
- update.append(" IN (");
-
- int count = 0;
- for (final Iterator<ObjectAdapter> iterator = elements; iterator.hasNext();) {
- final ObjectAdapter element = iterator.next();
-
- if (count++ > 0) {
- update.append(",");
- }
- final RootOid elementOid = (RootOid) element.getOid();
- idMapping.appendObjectId(connector, update, elementOid);
- }
- update.append(")");
- if (count > 0) {
- connector.insert(update.toString());
- }
- }
-
- protected void checkIfDirty(final ObjectAdapter collection) {
- // Test: is dirty?
- final ObjectSpecification collectionSpecification = collection.getSpecification();
- if (collectionSpecification.isDirty(collection)) {
- LOG.debug(collection.getOid() + " is dirty");
- } else {
- LOG.debug(collection.getOid() + " is clean");
- }
-
- final CollectionFacet collectionFacetD = collection.getSpecification().getFacet(CollectionFacet.class);
- for (final ObjectAdapter element : collectionFacetD.iterable(collection)) {
- if (collectionSpecification.isDirty(element)) {
- LOG.debug(element.getOid() + " is dirty");
- } else {
- LOG.debug(element.getOid() + " is clean");
- }
- }
- }
-
- @Override
- public void debugData(final DebugBuilder debug) {
- debug.appendln(field.getName(), "collection");
- debug.indent();
- debug.appendln("Foreign key name", foreignKeyName);
- debug.appendln("Foreign key mapping", foreignKeyMapping);
- debug.appendln("ID mapping", idMapping);
- debug.appendln("Version mapping", versionMapping);
- debug.appendln("Original mapping", originalMapping);
- debug.unindent();
- }
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/951a0fe4/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/ForeignKeyInChildCollectionMapper.java
----------------------------------------------------------------------
diff --git a/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/ForeignKeyInChildCollectionMapper.java b/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/ForeignKeyInChildCollectionMapper.java
deleted file mode 100644
index e333d7b..0000000
--- a/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/ForeignKeyInChildCollectionMapper.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-/**
- *
- */
-package org.apache.isis.runtimes.dflt.objectstores.sql.auto;
-
-import java.util.List;
-
-import org.apache.log4j.Logger;
-
-import org.apache.isis.core.metamodel.facets.FacetedMethod;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
-import org.apache.isis.core.metamodel.specloader.specimpl.OneToManyAssociationImpl;
-import org.apache.isis.runtimes.dflt.objectstores.sql.FieldMappingLookup;
-import org.apache.isis.runtimes.dflt.objectstores.sql.ObjectMappingLookup;
-
-/**
- * Used to map 1-to-many collections by creating, in the child table, 1 column
- * per parent collection. The column is named by combining the final part of the
- * parent class name and the collection variable name.
- *
- * @author Kevin
- */
-public class ForeignKeyInChildCollectionMapper extends ForeignKeyCollectionMapper {
- private static final Logger LOG = Logger.getLogger(ForeignKeyCollectionMapper.class);
-
- protected final ObjectAssociation priorField; // prevents recursion
- protected final List<ObjectAssociation> priorFields;
-
- public ForeignKeyInChildCollectionMapper(final ObjectAssociation objectAssociation, final String parameterBase, final FieldMappingLookup lookup, final ObjectMappingLookup objectMapperLookup, final AbstractAutoMapper abstractAutoMapper, final ObjectAssociation field) {
- super(objectAssociation, parameterBase, lookup, objectMapperLookup);
-
- priorFields = abstractAutoMapper.fields;
- priorField = field;
-
- setUpFieldMappers();
- }
-
- protected ForeignKeyInChildCollectionMapper(final FieldMappingLookup lookup, final AbstractAutoMapper abstractAutoMapper, final ObjectAssociation field) {
- super(lookup, abstractAutoMapper, field);
- priorFields = null;
- priorField = null;
- }
-
- @Override
- protected void getExtraFields(final List<ObjectAssociation> existingFields) {
- if (priorFields != null) {
- for (final ObjectAssociation priorField1 : priorFields) {
- if (existingFields.contains(priorField1) == false) {
- existingFields.add(priorField1);
- } else {
- LOG.debug("Skipping prior field: " + priorField1.getName());
- }
- }
- }
- }
-
- @Override
- protected String determineColumnName(final ObjectAssociation objectAssociation) {
- if (objectAssociation instanceof OneToManyAssociationImpl) {
- final OneToManyAssociationImpl fkAssoc = (OneToManyAssociationImpl) objectAssociation;
- final FacetedMethod peer = fkAssoc.getFacetedMethod();
- final String fullClassName = peer.getIdentifier().getClassName();
- final int lastPos = fullClassName.lastIndexOf('.');
- return fullClassName.substring(lastPos + 1) + "_" + fkAssoc.getId();
- } else {
- return objectAssociation.getSpecification().getShortIdentifier();
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/951a0fe4/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/PolymorphicForeignKeyInChildCollectionBaseMapper.java
----------------------------------------------------------------------
diff --git a/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/PolymorphicForeignKeyInChildCollectionBaseMapper.java b/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/PolymorphicForeignKeyInChildCollectionBaseMapper.java
deleted file mode 100755
index b6223d0..0000000
--- a/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/PolymorphicForeignKeyInChildCollectionBaseMapper.java
+++ /dev/null
@@ -1,233 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-/**
- *
- */
-package org.apache.isis.runtimes.dflt.objectstores.sql.auto;
-
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.log4j.Logger;
-
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.oid.Oid;
-import org.apache.isis.core.metamodel.adapter.oid.RootOid;
-import org.apache.isis.core.metamodel.adapter.oid.TypedOid;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
-import org.apache.isis.runtimes.dflt.objectstores.sql.DatabaseConnector;
-import org.apache.isis.runtimes.dflt.objectstores.sql.Defaults;
-import org.apache.isis.runtimes.dflt.objectstores.sql.FieldMappingLookup;
-import org.apache.isis.runtimes.dflt.objectstores.sql.IdMappingAbstract;
-import org.apache.isis.runtimes.dflt.objectstores.sql.ObjectMapping;
-import org.apache.isis.runtimes.dflt.objectstores.sql.ObjectMappingLookup;
-import org.apache.isis.runtimes.dflt.objectstores.sql.Results;
-import org.apache.isis.runtimes.dflt.objectstores.sql.Sql;
-import org.apache.isis.runtimes.dflt.objectstores.sql.VersionMapping;
-import org.apache.isis.runtimes.dflt.objectstores.sql.jdbc.JdbcPolymorphicObjectReferenceMapping;
-import org.apache.isis.runtimes.dflt.objectstores.sql.mapping.FieldMapping;
-import org.apache.isis.runtimes.dflt.runtime.system.context.IsisContext;
-import org.apache.isis.runtimes.dflt.runtime.system.persistence.OidGenerator;
-
-/**
- * Used to map 1-to-many collections by creating, in the collection child table
- * (which may be an interface or abstract class), 2 columns per parent
- * collection. The first column is the class type, the second is the entity ID.
- * The columns are named by combining the final part of the parent class name
- * and the collection variable name.
- *
- * You have a choice between this class and
- * {@link PolymorphicForeignKeyInChildCollectionMapper}
- *
- * @author Kevin
- */
-public class PolymorphicForeignKeyInChildCollectionBaseMapper extends ForeignKeyInChildCollectionMapper {
-
- private static final Logger LOG = Logger.getLogger(PolymorphicForeignKeyInChildCollectionBaseMapper.class);
-
- private final String classColumnName;
- private final String itemIdColumnName;
- private final IdMappingAbstract polyIdMapper;
-
- private final OidGenerator oidGenerator;
-
- public PolymorphicForeignKeyInChildCollectionBaseMapper(final ObjectAssociation objectAssociation, final String parameterBase, final FieldMappingLookup lookup, final ObjectMappingLookup objectMapperLookup, final AbstractAutoMapper abstractAutoMapper, final ObjectAssociation field) {
-
- super(objectAssociation, parameterBase, lookup, objectMapperLookup, abstractAutoMapper, field);
-
- classColumnName = Sql.identifier(Sql.sqlName(getForeignKeyName() + "_cls"));
- itemIdColumnName = Sql.identifier("item_id");
-
- polyIdMapper = new JdbcPolymorphicObjectReferenceMapping(itemIdColumnName);
- oidGenerator = IsisContext.getPersistenceSession().getOidGenerator();
- }
-
- @Override
- public boolean needsTables(final DatabaseConnector connection) {
- return super.needsTables(connection) || !connection.hasColumn(table, classColumnName);
- }
-
- @Override
- public void createTables(final DatabaseConnector connection) {
- if (super.needsTables(connection)) {
- super.createTables(connection);
- }
-
- if (!connection.hasColumn(table, classColumnName)) {
- addColumn(connection, classColumnName, Defaults.TYPE_LONG_STRING());
- addColumn(connection, itemIdColumnName, Defaults.TYPE_PK());
- }
- }
-
- protected void addColumn(final DatabaseConnector connection, final String columnName, final String columnType) {
- final StringBuffer sql = new StringBuffer();
- sql.append("alter table ");
- sql.append(table);
- sql.append(" add ");
- sql.append(columnName);
- sql.append(" ");
- sql.append(columnType);
- connection.update(sql.toString());
- }
-
- @Override
- protected void appendCollectionUpdateColumnsToNull(final StringBuffer sql) {
- super.appendCollectionUpdateColumnsToNull(sql);
- sql.append(", " + classColumnName + "=NULL ");
- }
-
- @Override
- protected void appendCollectionUpdateValues(final DatabaseConnector connector, final ObjectAdapter parent, final StringBuffer sql) {
- super.appendCollectionUpdateValues(connector, parent, sql);
- }
-
- @Override
- protected void appendColumnDefinitions(final StringBuffer sql) {
- super.appendColumnDefinitions(sql);
- }
-
- @Override
- protected void clearCollectionParent(final DatabaseConnector connector, final ObjectAdapter parent) {
- // Delete collection parent
- final StringBuffer sql = new StringBuffer();
- sql.append("DELETE FROM ");
- sql.append(table);
- sql.append(" WHERE ");
- appendCollectionWhereValues(connector, parent, sql);
- connector.update(sql.toString());
- }
-
- @Override
- protected void resetCollectionParent(final DatabaseConnector connector, final ObjectAdapter parent, final Iterator<ObjectAdapter> elements) {
- LOG.debug("Saving polymorphic list");
-
- ObjectSpecification elementSpecification;
- while (elements.hasNext()) {
- final ObjectAdapter thisAdapter = elements.next();
- elementSpecification = thisAdapter.getSpecification();
-
- // Reinstall collection parent
- final StringBuffer update = new StringBuffer();
- update.append("INSERT INTO ");
- update.append(table);
- update.append(" (");
- // list of column names
- super.getIdMapping().appendColumnNames(update);
- update.append("," + getForeignKeyName());
- update.append(", " + itemIdColumnName);
- update.append("," + classColumnName);
- update.append(") VALUES (");
-
- // Row ID column
- final Object pojo = thisAdapter.getObject();
- final RootOid transientRootOid = oidGenerator.createTransientOid(pojo);
-
- final RootOid persistentRootOid = oidGenerator.createPersistent(pojo, transientRootOid);
-
- polyIdMapper.appendObjectId(connector, update, persistentRootOid);
-
- // polyIdMapper.appendObjectId(connector, update,
- // thisAdapter.getOid());
- update.append(",");
-
- // Foreign key ID column
- getForeignKeyMapping().appendInsertValues(connector, update, parent);
- update.append(",");
-
- // item Id column
- final RootOid oid = (RootOid) thisAdapter.getOid();
- getIdMapping().appendObjectId(connector, update, oid);
-
- // Class name column
- update.append(",?)");
- connector.addToQueryValues(elementSpecification.getFullIdentifier());
-
- connector.insert(update.toString());
- }
- }
-
- @Override
- public IdMappingAbstract getIdMapping() {
- return polyIdMapper;
- }
-
- @Override
- protected void loadCollectionIntoList(final DatabaseConnector connector, final ObjectAdapter parent, final String table, final ObjectSpecification specification, final IdMappingAbstract idMappingAbstract, final Map<ObjectAssociation, FieldMapping> fieldMappingByField, final VersionMapping versionMapping,
- final List<ObjectAdapter> list) {
- LOG.debug("Loading polymorphic list");
-
- final StringBuffer sql = new StringBuffer();
- sql.append("select ");
- super.getIdMapping().appendColumnNames(sql);
-
- sql.append("," + getForeignKeyName());
- sql.append("," + classColumnName);
- sql.append("," + itemIdColumnName);
-
- sql.append(" from ");
- sql.append(table);
- sql.append(" where ");
- appendCollectionWhereValues(connector, parent, sql);
-
- final Results rs = connector.select(sql.toString());
-
- final SpecificationLoaderSpi reflector = IsisContext.getSpecificationLoader();
- final JdbcPolymorphicObjectReferenceMapping idMapping = (JdbcPolymorphicObjectReferenceMapping) idMappingAbstract;
-
- while (rs.next()) {
- final ObjectSpecification itemSpecification = reflector.loadSpecification(rs.getString(classColumnName));
- idMapping.setObjectSpecification(itemSpecification);
-
- // Load new recordSet for the actual class
- final ObjectMapping itemMapper = objectMappingLookup.getMapping(itemSpecification, connector);
- final TypedOid oid = idMapping.recreateOid(rs, itemSpecification);
- final ObjectAdapter loadedObject = itemMapper.getObject(connector, oid);
-
- LOG.debug(" element " + loadedObject.getOid());
-
- list.add(loadedObject);
- }
- rs.close();
-
- }
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/951a0fe4/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/PolymorphicForeignKeyInChildCollectionMapper.java
----------------------------------------------------------------------
diff --git a/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/PolymorphicForeignKeyInChildCollectionMapper.java b/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/PolymorphicForeignKeyInChildCollectionMapper.java
deleted file mode 100755
index eac2f22..0000000
--- a/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/PolymorphicForeignKeyInChildCollectionMapper.java
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-/**
- *
- */
-package org.apache.isis.runtimes.dflt.objectstores.sql.auto;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.log4j.Logger;
-
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
-import org.apache.isis.runtimes.dflt.objectstores.sql.DatabaseConnector;
-import org.apache.isis.runtimes.dflt.objectstores.sql.FieldMappingLookup;
-import org.apache.isis.runtimes.dflt.objectstores.sql.IdMappingAbstract;
-import org.apache.isis.runtimes.dflt.objectstores.sql.ObjectMapping;
-import org.apache.isis.runtimes.dflt.objectstores.sql.ObjectMappingLookup;
-import org.apache.isis.runtimes.dflt.objectstores.sql.VersionMapping;
-import org.apache.isis.runtimes.dflt.objectstores.sql.mapping.FieldMapping;
-
-import com.google.common.collect.Lists;
-
-/**
- * Used to map 1-to-many collections by creating, in the child table, 1 column
- * per parent collection. The column is named by combining the final part of the
- * parent class name and the collection variable name.
- *
- * You have a choice between this class and
- * {@link PolymorphicForeignKeyInChildCollectionBaseMapper}
- *
- * @author Kevin
- */
-public class PolymorphicForeignKeyInChildCollectionMapper extends ForeignKeyInChildCollectionMapper {
-
- private static final Logger LOG = Logger.getLogger(PolymorphicForeignKeyInChildCollectionMapper.class);
-
- private final ObjectAssociation baseField;
- private final List<String> tables;
- private final List<ObjectSpecification> tableSpecifications;
- private final List<ObjectMapping> subClassMappers;
-
- // For iterating through the subclasses
- private ObjectSpecification currentTableSpecification;
- private Iterator<ObjectAdapter> currentIterator;
- private List<ObjectAdapter> currentCollection;
- private int currentIndexStart;
- private int currentIndex;
-
- // Store for passing on to other mappers
- final String parameterBase;
- final FieldMappingLookup lookup;
- final ObjectMappingLookup objectMapperLookup;
- final String fieldClassName;
-
- public PolymorphicForeignKeyInChildCollectionMapper(final ObjectAssociation objectAssociation, final String parameterBase, final FieldMappingLookup lookup, final ObjectMappingLookup objectMapperLookup, final AbstractAutoMapper abstractAutoMapper, final ObjectAssociation field) {
-
- super(lookup, abstractAutoMapper, field);
-
- fieldClassName = className;
-
- baseField = objectAssociation;
- tables = new ArrayList<String>();
- tableSpecifications = new ArrayList<ObjectSpecification>();
- subClassMappers = new ArrayList<ObjectMapping>();
-
- // Capture for use in creating subclass mappers.
- this.parameterBase = parameterBase;
- this.lookup = lookup;
- this.objectMapperLookup = objectMapperLookup;
-
- addSubSpecificationsToTable(specification);
- }
-
- protected void addSubSpecificationsToTable(final ObjectSpecification objectSpecification) {
- if (objectSpecification.isAbstract() == false) {
- final String tableNameFromSpecification = getTableNameFromSpecification(objectSpecification);
- tables.add(tableNameFromSpecification);
- tableSpecifications.add(objectSpecification);
-
- final ObjectMapping autoMapper = objectMapperLookup.getMapping(objectSpecification, null);
- subClassMappers.add(autoMapper);
- }
- if (objectSpecification.hasSubclasses()) {
- for (final ObjectSpecification subSpecification : objectSpecification.subclasses()) {
- addSubSpecificationsToTable(subSpecification);
- }
- }
- }
-
- @Override
- public boolean needsTables(final DatabaseConnector connection) {
- for (final String subTableName : tables) {
- table = subTableName;
- if (super.needsTables(connection)) {
- // Stop on first table that is needed.
- return true;
- }
- }
- return false;
- }
-
- @Override
- public void createTables(final DatabaseConnector connection) {
- for (final String subTableName : tables) {
- table = subTableName;
- if (super.needsTables(connection)) {
- super.createTables(connection);
- }
- }
- }
-
- @Override
- protected Iterator<ObjectAdapter> getElementsForCollectionAsIterator(final ObjectAdapter collection) {
- return currentIterator;
- }
-
- @Override
- public void saveInternalCollection(final DatabaseConnector connector, final ObjectAdapter parent) {
- final ObjectAdapter collection = baseField.get(parent);
- LOG.debug("Saving polymorphic internal collection " + collection);
-
- currentCollection = new ArrayList<ObjectAdapter>();
- currentIterator = super.getElementsForCollectionAsIterator(collection);
- for (; currentIterator.hasNext();) {
- final ObjectAdapter item = currentIterator.next();
- currentCollection.add(item);
- }
-
- for (int i = 0; i < tables.size(); i++) {
- currentTableSpecification = tableSpecifications.get(i);
- currentIndex = 0;
- currentIndexStart = 0;
-
- currentIterator = new Iterator<ObjectAdapter>() {
- @Override
- public boolean hasNext() {
- for (int i = currentIndexStart; i < currentCollection.size(); i++) {
- final ObjectAdapter thisObjectAdapter = currentCollection.get(i);
- if (thisObjectAdapter.getSpecification().isOfType(currentTableSpecification)) {
- currentIndexStart = currentIndex = i;
- return true;
- }
- }
- return false;
- }
-
- @Override
- public ObjectAdapter next() {
- currentIndexStart = currentIndex + 1;
- return currentCollection.get(currentIndex);
- }
-
- @Override
- public void remove() {
- }
- };
-
- // Provide replacement table and column definitions here
- table = tables.get(i);
- super.saveInternalCollection(connector, parent);
- }
- }
-
- @Override
- protected void loadCollectionIntoList(final DatabaseConnector connector, final ObjectAdapter parent, final String table, final ObjectSpecification specification, final IdMappingAbstract idMappingAbstract, final Map<ObjectAssociation, FieldMapping> fieldMappingByField, final VersionMapping versionMapping,
- final List<ObjectAdapter> superList) {
- final List<ObjectAdapter> list = Lists.newArrayList();
-
- for (int i = 0; i < tables.size(); i++) {
- currentTableSpecification = tableSpecifications.get(i);
- final AutoMapper mapper = (AutoMapper) subClassMappers.get(i);
- final String mapperTable = tables.get(i);
-
- super.loadCollectionIntoList(connector, parent, mapperTable, currentTableSpecification, mapper.getIdMapping(), mapper.fieldMappingByField, mapper.getVersionMapping(), list);
-
- superList.addAll(list);
- list.clear();
- }
-
- }
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/951a0fe4/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/ReversedAutoAssociationMapper.java
----------------------------------------------------------------------
diff --git a/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/ReversedAutoAssociationMapper.java b/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/ReversedAutoAssociationMapper.java
deleted file mode 100644
index 913a5e4..0000000
--- a/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/ReversedAutoAssociationMapper.java
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.isis.runtimes.dflt.objectstores.sql.auto;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-
-import org.apache.log4j.Logger;
-
-import org.apache.isis.core.commons.debug.DebugBuilder;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.oid.Oid;
-import org.apache.isis.core.metamodel.adapter.version.SerialNumberVersion;
-import org.apache.isis.core.metamodel.adapter.version.Version;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
-import org.apache.isis.runtimes.dflt.objectstores.sql.CollectionMapper;
-import org.apache.isis.runtimes.dflt.objectstores.sql.DatabaseConnector;
-import org.apache.isis.runtimes.dflt.objectstores.sql.FieldMappingLookup;
-import org.apache.isis.runtimes.dflt.objectstores.sql.ObjectMappingLookup;
-import org.apache.isis.runtimes.dflt.objectstores.sql.Results;
-import org.apache.isis.runtimes.dflt.objectstores.sql.VersionMapping;
-import org.apache.isis.runtimes.dflt.objectstores.sql.mapping.FieldMapping;
-import org.apache.isis.runtimes.dflt.objectstores.sql.mapping.ObjectReferenceMapping;
-import org.apache.isis.runtimes.dflt.runtime.persistence.PersistorUtil;
-
-/**
- * used where there is a one to many association, and the elements are only
- * known to parent
- */
-public class ReversedAutoAssociationMapper extends AbstractAutoMapper implements CollectionMapper {
- private static final Logger LOG = Logger.getLogger(ReversedAutoAssociationMapper.class);
- private final ObjectAssociation field;
- private final ObjectReferenceMapping idMapping;
- private final VersionMapping versionMapping;
-
- public ReversedAutoAssociationMapper(final String elemenType, final ObjectAssociation field, final String parameterBase, final FieldMappingLookup lookup, final ObjectMappingLookup objectLookup) {
- super(elemenType, parameterBase, lookup, objectLookup);
-
- this.field = field;
-
- idMapping = lookup.createMapping(field.getSpecification());
- versionMapping = lookup.createVersionMapping();
-
- setUpFieldMappers();
- }
-
- @Override
- public void createTables(final DatabaseConnector connection) {
- if (!connection.hasTable(table)) {
- final StringBuffer sql = new StringBuffer();
- sql.append("create table ");
- sql.append(table);
- sql.append(" (");
- idMapping.appendColumnDefinitions(sql);
- sql.append(", ");
- for (final FieldMapping mapping : fieldMappingByField.values()) {
- mapping.appendColumnDefinitions(sql);
- sql.append(",");
- }
- sql.append(versionMapping.appendColumnDefinitions());
- sql.append(")");
- connection.update(sql.toString());
- }
- for (int i = 0; collectionMappers != null && i < collectionMappers.length; i++) {
- if (collectionMappers[i].needsTables(connection)) {
- collectionMappers[i].createTables(connection);
- }
- }
- }
-
- @Override
- public void loadInternalCollection(final DatabaseConnector connector, final ObjectAdapter parentAdapter) {
- final ObjectAdapter collectionAdapter = field.get(parentAdapter);
- if (!collectionAdapter.canTransitionToResolving()) {
- return;
- }
- if(LOG.isDebugEnabled()) {
- LOG.debug("loading internal collection " + field);
- }
-
- try {
- // added, since was missing (presumably an error given similarity with other 'Mapper' impls?)
- PersistorUtil.startResolving(collectionAdapter);
-
- final StringBuffer sql = new StringBuffer();
- sql.append("select ");
- idMapping.appendColumnNames(sql);
- sql.append(", ");
- sql.append(columnList(fieldMappingByField));
- sql.append(" from ");
- sql.append(table);
- sql.append(" where ");
- idMapping.appendUpdateValues(connector, sql, parentAdapter);
-
- final Results rs = connector.select(sql.toString());
- final List<ObjectAdapter> list = new ArrayList<ObjectAdapter>();
- while (rs.next()) {
- final Oid oid = idMapping.recreateOid(rs, specification);
- final ObjectAdapter element = getAdapter(specification, oid);
- loadFields(element, rs);
- if(LOG.isDebugEnabled()) {
- LOG.debug(" element " + element.getOid());
- }
- list.add(element);
- }
- final CollectionFacet collectionFacet = collectionAdapter.getSpecification().getFacet(CollectionFacet.class);
- collectionFacet.init(collectionAdapter, list.toArray(new ObjectAdapter[list.size()]));
- rs.close();
- } finally {
- PersistorUtil.toEndState(collectionAdapter);
- }
-
- }
-
- protected void loadFields(final ObjectAdapter object, final Results rs) {
- try {
- PersistorUtil.startResolving(object);
- for (final FieldMapping mapping : fieldMappingByField.values()) {
- mapping.initializeField(object, rs);
- }
- /*
- * for (int i = 0; i < oneToManyProperties.length; i++) { /* Need to set
- * up collection to be a ghost before we access as below
- */
- // CollectionAdapter collection = (CollectionAdapter)
- /*
- * oneToManyProperties[i].get(object); }
- */
-
- object.setVersion(versionMapping.getLock(rs));
-
- } finally {
- PersistorUtil.toEndState(object);
- }
- }
-
- @Override
- public void saveInternalCollection(final DatabaseConnector connector, final ObjectAdapter parent) {
- final ObjectAdapter collection = field.get(parent);
- LOG.debug("Saving internal collection " + collection);
-
- deleteAllElments(connector, parent);
- reinsertElements(connector, parent, collection);
- }
-
- private void reinsertElements(final DatabaseConnector connector, final ObjectAdapter parent, final ObjectAdapter collection) {
- final StringBuffer sql = new StringBuffer();
- sql.append("insert into " + table + " (");
- idMapping.appendColumnNames(sql);
- sql.append(", ");
- final String columnList = columnList(fieldMappingByField);
- if (columnList.length() > 0) {
- sql.append(columnList);
- sql.append(", ");
- }
- sql.append(versionMapping.insertColumns());
- sql.append(") values (");
- idMapping.appendInsertValues(connector, sql, parent);
- sql.append(", ");
-
- final CollectionFacet collectionFacet = field.getFacet(CollectionFacet.class);
- for (final ObjectAdapter element : collectionFacet.iterable(collection)) {
- final StringBuffer insert = new StringBuffer(sql);
- insert.append(values(connector, element));
- final Version version = SerialNumberVersion.create(0, "", new Date());
- insert.append(versionMapping.insertValues(connector, version));
- insert.append(") ");
-
- connector.insert(insert.toString());
- element.setVersion(version);
- }
- }
-
- private void deleteAllElments(final DatabaseConnector connector, final ObjectAdapter parent) {
- final StringBuffer sql = new StringBuffer();
- sql.append("delete from ");
- sql.append(table);
- sql.append(" where ");
- idMapping.appendUpdateValues(connector, sql, parent);
- connector.update(sql.toString());
- }
-
- @Override
- public void debugData(final DebugBuilder debug) {
- debug.appendln(field.getName(), "collection");
- debug.indent();
- debug.appendln("ID mapping", idMapping);
- debug.appendln("Version mapping", versionMapping);
- debug.unindent();
- }
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/951a0fe4/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/jdbc/AbstractJdbcFieldMapping.java
----------------------------------------------------------------------
diff --git a/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/jdbc/AbstractJdbcFieldMapping.java b/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/jdbc/AbstractJdbcFieldMapping.java
deleted file mode 100644
index b3830e5..0000000
--- a/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/jdbc/AbstractJdbcFieldMapping.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.isis.runtimes.dflt.objectstores.sql.jdbc;
-
-import org.apache.isis.core.commons.debug.DebugBuilder;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
-import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
-import org.apache.isis.runtimes.dflt.objectstores.sql.DatabaseConnector;
-import org.apache.isis.runtimes.dflt.objectstores.sql.Results;
-import org.apache.isis.runtimes.dflt.objectstores.sql.Sql;
-import org.apache.isis.runtimes.dflt.objectstores.sql.mapping.FieldMapping;
-
-public abstract class AbstractJdbcFieldMapping implements FieldMapping {
-
- private final String columnName;
- protected final ObjectAssociation field;
-
- public AbstractJdbcFieldMapping(final ObjectAssociation field) {
- this.field = field;
- columnName = Sql.sqlFieldName(field.getId());
- }
-
- @Override
- public ObjectAssociation getField() {
- return field;
- }
-
- @Override
- public void appendColumnDefinitions(final StringBuffer sql) {
- sql.append(columnName);
- sql.append(" ");
- sql.append(columnType());
- }
-
- @Override
- public void appendColumnNames(final StringBuffer sql) {
- sql.append(columnName);
- }
-
- @Override
- public void appendInsertValues(final DatabaseConnector connector, final StringBuffer sql, final ObjectAdapter object) {
- final ObjectAdapter fieldValue = field.get(object);
- if (fieldValue == null) {
- sql.append("NULL");
- } else {
- sql.append("?");
- connector.addToQueryValues(preparedStatementObject(fieldValue));
- }
- }
-
- @Override
- public void appendUpdateValues(final DatabaseConnector connector, final StringBuffer sql, final ObjectAdapter object) {
- appendEqualsClause(connector, sql, object, "=");
- }
-
- @Override
- public void appendWhereClause(final DatabaseConnector connector, final StringBuffer sql, final ObjectAdapter object) {
- appendEqualsClause(connector, sql, object, "=");
- }
-
- protected void appendEqualsClause(final DatabaseConnector connector, final StringBuffer sql, final ObjectAdapter object, final String condition) {
- sql.append(Sql.sqlFieldName(field.getId()));
- sql.append(condition);
- final ObjectAdapter fieldValue = field.get(object);
- sql.append("?");
- connector.addToQueryValues(preparedStatementObject(fieldValue));
- }
-
- @Override
- public void initializeField(final ObjectAdapter object, final Results rs) {
- final String columnName = Sql.sqlFieldName(field.getId());
- final ObjectAdapter restoredValue = setFromDBColumn(rs, columnName, field);
- ((OneToOneAssociation) field).initAssociation(object, restoredValue);
- }
-
- @Override
- public void debugData(final DebugBuilder debug) {
- debug.appendln(field.getId(), columnName + "/" + columnType());
- }
-
- @Override
- public void appendWhereObject(final DatabaseConnector connector, final ObjectAdapter objectAdapter) {
- final Object object = preparedStatementObject(objectAdapter);
- connector.addToQueryValues(object);
- }
-
- protected abstract String columnType();
-
- protected abstract Object preparedStatementObject(ObjectAdapter value);
-
- protected abstract ObjectAdapter setFromDBColumn(Results results, String columnName, ObjectAssociation field);
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/951a0fe4/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/jdbc/AbstractJdbcMultiFieldMapping.java
----------------------------------------------------------------------
diff --git a/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/jdbc/AbstractJdbcMultiFieldMapping.java b/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/jdbc/AbstractJdbcMultiFieldMapping.java
deleted file mode 100755
index 45f6753..0000000
--- a/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/jdbc/AbstractJdbcMultiFieldMapping.java
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.isis.runtimes.dflt.objectstores.sql.jdbc;
-
-import org.apache.isis.applib.ApplicationException;
-import org.apache.isis.core.commons.debug.DebugBuilder;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
-import org.apache.isis.runtimes.dflt.objectstores.sql.DatabaseConnector;
-import org.apache.isis.runtimes.dflt.objectstores.sql.Results;
-import org.apache.isis.runtimes.dflt.objectstores.sql.Sql;
-import org.apache.isis.runtimes.dflt.runtime.system.context.IsisContext;
-
-public abstract class AbstractJdbcMultiFieldMapping extends AbstractJdbcFieldMapping {
- private final int columnCount;
- private final String[] types;
- private final String[] columnNames;
- private final AdapterManager adapterManager;
-
- /**
- *
- * @param field
- * the field object association.
- * @param columnCount
- * the number of columns required to store this field. See the
- * abstract methods ,
- * {@link AbstractJdbcFieldMapping#preparedStatementObject(int i, ObjectAdapter fieldValue)}
- * ,
- * {@link AbstractJdbcFieldMapping#getObjectFromResults(Results results)}
- * ,
- * @param types
- * the list of SQL data types, 1 per columnCount, to represent
- * the value type.
- */
- public AbstractJdbcMultiFieldMapping(final ObjectAssociation field, final int columnCount, final String... types) {
- super(field);
- this.columnCount = columnCount;
-
- this.types = new String[columnCount];
- for (int i = 0; i < types.length; i++) {
- this.types[i] = types[i];
- }
-
- final String fieldName = field.getId();
- columnNames = new String[columnCount];
- columnNames[0] = Sql.sqlFieldName(fieldName + "1");
- columnNames[1] = Sql.sqlFieldName(fieldName + "2");
-
- adapterManager = IsisContext.getPersistenceSession().getAdapterManager();
-
- }
-
- @Override
- public void appendColumnDefinitions(final StringBuffer sql) {
- for (int i = 0; i < columnCount; i++) {
- sql.append(columnName(i) + " " + columnType(i));
- if (i < columnCount - 1) {
- sql.append(", ");
- }
- }
- }
-
- @Override
- public void appendColumnNames(final StringBuffer sql) {
- for (int i = 0; i < columnCount; i++) {
- sql.append(columnName(i));
- if (i < columnCount - 1) {
- sql.append(", ");
- }
- }
- }
-
- @Override
- public void appendInsertValues(final DatabaseConnector connector, final StringBuffer sql, final ObjectAdapter object) {
- final ObjectAdapter fieldValue = field.get(object);
- final Object o = (fieldValue == null) ? null : fieldValue.getObject();
-
- for (int i = 0; i < columnCount; i++) {
- if (fieldValue == null) {
- sql.append("NULL");
- } else {
- sql.append("?");
- if (i < columnCount - 1) {
- sql.append(", ");
- }
-
- connector.addToQueryValues(preparedStatementObject(i, o));
- }
- }
- }
-
- @Override
- public void appendUpdateValues(final DatabaseConnector connector, final StringBuffer sql, final ObjectAdapter object) {
- final ObjectAdapter fieldValue = field.get(object);
- final Object o = (fieldValue == null) ? null : fieldValue.getObject();
- for (int i = 0; i < columnCount; i++) {
- appendEqualsClause(connector, i, sql, o, "=");
- }
- }
-
- @Override
- public void appendWhereClause(final DatabaseConnector connector, final StringBuffer sql, final ObjectAdapter object) {
- appendUpdateValues(connector, sql, object);
- }
-
- private void appendEqualsClause(final DatabaseConnector connector, final int index, final StringBuffer sql, final Object object, final String condition) {
-
- final Object oPart = preparedStatementObject(index, object);
-
- sql.append(columnName(index) + condition + "?");
- if (index < columnCount - 1) {
- sql.append(", ");
- }
-
- connector.addToQueryValues(oPart);
- }
-
- @Override
- public ObjectAdapter setFromDBColumn(final Results results, final String columnName, final ObjectAssociation field) {
- ObjectAdapter restoredValue;
- final Object objectValue = getObjectFromResults(results);
- restoredValue = adapterManager.adapterFor(objectValue); // NOTE: If this
- // fails, then
- // fetch back
- // the
- // declaration
- // from the
- // constructor
- // to here.
- return restoredValue;
- }
-
- @Override
- public void debugData(final DebugBuilder debug) {
- for (int i = 0; i < columnCount; i++) {
- debug.appendln(field.getId(), columnName(i) + "/" + columnType(i));
- }
- }
-
- @Override
- protected String columnType() {
- throw new ApplicationException("Should never be called");
- }
-
- @Override
- protected Object preparedStatementObject(final ObjectAdapter value) {
- throw new ApplicationException("Should never be called");
- }
-
- protected String columnType(final int index) {
- return types[index];
- }
-
- protected String columnName(final int index) {
- return columnNames[index];
- }
-
- /**
- * Return an object suitable for passing to the SQL prepared statement
- * constructor, to handle field "index". Will be called "columnCount" times.
- *
- * @param index
- * 0 based index
- * @param fieldObject
- * the value type currently being
- * @return a JDBC-compatible object.
- */
- protected abstract Object preparedStatementObject(int index, Object o);
-
- /**
- * Return an applib object represented by the results set.
- *
- * @param results
- * the current record row from the underlying table
- * @return a fully initialised value object.
- */
- protected abstract Object getObjectFromResults(Results results);
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/951a0fe4/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/jdbc/JdbcAbstractReferenceFieldMapping.java
----------------------------------------------------------------------
diff --git a/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/jdbc/JdbcAbstractReferenceFieldMapping.java b/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/jdbc/JdbcAbstractReferenceFieldMapping.java
deleted file mode 100755
index c74d6da..0000000
--- a/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/jdbc/JdbcAbstractReferenceFieldMapping.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.isis.runtimes.dflt.objectstores.sql.jdbc;
-
-import org.apache.isis.core.commons.debug.DebugBuilder;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.oid.Oid;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
-import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
-import org.apache.isis.runtimes.dflt.objectstores.sql.AbstractFieldMappingFactory;
-import org.apache.isis.runtimes.dflt.objectstores.sql.DatabaseConnector;
-import org.apache.isis.runtimes.dflt.objectstores.sql.Defaults;
-import org.apache.isis.runtimes.dflt.objectstores.sql.Results;
-import org.apache.isis.runtimes.dflt.objectstores.sql.Sql;
-import org.apache.isis.runtimes.dflt.objectstores.sql.mapping.FieldMapping;
-import org.apache.isis.runtimes.dflt.runtime.system.context.IsisContext;
-
-/**
- * Provides support for persisting abstract classes and interfaces.
- *
- * Provides two columns: the first is the standard property field. The second is
- * initialised only when the field is "saved", and contains the actual classname
- * of the persisted concrete class.
- *
- *
- * @version $Rev$ $Date$
- */
-public class JdbcAbstractReferenceFieldMapping extends JdbcObjectReferenceFieldMapping {
- private final String classnameColumn;
- private final String dataType;
-
- public static class Factory extends AbstractFieldMappingFactory {
-
- public Factory(final String type) {
- super();
- }
-
- @Override
- public FieldMapping createFieldMapping(final ObjectSpecification object, final ObjectAssociation field) {
- final String dataType = getTypeOverride(object, field, Defaults.TYPE_LONG_STRING());
- return new JdbcAbstractReferenceFieldMapping(field, dataType);
- }
- }
-
- public JdbcAbstractReferenceFieldMapping(final ObjectAssociation field, final String dataType) {
- super(field);
- this.dataType = dataType;
- classnameColumn = Sql.identifier(getColumn() + "_cls");
- }
-
- @Override
- public void appendColumnDefinitions(final StringBuffer sql) {
- super.appendColumnDefinitions(sql);
-
- sql.append(", ");
- sql.append(classnameColumn);
- sql.append(" ");
- sql.append(dataType);
- }
-
- @Override
- public void appendCreateColumnDefinitions(final StringBuffer sql) {
- super.appendCreateColumnDefinitions(sql);
- sql.append(classnameColumn);
- sql.append(" ");
- sql.append(dataType);
- }
-
- @Override
- public void appendColumnNames(final StringBuffer sql) {
- super.appendColumnNames(sql);
- sql.append(", ");
- sql.append(classnameColumn);
- }
-
- @Override
- public void appendWhereClause(final DatabaseConnector connector, final StringBuffer sql, final ObjectAdapter object) {
- super.appendWhereClause(connector, sql, object);
- }
-
- @Override
- public void appendInsertValues(final DatabaseConnector connector, final StringBuffer sql, final ObjectAdapter object) {
- super.appendInsertValues(connector, sql, object);
- sql.append(",?");
-
- final ObjectAdapter objectAdapter = field.get(object);
- if (objectAdapter != null) {
- connector.addToQueryValues(objectAdapter.getSpecification().getFullIdentifier());
- } else {
- connector.addToQueryValues(null);
- }
- }
-
- @Override
- public void appendUpdateValues(final DatabaseConnector connector, final StringBuffer sql, final ObjectAdapter object) {
- super.appendUpdateValues(connector, sql, object);
-
- sql.append(",");
- sql.append(classnameColumn);
- sql.append(" = ?");
-
- final ObjectAdapter objectAdapter = field.get(object);
- if (objectAdapter != null) {
- connector.addToQueryValues(objectAdapter.getSpecification().getFullIdentifier());
- } else {
- connector.addToQueryValues(null);
- }
- }
-
- @Override
- public void initializeField(final ObjectAdapter object, final Results rs) {
- final String className = rs.getString(classnameColumn);
- if (className != null) {
- final ObjectSpecification specification = getReflector().loadSpecification(className);
-
- final Oid oid = recreateOid(rs, specification);
-
- final ObjectAdapter reference = getAdapter(specification, oid);
- ((OneToOneAssociation) field).initAssociation(object, reference);
- }
- }
-
- @Override
- public void debugData(final DebugBuilder debug) {
- debug.appendln(field.getId(), getColumn());
- }
-
- private SpecificationLoaderSpi getReflector() {
- return IsisContext.getSpecificationLoader();
- }
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/951a0fe4/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/jdbc/JdbcBinaryValueMapper.java
----------------------------------------------------------------------
diff --git a/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/jdbc/JdbcBinaryValueMapper.java b/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/jdbc/JdbcBinaryValueMapper.java
deleted file mode 100755
index 835f401..0000000
--- a/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/jdbc/JdbcBinaryValueMapper.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.isis.runtimes.dflt.objectstores.sql.jdbc;
-
-import org.apache.isis.core.commons.exceptions.IsisApplicationException;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
-import org.apache.isis.runtimes.dflt.objectstores.sql.AbstractFieldMappingFactory;
-import org.apache.isis.runtimes.dflt.objectstores.sql.Results;
-import org.apache.isis.runtimes.dflt.objectstores.sql.mapping.FieldMapping;
-import org.apache.isis.runtimes.dflt.runtime.system.context.IsisContext;
-
-/**
- *
- *
- * @version $Rev$ $Date$
- */
-public class JdbcBinaryValueMapper extends AbstractJdbcFieldMapping {
-
- public static class Factory extends AbstractFieldMappingFactory {
- private final String type;
-
- public Factory(final String type) {
- super();
- this.type = type;
- }
-
- @Override
- public FieldMapping createFieldMapping(final ObjectSpecification object, final ObjectAssociation field) {
- final String dataType = getTypeOverride(object, field, type);
- return new JdbcBinaryValueMapper(field, dataType);
- }
- }
-
- private final String type;
-
- public JdbcBinaryValueMapper(final ObjectAssociation field, final String type) {
- super(field);
- this.type = type;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see
- * org.apache.isis.runtimes.dflt.objectstores.sql.jdbc.AbstractJdbcFieldMapping
- * #columnType()
- */
- @Override
- protected String columnType() {
- return type;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see
- * org.apache.isis.runtimes.dflt.objectstores.sql.jdbc.AbstractJdbcFieldMapping
- * #preparedStatementObject(org.apache
- * .isis.core.metamodel.adapter.ObjectAdapter)
- */
- @Override
- protected Object preparedStatementObject(final ObjectAdapter value) {
- if (value == null) {
- return null;
- }
- final Object o = value.getObject();
- return o;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see
- * org.apache.isis.runtimes.dflt.objectstores.sql.jdbc.AbstractJdbcFieldMapping
- * #setFromDBColumn(org.apache.isis. runtimes.dflt.objectstores.sql.Results,
- * java.lang.String,
- * org.apache.isis.core.metamodel.spec.feature.ObjectAssociation)
- */
- @Override
- protected ObjectAdapter setFromDBColumn(final Results results, final String columnName, final ObjectAssociation field) {
- ObjectAdapter restoredValue;
-
- final Class<?> correspondingClass = field.getSpecification().getCorrespondingClass();
- Object resultObject = results.getObject(columnName);
- if (resultObject == null) {
- return null;
- }
-
- if (resultObject.getClass() != correspondingClass) {
- if (checkIfIsClass(correspondingClass, Integer.class, int.class)) {
- resultObject = results.getInt(columnName);
- } else if (checkIfIsClass(correspondingClass, Double.class, double.class)) {
- resultObject = results.getDouble(columnName);
- } else if (checkIfIsClass(correspondingClass, Float.class, float.class)) {
- resultObject = results.getFloat(columnName);
- } else if (checkIfIsClass(correspondingClass, Short.class, short.class)) {
- resultObject = results.getShort(columnName);
- } else if (checkIfIsClass(correspondingClass, Long.class, long.class)) {
- resultObject = results.getLong(columnName);
- } else if (checkIfIsClass(correspondingClass, Boolean.class, boolean.class)) {
- resultObject = results.getBoolean(columnName);
- } else {
- throw new IsisApplicationException("Unhandled type: " + correspondingClass.getCanonicalName());
- }
- }
-
- restoredValue = IsisContext.getPersistenceSession().getAdapterManager().adapterFor(resultObject);
-
- return restoredValue;
-
- }
-
- private boolean checkIfIsClass(final Class<?> expected, final Class<?> couldBe1, final Class<?> couldBe2) {
- return (expected == couldBe1 || expected == couldBe2);
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/951a0fe4/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/jdbc/JdbcColorValueMapper.java
----------------------------------------------------------------------
diff --git a/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/jdbc/JdbcColorValueMapper.java b/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/jdbc/JdbcColorValueMapper.java
deleted file mode 100755
index 1ef8975..0000000
--- a/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/jdbc/JdbcColorValueMapper.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.isis.runtimes.dflt.objectstores.sql.jdbc;
-
-import org.apache.isis.applib.value.Color;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
-import org.apache.isis.runtimes.dflt.objectstores.sql.AbstractFieldMappingFactory;
-import org.apache.isis.runtimes.dflt.objectstores.sql.Results;
-import org.apache.isis.runtimes.dflt.objectstores.sql.mapping.FieldMapping;
-import org.apache.isis.runtimes.dflt.runtime.system.context.IsisContext;
-
-/**
- *
- *
- * @version $Rev$ $Date$
- */
-public class JdbcColorValueMapper extends AbstractJdbcFieldMapping {
-
- public static class Factory extends AbstractFieldMappingFactory {
- private final String type;
-
- public Factory(final String type) {
- super();
- this.type = type;
- }
-
- @Override
- public FieldMapping createFieldMapping(final ObjectSpecification object, final ObjectAssociation field) {
- final String dataType = getTypeOverride(object, field, type);
- return new JdbcColorValueMapper(field, dataType);
- }
- }
-
- private final String type;
-
- public JdbcColorValueMapper(final ObjectAssociation field, final String type) {
- super(field);
- this.type = type;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see
- * org.apache.isis.runtimes.dflt.objectstores.sql.jdbc.AbstractJdbcFieldMapping
- * #columnType()
- */
- @Override
- protected String columnType() {
- return type;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see
- * org.apache.isis.runtimes.dflt.objectstores.sql.jdbc.AbstractJdbcFieldMapping
- * #preparedStatementObject(org.apache
- * .isis.core.metamodel.adapter.ObjectAdapter)
- */
- @Override
- protected Object preparedStatementObject(final ObjectAdapter value) {
- final Object o = value.getObject();
- return ((Color) o).intValue();
- }
-
- /*
- * (non-Javadoc)
- *
- * @see
- * org.apache.isis.runtimes.dflt.objectstores.sql.jdbc.AbstractJdbcFieldMapping
- * #setFromDBColumn(org.apache.isis. runtimes.dflt.objectstores.sql.Results,
- * java.lang.String,
- * org.apache.isis.core.metamodel.spec.feature.ObjectAssociation)
- */
- @Override
- protected ObjectAdapter setFromDBColumn(final Results results, final String columnName, final ObjectAssociation field) {
- ObjectAdapter restoredValue;
- final int intValue = results.getInt(columnName);
- final Color colorValue = new Color(intValue);
- restoredValue = IsisContext.getPersistenceSession().getAdapterManager().adapterFor(colorValue);
- return restoredValue;
- }
-
-}