Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 18A24200C32 for ; Wed, 1 Feb 2017 14:23:54 +0100 (CET) Received: by cust-asf.ponee.io (Postfix) id 174D0160B5E; Wed, 1 Feb 2017 13:23:54 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 9929B160B66 for ; Wed, 1 Feb 2017 14:23:51 +0100 (CET) Received: (qmail 57416 invoked by uid 500); 1 Feb 2017 13:23:50 -0000 Mailing-List: contact commits-help@cayenne.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cayenne.apache.org Delivered-To: mailing list commits@cayenne.apache.org Received: (qmail 57230 invoked by uid 99); 1 Feb 2017 13:23:49 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 01 Feb 2017 13:23:49 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id AEEE5DFC47; Wed, 1 Feb 2017 13:23:49 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: ntimofeev@apache.org To: commits@cayenne.apache.org Date: Wed, 01 Feb 2017 13:23:53 -0000 Message-Id: <388dbcf36b4c4764b32ac432904e1eef@git.apache.org> In-Reply-To: References: X-Mailer: ASF-Git Admin Mailer Subject: [05/10] cayenne git commit: CAY-2215 split cayenne-tools into cayenne-cgen and cayenne-ant archived-at: Wed, 01 Feb 2017 13:23:54 -0000 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 @@ - + maven-remote-resources-plugin 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 @@ - + maven-remote-resources-plugin 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 @@ - + maven-remote-resources-plugin 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 @@ - + maven-remote-resources-plugin 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 @@ - + maven-remote-resources-plugin 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 @@ - + maven-remote-resources-plugin 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 @@ - - - - - - cayenne-parent - org.apache.cayenne - 4.0.M5-SNAPSHOT - - - 4.0.0 - - cayenne-tools - jar - cayenne-tools: Cayenne Tools - - - - org.apache.ant - ant - compile - - - commons-collections - commons-collections - compile - - - commons-logging - commons-logging - compile - - - org.apache.velocity - velocity - compile - - - org.apache.cayenne - cayenne-server - ${project.version} - compile - - - org.apache.cayenne - cayenne-project - ${project.version} - compile - - - org.apache.cayenne - cayenne-dbsync - ${project.version} - compile - - - foundrylogic.vpp - vpp - compile - - - - - junit - junit - test - - - org.apache.cayenne - cayenne-server - ${project.version} - test - test-jar - - - org.apache.cayenne - cayenne-dbsync - ${project.version} - test - test-jar - - - org.apache.cayenne.build-tools - cayenne-test-utilities - ${project.version} - test - - - org.mockito - mockito-all - test - - - org.slf4j - jcl-over-slf4j - test - - - org.slf4j - slf4j-api - test - - - org.slf4j - slf4j-simple - test - - - org.apache.ant - ant-testutil - 1.9.4 - test - - - org.apache.derby - derby - test - - - xmlunit - xmlunit - test - - - - - - - - - maven-remote-resources-plugin - - - - process - - - - - - maven-jar-plugin - - - - test-jar - - - - - - - - - code-quality - - - - !fast-and-dirty - - - - - - maven-checkstyle-plugin - - - - maven-pmd-plugin - - - - - - 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 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 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 overwrite property. - */ - public void setOverwrite(boolean overwrite) { - this.overwrite = overwrite; - } - - /** - * Sets makepairs property. - */ - public void setMakePairs(boolean makePairs) { - this.makePairs = makePairs; - } - - /** - * Sets template property. - */ - public void setTemplate(String template) { - this.template = template; - } - - /** - * Sets superTemplate 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 usepkgpath property. - */ - public void setUsePkgPath(boolean usePkgPath) { - this.usePkgPath = usePkgPath; - } - - /** - * Sets outputPattern property. - */ - public void setOutputPattern(String outputPattern) { - this.outputPattern = outputPattern; - } - - /** - * Sets createPropertyNames 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 file 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 pkgName package should reside. Creates any missing - * diectories below dest. - */ - 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 entities) { - if (artifactsGenerationMode == ArtifactsGenerationMode.ENTITY - || artifactsGenerationMode == ArtifactsGenerationMode.ALL) { - if (entities != null) { - for (ObjEntity entity : entities) { - artifacts.add(new EntityArtifact(entity)); - } - } - } - } - - public void addEmbeddables(Collection embeddables) { - if (artifactsGenerationMode == ArtifactsGenerationMode.ENTITY - || artifactsGenerationMode == ArtifactsGenerationMode.ALL) { - if (embeddables != null) { - for (Embeddable embeddable : embeddables) { - artifacts.add(new EmbeddableArtifact(embeddable)); - } - } - } - } - - public void addQueries(Collection 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 entities) { - if (entities != null) { - for (ObjEntity entity : entities) { - artifacts.add(new ClientEntityArtifact(entity)); - } - } - } - - @Override - public void addQueries(Collection 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 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 selectQueries; - protected Collection sqlTemplateQueries; - protected Collection procedureQueries; - protected Collection ejbqlQueries; - protected Collection queryNames; - - public DataMapArtifact(DataMap dataMap, Collection 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 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 getSelectQueries() { - return selectQueries; - } - - public boolean hasSelectQueries() { - return selectQueries.size() > 0; - } - - public boolean hasQueryNames() { - return !queryNames.isEmpty(); - } - - public Collection 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> 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 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 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 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 getParameterNames(Expression expression, Object root) { - if (expression != null) { - Map types = new HashMap<>(); - String typeName = ""; - List names = new LinkedList(); - - 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 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 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 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 classesForPrimitives = Util.toMap(primitives, primitiveClasses); - static Map primitivesForClasses = Util.toMap(primitiveClasses, primitives); - - protected Map importTypesMap = new HashMap<>(); - - // Types forced to be FQN - protected Map 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 formatJavaType(String), 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 typesList = new ArrayList<>(importTypesMap.values()); - Collections.sort(typesList, new Comparator() { - - 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(); - } -}