You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2007/12/09 15:27:07 UTC
svn commit: r602674 - in
/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen:
ClassGenerationAction.java ClientClassGenerationAction.java
EntityUtils.java GenerationMetadata.java
Author: aadamchik
Date: Sun Dec 9 06:27:06 2007
New Revision: 602674
URL: http://svn.apache.org/viewvc?rev=602674&view=rev
Log:
CAY-926 Refactoring class generator classes
Added:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/GenerationMetadata.java
Modified:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/ClientClassGenerationAction.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/EntityUtils.java
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java?rev=602674&r1=602673&r2=602674&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java Sun Dec 9 06:27:06 2007
@@ -128,6 +128,36 @@
return ClassGenerationAction.SUPERCLASS_PREFIX;
}
+ protected GenerationMetadata initContext(ObjEntity entity) {
+ StringUtils stringUtils = StringUtils.getInstance();
+ String fqnSubClass = entity.getClassName();
+ String fqnBaseClass = (entity.getSuperClassName() != null) ? entity
+ .getSuperClassName() : CayenneDataObject.class.getName();
+
+ String subPackageName = stringUtils.stripClass(fqnSubClass);
+ String superClassName = getSuperclassPrefix()
+ + stringUtils.stripPackageName(fqnSubClass);
+
+ String superPackageName = this.superPkg;
+ if (superPackageName == null) {
+ superPackageName = subPackageName;
+ }
+ String fqnSuperClass = superPackageName + "." + superClassName;
+
+ EntityUtils metadata = new EntityUtils(
+ dataMap,
+ entity,
+ fqnBaseClass,
+ fqnSuperClass,
+ fqnSubClass);
+
+ context.put("objEntity", entity);
+ context.put("stringUtils", StringUtils.getInstance());
+ context.put("entityUtils", metadata);
+ context.put("importUtils", new ImportUtils());
+ return metadata;
+ }
+
/**
* Runs class generation. Produces a pair of Java classes for each ObjEntity in the
* map. This allows developers to use generated <b>subclass </b> for their custom
@@ -137,57 +167,22 @@
*/
protected void generateClassPairs() throws Exception {
- StringUtils stringUtils = StringUtils.getInstance();
Template superTemplate = superclassTemplate();
Template classTemplate = subclassTemplate();
- String superPrefix = getSuperclassPrefix();
for (ObjEntity entity : entitiesForCurrentMode()) {
- String fqnSubClass = entity.getClassName();
- String fqnBaseClass = (entity.getSuperClassName() != null) ? entity
- .getSuperClassName() : CayenneDataObject.class.getName();
-
- String subClassName = stringUtils.stripPackageName(fqnSubClass);
- String subPackageName = stringUtils.stripClass(fqnSubClass);
-
- String superClassName = superPrefix
- + stringUtils.stripPackageName(fqnSubClass);
-
- String superPackageName = this.superPkg;
- if (superPackageName == null) {
- superPackageName = subPackageName;
- }
- String fqnSuperClass = superPackageName + "." + superClassName;
-
- Writer superOut = openWriter(superPackageName, superClassName);
+ GenerationMetadata metadata = initContext(entity);
+ Writer superOut = openWriter(metadata.getSuperPackageName(), metadata
+ .getSuperClassName());
if (superOut != null) {
- context.put("objEntity", entity);
- context.put("stringUtils", StringUtils.getInstance());
- context.put("entityUtils", new EntityUtils(
- dataMap,
- entity,
- fqnBaseClass,
- fqnSuperClass,
- fqnSubClass));
- context.put("importUtils", new ImportUtils());
-
superTemplate.merge(context, superOut);
superOut.close();
}
- Writer mainOut = openWriter(subPackageName, subClassName);
+ Writer mainOut = openWriter(metadata.getSubPackageName(), metadata
+ .getSubClassName());
if (mainOut != null) {
- context.put("objEntity", entity);
- context.put("stringUtils", StringUtils.getInstance());
- context.put("entityUtils", new EntityUtils(
- dataMap,
- entity,
- fqnBaseClass,
- fqnSuperClass,
- fqnSubClass));
- context.put("importUtils", new ImportUtils());
-
classTemplate.merge(context, mainOut);
mainOut.close();
}
@@ -200,37 +195,13 @@
protected void generateSingleClasses() throws Exception {
Template classTemplate = singleClassTemplate();
- String superPrefix = getSuperclassPrefix();
for (ObjEntity entity : entitiesForCurrentMode()) {
- String fqnSubClass = entity.getClassName();
- String fqnBaseClass = (null != entity.getSuperClassName()) ? entity
- .getSuperClassName() : CayenneDataObject.class.getName();
-
- StringUtils stringUtils = StringUtils.getInstance();
-
- String subClassName = stringUtils.stripPackageName(fqnSubClass);
- String subPackageName = stringUtils.stripClass(fqnSubClass);
-
- String superClassName = superPrefix
- + stringUtils.stripPackageName(fqnSubClass);
-
- String superPackageName = this.superPkg;
- String fqnSuperClass = superPackageName + "." + superClassName;
-
- Writer out = openWriter(subPackageName, subClassName);
+ GenerationMetadata metadata = initContext(entity);
+ Writer out = openWriter(metadata.getSubPackageName(), metadata
+ .getSubClassName());
if (out != null) {
- context.put("objEntity", entity);
- context.put("stringUtils", StringUtils.getInstance());
- context.put("entityUtils", new EntityUtils(
- dataMap,
- entity,
- fqnBaseClass,
- fqnSuperClass,
- fqnSubClass));
- context.put("importUtils", new ImportUtils());
-
classTemplate.merge(context, out);
out.close();
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/ClientClassGenerationAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/ClientClassGenerationAction.java?rev=602674&r1=602673&r2=602674&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/ClientClassGenerationAction.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/ClientClassGenerationAction.java Sun Dec 9 06:27:06 2007
@@ -18,11 +18,8 @@
****************************************************************/
package org.apache.cayenne.gen;
-import java.io.Writer;
-
import org.apache.cayenne.PersistentObject;
import org.apache.cayenne.map.ObjEntity;
-import org.apache.velocity.Template;
/**
* @since 3.0
@@ -50,73 +47,40 @@
}
@Override
- protected void generateSingleClasses() throws Exception {
- throw new IllegalStateException(
- "Single classes generation is not supported for the client.");
- }
+ protected GenerationMetadata initContext(ObjEntity entity) {
+ StringUtils stringUtils = StringUtils.getInstance();
- @Override
- protected void generateClassPairs() throws Exception {
+ // use client name, and if not specified use regular class name
+ String fqnSubClass = entity.getClientClassName();
+ if (fqnSubClass == null) {
+ fqnSubClass = entity.getClassName();
+ }
- Template superTemplate = superclassTemplate();
- Template classTemplate = subclassTemplate();
- String superPrefix = getSuperclassPrefix();
-
- for (ObjEntity entity : entitiesForCurrentMode()) {
-
- // use client name, and if not specified use regular class name
- String fqnSubClass = entity.getClientClassName();
- if (fqnSubClass == null) {
- fqnSubClass = entity.getClassName();
- }
-
- // use PersistentObject instead of CayenneDataObject as base ...
- String fqnBaseClass = (entity.getClientSuperClassName() != null) ? entity
- .getClientSuperClassName() : PersistentObject.class.getName();
-
- StringUtils stringUtils = StringUtils.getInstance();
-
- String subClassName = stringUtils.stripPackageName(fqnSubClass);
- String subPackageName = stringUtils.stripClass(fqnSubClass);
-
- String superClassName = superPrefix
- + stringUtils.stripPackageName(fqnSubClass);
-
- String superPackageName = this.superPkg;
- String fqnSuperClass = superPackageName + "." + superClassName;
-
- Writer superOut = openWriter(superPackageName, superClassName);
-
- if (superOut != null) {
- context.put("objEntity", entity);
- context.put("stringUtils", StringUtils.getInstance());
- context.put("entityUtils", new EntityUtils(
- dataMap,
- entity,
- fqnBaseClass,
- fqnSuperClass,
- fqnSubClass));
- context.put("importUtils", new ImportUtils());
-
- superTemplate.merge(context, superOut);
- superOut.close();
- }
-
- Writer mainOut = openWriter(subPackageName, subClassName);
- if (mainOut != null) {
- context.put("objEntity", entity);
- context.put("stringUtils", StringUtils.getInstance());
- context.put("entityUtils", new EntityUtils(
- dataMap,
- entity,
- fqnBaseClass,
- fqnSuperClass,
- fqnSubClass));
- context.put("importUtils", new ImportUtils());
-
- classTemplate.merge(context, mainOut);
- mainOut.close();
- }
+ // use PersistentObject instead of CayenneDataObject as base ...
+ String fqnBaseClass = (entity.getClientSuperClassName() != null) ? entity
+ .getClientSuperClassName() : PersistentObject.class.getName();
+
+ String subPackageName = stringUtils.stripClass(fqnSubClass);
+ String superClassName = getSuperclassPrefix()
+ + stringUtils.stripPackageName(fqnSubClass);
+
+ String superPackageName = this.superPkg;
+ if (superPackageName == null) {
+ superPackageName = subPackageName;
}
+ String fqnSuperClass = superPackageName + "." + superClassName;
+
+ EntityUtils metadata = new EntityUtils(
+ dataMap,
+ entity,
+ fqnBaseClass,
+ fqnSuperClass,
+ fqnSubClass);
+
+ context.put("objEntity", entity);
+ context.put("stringUtils", StringUtils.getInstance());
+ context.put("entityUtils", metadata);
+ context.put("importUtils", new ImportUtils());
+ return metadata;
}
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/EntityUtils.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/EntityUtils.java?rev=602674&r1=602673&r2=602674&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/EntityUtils.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/EntityUtils.java Sun Dec 9 06:27:06 2007
@@ -31,7 +31,7 @@
* @since 1.2
* @author Mike Kienenberger
*/
-public class EntityUtils {
+public class EntityUtils implements GenerationMetadata {
// template substitution values
protected String subClassName;
Added: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/GenerationMetadata.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/GenerationMetadata.java?rev=602674&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/GenerationMetadata.java (added)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/GenerationMetadata.java Sun Dec 9 06:27:06 2007
@@ -0,0 +1,63 @@
+/*****************************************************************
+ * 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;
+
+/**
+ * Represents basic metadata associated with a code generation execution.
+ *
+ * @since 3.0
+ * @author Andrus Adamchik
+ */
+public interface GenerationMetadata {
+
+ /**
+ * Returns class name (without a package) of the sub class associated with this
+ * generator.
+ */
+ String getSubClassName();
+
+ /**
+ * Returns the super class (without a package) of the data object class associated
+ * with this generator
+ */
+ String getSuperClassName();
+
+ /**
+ * Returns the base class (without a package) of the data object class associated with
+ * this generator. Class name must not include a package.
+ */
+ String getBaseClassName();
+
+ /**
+ * Returns Java package name of the class associated with this generator.
+ */
+ String getSubPackageName();
+
+ /**
+ * Returns <code>superPackageName</code> property that defines a superclass's
+ * package name.
+ */
+ String getSuperPackageName();
+
+ /**
+ * Returns <code>basePackageName</code> property that defines a baseclass's
+ * (superclass superclass) package name.
+ */
+ String getBasePackageName();
+}