You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by nt...@apache.org on 2017/02/01 13:23:53 UTC

[05/10] cayenne git commit: CAY-2215 split cayenne-tools into cayenne-cgen and cayenne-ant

http://git-wip-us.apache.org/repos/asf/cayenne/blob/c63b6be2/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/filter/NamePatternMatcherTest.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/filter/NamePatternMatcherTest.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/filter/NamePatternMatcherTest.java
index d99ba09..0b4674b 100644
--- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/filter/NamePatternMatcherTest.java
+++ b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/filter/NamePatternMatcherTest.java
@@ -21,27 +21,11 @@ package org.apache.cayenne.dbsync.filter;
 
 import org.junit.Test;
 
-import static org.apache.cayenne.dbsync.filter.NamePatternMatcher.replaceWildcardInStringWithString;
 import static org.junit.Assert.assertEquals;
 
 public class NamePatternMatcherTest {
 
     /**
-     * Test pattern expansion.
-     */
-    @Test
-    public void testReplaceWildcardInStringWithString() throws Exception {
-        assertEquals(null, replaceWildcardInStringWithString("*", null, "Entity"));
-        assertEquals("*.java", replaceWildcardInStringWithString(null, "*.java", "Entity"));
-        assertEquals("Entity.java", replaceWildcardInStringWithString("*", "*.java", "Entity"));
-        assertEquals("java.Entity", replaceWildcardInStringWithString("*", "java.*", "Entity"));
-        assertEquals("Entity.Entity", replaceWildcardInStringWithString("*", "*.*", "Entity"));
-        assertEquals("EntityEntity", replaceWildcardInStringWithString("*", "**", "Entity"));
-        assertEquals("EditEntityReport.vm", replaceWildcardInStringWithString("*", "Edit*Report.vm", "Entity"));
-        assertEquals("Entity", replaceWildcardInStringWithString("*", "*", "Entity"));
-    }
-
-    /**
      * Test tokenizing
      */
     @Test

http://git-wip-us.apache.org/repos/asf/cayenne/blob/c63b6be2/cayenne-di/pom.xml
----------------------------------------------------------------------
diff --git a/cayenne-di/pom.xml b/cayenne-di/pom.xml
index 12fd6fd..1984dd3 100644
--- a/cayenne-di/pom.xml
+++ b/cayenne-di/pom.xml
@@ -29,7 +29,7 @@
 	</dependencies>
 	<build>
 		<plugins>
-			<!-- This ensures LICESNE and NOTICE inclusion in all jars -->
+			<!-- This ensures LICENSE and NOTICE inclusion in all jars -->
             <plugin>
                 <artifactId>maven-remote-resources-plugin</artifactId>
                 <executions>

http://git-wip-us.apache.org/repos/asf/cayenne/blob/c63b6be2/cayenne-joda/pom.xml
----------------------------------------------------------------------
diff --git a/cayenne-joda/pom.xml b/cayenne-joda/pom.xml
index 7e969cf..18354ff 100644
--- a/cayenne-joda/pom.xml
+++ b/cayenne-joda/pom.xml
@@ -100,7 +100,7 @@
 	</dependencies>
 	<build>
 		<plugins>
-			<!-- This ensures LICESNE and NOTICE inclusion in all jars -->
+			<!-- This ensures LICENSE and NOTICE inclusion in all jars -->
             <plugin>
                 <artifactId>maven-remote-resources-plugin</artifactId>
                 <executions>

http://git-wip-us.apache.org/repos/asf/cayenne/blob/c63b6be2/cayenne-lifecycle/pom.xml
----------------------------------------------------------------------
diff --git a/cayenne-lifecycle/pom.xml b/cayenne-lifecycle/pom.xml
index 04d62a1..b1172c7 100644
--- a/cayenne-lifecycle/pom.xml
+++ b/cayenne-lifecycle/pom.xml
@@ -68,7 +68,7 @@
 	</dependencies>
 	<build>
 		<plugins>
-			<!-- This ensures LICESNE and NOTICE inclusion in all jars -->
+			<!-- This ensures LICENSE and NOTICE inclusion in all jars -->
             <plugin>
                 <artifactId>maven-remote-resources-plugin</artifactId>
                 <executions>

http://git-wip-us.apache.org/repos/asf/cayenne/blob/c63b6be2/cayenne-project/pom.xml
----------------------------------------------------------------------
diff --git a/cayenne-project/pom.xml b/cayenne-project/pom.xml
index 4c2174c..c426335 100644
--- a/cayenne-project/pom.xml
+++ b/cayenne-project/pom.xml
@@ -82,7 +82,7 @@
 
     <build>
         <plugins>
-            <!-- This ensures LICESNE and NOTICE inclusion in all jars -->
+            <!-- This ensures LICENSE and NOTICE inclusion in all jars -->
             <plugin>
                 <artifactId>maven-remote-resources-plugin</artifactId>
                 <executions>

http://git-wip-us.apache.org/repos/asf/cayenne/blob/c63b6be2/cayenne-protostuff/pom.xml
----------------------------------------------------------------------
diff --git a/cayenne-protostuff/pom.xml b/cayenne-protostuff/pom.xml
index 0328db7..185f446 100644
--- a/cayenne-protostuff/pom.xml
+++ b/cayenne-protostuff/pom.xml
@@ -90,7 +90,7 @@
 
     <build>
         <plugins>
-            <!-- This ensures LICESNE and NOTICE inclusion in all jars -->
+            <!-- This ensures LICENSE and NOTICE inclusion in all jars -->
             <plugin>
                 <artifactId>maven-remote-resources-plugin</artifactId>
                 <executions>

http://git-wip-us.apache.org/repos/asf/cayenne/blob/c63b6be2/cayenne-server/pom.xml
----------------------------------------------------------------------
diff --git a/cayenne-server/pom.xml b/cayenne-server/pom.xml
index 1e27e2f..88d9e7b 100644
--- a/cayenne-server/pom.xml
+++ b/cayenne-server/pom.xml
@@ -166,7 +166,7 @@
 			</resource>
 		</resources>
 		<plugins>
-			<!-- This ensures LICESNE and NOTICE inclusion in all jars -->
+			<!-- This ensures LICENSE and NOTICE inclusion in all jars -->
             <plugin>
                 <artifactId>maven-remote-resources-plugin</artifactId>
                 <executions>

http://git-wip-us.apache.org/repos/asf/cayenne/blob/c63b6be2/cayenne-tools/pom.xml
----------------------------------------------------------------------
diff --git a/cayenne-tools/pom.xml b/cayenne-tools/pom.xml
deleted file mode 100644
index fb48cb3..0000000
--- a/cayenne-tools/pom.xml
+++ /dev/null
@@ -1,193 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-	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.   
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
-	<parent>
-		<artifactId>cayenne-parent</artifactId>
-		<groupId>org.apache.cayenne</groupId>
-		<version>4.0.M5-SNAPSHOT</version>
-	</parent>
-
-	<modelVersion>4.0.0</modelVersion>
-
-	<artifactId>cayenne-tools</artifactId>
-	<packaging>jar</packaging>
-	<name>cayenne-tools: Cayenne Tools</name>
-	<dependencies>
-        <!-- Compile Dependencies -->
-        <dependency>
-            <groupId>org.apache.ant</groupId>
-            <artifactId>ant</artifactId>
-            <scope>compile</scope>
-        </dependency>
-		<dependency>
-			<groupId>commons-collections</groupId>
-			<artifactId>commons-collections</artifactId>
-            <scope>compile</scope>
-		</dependency>
-		<dependency>
-			<groupId>commons-logging</groupId>
-			<artifactId>commons-logging</artifactId>
-            <scope>compile</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.velocity</groupId>
-			<artifactId>velocity</artifactId>
-            <scope>compile</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.cayenne</groupId>
-			<artifactId>cayenne-server</artifactId>
-			<version>${project.version}</version>
-            <scope>compile</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.cayenne</groupId>
-			<artifactId>cayenne-project</artifactId>
-			<version>${project.version}</version>
-            <scope>compile</scope>
-		</dependency>
-        <dependency>
-            <groupId>org.apache.cayenne</groupId>
-            <artifactId>cayenne-dbsync</artifactId>
-            <version>${project.version}</version>
-            <scope>compile</scope>
-        </dependency>
-		<dependency>
-			<groupId>foundrylogic.vpp</groupId>
-			<artifactId>vpp</artifactId>
-            <scope>compile</scope>
-		</dependency>
-
-        <!-- Test Dependencies -->
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.cayenne</groupId>
-            <artifactId>cayenne-server</artifactId>
-            <version>${project.version}</version>
-            <scope>test</scope>
-            <type>test-jar</type>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.cayenne</groupId>
-            <artifactId>cayenne-dbsync</artifactId>
-            <version>${project.version}</version>
-            <scope>test</scope>
-            <type>test-jar</type>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.cayenne.build-tools</groupId>
-            <artifactId>cayenne-test-utilities</artifactId>
-            <version>${project.version}</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.mockito</groupId>
-            <artifactId>mockito-all</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>jcl-over-slf4j</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-simple</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.ant</groupId>
-            <artifactId>ant-testutil</artifactId>
-            <version>1.9.4</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.derby</groupId>
-            <artifactId>derby</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>xmlunit</groupId>
-            <artifactId>xmlunit</artifactId>
-            <scope>test</scope>
-        </dependency>
-
-	</dependencies>
-	
-	<build>
-		<plugins>
-			<!-- This ensures LICENSE and NOTICE inclusion in all jars -->
-            <plugin>
-                <artifactId>maven-remote-resources-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>process</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <artifactId>maven-jar-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>test-jar</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-	</build>
-    <profiles>
-        <profile>
-            <id>code-quality</id>
-
-            <activation>
-                <property>
-                    <name>!fast-and-dirty</name>
-                </property>
-            </activation>
-            <build>
-                <plugins>
-                    <plugin>
-                        <artifactId>maven-checkstyle-plugin</artifactId>
-                        <!--<configuration>
-                            <suppressionsLocation>${project.basedir}/cayenne-checkstyle-suppression.xml</suppressionsLocation>
-                        </configuration>-->
-                    </plugin>
-                    <plugin>
-                        <artifactId>maven-pmd-plugin</artifactId>
-                    </plugin>
-                </plugins>
-            </build>
-        </profile>
-    </profiles>
-</project>

http://git-wip-us.apache.org/repos/asf/cayenne/blob/c63b6be2/cayenne-tools/src/main/java/org/apache/cayenne/gen/Artifact.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/gen/Artifact.java b/cayenne-tools/src/main/java/org/apache/cayenne/gen/Artifact.java
deleted file mode 100644
index fcd9118..0000000
--- a/cayenne-tools/src/main/java/org/apache/cayenne/gen/Artifact.java
+++ /dev/null
@@ -1,65 +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.gen;
-
-import org.apache.velocity.VelocityContext;
-
-/**
- * Represents a class generation "artifact" which is a facade to a metadata object used
- * for a given single generation template run.
- * 
- * @since 3.0
- */
-public interface Artifact {
-
-    public static String STRING_UTILS_KEY = "stringUtils";
-    public static String IMPORT_UTILS_KEY = "importUtils";
-
-    /**
-     * Root object, such as ObjEntity or Embeddable, etc.
-     */
-    public static String OBJECT_KEY = "object";
-    public static String SUPER_CLASS_KEY = "superClassName";
-    public static String SUPER_PACKAGE_KEY = "superPackageName";
-    public static String SUB_CLASS_KEY = "subClassName";
-    public static String SUB_PACKAGE_KEY = "subPackageName";
-    public static String BASE_CLASS_KEY = "baseClassName";
-    public static String BASE_PACKAGE_KEY = "basePackageName";
-    public static String CREATE_PROPERTY_NAMES = "createPropertyNames";
-
-    TemplateType[] getTemplateTypes(ArtifactGenerationMode mode);
-
-    String getQualifiedBaseClassName();
-
-    String getQualifiedClassName();
-
-    /**
-     * Returns a mapping metadata object for this artifact.
-     */
-    Object getObject();
-
-    /**
-     * A callback method that allows each artifact to add its own special keys to the
-     * context. Invoked from
-     * {@link ClassGenerationAction#resetContextForArtifactTemplate(Artifact, TemplateType)},
-     * after the context is initialized by code generator, so this method can use
-     * predefined keys from the context.
-     */
-    void postInitContext(VelocityContext context);
-}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/c63b6be2/cayenne-tools/src/main/java/org/apache/cayenne/gen/ArtifactGenerationMode.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/gen/ArtifactGenerationMode.java b/cayenne-tools/src/main/java/org/apache/cayenne/gen/ArtifactGenerationMode.java
deleted file mode 100644
index b0c20cc..0000000
--- a/cayenne-tools/src/main/java/org/apache/cayenne/gen/ArtifactGenerationMode.java
+++ /dev/null
@@ -1,28 +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.gen;
-
-/**
- * Code generator execution mode for a single artifact.
- * 
- * @since 3.0
- */
-public enum ArtifactGenerationMode {
-    SINGLE_CLASS, GENERATION_GAP
-}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/c63b6be2/cayenne-tools/src/main/java/org/apache/cayenne/gen/ArtifactsGenerationMode.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/gen/ArtifactsGenerationMode.java b/cayenne-tools/src/main/java/org/apache/cayenne/gen/ArtifactsGenerationMode.java
deleted file mode 100644
index e76c172..0000000
--- a/cayenne-tools/src/main/java/org/apache/cayenne/gen/ArtifactsGenerationMode.java
+++ /dev/null
@@ -1,40 +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.gen;
-
-/**
- * Code generator execution mode for a collection of artifacts.
- * 
- * @since 3.0
- */
-public enum ArtifactsGenerationMode {
-
-    // TODO: andrus 12/9/2007 - label names are old... need to call it something else...
-    DATAMAP("datamap"), ENTITY("entity"), ALL("all");
-
-    private String label;
-
-    private ArtifactsGenerationMode(String label) {
-        this.label = label;
-    }
-
-    public String getLabel() {
-        return label;
-    }
-}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/c63b6be2/cayenne-tools/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java b/cayenne-tools/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java
deleted file mode 100644
index 9c5c932..0000000
--- a/cayenne-tools/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java
+++ /dev/null
@@ -1,584 +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.gen;
-
-import org.apache.cayenne.CayenneRuntimeException;
-import org.apache.cayenne.dbsync.filter.NamePatternMatcher;
-import org.apache.cayenne.map.DataMap;
-import org.apache.cayenne.map.Embeddable;
-import org.apache.cayenne.map.ObjEntity;
-import org.apache.cayenne.map.QueryDescriptor;
-import org.apache.commons.logging.Log;
-import org.apache.velocity.Template;
-import org.apache.velocity.VelocityContext;
-import org.apache.velocity.app.VelocityEngine;
-import org.apache.velocity.runtime.RuntimeConstants;
-import org.apache.velocity.runtime.log.NullLogSystem;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.OutputStreamWriter;
-import java.io.Writer;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Properties;
-
-public class ClassGenerationAction {
-	static final String TEMPLATES_DIR_NAME = "templates/v1_2/";
-
-	public static final String SINGLE_CLASS_TEMPLATE = TEMPLATES_DIR_NAME + "singleclass.vm";
-	public static final String SUBCLASS_TEMPLATE = TEMPLATES_DIR_NAME + "subclass.vm";
-	public static final String SUPERCLASS_TEMPLATE = TEMPLATES_DIR_NAME + "superclass.vm";
-
-	public static final String EMBEDDABLE_SINGLE_CLASS_TEMPLATE = TEMPLATES_DIR_NAME + "embeddable-singleclass.vm";
-	public static final String EMBEDDABLE_SUBCLASS_TEMPLATE = TEMPLATES_DIR_NAME + "embeddable-subclass.vm";
-	public static final String EMBEDDABLE_SUPERCLASS_TEMPLATE = TEMPLATES_DIR_NAME + "embeddable-superclass.vm";
-
-	public static final String DATAMAP_SINGLE_CLASS_TEMPLATE = TEMPLATES_DIR_NAME + "datamap-singleclass.vm";
-	public static final String DATAMAP_SUBCLASS_TEMPLATE = TEMPLATES_DIR_NAME + "datamap-subclass.vm";
-	public static final String DATAMAP_SUPERCLASS_TEMPLATE = TEMPLATES_DIR_NAME + "datamap-superclass.vm";
-
-	public static final String SUPERCLASS_PREFIX = "_";
-	private static final String WILDCARD = "*";
-
-	protected Collection<Artifact> artifacts;
-
-	protected String superPkg;
-	protected DataMap dataMap;
-
-	protected ArtifactsGenerationMode artifactsGenerationMode;
-	protected boolean makePairs;
-
-	protected Log logger;
-	protected File destDir;
-	protected boolean overwrite;
-	protected boolean usePkgPath;
-
-	protected String template;
-	protected String superTemplate;
-	protected String embeddableTemplate;
-	protected String embeddableSuperTemplate;
-	protected String queryTemplate;
-	protected String querySuperTemplate;
-	protected long timestamp;
-	protected String outputPattern;
-	protected String encoding;
-	protected boolean createPropertyNames;
-
-	// runtime ivars
-	protected VelocityContext context;
-	protected Map<String, Template> templateCache;
-
-	public ClassGenerationAction() {
-		this.outputPattern = "*.java";
-		this.timestamp = System.currentTimeMillis();
-		this.usePkgPath = true;
-		this.makePairs = true;
-		this.context = new VelocityContext();
-		this.templateCache = new HashMap<>(5);
-
-		this.artifacts = new ArrayList<>();
-	}
-
-	protected String defaultTemplateName(TemplateType type) {
-		switch (type) {
-		case ENTITY_SINGLE_CLASS:
-			return ClassGenerationAction.SINGLE_CLASS_TEMPLATE;
-		case ENTITY_SUBCLASS:
-			return ClassGenerationAction.SUBCLASS_TEMPLATE;
-		case ENTITY_SUPERCLASS:
-			return ClassGenerationAction.SUPERCLASS_TEMPLATE;
-		case EMBEDDABLE_SUBCLASS:
-			return ClassGenerationAction.EMBEDDABLE_SUBCLASS_TEMPLATE;
-		case EMBEDDABLE_SUPERCLASS:
-			return ClassGenerationAction.EMBEDDABLE_SUPERCLASS_TEMPLATE;
-		case EMBEDDABLE_SINGLE_CLASS:
-			return ClassGenerationAction.EMBEDDABLE_SINGLE_CLASS_TEMPLATE;
-		case DATAMAP_SINGLE_CLASS:
-			return ClassGenerationAction.DATAMAP_SINGLE_CLASS_TEMPLATE;
-		case DATAMAP_SUPERCLASS:
-			return ClassGenerationAction.DATAMAP_SUPERCLASS_TEMPLATE;
-		case DATAMAP_SUBCLASS:
-			return ClassGenerationAction.DATAMAP_SUBCLASS_TEMPLATE;
-		default:
-			throw new IllegalArgumentException("Invalid template type: " + type);
-		}
-	}
-
-	protected String customTemplateName(TemplateType type) {
-		switch (type) {
-		case ENTITY_SINGLE_CLASS:
-			return template;
-		case ENTITY_SUBCLASS:
-			return template;
-		case ENTITY_SUPERCLASS:
-			return superTemplate;
-		case EMBEDDABLE_SUBCLASS:
-			return embeddableTemplate;
-		case EMBEDDABLE_SUPERCLASS:
-			return embeddableSuperTemplate;
-		case DATAMAP_SINGLE_CLASS:
-			return queryTemplate;
-		case DATAMAP_SUPERCLASS:
-			return querySuperTemplate;
-		case DATAMAP_SUBCLASS:
-			return queryTemplate;
-		default:
-			throw new IllegalArgumentException("Invalid template type: " + type);
-		}
-	}
-
-	/**
-	 * Returns a String used to prefix class name to create a generated
-	 * superclass. Default value is "_".
-	 */
-	protected String getSuperclassPrefix() {
-		return ClassGenerationAction.SUPERCLASS_PREFIX;
-	}
-
-	/**
-	 * VelocityContext initialization method called once per artifact.
-	 */
-	protected void resetContextForArtifact(Artifact artifact) {
-		StringUtils stringUtils = StringUtils.getInstance();
-
-		String qualifiedClassName = artifact.getQualifiedClassName();
-		String packageName = stringUtils.stripClass(qualifiedClassName);
-		String className = stringUtils.stripPackageName(qualifiedClassName);
-
-		String qualifiedBaseClassName = artifact.getQualifiedBaseClassName();
-		String basePackageName = stringUtils.stripClass(qualifiedBaseClassName);
-		String baseClassName = stringUtils.stripPackageName(qualifiedBaseClassName);
-
-		String superClassName = getSuperclassPrefix() + stringUtils.stripPackageName(qualifiedClassName);
-
-		String superPackageName = this.superPkg;
-		if (superPackageName == null) {
-			superPackageName = packageName + ".auto";
-		}
-
-		context.put(Artifact.BASE_CLASS_KEY, baseClassName);
-		context.put(Artifact.BASE_PACKAGE_KEY, basePackageName);
-
-		context.put(Artifact.SUB_CLASS_KEY, className);
-		context.put(Artifact.SUB_PACKAGE_KEY, packageName);
-
-		context.put(Artifact.SUPER_CLASS_KEY, superClassName);
-		context.put(Artifact.SUPER_PACKAGE_KEY, superPackageName);
-
-		context.put(Artifact.OBJECT_KEY, artifact.getObject());
-		context.put(Artifact.STRING_UTILS_KEY, stringUtils);
-
-		context.put(Artifact.CREATE_PROPERTY_NAMES, createPropertyNames);
-	}
-
-	/**
-	 * VelocityContext initialization method called once per each artifact and
-	 * template type combination.
-	 */
-	protected void resetContextForArtifactTemplate(Artifact artifact, TemplateType templateType) {
-		context.put(Artifact.IMPORT_UTILS_KEY, new ImportUtils());
-		artifact.postInitContext(context);
-	}
-
-	/**
-	 * Executes class generation once per each artifact.
-	 */
-	public void execute() throws Exception {
-
-		validateAttributes();
-
-		try {
-			for (Artifact artifact : artifacts) {
-				execute(artifact);
-			}
-		} finally {
-			// must reset engine at the end of class generator run to avoid
-			// memory
-			// leaks and stale templates
-			this.templateCache.clear();
-		}
-	}
-
-	/**
-	 * Executes class generation for a single artifact.
-	 */
-	protected void execute(Artifact artifact) throws Exception {
-
-		resetContextForArtifact(artifact);
-
-		ArtifactGenerationMode artifactMode = makePairs ? ArtifactGenerationMode.GENERATION_GAP
-				: ArtifactGenerationMode.SINGLE_CLASS;
-
-		TemplateType[] templateTypes = artifact.getTemplateTypes(artifactMode);
-		for (TemplateType type : templateTypes) {
-
-			try (Writer out = openWriter(type);) {
-				if (out != null) {
-
-					resetContextForArtifactTemplate(artifact, type);
-					getTemplate(type).merge(context, out);
-				}
-			}
-		}
-	}
-
-	protected Template getTemplate(TemplateType type) throws Exception {
-
-		String templateName = customTemplateName(type);
-		if (templateName == null) {
-			templateName = defaultTemplateName(type);
-		}
-
-		// Velocity < 1.5 has some memory problems, so we will create a
-		// VelocityEngine
-		// every time, and store templates in an internal cache, to avoid
-		// uncontrolled
-		// memory leaks... Presumably 1.5 fixes it.
-
-		Template template = templateCache.get(templateName);
-
-		if (template == null) {
-
-			Properties props = new Properties();
-
-			// null logger that will prevent velocity.log from being generated
-			props.put(RuntimeConstants.RUNTIME_LOG_LOGSYSTEM_CLASS, NullLogSystem.class.getName());
-			props.put("resource.loader", "cayenne");
-			props.put("cayenne.resource.loader.class", ClassGeneratorResourceLoader.class.getName());
-			props.put("cayenne.resource.loader.cache", "false");
-
-			VelocityEngine velocityEngine = new VelocityEngine();
-			velocityEngine.init(props);
-
-			template = velocityEngine.getTemplate(templateName);
-			templateCache.put(templateName, template);
-		}
-
-		return template;
-	}
-
-	/**
-	 * Validates the state of this class generator. Throws
-	 * CayenneRuntimeException if it is in an inconsistent state. Called
-	 * internally from "execute".
-	 */
-	protected void validateAttributes() {
-		if (destDir == null) {
-			throw new CayenneRuntimeException("'destDir' attribute is missing.");
-		}
-
-		if (!destDir.isDirectory()) {
-			throw new CayenneRuntimeException("'destDir' is not a directory.");
-		}
-
-		if (!destDir.canWrite()) {
-			throw new CayenneRuntimeException("Do not have write permissions for " + destDir);
-		}
-	}
-
-	/**
-	 * Sets the destDir.
-	 */
-	public void setDestDir(File destDir) {
-		this.destDir = destDir;
-	}
-
-	/**
-	 * Sets <code>overwrite</code> property.
-	 */
-	public void setOverwrite(boolean overwrite) {
-		this.overwrite = overwrite;
-	}
-
-	/**
-	 * Sets <code>makepairs</code> property.
-	 */
-	public void setMakePairs(boolean makePairs) {
-		this.makePairs = makePairs;
-	}
-
-	/**
-	 * Sets <code>template</code> property.
-	 */
-	public void setTemplate(String template) {
-		this.template = template;
-	}
-
-	/**
-	 * Sets <code>superTemplate</code> property.
-	 */
-	public void setSuperTemplate(String superTemplate) {
-		this.superTemplate = superTemplate;
-	}
-
-	public void setQueryTemplate(String queryTemplate) {
-		this.queryTemplate = queryTemplate;
-	}
-
-	public void setQuerySuperTemplate(String querySuperTemplate) {
-		this.querySuperTemplate = querySuperTemplate;
-	}
-
-	/**
-	 * Sets <code>usepkgpath</code> property.
-	 */
-	public void setUsePkgPath(boolean usePkgPath) {
-		this.usePkgPath = usePkgPath;
-	}
-
-	/**
-	 * Sets <code>outputPattern</code> property.
-	 */
-	public void setOutputPattern(String outputPattern) {
-		this.outputPattern = outputPattern;
-	}
-
-	/**
-	 * Sets <code>createPropertyNames</code> property.
-	 */
-	public void setCreatePropertyNames(boolean createPropertyNames) {
-		this.createPropertyNames = createPropertyNames;
-	}
-
-	/**
-	 * Opens a Writer to write generated output. Returned Writer is mapped to a
-	 * filesystem file (although subclasses may override that). File location is
-	 * determined from the current state of VelocityContext and the TemplateType
-	 * passed as a parameter. Writer encoding is determined from the value of
-	 * the "encoding" property.
-	 */
-	protected Writer openWriter(TemplateType templateType) throws Exception {
-
-		File outFile = (templateType.isSuperclass()) ? fileForSuperclass() : fileForClass();
-		if (outFile == null) {
-			return null;
-		}
-
-		if (logger != null) {
-			String label = templateType.isSuperclass() ? "superclass" : "class";
-			logger.info("Generating " + label + " file: " + outFile.getCanonicalPath());
-		}
-
-		// return writer with specified encoding
-		FileOutputStream out = new FileOutputStream(outFile);
-
-		return (encoding != null) ? new OutputStreamWriter(out, encoding) : new OutputStreamWriter(out);
-	}
-
-	/**
-	 * Returns a target file where a generated superclass must be saved. If null
-	 * is returned, class shouldn't be generated.
-	 */
-	protected File fileForSuperclass() throws Exception {
-
-		String packageName = (String) context.get(Artifact.SUPER_PACKAGE_KEY);
-		String className = (String) context.get(Artifact.SUPER_CLASS_KEY);
-
-		String filename = NamePatternMatcher.replaceWildcardInStringWithString(WILDCARD, outputPattern, className);
-		File dest = new File(mkpath(destDir, packageName), filename);
-
-		// Ignore if the destination is newer than the map
-		// (internal timestamp), i.e. has been generated after the map was
-		// last saved AND the template is older than the destination file
-		if (dest.exists() && !isOld(dest)) {
-
-			if (superTemplate == null) {
-				return null;
-			}
-
-			File superTemplateFile = new File(superTemplate);
-			if (superTemplateFile.lastModified() < dest.lastModified()) {
-				return null;
-			}
-		}
-
-		return dest;
-	}
-
-	/**
-	 * Returns a target file where a generated class must be saved. If null is
-	 * returned, class shouldn't be generated.
-	 */
-	protected File fileForClass() throws Exception {
-
-		String packageName = (String) context.get(Artifact.SUB_PACKAGE_KEY);
-		String className = (String) context.get(Artifact.SUB_CLASS_KEY);
-
-		String filename = NamePatternMatcher.replaceWildcardInStringWithString(WILDCARD, outputPattern, className);
-		File dest = new File(mkpath(destDir, packageName), filename);
-
-		if (dest.exists()) {
-			// no overwrite of subclasses
-			if (makePairs) {
-				return null;
-			}
-
-			// skip if said so
-			if (!overwrite) {
-				return null;
-			}
-
-			// Ignore if the destination is newer than the map
-			// (internal timestamp), i.e. has been generated after the map was
-			// last saved AND the template is older than the destination file
-			if (!isOld(dest)) {
-
-				if (template == null) {
-					return null;
-				}
-
-				File templateFile = new File(template);
-				if (templateFile.lastModified() < dest.lastModified()) {
-					return null;
-				}
-			}
-		}
-
-		return dest;
-	}
-
-	/**
-	 * Returns true if <code>file</code> parameter is older than internal
-	 * timestamp of this class generator.
-	 */
-	protected boolean isOld(File file) {
-		return file.lastModified() <= timestamp;
-	}
-
-	/**
-	 * Returns a File object corresponding to a directory where files that
-	 * belong to <code>pkgName</code> package should reside. Creates any missing
-	 * diectories below <code>dest</code>.
-	 */
-	protected File mkpath(File dest, String pkgName) throws Exception {
-
-		if (!usePkgPath || pkgName == null) {
-			return dest;
-		}
-
-		String path = pkgName.replace('.', File.separatorChar);
-		File fullPath = new File(dest, path);
-		if (!fullPath.isDirectory() && !fullPath.mkdirs()) {
-			throw new Exception("Error making path: " + fullPath);
-		}
-
-		return fullPath;
-	}
-
-	public void setTimestamp(long timestamp) {
-		this.timestamp = timestamp;
-	}
-
-	/**
-	 * Sets file encoding. If set to null, default system encoding will be used.
-	 */
-	public void setEncoding(String encoding) {
-		this.encoding = encoding;
-	}
-
-	/**
-	 * Sets "superPkg" property value.
-	 */
-	public void setSuperPkg(String superPkg) {
-		this.superPkg = superPkg;
-	}
-
-	/**
-	 * @param dataMap
-	 *            The dataMap to set.
-	 */
-	public void setDataMap(DataMap dataMap) {
-		this.dataMap = dataMap;
-	}
-
-	/**
-	 * Adds entities to the internal entity list.
-	 */
-	public void addEntities(Collection<ObjEntity> entities) {
-		if (artifactsGenerationMode == ArtifactsGenerationMode.ENTITY
-				|| artifactsGenerationMode == ArtifactsGenerationMode.ALL) {
-			if (entities != null) {
-				for (ObjEntity entity : entities) {
-					artifacts.add(new EntityArtifact(entity));
-				}
-			}
-		}
-	}
-
-	public void addEmbeddables(Collection<Embeddable> embeddables) {
-		if (artifactsGenerationMode == ArtifactsGenerationMode.ENTITY
-				|| artifactsGenerationMode == ArtifactsGenerationMode.ALL) {
-			if (embeddables != null) {
-				for (Embeddable embeddable : embeddables) {
-					artifacts.add(new EmbeddableArtifact(embeddable));
-				}
-			}
-		}
-	}
-
-	public void addQueries(Collection<QueryDescriptor> queries) {
-		if (artifactsGenerationMode == ArtifactsGenerationMode.DATAMAP
-				|| artifactsGenerationMode == ArtifactsGenerationMode.ALL) {
-
-			// TODO: andrus 10.12.2010 - why not also check for empty query
-			// list?? Or
-			// create a better API for enabling DataMapArtifact
-			if (queries != null) {
-				artifacts.add(new DataMapArtifact(dataMap, queries));
-			}
-		}
-	}
-
-	/**
-	 * Sets an optional shared VelocityContext. Useful with tools like VPP that
-	 * can set custom values in the context, not known to Cayenne.
-	 */
-	public void setContext(VelocityContext context) {
-		this.context = context;
-	}
-
-	/**
-	 * Injects an optional logger that will be used to trace generated files at
-	 * the info level.
-	 */
-	public void setLogger(Log logger) {
-		this.logger = logger;
-	}
-
-	public void setEmbeddableTemplate(String embeddableTemplate) {
-		this.embeddableTemplate = embeddableTemplate;
-	}
-
-	public void setEmbeddableSuperTemplate(String embeddableSuperTemplate) {
-		this.embeddableSuperTemplate = embeddableSuperTemplate;
-	}
-
-	public void setArtifactsGenerationMode(String mode) {
-		if (ArtifactsGenerationMode.ENTITY.getLabel().equalsIgnoreCase(mode)) {
-			this.artifactsGenerationMode = ArtifactsGenerationMode.ENTITY;
-		} else if (ArtifactsGenerationMode.DATAMAP.getLabel().equalsIgnoreCase(mode)) {
-			this.artifactsGenerationMode = ArtifactsGenerationMode.DATAMAP;
-		} else {
-			this.artifactsGenerationMode = ArtifactsGenerationMode.ALL;
-		}
-	}
-}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/c63b6be2/cayenne-tools/src/main/java/org/apache/cayenne/gen/ClassGeneratorResourceLoader.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/gen/ClassGeneratorResourceLoader.java b/cayenne-tools/src/main/java/org/apache/cayenne/gen/ClassGeneratorResourceLoader.java
deleted file mode 100644
index 8e8a1ee..0000000
--- a/cayenne-tools/src/main/java/org/apache/cayenne/gen/ClassGeneratorResourceLoader.java
+++ /dev/null
@@ -1,102 +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.gen;
-
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-
-import org.apache.velocity.exception.ResourceNotFoundException;
-import org.apache.velocity.runtime.resource.loader.FileResourceLoader;
-
-/**
- * Velocity template resource loader customized for Cayenne use. Supports loading
- * templates from the thread ClassLoader and from relative and absolute paths.
- * 
- * @since 1.2
- */
-// must be public top-level class as it is
-// instantiated via reflection by Velocity
-public class ClassGeneratorResourceLoader extends FileResourceLoader {
-
-    /**
-     * Returns resource as InputStream. First calls super implementation. If resource
-     * wasn't found, it attempts to load it from current directory or as an absolute path.
-     */
-    @Override
-    public synchronized InputStream getResourceStream(String name)
-            throws ResourceNotFoundException {
-
-        InputStream stream = loadFromRelativePath(name);
-        if (stream != null) {
-            return stream;
-        }
-
-        stream = loadFromAbsPath(name);
-        if (stream != null) {
-            return stream;
-        }
-
-        stream = loadFromThreadClassLoader(name);
-        if (stream != null) {
-            return stream;
-        }
-
-        stream = loadFromThisClassLoader(name);
-        if (stream != null) {
-            return stream;
-        }
-
-        throw new ResourceNotFoundException("Couldn't find resource '"
-                + name
-                + "'. Searched filesystem path and classpath");
-    }
-
-    protected InputStream loadFromRelativePath(String name) {
-        try {
-            return super.getResourceStream(name);
-        }
-        catch (ResourceNotFoundException rnfex) {
-            return null;
-        }
-    }
-
-    protected InputStream loadFromAbsPath(String name) {
-        try {
-            File file = new File(name);
-            return (file.canRead()) ? new BufferedInputStream(new FileInputStream(file
-                    .getAbsolutePath())) : null;
-
-        }
-        catch (FileNotFoundException fnfe) {
-            return null;
-        }
-    }
-
-    protected InputStream loadFromThreadClassLoader(String name) {
-        return Thread.currentThread().getContextClassLoader().getResourceAsStream(name);
-    }
-
-    protected InputStream loadFromThisClassLoader(String name) {
-        return getClass().getClassLoader().getResourceAsStream(name);
-    }
-}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/c63b6be2/cayenne-tools/src/main/java/org/apache/cayenne/gen/ClientClassGenerationAction.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/gen/ClientClassGenerationAction.java b/cayenne-tools/src/main/java/org/apache/cayenne/gen/ClientClassGenerationAction.java
deleted file mode 100644
index f36fd68..0000000
--- a/cayenne-tools/src/main/java/org/apache/cayenne/gen/ClientClassGenerationAction.java
+++ /dev/null
@@ -1,79 +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.gen;
-
-import java.util.Collection;
-
-import org.apache.cayenne.map.ObjEntity;
-import org.apache.cayenne.map.QueryDescriptor;
-
-/**
- * @since 3.0
- */
-public class ClientClassGenerationAction extends ClassGenerationAction {
-
-    public static final String SUBCLASS_TEMPLATE = TEMPLATES_DIR_NAME + "client-subclass.vm";
-    public static final String SUPERCLASS_TEMPLATE = TEMPLATES_DIR_NAME + "client-superclass.vm";
-    
-    public static final String DMAP_SINGLE_CLASS_TEMPLATE = TEMPLATES_DIR_NAME + "client-datamap-singleclass.vm";
-    public static final String DMAP_SUBCLASS_TEMPLATE = TEMPLATES_DIR_NAME + "client-datamap-subclass.vm";
-    public static final String DMAP_SUPERCLASS_TEMPLATE = TEMPLATES_DIR_NAME + "client-datamap-superclass.vm";
-    
-    public static final String CLIENT_SUPERCLASS_PREFIX = "_Client";
-
-    @Override
-    protected String defaultTemplateName(TemplateType type) {
-        switch (type) {
-            case ENTITY_SUBCLASS:
-                return ClientClassGenerationAction.SUBCLASS_TEMPLATE;
-            case ENTITY_SUPERCLASS:
-                return ClientClassGenerationAction.SUPERCLASS_TEMPLATE;
-            case EMBEDDABLE_SUBCLASS:
-                return ClassGenerationAction.EMBEDDABLE_SUBCLASS_TEMPLATE;
-            case EMBEDDABLE_SUPERCLASS:
-                return ClassGenerationAction.EMBEDDABLE_SUPERCLASS_TEMPLATE;
-            
-            case DATAMAP_SUPERCLASS:
-                return ClientClassGenerationAction.DMAP_SUPERCLASS_TEMPLATE;
-            case DATAMAP_SUBCLASS:
-                return ClientClassGenerationAction.DMAP_SUBCLASS_TEMPLATE;
-            default:
-                throw new IllegalArgumentException("Unsupported template type: " + type);
-        }
-    }
-
-    @Override
-    public void addEntities(Collection<ObjEntity> entities) {
-        if (entities != null) {
-            for (ObjEntity entity : entities) {
-                artifacts.add(new ClientEntityArtifact(entity));
-            }
-        }
-    }
-
-    @Override
-    public void addQueries(Collection<QueryDescriptor> queries) {
-        if (artifactsGenerationMode == ArtifactsGenerationMode.DATAMAP
-                || artifactsGenerationMode == ArtifactsGenerationMode.ALL) {
-            if (queries != null) {
-                artifacts.add(new ClientDataMapArtifact(dataMap, queries));
-            }
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/c63b6be2/cayenne-tools/src/main/java/org/apache/cayenne/gen/ClientDataMapArtifact.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/gen/ClientDataMapArtifact.java b/cayenne-tools/src/main/java/org/apache/cayenne/gen/ClientDataMapArtifact.java
deleted file mode 100644
index a9d1dfe..0000000
--- a/cayenne-tools/src/main/java/org/apache/cayenne/gen/ClientDataMapArtifact.java
+++ /dev/null
@@ -1,50 +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.gen;
-
-import org.apache.cayenne.map.DataMap;
-import org.apache.cayenne.map.QueryDescriptor;
-import org.apache.cayenne.util.Util;
-
-import java.util.Collection;
-
-public class ClientDataMapArtifact extends DataMapArtifact {
-
-    public ClientDataMapArtifact(DataMap dataMap, Collection<QueryDescriptor> queries) {
-        super(dataMap, queries);
-
-    }
-
-    @Override
-    public String getQualifiedBaseClassName() {
-
-        return dataMap.getDefaultClientSuperclass();
-    }
-
-    @Override
-    public String getQualifiedClassName() {
-        String clientPrefix = "";
-        if (Util.nullSafeEquals(dataMap.getDefaultClientPackage(), dataMap.getDefaultPackage())) {
-            clientPrefix = "Client_";
-        }
-
-        return dataMap.getNameWithDefaultClientPackage(Util.underscoredToJava(clientPrefix + dataMap.getName(), true));
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cayenne/blob/c63b6be2/cayenne-tools/src/main/java/org/apache/cayenne/gen/ClientEntityArtifact.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/gen/ClientEntityArtifact.java b/cayenne-tools/src/main/java/org/apache/cayenne/gen/ClientEntityArtifact.java
deleted file mode 100644
index d20a2d4..0000000
--- a/cayenne-tools/src/main/java/org/apache/cayenne/gen/ClientEntityArtifact.java
+++ /dev/null
@@ -1,45 +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.gen;
-
-import org.apache.cayenne.PersistentObject;
-import org.apache.cayenne.map.ObjEntity;
-
-/**
- * Client code generation artifact based on ObjEntity.
- * 
- * @since 3.0
- */
-public class ClientEntityArtifact extends EntityArtifact {
-
-    public ClientEntityArtifact(ObjEntity entity) {
-        super(entity);
-    }
-
-    @Override
-    public String getQualifiedBaseClassName() {
-        return (entity.getClientSuperClassName() != null) ? entity
-                .getClientSuperClassName() : PersistentObject.class.getName();
-    }
-
-    @Override
-    public String getQualifiedClassName() {
-        return entity.getClientClassName();
-    }
-}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/c63b6be2/cayenne-tools/src/main/java/org/apache/cayenne/gen/DataMapArtifact.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/gen/DataMapArtifact.java b/cayenne-tools/src/main/java/org/apache/cayenne/gen/DataMapArtifact.java
deleted file mode 100644
index 8e60495..0000000
--- a/cayenne-tools/src/main/java/org/apache/cayenne/gen/DataMapArtifact.java
+++ /dev/null
@@ -1,137 +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.gen;
-
-import org.apache.cayenne.map.DataMap;
-import org.apache.cayenne.map.QueryDescriptor;
-import org.apache.cayenne.util.Util;
-import org.apache.velocity.VelocityContext;
-
-import java.util.Collection;
-import java.util.LinkedList;
-
-/**
- * {@link Artifact} facade for a DataMap.
- * 
- * @since 3.0
- */
-public class DataMapArtifact implements Artifact {
-
-    public static final String DATAMAP_UTILS_KEY = "dataMapUtils";
-
-    protected DataMap dataMap;
-    protected Collection<QueryDescriptor> selectQueries;
-    protected Collection<QueryDescriptor> sqlTemplateQueries;
-    protected Collection<QueryDescriptor> procedureQueries;
-    protected Collection<QueryDescriptor> ejbqlQueries;
-    protected Collection<String> queryNames;
-
-    public DataMapArtifact(DataMap dataMap, Collection<QueryDescriptor> queries) {
-        this.dataMap = dataMap;
-        selectQueries = new LinkedList<>();
-        sqlTemplateQueries = new LinkedList<>();
-        procedureQueries = new LinkedList<>();
-        ejbqlQueries = new LinkedList<>();
-        queryNames = new LinkedList<>();
-        addQueries(queries);
-    }
-
-    public String getQualifiedBaseClassName() {
-        return Object.class.getName();
-    }
-
-    public String getQualifiedClassName() {
-        return dataMap.getNameWithDefaultPackage(Util.underscoredToJava(dataMap.getName(), true));
-    }
-
-    public Object getObject() {
-        return this;
-    }
-
-    public void postInitContext(VelocityContext context) {
-        DataMapUtils dataMapUtils = new DataMapUtils();
-        context.put(DATAMAP_UTILS_KEY, dataMapUtils);
-    }
-
-    public TemplateType[] getTemplateTypes(ArtifactGenerationMode mode) {
-        switch (mode) {
-            case SINGLE_CLASS:
-                return new TemplateType[] {
-                    TemplateType.DATAMAP_SINGLE_CLASS
-                };
-            case GENERATION_GAP:
-                return new TemplateType[] {
-                        TemplateType.DATAMAP_SUPERCLASS, TemplateType.DATAMAP_SUBCLASS
-                };
-            default:
-                return new TemplateType[0];
-        }
-    }
-
-    private void addQueries(Collection<QueryDescriptor> queries) {
-        if (queries != null) {
-            for (QueryDescriptor query : queries) {
-                addQuery(query);
-            }
-        }
-    }
-
-    private void addQuery(QueryDescriptor query) {
-
-        switch (query.getType()) {
-            case QueryDescriptor.SELECT_QUERY:
-                selectQueries.add(query);
-                break;
-            case QueryDescriptor.PROCEDURE_QUERY:
-                procedureQueries.add(query);
-                break;
-            case QueryDescriptor.SQL_TEMPLATE:
-                sqlTemplateQueries.add(query);
-                break;
-            case QueryDescriptor.EJBQL_QUERY:
-                ejbqlQueries.add(query);
-                break;
-        }
-
-        if (query.getName() != null && !"".equals(query.getName())) {
-            queryNames.add(query.getName());
-        }
-    }
-
-    public Collection<QueryDescriptor> getSelectQueries() {
-        return selectQueries;
-    }
-
-    public boolean hasSelectQueries() {
-        return selectQueries.size() > 0;
-    }
-
-    public boolean hasQueryNames() {
-        return !queryNames.isEmpty();
-    }
-
-    public Collection<String> getQueryNames() {
-        return queryNames;
-    }
-
-    public DataMap getDataMap() {
-    	return dataMap;
-    }
-}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/c63b6be2/cayenne-tools/src/main/java/org/apache/cayenne/gen/DataMapUtils.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/gen/DataMapUtils.java b/cayenne-tools/src/main/java/org/apache/cayenne/gen/DataMapUtils.java
deleted file mode 100644
index a0013cc..0000000
--- a/cayenne-tools/src/main/java/org/apache/cayenne/gen/DataMapUtils.java
+++ /dev/null
@@ -1,219 +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.gen;
-
-import org.apache.cayenne.exp.Expression;
-import org.apache.cayenne.exp.ExpressionException;
-import org.apache.cayenne.exp.ExpressionParameter;
-import org.apache.cayenne.exp.parser.ASTList;
-import org.apache.cayenne.exp.parser.ASTObjPath;
-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.PathComponent;
-import org.apache.cayenne.map.QueryDescriptor;
-import org.apache.cayenne.map.SelectQueryDescriptor;
-import org.apache.cayenne.query.Ordering;
-import org.apache.cayenne.util.CayenneMapEntry;
-import org.apache.cayenne.util.Util;
-import org.apache.commons.collections.set.ListOrderedSet;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * Attributes and Methods for working with Queries.
- *
- * @since 3.0
- */
-public class DataMapUtils {
-
-	Map<String, Map<String, String>> queriesMap = new HashMap<>();
-
-	/**
-	 * Return valid method name based on query name (replace all illegal
-	 * characters with underscore '_').
-	 * 
-	 * @param query
-	 * @return Method name that perform query.
-	 */
-	public String getQueryMethodName(QueryDescriptor query) {
-		return Util.underscoredToJava(query.getName(), true);
-	}
-
-	/**
-	 * Get all parameter names that used in query qualifier.
-	 *
-	 * @param query
-	 * @return Parameter names.
-	 */
-	public Collection getParameterNames(SelectQueryDescriptor query) {
-
-		if (query.getQualifier() == null) {
-			return Collections.EMPTY_SET;
-		}
-
-		Map<String, String> queryParameters = queriesMap.get(query.getName());
-
-		if (queryParameters == null) {
-			queryParameters = getParameterNames(query.getQualifier(), query.getRoot());
-			queriesMap.put(query.getName(), queryParameters);
-		}
-
-		return parseQualifier(query.getQualifier().toString());
-	}
-
-	public Boolean isValidParameterNames(SelectQueryDescriptor query) {
-
-		if (query.getQualifier() == null) {
-			return true;
-		}
-
-		Map<String, String> queryParameters = queriesMap.get(query.getName());
-
-		if (queryParameters == null) {
-			try {
-				queryParameters = getParameterNames(query.getQualifier(), query.getRoot());
-			} catch (Exception e) {
-				// if we have wrong path in queryParameters return false.
-				return false;
-			}
-		}
-
-		for (Ordering ordering : query.getOrderings()) {
-			// validate paths in ordering
-			String path = ordering.getSortSpecString();
-			Iterator<CayenneMapEntry> it = ((ObjEntity) query.getRoot()).resolvePathComponents(path);
-			while (it.hasNext()) {
-				try {
-					it.next();
-				} catch (ExpressionException e) {
-					// if we have wrong path in orderings return false.
-					return false;
-				}
-			}
-		}
-
-		return true;
-	}
-
-	/**
-	 * Get list of parameter names in the same order as in qualifier.
-	 * 
-	 * @param qualifierString
-	 *            to be parsed
-	 * @return List of parameter names.
-	 */
-	private Set parseQualifier(String qualifierString) {
-		Set result = new ListOrderedSet();
-		Pattern pattern = Pattern.compile("\\$[\\w]+");
-		Matcher matcher = pattern.matcher(qualifierString);
-		while (matcher.find()) {
-			String name = matcher.group();
-			result.add(Util.underscoredToJava(name.substring(1), false));
-		}
-
-		return result;
-	}
-
-	public boolean hasParameters(SelectQueryDescriptor query) {
-		Map queryParameters = queriesMap.get(query.getName());
-
-		if (queryParameters == null) {
-			return false;
-		}
-
-		return queryParameters.keySet().size() > 0;
-
-	}
-
-	/**
-	 * Get type of parameter for given name.
-	 *
-	 * @param query
-	 * @param name
-	 * @return Parameter type.
-	 */
-	public String getParameterType(SelectQueryDescriptor query, String name) {
-		return queriesMap.get(query.getName()).get(name);
-	}
-
-	private Map<String, String> getParameterNames(Expression expression, Object root) {
-		if (expression != null) {
-			Map<String, String> types = new HashMap<>();
-			String typeName = "";
-			List<String> names = new LinkedList<String>();
-
-			for (int i = 0; i < expression.getOperandCount(); i++) {
-				Object operand = expression.getOperand(i);
-
-				if (operand instanceof Expression) {
-					types.putAll(getParameterNames((Expression) operand, root));
-				}
-
-				if (operand instanceof ASTObjPath) {
-					PathComponent<ObjAttribute, ObjRelationship> component = ((Entity) root).lastPathComponent(
-							(ASTObjPath) operand, null);
-					ObjAttribute attribute = component.getAttribute();
-					if (attribute != null) {
-						typeName = attribute.getType();
-					} else {
-						ObjRelationship relationship = component.getRelationship();
-						if (relationship != null) {
-							typeName = ((ObjEntity) relationship.getTargetEntity()).getClassName();
-						} else {
-							typeName = "Object";
-						}
-					}
-				}
-
-				if (operand instanceof ASTList) {
-					Object[] values = (Object[]) ((ASTList) operand).getOperand(0);
-					for (Object value : values) {
-						if (value instanceof ExpressionParameter) {
-							names.add(((ExpressionParameter) value).getName());
-						}
-					}
-				}
-
-				if (operand instanceof ExpressionParameter) {
-					names.add(((ExpressionParameter) operand).getName());
-				}
-
-			}
-
-			for (String name : names) {
-				types.put(Util.underscoredToJava(name, false), typeName);
-			}
-
-			return types;
-		}
-		return Collections.EMPTY_MAP;
-	}
-}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/c63b6be2/cayenne-tools/src/main/java/org/apache/cayenne/gen/EmbeddableArtifact.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/gen/EmbeddableArtifact.java b/cayenne-tools/src/main/java/org/apache/cayenne/gen/EmbeddableArtifact.java
deleted file mode 100644
index 8e6ea43..0000000
--- a/cayenne-tools/src/main/java/org/apache/cayenne/gen/EmbeddableArtifact.java
+++ /dev/null
@@ -1,68 +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.gen;
-
-import org.apache.cayenne.map.Embeddable;
-import org.apache.velocity.VelocityContext;
-
-/**
- * {@link Artifact} facade for an {@link Embeddable}.
- * 
- * @since 3.0
- */
-public class EmbeddableArtifact implements Artifact {
-
-    protected Embeddable embeddable;
-
-    public EmbeddableArtifact(Embeddable embeddable) {
-        this.embeddable = embeddable;
-    }
-
-    public Object getObject() {
-        return embeddable;
-    }
-
-    public String getQualifiedBaseClassName() {
-        return Object.class.getName();
-    }
-
-    public String getQualifiedClassName() {
-        return embeddable.getClassName();
-    }
-
-    public TemplateType[] getTemplateTypes(ArtifactGenerationMode mode) {
-        switch (mode) {
-            case SINGLE_CLASS:
-                return new TemplateType[] {
-                    TemplateType.EMBEDDABLE_SINGLE_CLASS
-                };
-            case GENERATION_GAP:
-                return new TemplateType[] {
-                        TemplateType.EMBEDDABLE_SUPERCLASS,
-                        TemplateType.EMBEDDABLE_SUBCLASS
-                };
-            default:
-                return new TemplateType[0];
-        }
-    }
-
-    public void postInitContext(VelocityContext context) {
-        // noop - no special keys...
-    }
-}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/c63b6be2/cayenne-tools/src/main/java/org/apache/cayenne/gen/EntityArtifact.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/gen/EntityArtifact.java b/cayenne-tools/src/main/java/org/apache/cayenne/gen/EntityArtifact.java
deleted file mode 100644
index 394304f..0000000
--- a/cayenne-tools/src/main/java/org/apache/cayenne/gen/EntityArtifact.java
+++ /dev/null
@@ -1,98 +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.gen;
-
-import org.apache.cayenne.CayenneDataObject;
-import org.apache.cayenne.map.ObjEntity;
-import org.apache.velocity.VelocityContext;
-
-/**
- * {@link Artifact} facade for an ObjEntity.
- * 
- * @since 3.0
- */
-public class EntityArtifact implements Artifact {
-
-    public static String ENTITY_UTILS_KEY = "entityUtils";
-
-    protected ObjEntity entity;
-
-    public EntityArtifact(ObjEntity entity) {
-        this.entity = entity;
-    }
-
-    /**
-     * Returns ObjEntity.
-     */
-    public Object getObject() {
-        return entity;
-    }
-
-    public String getQualifiedBaseClassName() {
-        return (entity.getSuperClassName() != null)
-                ? entity.getSuperClassName()
-                : CayenneDataObject.class.getName();
-    }
-
-    public String getQualifiedClassName() {
-        return entity.getClassName();
-    }
-
-    public TemplateType getSingleClassType() {
-        return TemplateType.ENTITY_SINGLE_CLASS;
-    }
-
-    public TemplateType getSubclassType() {
-        return TemplateType.ENTITY_SUBCLASS;
-    }
-
-    public TemplateType getSuperClassType() {
-        return TemplateType.ENTITY_SUPERCLASS;
-    }
-
-    public TemplateType[] getTemplateTypes(ArtifactGenerationMode mode) {
-        switch (mode) {
-            case SINGLE_CLASS:
-                return new TemplateType[] {
-                    TemplateType.ENTITY_SINGLE_CLASS
-                };
-            case GENERATION_GAP:
-                return new TemplateType[] {
-                        TemplateType.ENTITY_SUPERCLASS, TemplateType.ENTITY_SUBCLASS
-                };
-            default:
-                return new TemplateType[0];
-        }
-    }
-
-    public void postInitContext(VelocityContext context) {
-        EntityUtils metadata = new EntityUtils(
-                entity.getDataMap(),
-                entity,
-                (String) context.get(BASE_CLASS_KEY),
-                (String) context.get(BASE_PACKAGE_KEY),
-                (String) context.get(SUPER_CLASS_KEY),
-                (String) context.get(SUPER_PACKAGE_KEY),
-                (String) context.get(SUB_CLASS_KEY),
-                (String) context.get(SUB_PACKAGE_KEY));
-
-        context.put(ENTITY_UTILS_KEY, metadata);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/c63b6be2/cayenne-tools/src/main/java/org/apache/cayenne/gen/EntityUtils.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/gen/EntityUtils.java b/cayenne-tools/src/main/java/org/apache/cayenne/gen/EntityUtils.java
deleted file mode 100644
index ecf2a3f..0000000
--- a/cayenne-tools/src/main/java/org/apache/cayenne/gen/EntityUtils.java
+++ /dev/null
@@ -1,274 +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.gen;
-
-import java.util.Collection;
-
-import org.apache.cayenne.CayenneRuntimeException;
-import org.apache.cayenne.ObjectId;
-import org.apache.cayenne.map.DataMap;
-import org.apache.cayenne.map.DbEntity;
-import org.apache.cayenne.map.MappingNamespace;
-import org.apache.cayenne.map.ObjAttribute;
-import org.apache.cayenne.map.ObjEntity;
-import org.apache.cayenne.map.ObjRelationship;
-import org.apache.cayenne.map.Relationship;
-
-/**
- * Attributes and Methods for working with ObjEntities.
- * 
- * @since 1.2
- */
-public class EntityUtils {
-
-    // template substitution values
-    protected String subClassName;
-    protected String superClassName;
-    protected String baseClassName;
-    protected String subPackageName;
-    protected String superPackageName;
-    protected String basePackageName;
-
-    protected DataMap primaryDataMap;
-    protected ObjEntity objEntity;
-
-    protected Collection<String> callbackNames;
-
-    public EntityUtils(DataMap dataMap, ObjEntity objEntity, String fqnBaseClass, String fqnSuperClass,
-            String fqnSubClass) {
-
-        StringUtils stringUtils = StringUtils.getInstance();
-
-        this.baseClassName = stringUtils.stripPackageName(fqnBaseClass);
-        this.basePackageName = stringUtils.stripClass(fqnBaseClass);
-        this.superClassName = stringUtils.stripPackageName(fqnSuperClass);
-        this.superPackageName = stringUtils.stripClass(fqnSuperClass);
-        this.subClassName = stringUtils.stripPackageName(fqnSubClass);
-        this.subPackageName = stringUtils.stripClass(fqnSubClass);
-
-        this.primaryDataMap = dataMap;
-
-        this.objEntity = objEntity;
-        this.callbackNames = objEntity.getCallbackMethods();
-    }
-
-    EntityUtils(DataMap dataMap, ObjEntity objEntity, String baseClassName, String basePackageName,
-            String superClassName, String superPackageName, String subClassName, String subPackageName) {
-
-        this.baseClassName = baseClassName;
-        this.basePackageName = basePackageName;
-        this.superClassName = superClassName;
-        this.superPackageName = superPackageName;
-        this.subClassName = subClassName;
-        this.subPackageName = subPackageName;
-
-        this.primaryDataMap = dataMap;
-
-        this.objEntity = objEntity;
-        this.callbackNames = objEntity.getCallbackMethods();
-    }
-
-    /**
-     * @return Returns the primary DataMap.
-     * @since 1.2
-     */
-    public DataMap getPrimaryDataMap() {
-        return primaryDataMap;
-    }
-
-    /**
-     * Returns the EntityResolver for this set of DataMaps.
-     * 
-     * @since 1.2
-     */
-    public MappingNamespace getEntityResolver() {
-        return primaryDataMap.getNamespace();
-    }
-
-    /**
-     * Returns true if current ObjEntity is defined as abstract.
-     */
-    public boolean isAbstract() {
-        return isAbstract(objEntity);
-    }
-
-    /**
-     * Returns true if current ObjEntity is defined as abstract.
-     */
-    public boolean isAbstract(ObjEntity anObjEntity) {
-        return anObjEntity != null && anObjEntity.isAbstract();
-    }
-
-    /**
-     * Returns true if current ObjEntity contains at least one toMany
-     * relationship.
-     */
-    public boolean hasToManyRelationships() {
-        return hasToManyRelationships(objEntity);
-    }
-
-    /**
-     * Returns true if an ObjEntity contains at least one toMany relationship.
-     */
-    public boolean hasToManyRelationships(ObjEntity anObjEntity) {
-        if (anObjEntity == null) {
-            return false;
-        }
-
-        for (Relationship r : anObjEntity.getRelationships()) {
-            if (r.isToMany()) {
-                return true;
-            }
-        }
-
-        return false;
-    }
-
-    /**
-     * Returns true if current ObjEntity contains at least one toMany
-     * relationship, ignoring those declared in superentities.
-     * 
-     * @since 1.2
-     */
-    public boolean hasToManyDeclaredRelationships() {
-        return hasToManyDeclaredRelationships(objEntity);
-    }
-
-    /**
-     * Returns true if an ObjEntity contains at least one toMany relationship,
-     * ignoring those declared in superentities.
-     * 
-     * @since 1.2
-     */
-    public boolean hasToManyDeclaredRelationships(ObjEntity anObjEntity) {
-        if (anObjEntity == null) {
-            return false;
-        }
-
-        for (Relationship r : anObjEntity.getDeclaredRelationships()) {
-            if (r.isToMany()) {
-                return true;
-            }
-        }
-
-        return false;
-    }
-
-    /**
-     * Returns true if current ObjEntity contains at least one toOne
-     * relationship.
-     */
-    public boolean hasToOneRelationships() {
-        return hasToOneRelationships(objEntity);
-    }
-
-    /**
-     * Returns true if an ObjEntity contains at least one toOne relationship.
-     */
-    public boolean hasToOneRelationships(ObjEntity anObjEntity) {
-        if (anObjEntity == null) {
-            return false;
-        }
-
-        for (Relationship r : anObjEntity.getRelationships()) {
-            if (!r.isToMany()) {
-                return true;
-            }
-        }
-
-        return false;
-    }
-
-    /**
-     * Returns true if current ObjEntity contains at least one toOne
-     * relationship, ignoring those declared in superentities.
-     */
-    public boolean hasToOneDeclaredRelationships() {
-        return hasToOneDeclaredRelationships(objEntity);
-    }
-
-    /**
-     * Returns true if an ObjEntity contains at least one toOne relationship,
-     * ignoring those declared in superentities.
-     */
-    public boolean hasToOneDeclaredRelationships(ObjEntity anObjEntity) {
-        if (anObjEntity == null) {
-            return false;
-        }
-
-        for (Relationship r : anObjEntity.getDeclaredRelationships()) {
-            if (!r.isToMany()) {
-                return true;
-            }
-        }
-
-        return false;
-    }
-
-    /**
-     * Returns the map key type for a collection relationship of type
-     * java.util.Map.
-     * 
-     * @param relationship
-     *            The relationship to look up type information for.
-     * @return The type of the attribute keyed on.
-     */
-    public String getMapKeyType(final ObjRelationship relationship) {
-
-        ObjEntity targetEntity = (ObjEntity) relationship.getTargetEntity();
-
-        // If the map key is null, then we're doing look-ups by actual object
-        // key.
-        if (relationship.getMapKey() == null) {
-
-            // If it's a multi-column key, then the return type is always
-            // ObjectId.
-            DbEntity dbEntity = targetEntity.getDbEntity();
-            if ((dbEntity != null) && (dbEntity.getPrimaryKeys().size() > 1)) {
-                return ObjectId.class.getName();
-            }
-
-            // If it's a single column key or no key exists at all, then we
-            // really don't
-            // know what the key type is,
-            // so default to Object.
-            return Object.class.getName();
-        }
-
-        // If the map key is a non-default attribute, then fetch the attribute
-        // and return
-        // its type.
-        ObjAttribute attribute = targetEntity.getAttribute(relationship.getMapKey());
-        if (attribute == null) {
-            throw new CayenneRuntimeException("Invalid map key '" + relationship.getMapKey()
-                    + "', no matching attribute found");
-        }
-
-        return attribute.getType();
-    }
-
-    /**
-     * @return the list of all callback names registered for the entity.
-     * @since 3.0
-     */
-    public Collection<String> getCallbackNames() {
-        return callbackNames;
-    }
-}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/c63b6be2/cayenne-tools/src/main/java/org/apache/cayenne/gen/ImportUtils.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/gen/ImportUtils.java b/cayenne-tools/src/main/java/org/apache/cayenne/gen/ImportUtils.java
deleted file mode 100644
index af40499..0000000
--- a/cayenne-tools/src/main/java/org/apache/cayenne/gen/ImportUtils.java
+++ /dev/null
@@ -1,266 +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.gen;
-
-import org.apache.cayenne.util.Util;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Methods for mangling strings.
- * 
- */
-public class ImportUtils {
-
-	public static final String importOrdering[] = new String[] { "java.", "javax.", "org.", "com." };
-
-	static final String primitives[] = new String[] { "long", "double", "byte", "boolean", "float", "short", "int",
-			"char" };
-
-	static final String primitiveClasses[] = new String[] { Long.class.getName(), Double.class.getName(),
-			Byte.class.getName(), Boolean.class.getName(), Float.class.getName(), Short.class.getName(),
-			Integer.class.getName(), Character.class.getName() };
-
-	static Map<String, String> classesForPrimitives = Util.toMap(primitives, primitiveClasses);
-	static Map<String, String> primitivesForClasses = Util.toMap(primitiveClasses, primitives);
-
-	protected Map<String, String> importTypesMap = new HashMap<>();
-
-	// Types forced to be FQN
-	protected Map<String, String> reservedImportTypesMap = new HashMap<>();
-
-	protected String packageName;
-
-	public ImportUtils() {
-		super();
-	}
-
-	protected boolean canRegisterType(String typeName) {
-		// Not sure why this would ever happen, but it did
-		if (null == typeName)
-			return false;
-
-		StringUtils stringUtils = StringUtils.getInstance();
-		String typeClassName = stringUtils.stripPackageName(typeName);
-		String typePackageName = stringUtils.stripClass(typeName);
-
-		if (typePackageName.length() == 0)
-			return false; // disallow non-packaged types (primitives, probably)
-		if ("java.lang".equals(typePackageName))
-			return false;
-
-		// Can only have one type -- rest must use fqn
-		if (reservedImportTypesMap.containsKey(typeClassName))
-			return false;
-		if (importTypesMap.containsKey(typeClassName))
-			return false;
-
-		return true;
-	}
-
-	/**
-	 * Reserve a fully-qualified data type class name so it cannot be used by
-	 * another class. No import statements will be generated for reserved types.
-	 * Typically, this is the fully-qualified class name of the class being
-	 * generated.
-	 * 
-	 * @param typeName
-	 *            FQ data type class name.
-	 */
-	public void addReservedType(String typeName) {
-		if (!canRegisterType(typeName))
-			return;
-
-		StringUtils stringUtils = StringUtils.getInstance();
-		String typeClassName = stringUtils.stripPackageName(typeName);
-
-		reservedImportTypesMap.put(typeClassName, typeName);
-	}
-
-	/**
-	 * Register a fully-qualified data type class name. For example,
-	 * org.apache.cayenne.CayenneDataObject.
-	 * 
-	 * @param typeName
-	 *            FQ data type class name.
-	 */
-	public void addType(String typeName) {
-		if (!canRegisterType(typeName))
-			return;
-
-		StringUtils stringUtils = StringUtils.getInstance();
-		String typePackageName = stringUtils.stripClass(typeName);
-		String typeClassName = stringUtils.stripPackageName(typeName);
-
-		if (typePackageName.equals(packageName))
-			return;
-
-		importTypesMap.put(typeClassName, typeName);
-	}
-
-	/**
-	 * Add the package name to use for this importUtil invocation.
-	 * 
-	 * @param packageName
-	 */
-	public void setPackage(String packageName) {
-		this.packageName = packageName;
-	}
-
-	/**
-	 * Performs processing similar to <code>formatJavaType(String)</code>, with
-	 * special handling of primitive types and their Java class counterparts.
-	 * This method allows users to make a decision whether to use primitives or
-	 * not, regardless of how type is mapped.
-	 */
-	public String formatJavaType(String typeName, boolean usePrimitives) {
-		if (usePrimitives) {
-			String primitive = primitivesForClasses.get(typeName);
-			return (primitive != null) ? primitive : formatJavaType(typeName);
-		} else {
-			String primitiveClass = classesForPrimitives.get(typeName);
-			return (primitiveClass != null) ? formatJavaType(primitiveClass) : formatJavaType(typeName);
-		}
-	}
-
-	/**
-	 * Removes registered package and non-reserved registered type name prefixes
-	 * from java types
-	 */
-	public String formatJavaType(String typeName) {
-		if (typeName != null) {
-			StringUtils stringUtils = StringUtils.getInstance();
-			String typeClassName = stringUtils.stripPackageName(typeName);
-
-			if (!reservedImportTypesMap.containsKey(typeClassName)) {
-				if (importTypesMap.containsKey(typeClassName)) {
-					if (typeName.equals(importTypesMap.get(typeClassName)))
-						return typeClassName;
-				}
-			}
-
-			String typePackageName = stringUtils.stripClass(typeName);
-			if ("java.lang".equals(typePackageName))
-				return typeClassName;
-			if ((null != packageName) && (packageName.equals(typePackageName)))
-				return typeClassName;
-		}
-
-		return typeName;
-	}
-
-	/**
-	 * @since 3.0
-	 */
-	public String formatJavaTypeAsNonBooleanPrimitive(String type) {
-		String value = ImportUtils.classesForPrimitives.get(type);
-		return formatJavaType(value != null ? value : type);
-	}
-
-	/**
-	 * @since 3.0
-	 */
-	public boolean isNonBooleanPrimitive(String type) {
-		return ImportUtils.classesForPrimitives.containsKey(type) && !isBoolean(type);
-	}
-
-	/**
-	 * @since 3.0
-	 */
-	public boolean isBoolean(String type) {
-		return "boolean".equals(type);
-	}
-
-	/**
-	 * Generate package and list of import statements based on the registered
-	 * types.
-	 */
-	public String generate() {
-		StringBuilder outputBuffer = new StringBuilder();
-
-		if (null != packageName) {
-			outputBuffer.append("package ");
-			outputBuffer.append(packageName);
-
-			// Using UNIX line endings intentionally - generated Java files
-			// should look
-			// the same regardless of platform to prevent developer teams
-			// working on
-			// multiple OS's to override each other's work
-			outputBuffer.append(";\n\n");
-		}
-
-		List<String> typesList = new ArrayList<>(importTypesMap.values());
-		Collections.sort(typesList, new Comparator<String>() {
-
-			public int compare(String s1, String s2) {
-
-				for (String ordering : importOrdering) {
-					if ((s1.startsWith(ordering)) && (!s2.startsWith(ordering))) {
-						return -1;
-					}
-					if ((!s1.startsWith(ordering)) && (s2.startsWith(ordering))) {
-						return 1;
-					}
-				}
-
-				return s1.compareTo(s2);
-			}
-		});
-
-		String lastStringPrefix = null;
-		boolean firstIteration = true;
-		for (String typeName : typesList) {
-
-			if (firstIteration) {
-				firstIteration = false;
-			} else {
-				outputBuffer.append('\n');
-			}
-			// Output another newline if we're in a different root package.
-			// Find root package
-			String thisStringPrefix = typeName;
-			int dotIndex = typeName.indexOf('.');
-			if (-1 != dotIndex) {
-				thisStringPrefix = typeName.substring(0, dotIndex);
-			}
-			// if this isn't the first import,
-			if (null != lastStringPrefix) {
-				// and it's different from the last import
-				if (false == thisStringPrefix.equals(lastStringPrefix)) {
-					// output a newline; force UNIX style per comment above
-					outputBuffer.append("\n");
-				}
-			}
-			lastStringPrefix = thisStringPrefix;
-
-			outputBuffer.append("import ");
-			outputBuffer.append(typeName);
-			outputBuffer.append(';');
-		}
-
-		return outputBuffer.toString();
-	}
-}