You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2016/09/29 17:38:50 UTC
[04/15] cayenne git commit: CAY-2116 Split schema synchronization
code in a separate module
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2f7b1d53/cayenne-server/src/main/java/org/apache/cayenne/merge/SetPrimaryKeyToModel.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/merge/SetPrimaryKeyToModel.java b/cayenne-server/src/main/java/org/apache/cayenne/merge/SetPrimaryKeyToModel.java
deleted file mode 100644
index 10ec4fe..0000000
--- a/cayenne-server/src/main/java/org/apache/cayenne/merge/SetPrimaryKeyToModel.java
+++ /dev/null
@@ -1,77 +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.cayenne.merge;
-
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Set;
-
-import org.apache.cayenne.map.DbAttribute;
-import org.apache.cayenne.map.DbEntity;
-import org.apache.cayenne.map.event.AttributeEvent;
-
-public class SetPrimaryKeyToModel extends AbstractToModelToken.Entity {
-
- private Collection<DbAttribute> primaryKeyOriginal;
- private Collection<DbAttribute> primaryKeyNew;
- private String detectedPrimaryKeyName;
- private Set<String> primaryKeyNewAttributeNames = new HashSet<String>();
-
- public SetPrimaryKeyToModel(DbEntity entity,
- Collection<DbAttribute> primaryKeyOriginal,
- Collection<DbAttribute> primaryKeyNew, String detectedPrimaryKeyName) {
- super("Set Primary Key", entity);
-
- this.primaryKeyOriginal = primaryKeyOriginal;
- this.primaryKeyNew = primaryKeyNew;
- this.detectedPrimaryKeyName = detectedPrimaryKeyName;
-
- for (DbAttribute attr : primaryKeyNew) {
- primaryKeyNewAttributeNames.add(attr.getName().toUpperCase());
- }
- }
-
- public MergerToken createReverse(MergerFactory factory) {
- return factory.createSetPrimaryKeyToDb(
- getEntity(),
- primaryKeyNew,
- primaryKeyOriginal,
- detectedPrimaryKeyName);
- }
-
- public void execute(MergerContext mergerContext) {
- DbEntity e = getEntity();
-
- for (DbAttribute attr : e.getAttributes()) {
-
- boolean wasPrimaryKey = attr.isPrimaryKey();
- boolean willBePrimaryKey = primaryKeyNewAttributeNames.contains(attr
- .getName()
- .toUpperCase());
-
- if (wasPrimaryKey != willBePrimaryKey) {
- attr.setPrimaryKey(willBePrimaryKey);
- e.dbAttributeChanged(new AttributeEvent(this, attr, e));
- mergerContext.getModelMergeDelegate().dbAttributeModified(attr);
- }
-
- }
-
- }
-}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2f7b1d53/cayenne-server/src/main/java/org/apache/cayenne/merge/SetValueForNullToDb.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/merge/SetValueForNullToDb.java b/cayenne-server/src/main/java/org/apache/cayenne/merge/SetValueForNullToDb.java
deleted file mode 100644
index 1991154..0000000
--- a/cayenne-server/src/main/java/org/apache/cayenne/merge/SetValueForNullToDb.java
+++ /dev/null
@@ -1,46 +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.cayenne.merge;
-
-import java.util.List;
-
-import org.apache.cayenne.dba.DbAdapter;
-import org.apache.cayenne.map.DbAttribute;
-import org.apache.cayenne.map.DbEntity;
-
-
-public class SetValueForNullToDb extends AbstractToDbToken.EntityAndColumn {
-
- private ValueForNullProvider valueForNullProvider;
-
- public SetValueForNullToDb(DbEntity entity, DbAttribute column, ValueForNullProvider valueForNullProvider) {
- super("Set value for null", entity, column);
- this.valueForNullProvider = valueForNullProvider;
- }
-
- @Override
- public List<String> createSql(DbAdapter adapter) {
- return valueForNullProvider.createSql(getEntity(), getColumn());
- }
-
- public MergerToken createReverse(MergerFactory factory) {
- return new DummyReverseToken(this);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2f7b1d53/cayenne-server/src/main/java/org/apache/cayenne/merge/ValueForNullProvider.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/merge/ValueForNullProvider.java b/cayenne-server/src/main/java/org/apache/cayenne/merge/ValueForNullProvider.java
deleted file mode 100644
index ff147eb..0000000
--- a/cayenne-server/src/main/java/org/apache/cayenne/merge/ValueForNullProvider.java
+++ /dev/null
@@ -1,42 +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.cayenne.merge;
-
-import java.util.List;
-
-import org.apache.cayenne.map.DbAttribute;
-import org.apache.cayenne.map.DbEntity;
-
-/**
- * Class that will be used to set value for null on not
- * null columns
- */
-public interface ValueForNullProvider {
-
- /**
- * @return true if there exist a value that should be inserted for null values
- */
- public boolean hasValueFor(DbEntity entity, DbAttribute column);
-
- /**
- * @return a {@link List} of sql to set value for null
- */
- public List<String> createSql(DbEntity entity, DbAttribute column);
-
-}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2f7b1d53/cayenne-server/src/main/java/org/apache/cayenne/util/EntityMergeSupport.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/util/EntityMergeSupport.java b/cayenne-server/src/main/java/org/apache/cayenne/util/EntityMergeSupport.java
deleted file mode 100644
index 7c12600..0000000
--- a/cayenne-server/src/main/java/org/apache/cayenne/util/EntityMergeSupport.java
+++ /dev/null
@@ -1,520 +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.cayenne.util;
-
-import org.apache.cayenne.dba.TypesMapping;
-import org.apache.cayenne.map.DataMap;
-import org.apache.cayenne.map.DbAttribute;
-import org.apache.cayenne.map.DbEntity;
-import org.apache.cayenne.map.DbJoin;
-import org.apache.cayenne.map.DbRelationship;
-import org.apache.cayenne.map.Entity;
-import org.apache.cayenne.map.ObjAttribute;
-import org.apache.cayenne.map.ObjEntity;
-import org.apache.cayenne.map.ObjRelationship;
-import org.apache.cayenne.map.naming.DefaultUniqueNameGenerator;
-import org.apache.cayenne.map.naming.LegacyNameGenerator;
-import org.apache.cayenne.map.naming.NameCheckers;
-import org.apache.cayenne.map.naming.ObjectNameGenerator;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Implements methods for entity merging.
- */
-public class EntityMergeSupport {
-
- private static final Log LOG = LogFactory.getLog(EntityMergeSupport.class);
-
- private static final Map<String, String> CLASS_TO_PRIMITIVE;
-
- static {
- CLASS_TO_PRIMITIVE = new HashMap<>();
- CLASS_TO_PRIMITIVE.put(Byte.class.getName(), "byte");
- CLASS_TO_PRIMITIVE.put(Long.class.getName(), "long");
- CLASS_TO_PRIMITIVE.put(Double.class.getName(), "double");
- CLASS_TO_PRIMITIVE.put(Boolean.class.getName(), "boolean");
- CLASS_TO_PRIMITIVE.put(Float.class.getName(), "float");
- CLASS_TO_PRIMITIVE.put(Short.class.getName(), "short");
- CLASS_TO_PRIMITIVE.put(Integer.class.getName(), "int");
- }
-
- private final DataMap map;
- /**
- * Strategy for choosing names for entities, attributes and relationships
- */
- private final ObjectNameGenerator nameGenerator;
- /**
- * Listeners of merge process.
- */
- private final List<EntityMergeListener> listeners = new ArrayList<EntityMergeListener>();
- protected boolean removeMeaningfulFKs;
- protected boolean removeMeaningfulPKs;
- protected boolean usePrimitives;
-
- public EntityMergeSupport(DataMap map) {
- this(map, new LegacyNameGenerator(), true);
- }
-
- /**
- * @since 3.0
- */
- public EntityMergeSupport(DataMap map, ObjectNameGenerator nameGenerator, boolean removeMeaningfulPKs) {
- this.map = map;
- this.nameGenerator = nameGenerator;
- this.removeMeaningfulFKs = true;
- this.removeMeaningfulPKs = removeMeaningfulPKs;
-
- /**
- * Adding a listener, so that all created ObjRelationships would have
- * default delete rule
- */
- addEntityMergeListener(DeleteRuleUpdater.getEntityMergeListener());
- }
-
- /**
- * Updates each one of the collection of ObjEntities, adding attributes and
- * relationships based on the current state of its DbEntity.
- *
- * @return true if any ObjEntity has changed as a result of synchronization.
- * @since 1.2 changed signature to use Collection instead of List.
- */
- public boolean synchronizeWithDbEntities(Iterable<ObjEntity> objEntities) {
- boolean changed = false;
- for (ObjEntity nextEntity : objEntities) {
- if (synchronizeWithDbEntity(nextEntity)) {
- changed = true;
- }
- }
-
- return changed;
- }
-
- /**
- * @since 4.0
- */
- protected boolean removePK(DbEntity dbEntity) {
- return removeMeaningfulPKs;
- }
-
- /**
- * @since 4.0
- */
- protected boolean removeFK(DbEntity dbEntity) {
- return removeMeaningfulFKs;
- }
-
- /**
- * Updates ObjEntity attributes and relationships based on the current state
- * of its DbEntity.
- *
- * @return true if the ObjEntity has changed as a result of synchronization.
- */
- public boolean synchronizeWithDbEntity(ObjEntity entity) {
-
- if (entity == null) {
- return false;
- }
-
- DbEntity dbEntity = entity.getDbEntity();
- if (dbEntity == null) {
- return false;
- }
-
- boolean changed = false;
-
- // synchronization on DataMap is some (weak) protection
- // against simultaneous modification of the map (like double-clicking on sync button)
- synchronized (map) {
-
- if (removeFK(dbEntity)) {
- changed = getRidOfAttributesThatAreNowSrcAttributesForRelationships(entity);
- }
-
- changed |= addMissingAttributes(entity);
- changed |= addMissingRelationships(entity);
- }
-
- return changed;
- }
-
- /**
- * @since 4.0
- */
- public boolean synchronizeOnDbAttributeAdded(ObjEntity entity, DbAttribute dbAttribute) {
-
- Collection<DbRelationship> incomingRels = getIncomingRelationships(dbAttribute.getEntity());
- if (isMissingFromObjEntity(entity, dbAttribute, incomingRels)) {
- addMissingAttribute(entity, dbAttribute);
- return true;
- }
-
- return false;
- }
-
- /**
- * @since 4.0
- */
- public boolean synchronizeOnDbRelationshipAdded(ObjEntity entity, DbRelationship dbRelationship) {
-
- if (isMissingFromObjEntity(entity, dbRelationship)) {
- addMissingRelationship(entity, dbRelationship);
- }
-
- return true;
- }
-
- private boolean addMissingRelationships(ObjEntity entity) {
- List<DbRelationship> relationshipsToAdd = getRelationshipsToAdd(entity);
- if (relationshipsToAdd.isEmpty()) {
- return false;
- }
-
- for (DbRelationship dr : relationshipsToAdd) {
- addMissingRelationship(entity, dr);
- }
-
- return true;
- }
-
- private boolean createObjRelationship(ObjEntity entity, DbRelationship dr, String targetEntityName) {
- String relationshipName = nameGenerator.createObjRelationshipName(dr);
- relationshipName = DefaultUniqueNameGenerator.generate(NameCheckers.objRelationship, entity, relationshipName);
-
- ObjRelationship or = new ObjRelationship(relationshipName);
- or.addDbRelationship(dr);
- Map<String, ObjEntity> objEntities = entity.getDataMap().getSubclassesForObjEntity(entity);
-
- boolean hasFlattingAttributes = false;
- boolean needGeneratedEntity = true;
-
- if (objEntities.containsKey(targetEntityName)) {
- needGeneratedEntity = false;
- }
-
- for (ObjEntity subObjEntity : objEntities.values()) {
- for (ObjAttribute objAttribute : subObjEntity.getAttributes()) {
- String path = objAttribute.getDbAttributePath();
- if (path != null) {
- if (path.startsWith(or.getDbRelationshipPath())) {
- hasFlattingAttributes = true;
- break;
- }
- }
- }
- }
-
- if (!hasFlattingAttributes) {
- if (needGeneratedEntity) {
- or.setTargetEntityName(targetEntityName);
- or.setSourceEntity(entity);
- }
-
- entity.addRelationship(or);
- fireRelationshipAdded(or);
- }
-
- return needGeneratedEntity;
- }
-
- private boolean addMissingAttributes(ObjEntity entity) {
- boolean changed = false;
-
- for (DbAttribute da : getAttributesToAdd(entity)) {
- addMissingAttribute(entity, da);
- changed = true;
- }
- return changed;
- }
-
- private void addMissingRelationship(ObjEntity entity, DbRelationship dbRelationship) {
- DbEntity targetEntity = dbRelationship.getTargetEntity();
-
- Collection<ObjEntity> mappedObjEntities = map.getMappedEntities(targetEntity);
- if (!mappedObjEntities.isEmpty()) {
- for (Entity mappedTarget : mappedObjEntities) {
- createObjRelationship(entity, dbRelationship, mappedTarget.getName());
- }
- } else {
-
- if (targetEntity == null) {
- targetEntity = new DbEntity(dbRelationship.getTargetEntityName());
- }
-
- if (dbRelationship.getTargetEntityName() != null) {
- boolean needGeneratedEntity = createObjRelationship(entity, dbRelationship,
- nameGenerator.createObjEntityName(targetEntity));
- if (needGeneratedEntity) {
- LOG.warn("Can't find ObjEntity for " + dbRelationship.getTargetEntityName());
- LOG.warn("Db Relationship (" + dbRelationship + ") will have GUESSED Obj Relationship reflection. ");
- }
- }
- }
- }
-
- private void addMissingAttribute(ObjEntity entity, DbAttribute da) {
- String attrName = DefaultUniqueNameGenerator.generate(NameCheckers.objAttribute, entity,
- nameGenerator.createObjAttributeName(da));
-
- String type = TypesMapping.getJavaBySqlType(da.getType());
- if (usePrimitives) {
- String primitive = CLASS_TO_PRIMITIVE.get(type);
- if (primitive != null) {
- type = primitive;
- }
- }
-
- ObjAttribute oa = new ObjAttribute(attrName, type, entity);
- oa.setDbAttributePath(da.getName());
- entity.addAttribute(oa);
- fireAttributeAdded(oa);
- }
-
- private boolean getRidOfAttributesThatAreNowSrcAttributesForRelationships(ObjEntity entity) {
- boolean changed = false;
- for (DbAttribute da : getMeaningfulFKs(entity)) {
- ObjAttribute oa = entity.getAttributeForDbAttribute(da);
- while (oa != null) {
- String attrName = oa.getName();
- entity.removeAttribute(attrName);
- changed = true;
- oa = entity.getAttributeForDbAttribute(da);
- }
- }
- return changed;
- }
-
- /**
- * Returns a list of DbAttributes that are mapped to foreign keys.
- *
- * @since 1.2
- */
- public Collection<DbAttribute> getMeaningfulFKs(ObjEntity objEntity) {
- List<DbAttribute> fks = new ArrayList<DbAttribute>(2);
-
- for (ObjAttribute property : objEntity.getAttributes()) {
- DbAttribute column = property.getDbAttribute();
-
- // check if adding it makes sense at all
- if (column != null && column.isForeignKey()) {
- fks.add(column);
- }
- }
-
- return fks;
- }
-
- /**
- * Returns a list of attributes that exist in the DbEntity, but are missing
- * from the ObjEntity.
- */
- protected List<DbAttribute> getAttributesToAdd(ObjEntity objEntity) {
- DbEntity dbEntity = objEntity.getDbEntity();
-
- List<DbAttribute> missing = new ArrayList<DbAttribute>();
- Collection<DbRelationship> incomingRels = getIncomingRelationships(dbEntity);
-
- for (DbAttribute dba : dbEntity.getAttributes()) {
-
- if (isMissingFromObjEntity(objEntity, dba, incomingRels)) {
- missing.add(dba);
- }
- }
-
- return missing;
- }
-
- protected boolean isMissingFromObjEntity(ObjEntity entity, DbAttribute dbAttribute, Collection<DbRelationship> incomingRels) {
-
- if (dbAttribute.getName() == null || entity.getAttributeForDbAttribute(dbAttribute) != null) {
- return false;
- }
-
- boolean removeMeaningfulPKs = removePK(dbAttribute.getEntity());
- if (removeMeaningfulPKs && dbAttribute.isPrimaryKey()) {
- return false;
- }
-
- // check FK's
- boolean isFK = false;
- Iterator<DbRelationship> rit = dbAttribute.getEntity().getRelationships().iterator();
- while (!isFK && rit.hasNext()) {
- DbRelationship rel = rit.next();
- for (DbJoin join : rel.getJoins()) {
- if (join.getSource() == dbAttribute) {
- isFK = true;
- break;
- }
- }
- }
-
- if (!removeMeaningfulPKs) {
- if (!dbAttribute.isPrimaryKey() && isFK) {
- return false;
- }
- } else {
- if (isFK) {
- return false;
- }
- }
-
- // check incoming relationships
- rit = incomingRels.iterator();
- while (!isFK && rit.hasNext()) {
- DbRelationship rel = rit.next();
- for (DbJoin join : rel.getJoins()) {
- if (join.getTarget() == dbAttribute) {
- isFK = true;
- break;
- }
- }
- }
-
- if (!removeMeaningfulPKs) {
- if (!dbAttribute.isPrimaryKey() && isFK) {
- return false;
- }
- } else {
- if (isFK) {
- return false;
- }
- }
-
- return true;
- }
-
- protected boolean isMissingFromObjEntity(ObjEntity entity, DbRelationship dbRelationship) {
- return dbRelationship.getName() != null && entity.getRelationshipForDbRelationship(dbRelationship) == null;
- }
-
- private Collection<DbRelationship> getIncomingRelationships(DbEntity entity) {
- Collection<DbRelationship> incoming = new ArrayList<DbRelationship>();
-
- for (DbEntity nextEntity : entity.getDataMap().getDbEntities()) {
- for (DbRelationship relationship : nextEntity.getRelationships()) {
-
- // TODO: PERFORMANCE 'getTargetEntity' is generally slow, called
- // in this iterator it is showing (e.g. in YourKit profiles)..
- // perhaps use cheaper 'getTargetEntityName()' or even better -
- // pre-cache all relationships by target entity to avoid O(n)
- // search ?
- // (need to profile to prove the difference)
- if (entity == relationship.getTargetEntity()) {
- incoming.add(relationship);
- }
- }
- }
-
- return incoming;
- }
-
- protected List<DbRelationship> getRelationshipsToAdd(ObjEntity objEntity) {
- List<DbRelationship> missing = new ArrayList<DbRelationship>();
- for (DbRelationship dbRel : objEntity.getDbEntity().getRelationships()) {
- if (isMissingFromObjEntity(objEntity, dbRel)) {
- missing.add(dbRel);
- }
- }
-
- return missing;
- }
-
- /**
- * @since 1.2
- */
- public boolean isRemoveMeaningfulFKs() {
- return removeMeaningfulFKs;
- }
-
- /**
- * @since 1.2
- */
- public void setRemoveMeaningfulFKs(boolean removeMeaningfulFKs) {
- this.removeMeaningfulFKs = removeMeaningfulFKs;
- }
-
- /**
- * Registers new EntityMergeListener
- */
- public void addEntityMergeListener(EntityMergeListener listener) {
- listeners.add(listener);
- }
-
- /**
- * Unregisters an EntityMergeListener
- */
- public void removeEntityMergeListener(EntityMergeListener listener) {
- listeners.remove(listener);
- }
-
- /**
- * Returns registered listeners
- */
- public EntityMergeListener[] getEntityMergeListeners() {
- return listeners.toArray(new EntityMergeListener[listeners.size()]);
- }
-
- /**
- * Notifies all listeners that an ObjAttribute was added
- */
- protected void fireAttributeAdded(ObjAttribute attr) {
- for (EntityMergeListener listener : listeners) {
- listener.objAttributeAdded(attr);
- }
- }
-
- /**
- * Notifies all listeners that an ObjRelationship was added
- */
- protected void fireRelationshipAdded(ObjRelationship rel) {
- for (EntityMergeListener listener : listeners) {
- listener.objRelationshipAdded(rel);
- }
- }
-
- /**
- * @return naming strategy for reverse engineering
- */
- public ObjectNameGenerator getNameGenerator() {
- return nameGenerator;
- }
-
- /**
- * @since 4.0
- */
- public boolean isUsePrimitives() {
- return usePrimitives;
- }
-
- /**
- * @param usePrimitives
- * @since 4.0
- */
- public void setUsePrimitives(boolean usePrimitives) {
- this.usePrimitives = usePrimitives;
- }
-}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2f7b1d53/cayenne-server/src/test/java/org/apache/cayenne/access/DbLoaderIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/DbLoaderIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/DbLoaderIT.java
deleted file mode 100644
index 6d9a682..0000000
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/DbLoaderIT.java
+++ /dev/null
@@ -1,431 +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.cayenne.access;
-
-import org.apache.cayenne.access.loader.DbLoaderConfiguration;
-import org.apache.cayenne.access.loader.filters.FiltersConfig;
-import org.apache.cayenne.access.loader.filters.PatternFilter;
-import org.apache.cayenne.access.loader.filters.TableFilter;
-import org.apache.cayenne.configuration.server.ServerRuntime;
-import org.apache.cayenne.dba.DbAdapter;
-import org.apache.cayenne.dba.TypesMapping;
-import org.apache.cayenne.di.Inject;
-import org.apache.cayenne.map.*;
-import org.apache.cayenne.unit.UnitDbAdapter;
-import org.apache.cayenne.unit.di.server.CayenneProjects;
-import org.apache.cayenne.unit.di.server.ServerCase;
-import org.apache.cayenne.unit.di.server.ServerCaseDataSourceFactory;
-import org.apache.cayenne.unit.di.server.UseServerRuntime;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-import java.sql.Types;
-import java.util.Collection;
-import java.util.List;
-
-import static org.junit.Assert.*;
-
-@UseServerRuntime(CayenneProjects.TESTMAP_PROJECT)
-public class DbLoaderIT extends ServerCase {
-
- public static final DbLoaderConfiguration CONFIG = new DbLoaderConfiguration();
- @Inject
- private ServerRuntime runtime;
-
- @Inject
- private DbAdapter adapter;
-
- @Inject
- private ServerCaseDataSourceFactory dataSourceFactory;
-
- @Inject
- private UnitDbAdapter accessStackAdapter;
-
- private DbLoader loader;
-
- @Before
- public void setUp() throws Exception {
- loader = new DbLoader(dataSourceFactory.getSharedDataSource().getConnection(), adapter, null);
- }
-
- @After
- public void tearDown() throws Exception {
- loader.getConnection().close();
- }
-
- @Test
- public void testGetTableTypes() throws Exception {
-
- List<?> tableTypes = loader.getTableTypes();
-
- assertNotNull(tableTypes);
-
- String tableLabel = adapter.tableTypeForTable();
- if (tableLabel != null) {
- assertTrue("Missing type for table '" + tableLabel + "' - " + tableTypes, tableTypes.contains(tableLabel));
- }
-
- String viewLabel = adapter.tableTypeForView();
- if (viewLabel != null) {
- assertTrue("Missing type for view '" + viewLabel + "' - " + tableTypes, tableTypes.contains(viewLabel));
- }
- }
-
- @Test
- public void testGetTables() throws Exception {
-
- String tableLabel = adapter.tableTypeForTable();
-
- List<DetectedDbEntity> tables = loader.createTableLoader(null, null, TableFilter.everything())
- .getDbEntities(TableFilter.everything(), new String[]{tableLabel});
-
- assertNotNull(tables);
-
- boolean foundArtist = false;
-
- for (DetectedDbEntity table : tables) {
- if ("ARTIST".equalsIgnoreCase(table.getName())) {
- foundArtist = true;
- break;
- }
- }
-
- assertTrue("'ARTIST' is missing from the table list: " + tables, foundArtist);
- }
-
- @Test
- public void testGetTablesWithWrongCatalog() throws Exception {
-
- DbLoaderConfiguration config = new DbLoaderConfiguration();
- config.setFiltersConfig(
- FiltersConfig.create("WRONG", null, TableFilter.everything(), PatternFilter.INCLUDE_NOTHING));
- List<DetectedDbEntity> tables = loader
- .createTableLoader("WRONG", null, TableFilter.everything())
- .getDbEntities(TableFilter.everything(), new String[]{adapter.tableTypeForTable()});
-
- assertNotNull(tables);
- assertTrue(tables.isEmpty());
- }
-
- @Test
- public void testGetTablesWithWrongSchema() throws Exception {
-
- DbLoaderConfiguration config = new DbLoaderConfiguration();
- config.setFiltersConfig(
- FiltersConfig.create(null, "WRONG", TableFilter.everything(), PatternFilter.INCLUDE_NOTHING));
- List<DetectedDbEntity> tables = loader
- .createTableLoader(null, "WRONG", TableFilter.everything())
- .getDbEntities(TableFilter.everything(), new String[]{adapter.tableTypeForTable()});
-
- assertNotNull(tables);
- assertTrue(tables.isEmpty());
- }
-
- @Test
- public void testLoadWithMeaningfulPK() throws Exception {
-
- DataMap map = new DataMap();
- String[] tableLabel = { adapter.tableTypeForTable() };
-
- loader.setCreatingMeaningfulPK(true);
-
- List<DbEntity> entities = loader
- .createTableLoader(null, null, TableFilter.everything())
- .loadDbEntities(map, CONFIG, tableLabel);
-
- loader.loadObjEntities(map, CONFIG, entities);
-
- ObjEntity artist = map.getObjEntity("Artist");
- assertNotNull(artist);
-
- ObjAttribute id = artist.getAttribute("artistId");
- assertNotNull(id);
- }
-
- /**
- * DataMap loading is in one big test method, since breaking it in
- * individual tests would require multiple reads of metatdata which is
- * extremely slow on some RDBMS (Sybase).
- */
- @Test
- public void testLoad() throws Exception {
-
- boolean supportsUnique = runtime.getDataDomain().getDataNodes().iterator().next().getAdapter()
- .supportsUniqueConstraints();
- boolean supportsLobs = accessStackAdapter.supportsLobs();
- boolean supportsFK = accessStackAdapter.supportsFKConstraints();
-
- DataMap map = new DataMap();
- map.setDefaultPackage("foo.x");
-
- String tableLabel = adapter.tableTypeForTable();
-
- // *** TESTING THIS ***
- List<DbEntity> entities = loader
- .createTableLoader(null, null, TableFilter.everything())
- .loadDbEntities(map, CONFIG, new String[]{adapter.tableTypeForTable()});
-
-
- assertDbEntities(map);
-
- if (supportsLobs) {
- assertLobDbEntities(map);
- }
-
- // *** TESTING THIS ***
- loader.loadDbRelationships(CONFIG, null, null, entities);
-
- if (supportsFK) {
- Collection<DbRelationship> rels = getDbEntity(map, "ARTIST").getRelationships();
- assertNotNull(rels);
- assertTrue(!rels.isEmpty());
-
- // test one-to-one
- rels = getDbEntity(map, "PAINTING").getRelationships();
- assertNotNull(rels);
-
- // find relationship to PAINTING_INFO
- DbRelationship oneToOne = null;
- for (DbRelationship rel : rels) {
- if ("PAINTING_INFO".equalsIgnoreCase(rel.getTargetEntityName())) {
- oneToOne = rel;
- break;
- }
- }
-
- assertNotNull("No relationship to PAINTING_INFO", oneToOne);
- assertFalse("Relationship to PAINTING_INFO must be to-one", oneToOne.isToMany());
- assertTrue("Relationship to PAINTING_INFO must be to-one", oneToOne.isToDependentPK());
-
- // test UNIQUE only if FK is supported...
- if (supportsUnique) {
- assertUniqueConstraintsInRelationships(map);
- }
- }
-
- // *** TESTING THIS ***
- loader.setCreatingMeaningfulPK(false);
- loader.loadObjEntities(map, CONFIG, entities);
-
- assertObjEntities(map);
-
- // now when the map is loaded, test
- // various things
- // selectively check how different types were processed
- if (accessStackAdapter.supportsColumnTypeReengineering()) {
- checkTypes(map);
- }
- }
-
- private void assertUniqueConstraintsInRelationships(DataMap map) {
- // unfortunately JDBC metadata doesn't provide info for UNIQUE
- // constraints....
- // cant reengineer them...
-
- // find rel to TO_ONEFK1
- /*
- * Iterator it = getDbEntity(map,
- * "TO_ONEFK2").getRelationships().iterator(); DbRelationship rel =
- * (DbRelationship) it.next(); assertEquals("TO_ONEFK1",
- * rel.getTargetEntityName());
- * assertFalse("UNIQUE constraint was ignored...", rel.isToMany());
- */
- }
-
- private void assertDbEntities(DataMap map) {
- DbEntity dae = getDbEntity(map, "ARTIST");
- assertNotNull("Null 'ARTIST' entity, other DbEntities: " + map.getDbEntityMap(), dae);
- assertEquals("ARTIST", dae.getName().toUpperCase());
-
- DbAttribute a = getDbAttribute(dae, "ARTIST_ID");
- assertNotNull(a);
- assertTrue(a.isPrimaryKey());
- assertFalse(a.isGenerated());
-
- if (adapter.supportsGeneratedKeys()) {
- DbEntity bag = getDbEntity(map, "GENERATED_COLUMN_TEST");
- DbAttribute id = getDbAttribute(bag, "GENERATED_COLUMN");
- assertTrue(id.isPrimaryKey());
- assertTrue(id.isGenerated());
- }
- }
-
- private void assertObjEntities(DataMap map) {
-
- boolean supportsLobs = accessStackAdapter.supportsLobs();
- boolean supportsFK = accessStackAdapter.supportsFKConstraints();
-
- ObjEntity ae = map.getObjEntity("Artist");
- assertNotNull(ae);
- assertEquals("Artist", ae.getName());
-
- // assert primary key is not an attribute
- assertNull(ae.getAttribute("artistId"));
-
- if (supportsLobs) {
- assertLobObjEntities(map);
- }
-
- if (supportsFK) {
- Collection<?> rels1 = ae.getRelationships();
- assertNotNull(rels1);
- assertTrue(rels1.size() > 0);
- }
-
- assertEquals("foo.x.Artist", ae.getClassName());
- }
-
- private void assertLobDbEntities(DataMap map) {
- DbEntity blobEnt = getDbEntity(map, "BLOB_TEST");
- assertNotNull(blobEnt);
- DbAttribute blobAttr = getDbAttribute(blobEnt, "BLOB_COL");
- assertNotNull(blobAttr);
- assertTrue(msgForTypeMismatch(Types.BLOB, blobAttr), Types.BLOB == blobAttr.getType()
- || Types.LONGVARBINARY == blobAttr.getType());
-
- DbEntity clobEnt = getDbEntity(map, "CLOB_TEST");
- assertNotNull(clobEnt);
- DbAttribute clobAttr = getDbAttribute(clobEnt, "CLOB_COL");
- assertNotNull(clobAttr);
- assertTrue(msgForTypeMismatch(Types.CLOB, clobAttr), Types.CLOB == clobAttr.getType()
- || Types.LONGVARCHAR == clobAttr.getType());
-
-/*
- DbEntity nclobEnt = getDbEntity(map, "NCLOB_TEST");
- assertNotNull(nclobEnt);
- DbAttribute nclobAttr = getDbAttribute(nclobEnt, "NCLOB_COL");
- assertNotNull(nclobAttr);
- assertTrue(msgForTypeMismatch(Types.NCLOB, nclobAttr), Types.NCLOB == nclobAttr.getType()
- || Types.LONGVARCHAR == nclobAttr.getType());
-*/
- }
-
- private void assertLobObjEntities(DataMap map) {
- ObjEntity blobEnt = map.getObjEntity("BlobTest");
- assertNotNull(blobEnt);
- // BLOBs should be mapped as byte[]
- ObjAttribute blobAttr = blobEnt.getAttribute("blobCol");
- assertNotNull("BlobTest.blobCol failed to doLoad", blobAttr);
- assertEquals("byte[]", blobAttr.getType());
-
-
- ObjEntity clobEnt = map.getObjEntity("ClobTest");
- assertNotNull(clobEnt);
- // CLOBs should be mapped as Strings by default
- ObjAttribute clobAttr = clobEnt.getAttribute("clobCol");
- assertNotNull(clobAttr);
- assertEquals(String.class.getName(), clobAttr.getType());
-
-
- ObjEntity nclobEnt = map.getObjEntity("NclobTest");
- assertNotNull(nclobEnt);
- // CLOBs should be mapped as Strings by default
- ObjAttribute nclobAttr = nclobEnt.getAttribute("nclobCol");
- assertNotNull(nclobAttr);
- assertEquals(String.class.getName(), nclobAttr.getType());
- }
-
- private DbEntity getDbEntity(DataMap map, String name) {
- DbEntity de = map.getDbEntity(name);
- // sometimes table names get converted to lowercase
- if (de == null) {
- de = map.getDbEntity(name.toLowerCase());
- }
-
- return de;
- }
-
- private DbAttribute getDbAttribute(DbEntity ent, String name) {
- DbAttribute da = ent.getAttribute(name);
- // sometimes table names get converted to lowercase
- if (da == null) {
- da = ent.getAttribute(name.toLowerCase());
- }
-
- return da;
- }
-
- private DataMap originalMap() {
- return runtime.getDataDomain().getDataNodes().iterator().next().getDataMaps().iterator().next();
- }
-
- /**
- * Selectively check how different types were processed.
- */
- public void checkTypes(DataMap map) {
- DbEntity dbe = getDbEntity(map, "PAINTING");
- DbEntity floatTest = getDbEntity(map, "FLOAT_TEST");
- DbEntity smallintTest = getDbEntity(map, "SMALLINT_TEST");
- DbAttribute integerAttr = getDbAttribute(dbe, "PAINTING_ID");
- DbAttribute decimalAttr = getDbAttribute(dbe, "ESTIMATED_PRICE");
- DbAttribute varcharAttr = getDbAttribute(dbe, "PAINTING_TITLE");
- DbAttribute floatAttr = getDbAttribute(floatTest, "FLOAT_COL");
- DbAttribute smallintAttr = getDbAttribute(smallintTest, "SMALLINT_COL");
-
- // check decimal
- assertTrue(msgForTypeMismatch(Types.DECIMAL, decimalAttr), Types.DECIMAL == decimalAttr.getType()
- || Types.NUMERIC == decimalAttr.getType());
- assertEquals(2, decimalAttr.getScale());
-
- // check varchar
- assertEquals(msgForTypeMismatch(Types.VARCHAR, varcharAttr), Types.VARCHAR, varcharAttr.getType());
- assertEquals(255, varcharAttr.getMaxLength());
- // check integer
- assertEquals(msgForTypeMismatch(Types.INTEGER, integerAttr), Types.INTEGER, integerAttr.getType());
- // check float
- assertTrue(msgForTypeMismatch(Types.FLOAT, floatAttr), Types.FLOAT == floatAttr.getType()
- || Types.DOUBLE == floatAttr.getType() || Types.REAL == floatAttr.getType());
-
- // check smallint
- assertTrue(msgForTypeMismatch(Types.SMALLINT, smallintAttr), Types.SMALLINT == smallintAttr.getType()
- || Types.INTEGER == smallintAttr.getType());
- }
-
- public void checkAllDBEntities(DataMap map) {
-
- for (DbEntity origEnt : originalMap().getDbEntities()) {
- DbEntity newEnt = map.getDbEntity(origEnt.getName());
- for (DbAttribute origAttr : origEnt.getAttributes()) {
- DbAttribute newAttr = newEnt.getAttribute(origAttr.getName());
- assertNotNull("No matching DbAttribute for '" + origAttr.getName(), newAttr);
- assertEquals(msgForTypeMismatch(origAttr, newAttr), origAttr.getType(), newAttr.getType());
- // length and precision doesn't have to be the same
- // it must be greater or equal
- assertTrue(origAttr.getMaxLength() <= newAttr.getMaxLength());
- assertTrue(origAttr.getScale() <= newAttr.getScale());
- }
- }
- }
-
- private static String msgForTypeMismatch(DbAttribute origAttr, DbAttribute newAttr) {
- return msgForTypeMismatch(origAttr.getType(), newAttr);
- }
-
- private static String msgForTypeMismatch(int origType, DbAttribute newAttr) {
- String nt = TypesMapping.getSqlNameByType(newAttr.getType());
- String ot = TypesMapping.getSqlNameByType(origType);
- return attrMismatch(newAttr.getName(), "expected type: <" + ot + ">, but was <" + nt + ">");
- }
-
- private static String attrMismatch(String attrName, String msg) {
- return "[Error loading attribute '" + attrName + "': " + msg + "]";
- }
-}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2f7b1d53/cayenne-server/src/test/java/org/apache/cayenne/access/DbLoaderPartialIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/DbLoaderPartialIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/DbLoaderPartialIT.java
deleted file mode 100644
index 7514b99..0000000
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/DbLoaderPartialIT.java
+++ /dev/null
@@ -1,118 +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.cayenne.access;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
-import java.util.Collection;
-
-import org.apache.cayenne.CayenneException;
-import org.apache.cayenne.access.loader.DefaultDbLoaderDelegate;
-import org.apache.cayenne.dba.DbAdapter;
-import org.apache.cayenne.di.Inject;
-import org.apache.cayenne.map.DataMap;
-import org.apache.cayenne.map.DbEntity;
-import org.apache.cayenne.unit.di.server.CayenneProjects;
-import org.apache.cayenne.unit.di.server.ServerCase;
-import org.apache.cayenne.unit.di.server.ServerCaseDataSourceFactory;
-import org.apache.cayenne.unit.di.server.UseServerRuntime;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-@UseServerRuntime(CayenneProjects.TESTMAP_PROJECT)
-public class DbLoaderPartialIT extends ServerCase {
-
- @Inject
- private DbAdapter adapter;
-
- @Inject
- private ServerCaseDataSourceFactory dataSourceFactory;
-
- private DbLoader loader;
-
- @Before
- public void setUp() throws Exception {
- loader = new DbLoader(
- dataSourceFactory.getSharedDataSource().getConnection(),
- adapter,
- new DefaultDbLoaderDelegate());
- }
-
- @After
- public void tearDown() throws Exception {
- loader.getConnection().close();
- }
-
- /**
- * Tests that FKs are properly loaded when the relationship source is not loaded. See
- * CAY-479. This test will perform two reverse engineers. The second reverse engineer
- * will skip two tables that share relationships with PAINTING. Relationships in
- * ARTIST and GALLERY should remain unmodified, and all PAINTING relationships should
- * be loaded.
- */
- @Test
- public void testPartialLoad() throws Exception {
-
- DataMap map = new DataMap();
- String tableLabel = adapter.tableTypeForTable();
-
- loader.loadDataMapFromDB(null, "%", new String[] {tableLabel}, map);
-
- Collection<?> rels = getDbEntity(map, "ARTIST").getRelationships();
- assertNotNull(rels);
- int artistRels = rels.size();
-
- rels = getDbEntity(map, "GALLERY").getRelationships();
- assertNotNull(rels);
- int galleryRels = rels.size();
-
- rels = getDbEntity(map, "PAINTING").getRelationships();
- assertNotNull(rels);
- int paintingRels = rels.size();
-
- loader.loadDataMapFromDB(null, "%", new String[] {
- tableLabel
- }, map);
-
- rels = getDbEntity(map, "ARTIST").getRelationships();
- assertNotNull(rels);
- assertEquals(artistRels, rels.size());
-
- rels = getDbEntity(map, "GALLERY").getRelationships();
- assertNotNull(rels);
- assertEquals(galleryRels, rels.size());
-
- rels = getDbEntity(map, "PAINTING").getRelationships();
- assertNotNull(rels);
- assertEquals(paintingRels, rels.size());
- }
-
- private DbEntity getDbEntity(DataMap map, String name) {
- DbEntity de = map.getDbEntity(name);
- // sometimes table names get converted to lowercase
- if (de == null) {
- de = map.getDbEntity(name.toLowerCase());
- }
-
- return de;
- }
-}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2f7b1d53/cayenne-server/src/test/java/org/apache/cayenne/access/loader/ManyToManyCandidateEntityTest.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/loader/ManyToManyCandidateEntityTest.java b/cayenne-server/src/test/java/org/apache/cayenne/access/loader/ManyToManyCandidateEntityTest.java
deleted file mode 100644
index ad4238f..0000000
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/loader/ManyToManyCandidateEntityTest.java
+++ /dev/null
@@ -1,113 +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.cayenne.access.loader;
-
-import org.apache.cayenne.configuration.ConfigurationNameMapper;
-import org.apache.cayenne.configuration.ConfigurationTree;
-import org.apache.cayenne.configuration.DataChannelDescriptor;
-import org.apache.cayenne.configuration.DataMapLoader;
-import org.apache.cayenne.configuration.DefaultConfigurationNameMapper;
-import org.apache.cayenne.configuration.XMLDataChannelDescriptorLoader;
-import org.apache.cayenne.configuration.XMLDataMapLoader;
-import org.apache.cayenne.di.AdhocObjectFactory;
-import org.apache.cayenne.di.Binder;
-import org.apache.cayenne.di.ClassLoaderManager;
-import org.apache.cayenne.di.DIBootstrap;
-import org.apache.cayenne.di.Injector;
-import org.apache.cayenne.di.Module;
-import org.apache.cayenne.di.spi.DefaultAdhocObjectFactory;
-import org.apache.cayenne.di.spi.DefaultClassLoaderManager;
-import org.apache.cayenne.map.DataMap;
-import org.apache.cayenne.map.ObjEntity;
-import org.apache.cayenne.map.Relationship;
-import org.apache.cayenne.map.naming.LegacyNameGenerator;
-import org.apache.cayenne.resource.URLResource;
-import org.junit.Before;
-import org.junit.Test;
-
-import java.net.URL;
-import java.util.ArrayList;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-
-public class ManyToManyCandidateEntityTest {
-
- private DataMap map;
-
- @Before
- public void setUp() throws Exception {
- Module testModule = new Module() {
-
- public void configure(Binder binder) {
- binder.bind(ClassLoaderManager.class).to(DefaultClassLoaderManager.class);
- binder.bind(AdhocObjectFactory.class).to(DefaultAdhocObjectFactory.class);
- binder.bind(DataMapLoader.class).to(XMLDataMapLoader.class);
- binder.bind(ConfigurationNameMapper.class).to(DefaultConfigurationNameMapper.class);
- }
- };
-
- Injector injector = DIBootstrap.createInjector(testModule);
-
- // create and initialize loader instance to test
- XMLDataChannelDescriptorLoader loader = new XMLDataChannelDescriptorLoader();
- injector.injectMembers(loader);
-
- String testConfigName = "relationship-optimisation";
- URL url = getClass().getResource("cayenne-" + testConfigName + ".xml");
-
- ConfigurationTree<DataChannelDescriptor> tree = loader.load(new URLResource(url));
-
- map = tree.getRootNode().getDataMap(testConfigName);
- }
-
- @Test
- public void testMatchingForManyToManyEntity() throws Exception {
- ObjEntity manyToManyEntity = map.getObjEntity("Table1Table2");
-
- assertNotNull(ManyToManyCandidateEntity.build(manyToManyEntity));
- }
-
- @Test
- public void testMatchingForNotManyToManyEntity() throws Exception {
- ObjEntity entity = map.getObjEntity("Table1");
-
- assertNull(ManyToManyCandidateEntity.build(entity));
- }
-
- @Test
- public void testOptimisationForManyToManyEntity() {
- ObjEntity manyToManyEntity = map.getObjEntity("Table1Table2");
-
- ManyToManyCandidateEntity.build(manyToManyEntity).optimizeRelationships(new LegacyNameGenerator());
-
- ObjEntity table1Entity = map.getObjEntity("Table1");
- ObjEntity table2Entity = map.getObjEntity("Table2");
-
- assertEquals(1, table1Entity.getRelationships().size());
- assertEquals(table2Entity, new ArrayList<Relationship>(table1Entity.getRelationships()).get(0)
- .getTargetEntity());
-
- assertEquals(1, table2Entity.getRelationships().size());
- assertEquals(table1Entity, new ArrayList<Relationship>(table2Entity.getRelationships()).get(0)
- .getTargetEntity());
- }
-
-}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2f7b1d53/cayenne-server/src/test/java/org/apache/cayenne/access/loader/filters/FiltersConfigTest.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/loader/filters/FiltersConfigTest.java b/cayenne-server/src/test/java/org/apache/cayenne/access/loader/filters/FiltersConfigTest.java
deleted file mode 100644
index a43f890..0000000
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/loader/filters/FiltersConfigTest.java
+++ /dev/null
@@ -1,93 +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.cayenne.access.loader.filters;
-
-import junit.framework.TestCase;
-
-import java.util.Collections;
-import java.util.SortedSet;
-import java.util.TreeSet;
-import java.util.regex.Pattern;
-
-public class FiltersConfigTest extends TestCase {
-
- public void testToString_01() {
- FiltersConfig config = FiltersConfig.create(null, null,
- TableFilter.everything(), PatternFilter.INCLUDE_EVERYTHING);
-
- assertEquals("Catalog: null\n" +
- " Schema: null\n" +
- " Tables: \n" +
- " Include: null Columns: ALL\n" +
- " Procedures: ALL\n", config.toString());
- }
-
- public void testToString_02() {
- FiltersConfig config = new FiltersConfig(
- new CatalogFilter("catalog_01",
- new SchemaFilter("schema_11", TableFilter.everything(), PatternFilter.INCLUDE_EVERYTHING)),
- new CatalogFilter("catalog_02",
- new SchemaFilter("schema_21", TableFilter.everything(), PatternFilter.INCLUDE_NOTHING),
- new SchemaFilter("schema_22",
- new TableFilter(
- includes(new IncludeTableFilter(null, PatternFilter.INCLUDE_NOTHING)),
- excludes("aaa")),
- PatternFilter.INCLUDE_NOTHING),
- new SchemaFilter("schema_23", TableFilter.include("include"), PatternFilter.INCLUDE_NOTHING)
- )
- );
-
- assertEquals("Catalog: catalog_01\n" +
- " Schema: schema_11\n" +
- " Tables: \n" +
- " Include: null Columns: ALL\n" +
- " Procedures: ALL\n" +
- "Catalog: catalog_02\n" +
- " Schema: schema_21\n" +
- " Tables: \n" +
- " Include: null Columns: ALL\n" +
- " Procedures: NONE\n" +
- " Schema: schema_22\n" +
- " Tables: \n" +
- " Include: null Columns: NONE\n" +
- " aaa\n" +
- " Procedures: NONE\n" +
- " Schema: schema_23\n" +
- " Tables: \n" +
- " Include: include Columns: ALL\n" +
- " Procedures: NONE\n", config.toString());
- }
-
- private SortedSet<Pattern> excludes(String ... p) {
- SortedSet<Pattern> patterns = new TreeSet<Pattern>(PatternFilter.PATTERN_COMPARATOR);
- for (String pattern : p) {
- patterns.add(PatternFilter.pattern(pattern));
- }
- return patterns;
- }
-
- protected SortedSet<IncludeTableFilter> includes(IncludeTableFilter ... filters) {
- SortedSet<IncludeTableFilter> includeTableFilters = new TreeSet<IncludeTableFilter>();
- Collections.addAll(includeTableFilters, filters);
-
- return includeTableFilters;
- }
-
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2f7b1d53/cayenne-server/src/test/java/org/apache/cayenne/access/loader/filters/IncludeFilterTest.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/loader/filters/IncludeFilterTest.java b/cayenne-server/src/test/java/org/apache/cayenne/access/loader/filters/IncludeFilterTest.java
deleted file mode 100644
index c8cbe5b..0000000
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/loader/filters/IncludeFilterTest.java
+++ /dev/null
@@ -1,34 +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.cayenne.access.loader.filters;
-
-import org.junit.Test;
-
-public class IncludeFilterTest {
-
- @Test
- public void testIsInclude() throws Exception {
-// IncludeFilter filter = new IncludeFilter(pattern("^v_.*$"));
-// assertTrue(filter.isInclude("v_new_view"));
-// assertFalse(filter.isInclude("new_view"));
-// assertFalse(filter.isInclude("view"));
-// assertFalse(filter.isInclude("girl"));
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2f7b1d53/cayenne-server/src/test/java/org/apache/cayenne/access/loader/filters/PatternFilterTest.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/loader/filters/PatternFilterTest.java b/cayenne-server/src/test/java/org/apache/cayenne/access/loader/filters/PatternFilterTest.java
deleted file mode 100644
index 5bd07d4..0000000
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/loader/filters/PatternFilterTest.java
+++ /dev/null
@@ -1,78 +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.cayenne.access.loader.filters;
-
-import junit.framework.TestCase;
-
-public class PatternFilterTest extends TestCase {
-
- public void testInclude() throws Exception {
- PatternFilter filter = new PatternFilter()
- .include("aaa")
- .include("bbb");
-
- assertTrue(filter.isInclude("aaa"));
- assertTrue(filter.isInclude("bbb"));
- assertFalse(filter.isInclude("aaaa"));
- assertFalse(filter.isInclude("aa"));
- assertFalse(filter.isInclude("abb"));
-
- filter = new PatternFilter().include("^v_.*$");
- assertTrue(filter.isInclude("v_new_view"));
- assertFalse(filter.isInclude("new_view"));
- assertFalse(filter.isInclude("view"));
- assertFalse(filter.isInclude("girl"));
- }
-
- public void testExclude() throws Exception {
- PatternFilter filter = new PatternFilter()
- .exclude("aaa")
- .exclude("bbb");
-
- assertFalse(filter.isInclude("aaa"));
- assertFalse(filter.isInclude("bbb"));
- assertTrue(filter.isInclude("aaaa"));
- assertTrue(filter.isInclude("aa"));
- assertTrue(filter.isInclude("abb"));
- }
-
- public void testIncludeExclude() throws Exception {
- PatternFilter filter = new PatternFilter()
- .include("aa.*")
- .exclude("aaa");
-
- assertFalse(filter.isInclude("aaa"));
- assertFalse(filter.isInclude("bbb"));
- assertTrue(filter.isInclude("aaaa"));
- assertTrue(filter.isInclude("aa"));
- assertFalse(filter.isInclude("abb"));
- }
-
- public void testIncludeAllFilter() {
- assertTrue(PatternFilter.INCLUDE_EVERYTHING.isInclude("qwe"));
- assertTrue(PatternFilter.INCLUDE_EVERYTHING.isInclude(""));
- assertTrue(PatternFilter.INCLUDE_EVERYTHING.isInclude(null));
- }
-
- public void testIncludeNoneFilter() {
- assertFalse(PatternFilter.INCLUDE_NOTHING.isInclude("qwe"));
- assertFalse(PatternFilter.INCLUDE_NOTHING.isInclude(""));
- assertFalse(PatternFilter.INCLUDE_NOTHING.isInclude(null));
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2f7b1d53/cayenne-server/src/test/java/org/apache/cayenne/access/loader/filters/TableFilterTest.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/loader/filters/TableFilterTest.java b/cayenne-server/src/test/java/org/apache/cayenne/access/loader/filters/TableFilterTest.java
deleted file mode 100644
index 4fad476..0000000
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/loader/filters/TableFilterTest.java
+++ /dev/null
@@ -1,91 +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.cayenne.access.loader.filters;
-
-import junit.framework.TestCase;
-
-import java.util.TreeSet;
-import java.util.regex.Pattern;
-
-public class TableFilterTest extends TestCase {
-
- public void testIncludeEverything() {
- TableFilter filter = TableFilter.everything();
-
- assertNotNull(filter.isIncludeTable("table"));
- assertNotNull(filter.isIncludeTable("aaaa"));
- assertNotNull(filter.isIncludeTable(""));
- assertNotNull(filter.isIncludeTable("alex"));
- }
-
- public void testInclude() {
- TreeSet<IncludeTableFilter> includes = new TreeSet<IncludeTableFilter>();
- includes.add(new IncludeTableFilter("aaa"));
- includes.add(new IncludeTableFilter("bb"));
-
- TableFilter filter = new TableFilter(includes, new TreeSet<Pattern>(PatternFilter.PATTERN_COMPARATOR));
-
- assertNotNull(filter.isIncludeTable("aaa"));
- assertNull(filter.isIncludeTable("aa"));
- assertNull(filter.isIncludeTable("aaaa"));
-
- assertNotNull(filter.isIncludeTable("bb"));
- assertNull(filter.isIncludeTable(""));
- assertNull(filter.isIncludeTable("bbbb"));
- }
-
-
- public void testExclude() {
- TreeSet<Pattern> excludes = new TreeSet<Pattern>(PatternFilter.PATTERN_COMPARATOR);
- excludes.add(Pattern.compile("aaa"));
- excludes.add(Pattern.compile("bb"));
-
- TreeSet<IncludeTableFilter> includes = new TreeSet<IncludeTableFilter>();
- includes.add(new IncludeTableFilter(null, PatternFilter.INCLUDE_EVERYTHING));
-
- TableFilter filter = new TableFilter(includes, excludes);
-
- assertNull(filter.isIncludeTable("aaa"));
- assertNotNull(filter.isIncludeTable("aa"));
- assertNotNull(filter.isIncludeTable("aaaa"));
-
- assertNull(filter.isIncludeTable("bb"));
- assertNotNull(filter.isIncludeTable(""));
- assertNotNull(filter.isIncludeTable("bbbb"));
- }
-
- public void testIncludeExclude() {
- TreeSet<Pattern> excludes = new TreeSet<Pattern>(PatternFilter.PATTERN_COMPARATOR);
- excludes.add(Pattern.compile("aaa"));
- excludes.add(Pattern.compile("bb"));
-
- TreeSet<IncludeTableFilter> includes = new TreeSet<IncludeTableFilter>();
- includes.add(new IncludeTableFilter("aa.*"));
-
- TableFilter filter = new TableFilter(includes, excludes);
-
- assertNull(filter.isIncludeTable("aaa"));
- assertNotNull(filter.isIncludeTable("aa"));
- assertNotNull(filter.isIncludeTable("aaaa"));
-
- assertNull(filter.isIncludeTable("bb"));
- assertNull(filter.isIncludeTable(""));
- assertNull(filter.isIncludeTable("bbbb"));
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2f7b1d53/cayenne-server/src/test/java/org/apache/cayenne/access/loader/mapper/DbTypeTest.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/loader/mapper/DbTypeTest.java b/cayenne-server/src/test/java/org/apache/cayenne/access/loader/mapper/DbTypeTest.java
deleted file mode 100644
index 8b2e8d4..0000000
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/loader/mapper/DbTypeTest.java
+++ /dev/null
@@ -1,87 +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.cayenne.access.loader.mapper;
-
-import org.junit.Test;
-
-import java.util.Iterator;
-import java.util.TreeSet;
-
-import static org.junit.Assert.*;
-
-public class DbTypeTest {
-
- @Test
- public void testCompareTo() throws Exception {
- TreeSet<DbType> set = new TreeSet<DbType>();
- set.add(new DbType("type-01", null, null, null, null));
- set.add(new DbType("type-02", null, null, null, null));
- set.add(new DbType("type-02", 1, null, null, null));
- set.add(new DbType("type-02", 2, null, null, null));
- set.add(new DbType("type-02", 2, null, null, true));
- set.add(new DbType("type-02", 2, null, null, false));
- set.add(new DbType("type-02", 2, null, 5, null));
- set.add(new DbType("type-02", 2, null, 5, false));
- set.add(new DbType("type-02", 2, null, 5, true));
- set.add(new DbType("type-02", null, 8, 5, true));
- set.add(new DbType("type-02", null, 9, 5, true));
-
- Iterator<DbType> iterator = set.iterator();
- assertEquals(new DbType("type-02", 2, null, 5, true), iterator.next());
- assertEquals(new DbType("type-02", 2, null, 5, false), iterator.next());
- assertEquals(new DbType("type-02", null, 9, 5, true), iterator.next());
- assertEquals(new DbType("type-02", null, 8, 5, true), iterator.next());
- assertEquals(new DbType("type-02", 2, null, 5, null), iterator.next());
- assertEquals(new DbType("type-02", 2, null, null, true), iterator.next());
- assertEquals(new DbType("type-02", 2, null, null, false), iterator.next());
- assertEquals(new DbType("type-02", 2, null, null, null), iterator.next());
- assertEquals(new DbType("type-02", 1, null, null, null), iterator.next());
- assertEquals(new DbType("type-02", null, null, null, null), iterator.next());
- assertEquals(new DbType("type-01", null, null, null, null), iterator.next());
- }
-
- @Test
- public void testCover() throws Exception {
- DbType typeJava = new DbType("java");
- assertTrue(typeJava.isCover(typeJava));
- assertTrue(typeJava.isCover(new DbType("java", 1, 1, 1, null)));
- assertTrue(typeJava.isCover(new DbType("java", 1, null, null, null)));
- assertTrue(typeJava.isCover(new DbType("java", null, 1, null, null)));
- assertTrue(typeJava.isCover(new DbType("java", null, null, 1, null)));
- assertTrue(typeJava.isCover(new DbType("java", null, null, null, true)));
- assertTrue(typeJava.isCover(new DbType("java", null, null, null, false)));
- assertFalse(typeJava.isCover(new DbType("java1", null, null, null, null)));
-
- DbType typeWithLength = new DbType("java", 1, null, null, null);
- assertTrue(typeWithLength.isCover(typeWithLength));
- assertTrue(typeWithLength.isCover(new DbType("java", 1, null, 1, null)));
- assertTrue(typeWithLength.isCover(new DbType("java", 1, null, 1, true)));
- assertTrue(typeWithLength.isCover(new DbType("java", 1, null, null, true)));
- assertTrue(typeWithLength.isCover(new DbType("java", 1, 1, null, true)));
- assertFalse(typeWithLength.isCover(new DbType("java", 2, null, null, null)));
- assertFalse(typeWithLength.isCover(new DbType("java", null, null, null, true)));
- assertFalse(typeWithLength.isCover(new DbType("java1", 2, null, null, null)));
-
- DbType typeWithLengthAndNotNull = new DbType("java", 1, null, null, true);
- assertTrue(typeWithLength.isCover(typeWithLengthAndNotNull));
- assertTrue(typeWithLength.isCover(new DbType("java", 1, null, 1, true)));
- assertTrue(typeWithLength.isCover(new DbType("java", 1, 1, 1, true)));
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/2f7b1d53/cayenne-server/src/test/java/org/apache/cayenne/dba/PerAdapterProviderTest.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/dba/PerAdapterProviderTest.java b/cayenne-server/src/test/java/org/apache/cayenne/dba/PerAdapterProviderTest.java
new file mode 100644
index 0000000..fb2ebcb
--- /dev/null
+++ b/cayenne-server/src/test/java/org/apache/cayenne/dba/PerAdapterProviderTest.java
@@ -0,0 +1,83 @@
+/*****************************************************************
+ * 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.cayenne.dba;
+
+import org.apache.cayenne.access.types.ExtendedType;
+import org.apache.cayenne.access.types.ExtendedTypeFactory;
+import org.apache.cayenne.configuration.RuntimeProperties;
+import org.apache.cayenne.dba.derby.DerbyAdapter;
+import org.apache.cayenne.dba.oracle.OracleAdapter;
+import org.apache.cayenne.di.DIRuntimeException;
+import org.apache.cayenne.di.Provider;
+import org.apache.cayenne.di.spi.DefaultClassLoaderManager;
+import org.apache.cayenne.log.CommonsJdbcEventLogger;
+import org.apache.cayenne.resource.ClassLoaderResourceLocator;
+import org.apache.cayenne.resource.ResourceLocator;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.util.Collections;
+import java.util.Map;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.mock;
+
+public class PerAdapterProviderTest {
+
+ private OracleAdapter oracleAdapter;
+ private DerbyAdapter derbyAdapter;
+ private AutoAdapter autoDerbyAdapter;
+
+ @Before
+ public void before() {
+
+ ResourceLocator locator = new ClassLoaderResourceLocator(new DefaultClassLoaderManager());
+ RuntimeProperties runtimeProperties = mock(RuntimeProperties.class);
+
+ this.oracleAdapter = new OracleAdapter(runtimeProperties,
+ Collections.<ExtendedType>emptyList(),
+ Collections.<ExtendedType>emptyList(),
+ Collections.<ExtendedTypeFactory>emptyList(),
+ locator);
+
+ this.derbyAdapter = new DerbyAdapter(runtimeProperties,
+ Collections.<ExtendedType>emptyList(),
+ Collections.<ExtendedType>emptyList(),
+ Collections.<ExtendedTypeFactory>emptyList(),
+ locator);
+
+ this.autoDerbyAdapter = new AutoAdapter(new Provider<DbAdapter>() {
+ @Override
+ public DbAdapter get() throws DIRuntimeException {
+ return derbyAdapter;
+ }
+ }, new CommonsJdbcEventLogger(runtimeProperties));
+ }
+
+ @Test
+ public void testGet() {
+
+ Map<String, String> map = Collections.singletonMap(DerbyAdapter.class.getName(), "x");
+ PerAdapterProvider<String> provider = new PerAdapterProvider<>(map, "default");
+
+ assertEquals("default", provider.get(oracleAdapter));
+ assertEquals("x", provider.get(derbyAdapter));
+ assertEquals("x", provider.get(autoDerbyAdapter));
+ }
+}