You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by pp...@apache.org on 2009/05/08 01:57:05 UTC
svn commit: r772820 - in /openjpa/trunk:
openjpa-kernel/src/main/java/org/apache/openjpa/meta/
openjpa-kernel/src/main/resources/org/apache/openjpa/meta/
openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/
openjpa-persistence/sr...
Author: ppoddar
Date: Thu May 7 23:57:04 2009
New Revision: 772820
URL: http://svn.apache.org/viewvc?rev=772820&view=rev
Log:
OPENJPA-1010: MetaDataRespository knows about meta-class. The naming and support for meta-class added to MetaDataFactory. Implemented in PersistenceMetaDataFactory. AnnotationProcessor6 aligned with this naming policy interface.
Modified:
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ClassMetaData.java
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/DelegatingMetaDataFactory.java
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataFactory.java
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/NoneMetaDataFactory.java
openjpa/trunk/openjpa-kernel/src/main/resources/org/apache/openjpa/meta/localizer.properties
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/TestMetamodel.java
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceMetaDataFactory.java
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/AnnotationProcessor6.java
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/CompileTimeLogger.java
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/MetamodelImpl.java
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/SourceAnnotationHandler.java
openjpa/trunk/openjpa-persistence/src/main/resources/org/apache/openjpa/persistence/meta/localizer.properties
Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ClassMetaData.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ClassMetaData.java?rev=772820&r1=772819&r2=772820&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ClassMetaData.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ClassMetaData.java Thu May 7 23:57:04 2009
@@ -2037,7 +2037,7 @@
try {
oid.getConstructor((Class[]) null);
} catch (Exception e) {
- throw new MetaDataException(_loc.get("null-cons", _type)).
+ throw new MetaDataException(_loc.get("null-cons", oid, _type)).
setCause(e);
}
Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/DelegatingMetaDataFactory.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/DelegatingMetaDataFactory.java?rev=772820&r1=772819&r2=772820&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/DelegatingMetaDataFactory.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/DelegatingMetaDataFactory.java Thu May 7 23:57:04 2009
@@ -126,4 +126,19 @@
public void loadXMLMetaData(FieldMetaData fmd) {
_delegate.loadXMLMetaData(fmd);
}
+
+ public String getMetaModelClassName(String managedClassName) {
+ return _delegate.getMetaModelClassName(managedClassName);
+ }
+ public String getManagedClassName(String metamodelClassName) {
+ return _delegate.getManagedClassName(metamodelClassName);
+ }
+
+ public boolean isMetaClass(Class<?> c) {
+ return _delegate.isMetaClass(c);
+ }
+
+ public Class<?> getManagedClass(Class<?> c) {
+ return _delegate.getManagedClass(c);
+ }
}
Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataFactory.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataFactory.java?rev=772820&r1=772819&r2=772820&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataFactory.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataFactory.java Thu May 7 23:57:04 2009
@@ -31,6 +31,7 @@
*
* @author Patrick Linskey
* @author Abe White
+ * @author Pinaki Poddar
*/
public interface MetaDataFactory
extends MetaDataModes {
@@ -151,4 +152,37 @@
* metadata should be added directly to the repository.
*/
public void loadXMLMetaData(FieldMetaData fmd);
+
+ /**
+ * Gets the name of the meta-model class for the given fully-qualified
+ * managed class name.
+ *
+ * @since 2.0.0
+ */
+ public String getMetaModelClassName(String managedClassName);
+
+ /**
+ * Gets the name of the managed class for the given fully-qualified
+ * meta-model class name.
+ *
+ * @since 2.0.0
+ */
+ public String getManagedClassName(String metamodelClassName);
+
+ /**
+ * Affirms if the given class is a meta-class.
+ *
+ * @since 2.0.0
+ */
+ public boolean isMetaClass(Class<?> c);
+
+ /**
+ * Gets the managed class corresponding to the given meta-class.
+ *
+ * @return null if the given input is not a meta-class.
+ *
+ * @since 2.0.0
+ */
+ public Class<?> getManagedClass(Class<?> c);
+
}
Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java?rev=772820&r1=772819&r2=772820&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java Thu May 7 23:57:04 2009
@@ -124,6 +124,8 @@
.synchronizedMap(new HashMap<Class<?>,NonPersistentMetaData>());
private final Map<Class<?>,NonPersistentMetaData> _nonMapped = Collections
.synchronizedMap(new HashMap<Class<?>,NonPersistentMetaData>());
+ private final Map<Class<?>, Class<?>> _metamodel = Collections
+ .synchronizedMap(new HashMap<Class<?>, Class<?>>());
// map of classes to lists of their subclasses
private final Map<Class<?>,List<Class<?>>> _subs =
@@ -1321,6 +1323,10 @@
Class<?> cls;
for (String className : names) {
cls = classForName(className, clsLoader);
+ if (_factory.isMetaClass(cls)) {
+ setMetaModel(cls);
+ continue;
+ }
if (cls != null) {
classes.add(cls);
@@ -1588,6 +1594,53 @@
coll.add(value);
}
}
+
+ /**
+ * Puts the meta class corresponding to the given entity class.
+ */
+ public void setMetaModel(Class<?> m2) {
+ Class<?> cls = _factory.getManagedClass(m2);
+ if (cls != null)
+ _metamodel.put(cls, m2);
+ }
+
+ /**
+ * Puts the meta class corresponding to the given persistent class.
+ */
+ public void setMetaModel(ClassMetaData meta, Class<?> m2) {
+ _metamodel.put(meta.getDescribedType(), m2);
+ }
+
+ /**
+ * Gets the meta class corresponding to the given persistent class.
+ */
+ public Class<?> getMetaModel(ClassMetaData meta, boolean load) {
+ return getMetaModel(meta.getDescribedType(), load);
+ }
+
+ /**
+ * Gets the meta class corresponding to the given class.
+ * If load is false, returns the meta class if has been set for the given
+ * persistent class earlier.
+ * If the load is true then also attempts to apply the current
+ * naming policy to derive meta class name and attempts to load the meta
+ * class.
+ */
+ public Class<?> getMetaModel(Class<?> entity, boolean load) {
+ if (_metamodel.containsKey(entity))
+ return _metamodel.get(entity);
+ String m2 = _factory.getMetaModelClassName(entity.getName());
+ try {
+ Class<?> m2cls = J2DoPrivHelper.getForNameAction(m2, true,
+ entity.getClassLoader()).run();
+ _metamodel.put(entity, m2cls);
+ return m2cls;
+ } catch (Throwable t) {
+ if (_log.isWarnEnabled())
+ _log.warn(_loc.get("meta-no-model", m2, entity, t));
+ }
+ return null;
+ }
///////////////////////////////
// Configurable implementation
Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/NoneMetaDataFactory.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/NoneMetaDataFactory.java?rev=772820&r1=772819&r2=772820&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/NoneMetaDataFactory.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/NoneMetaDataFactory.java Thu May 7 23:57:04 2009
@@ -142,4 +142,19 @@
public void loadXMLMetaData(FieldMetaData fmd) {
}
+
+ public String getMetaModelClassName(String managedClassName) {
+ return null;
+ }
+ public String getManagedClassName(String metamodelClassName) {
+ return null;
+ }
+
+ public boolean isMetaClass(Class<?> c) {
+ return false;
+ }
+
+ public Class<?> getManagedClass(Class<?> c) {
+ return null;
+ }
}
Modified: openjpa/trunk/openjpa-kernel/src/main/resources/org/apache/openjpa/meta/localizer.properties
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/resources/org/apache/openjpa/meta/localizer.properties?rev=772820&r1=772819&r2=772820&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/resources/org/apache/openjpa/meta/localizer.properties (original)
+++ openjpa/trunk/openjpa-kernel/src/main/resources/org/apache/openjpa/meta/localizer.properties Thu May 7 23:57:04 2009
@@ -187,7 +187,7 @@
primary key fields of the class. Make sure your identity class has the \
same primary keys as your persistent type, including pk field types. \
Mismatched property: "{1}"
-null-cons: The id class specified by type "{0}" does not have a public \
+null-cons: The id class "{0}" specified by type "{1}" does not have a public \
no-args constructor.
hc-method: The identity class specified by type "{0}" is not valid, as the \
hashCode method is not overridden. Implement hashCode so that two \
Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/TestMetamodel.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/TestMetamodel.java?rev=772820&r1=772819&r2=772820&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/TestMetamodel.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/TestMetamodel.java Thu May 7 23:57:04 2009
@@ -19,8 +19,12 @@
package org.apache.openjpa.persistence.meta;
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+
import javax.persistence.metamodel.Attribute;
import javax.persistence.metamodel.Collection;
+import javax.persistence.metamodel.Entity;
import javax.persistence.metamodel.List;
import javax.persistence.metamodel.ManagedType;
import javax.persistence.metamodel.Set;
@@ -30,6 +34,9 @@
import javax.persistence.metamodel.Type.PersistenceType;
import org.apache.openjpa.meta.ClassMetaData;
+import org.apache.openjpa.meta.MetaDataRepository;
+import org.apache.openjpa.persistence.criteria.Account;
+import org.apache.openjpa.persistence.criteria.Account_;
import org.apache.openjpa.persistence.test.SingleEMFTestCase;
/**
@@ -40,9 +47,11 @@
*/
public class TestMetamodel extends SingleEMFTestCase {
MetamodelImpl model;
+ MetaDataRepository repos;
public void setUp() {
super.setUp(
+ Account.class,
ImplicitFieldAccessMappedSuperclass.class,
ImplicitFieldAccessBase.class,
ImplicitFieldAccessSubclass.class,
@@ -51,15 +60,31 @@
Embed0.class,
Embed1.class);
emf.createEntityManager();
+ repos = emf.getConfiguration().getMetaDataRepositoryInstance();
model = (MetamodelImpl)emf.getMetamodel();
}
- public void testModelIsPopulated() {
+ public void testModelIsInstantiated() {
assertFalse(model.getEntities().isEmpty());
assertFalse(model.getEmbeddables().isEmpty());
assertFalse(model.getManagedTypes().isEmpty());
}
+ public void testModelIsPopulated() {
+ Entity<Account> m = model.entity(Account.class);
+ Class<?> mCls = m.getJavaType();
+ assertNotNull(m);
+ Class<?> m2Cls = repos.getMetaModel(mCls, true);
+ assertNotNull(m2Cls);
+ try {
+ Field f2 = getStaticField(m2Cls, "balance");
+ assertNotNull(f2);
+ } catch (Throwable t) {
+ t.printStackTrace();
+ fail();
+ }
+ }
+
public void testPersistentCategory() {
assertCategory(PersistenceType.MAPPED_SUPERCLASS,
ImplicitFieldAccessMappedSuperclass.class);
@@ -199,4 +224,19 @@
void assertCategory(PersistenceType category, Class<?> cls) {
assertEquals(category, categorize(cls));
}
+
+ Field getStaticField(Class<?> cls, String name) {
+ try {
+ System.err.println("Fields of " + cls);
+ Field[] fds = cls.getDeclaredFields();
+ for (Field f : fds) {
+ System.err.println(f);
+ int mods = f.getModifiers();
+ if (f.getName().equals(name) && Modifier.isStatic(mods))
+ return f;
+ }
+ } catch (Exception e) {
+ }
+ return null;
+ }
}
Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceMetaDataFactory.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceMetaDataFactory.java?rev=772820&r1=772819&r2=772820&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceMetaDataFactory.java (original)
+++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceMetaDataFactory.java Thu May 7 23:57:04 2009
@@ -38,6 +38,7 @@
import javax.persistence.NamedQuery;
import javax.persistence.SqlResultSetMapping;
import javax.persistence.SqlResultSetMappings;
+import javax.persistence.metamodel.TypesafeMetamodel;
import org.apache.openjpa.lib.conf.Configurable;
import org.apache.openjpa.lib.conf.Configuration;
@@ -538,4 +539,31 @@
= getXMLAnnotationParser();
parser.parse(fmd);
}
+
+ private static String UNDERSCORE = "_";
+
+ public String getManagedClassName(String mmClassName) {
+ if (mmClassName == null || mmClassName.length() == 0)
+ return null;
+ if (mmClassName.endsWith(UNDERSCORE))
+ return mmClassName.substring(0, mmClassName.length()-1);
+ return mmClassName;
+ }
+
+ public String getMetaModelClassName(String managedClassName) {
+ if (managedClassName == null || managedClassName.length() == 0)
+ return null;
+ return managedClassName + UNDERSCORE;
+ }
+
+ public boolean isMetaClass(Class<?> c) {
+ return c != null && c.getAnnotation(TypesafeMetamodel.class) != null;
+ }
+
+ public Class<?> getManagedClass(Class<?> c) {
+ if (isMetaClass(c)) {
+ return c.getAnnotation(TypesafeMetamodel.class).value();
+ }
+ return null;
+ }
}
Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/AnnotationProcessor6.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/AnnotationProcessor6.java?rev=772820&r1=772819&r2=772820&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/AnnotationProcessor6.java (original)
+++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/AnnotationProcessor6.java Thu May 7 23:57:04 2009
@@ -1,3 +1,21 @@
+/*
+ * 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.openjpa.persistence.meta;
import static javax.lang.model.SourceVersion.RELEASE_6;
@@ -14,7 +32,6 @@
import javax.annotation.Generated;
import javax.annotation.processing.AbstractProcessor;
-import javax.annotation.processing.Filer;
import javax.annotation.processing.ProcessingEnvironment;
import javax.annotation.processing.RoundEnvironment;
import javax.annotation.processing.SupportedAnnotationTypes;
@@ -25,7 +42,6 @@
import javax.lang.model.type.TypeMirror;
import javax.lang.model.util.Elements;
import javax.persistence.metamodel.TypesafeMetamodel;
-import javax.tools.Diagnostic;
import javax.tools.JavaCompiler;
import javax.tools.JavaFileObject;
import javax.tools.StandardJavaFileManager;
@@ -33,6 +49,8 @@
import javax.tools.ToolProvider;
import org.apache.openjpa.lib.util.Localizer;
+import org.apache.openjpa.meta.MetaDataFactory;
+import org.apache.openjpa.persistence.PersistenceMetaDataFactory;
import org.apache.openjpa.persistence.util.SourceCode;
/**
@@ -42,6 +60,8 @@
* This tool is invoked during compilation for JDK6 compiler if OpenJPA and JPA
* libraries are specified in the compiler <code>-processorpath</code> option.
* <br>
+ * Supported options
+ * <LI>
* For example,<br>
* <center><code>$ javac -processorpath path/to/openjpa;/path/to/jpa
* -s src -Alog mypackage/MyClass.java</code></center>
@@ -65,15 +85,17 @@
"javax.persistence.Entity",
"javax.persistence.Embeddable",
"javax.persistence.MappedSuperclass" })
-@SupportedOptions( { "log", "out", "source" })
+@SupportedOptions( { "log", "out", "source", "naming" })
@SupportedSourceVersion(RELEASE_6)
public class AnnotationProcessor6 extends AbstractProcessor {
private SourceAnnotationHandler handler;
+ private StandardJavaFileManager fileManager;
+ private MetaDataFactory factory;
+ private int generatedSourceVersion = 6;
private CompileTimeLogger logger;
private static Localizer _loc =
Localizer.forPackage(AnnotationProcessor6.class);
- private static final String UNDERSCORE = "_";
/**
* Category of members as per JPA 2.0 type system.
@@ -147,10 +169,12 @@
@Override
public synchronized void init(ProcessingEnvironment processingEnv) {
super.init(processingEnv);
- processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE,
- _loc.get("mmg-tool-banner").getMessage());
logger = new CompileTimeLogger(processingEnv);
- handler = new SourceAnnotationHandler(processingEnv);
+ logger.info(_loc.get("mmg-tool-banner"));
+ setSourceVersion();
+ setFileManager();
+ setNamingPolicy();
+ handler = new SourceAnnotationHandler(processingEnv, logger);
}
/**
@@ -181,14 +205,17 @@
Elements eUtils = processingEnv.getElementUtils();
String originalClass = eUtils.getBinaryName((TypeElement) e).toString();
String originalSimpleClass = e.getSimpleName().toString();
- String metaClass = originalClass + UNDERSCORE;
+ String metaClass = factory.getMetaModelClassName(originalClass);
SourceCode source = new SourceCode(metaClass);
comment(source);
annotate(source, originalClass);
TypeElement supCls = handler.getPersistentSupertype(e);
- if (supCls != null)
- source.getTopLevelClass().setSuper(supCls.toString() + UNDERSCORE);
+ if (supCls != null) {
+ String superName = factory.getMetaModelClassName(
+ supCls.toString());
+ source.getTopLevelClass().setSuper(superName);
+ }
try {
PrintWriter writer = createSourceFile(metaClass, e);
SourceCode.Class modelClass = source.getTopLevelClass();
@@ -244,7 +271,7 @@
SourceCode.Class cls = source.getTopLevelClass();
cls.addAnnotation(TypesafeMetamodel.class.getName())
.addArgument("value", originalClass + ".class", false);
- if (getSourceVersion() >= 6) {
+ if (generatedSourceVersion >= 6) {
cls.addAnnotation(Generated.class.getName())
.addArgument("value", this.getClass().getName())
.addArgument("date", new Date().toString());
@@ -260,33 +287,57 @@
* the source version for the generated classes.
* n must be a integer. Default or wrong specification returns 6.
*/
- private int getSourceVersion() {
+ private void setSourceVersion() {
String version = processingEnv.getOptions().get("source");
if (version != null) {
try {
- return Integer.parseInt(version);
+ generatedSourceVersion = Integer.parseInt(version);
} catch (NumberFormatException e) {
-
+ logger.warn(_loc.get("mmg-bad-source", version, 6));
+ generatedSourceVersion = 6;
}
+ } else {
+ generatedSourceVersion = 6;
}
- return 6;
}
- private PrintWriter createSourceFile(String metaClass, TypeElement e)
- throws IOException {
+ private void setNamingPolicy() {
+ String policy = processingEnv.getOptions().get("naming");
+ if (policy != null) {
+ try {
+ factory = (MetaDataFactory)Class.forName(policy).newInstance();
+ } catch (Throwable e) {
+ logger.warn(_loc.get("mmg-bad-naming", policy, e));
+ factory = new PersistenceMetaDataFactory();
+ }
+ } else {
+ factory = new PersistenceMetaDataFactory();
+ }
+ }
+
+ private void setFileManager() {
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
- StandardJavaFileManager mgr = compiler.getStandardFileManager(null,
+ fileManager = compiler.getStandardFileManager(null,
null, null);
String srcOutput = processingEnv.getOptions().get("out");
if (srcOutput != null) {
- mgr.setLocation(StandardLocation.SOURCE_OUTPUT,
+ try {
+ fileManager.setLocation(StandardLocation.SOURCE_OUTPUT,
Collections.singletonList(new File(srcOutput)));
+ } catch (Throwable t) {
+ logger.warn(_loc.get("mmg-bad-out", srcOutput,
+ StandardLocation.SOURCE_OUTPUT));
+ }
}
+ }
+
+ private PrintWriter createSourceFile(String metaClass, TypeElement e)
+ throws IOException {
- JavaFileObject javaFile = mgr.getJavaFileForOutput(
+ JavaFileObject javaFile = fileManager.getJavaFileForOutput(
StandardLocation.SOURCE_OUTPUT,
metaClass, JavaFileObject.Kind.SOURCE, null);
- logger.info(_loc.get("mmg-process", javaFile.toUri()).getMessage());
+ logger.info(_loc.get("mmg-process", javaFile.toUri()));
OutputStream out = javaFile.openOutputStream();
PrintWriter writer = new PrintWriter(out);
return writer;
Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/CompileTimeLogger.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/CompileTimeLogger.java?rev=772820&r1=772819&r2=772820&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/CompileTimeLogger.java (original)
+++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/CompileTimeLogger.java Thu May 7 23:57:04 2009
@@ -22,6 +22,8 @@
import javax.annotation.processing.ProcessingEnvironment;
import javax.tools.Diagnostic;
+import org.apache.openjpa.lib.util.Localizer;
+
/**
* Simple logger sets log level from javac compilers annotation processing
* options <code>-Alog=TRACE|INFO|WARN|ERROR</code> and uses the processing
@@ -32,10 +34,20 @@
*/
public class CompileTimeLogger {
private static enum Level {TRACE, INFO, WARN, ERROR};
+ private static Localizer _loc = Localizer.forPackage(
+ CompileTimeLogger.class);
+ private static Level DEFAULT_LEVEL = Level.WARN;
private int logLevel;
private Messager messager;
+
public CompileTimeLogger(ProcessingEnvironment env) {
+ messager = env.getMessager();
+
String level = env.getOptions().get("log");
+ if (level == null) {
+ logLevel = DEFAULT_LEVEL.ordinal();
+ return;
+ }
if ("trace".equalsIgnoreCase(level))
logLevel = Level.TRACE.ordinal();
else if ("info".equalsIgnoreCase(level))
@@ -45,32 +57,31 @@
else if ("error".equalsIgnoreCase(level))
logLevel = Level.ERROR.ordinal();
else {
- logLevel = Level.INFO.ordinal();
- warn("mmg-bad-log");
+ logLevel = DEFAULT_LEVEL.ordinal();
+ warn(_loc.get("mmg-bad-log", level, DEFAULT_LEVEL));
}
- messager = env.getMessager();
-
}
- public void info(String message) {
+ public void info(Localizer.Message message) {
log(Level.INFO, message, Diagnostic.Kind.NOTE);
}
- public void trace(String message) {
+ public void trace(Localizer.Message message) {
log(Level.TRACE, message, Diagnostic.Kind.NOTE);
}
- public void warn(String message) {
+ public void warn(Localizer.Message message) {
log(Level.WARN, message, Diagnostic.Kind.MANDATORY_WARNING);
}
- public void error(String message) {
+ public void error(Localizer.Message message) {
log(Level.ERROR, message, Diagnostic.Kind.ERROR);
}
- private void log(Level level, String message, Diagnostic.Kind kind) {
+ private void log(Level level, Localizer.Message message,
+ Diagnostic.Kind kind) {
if (logLevel <= level.ordinal()) {
- messager.printMessage(kind, message);
+ messager.printMessage(kind, message.toString());
}
}
}
Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/MetamodelImpl.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/MetamodelImpl.java?rev=772820&r1=772819&r2=772820&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/MetamodelImpl.java (original)
+++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/MetamodelImpl.java Thu May 7 23:57:04 2009
@@ -187,8 +187,7 @@
public <X> void populate(Types.Managed<X> type) {
try {
Class<X> cls = type.getJavaType();
- Class<?> mcls = J2DoPrivHelper.getForNameAction(cls.getName()+"_",
- true, cls.getClassLoader()).run();
+ Class<?> mcls = repos.getMetaModel(cls, true);
Field[] fields = mcls.getFields();
for (Field f : fields) {
f.set(null, type.getMember(f.getName()));
Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/SourceAnnotationHandler.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/SourceAnnotationHandler.java?rev=772820&r1=772819&r2=772820&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/SourceAnnotationHandler.java (original)
+++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/meta/SourceAnnotationHandler.java Thu May 7 23:57:04 2009
@@ -88,10 +88,11 @@
* Construct with JDK6 annotation processing environment.
*
*/
- public SourceAnnotationHandler(ProcessingEnvironment processingEnv) {
+ public SourceAnnotationHandler(ProcessingEnvironment processingEnv,
+ CompileTimeLogger logger) {
super();
this.processingEnv = processingEnv;
- this.logger = new CompileTimeLogger(processingEnv);
+ this.logger = logger;
}
public int determineTypeAccess(TypeElement type) {
@@ -262,7 +263,7 @@
}
if (!matched) {
logger.warn(_loc.get("getter-unmatched", getter,
- getter.getEnclosingElement()).toString());
+ getter.getEnclosingElement()));
unmatched.add(getter);
}
Modified: openjpa/trunk/openjpa-persistence/src/main/resources/org/apache/openjpa/persistence/meta/localizer.properties
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/resources/org/apache/openjpa/persistence/meta/localizer.properties?rev=772820&r1=772819&r2=772820&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence/src/main/resources/org/apache/openjpa/persistence/meta/localizer.properties (original)
+++ openjpa/trunk/openjpa-persistence/src/main/resources/org/apache/openjpa/persistence/meta/localizer.properties Thu May 7 23:57:04 2009
@@ -36,4 +36,11 @@
getter-unmatched: Getter method "{0}" in "{1}" has no matching setter method.
mmg-tool-banner: Starting OpenJPA Annotation Processor for Metamodel Generation
mmg-process: Generating canonical metamodel source code "{0}"
-mmg-tool-sign: Generated by OpenJPA MetaModel Generator Tool.
\ No newline at end of file
+mmg-tool-sign: Generated by OpenJPA MetaModel Generator Tool.
+mmg-bad-source: Wrong value "{0}" of -Asource option to specify the target \
+ Java compiler version for the generated meta-model files. Expected a \
+ positive number. Setting default value as Java {1} compiler.
+mmg-bad-naming: Naming policy for meta-model classes specified in -Anaming \
+ option "{0}" can not be used due to "{1}". Using default naming policy.
+mmg-bad-log: Log level specified is -Alog option "{0}" is not recognized. \
+ Logging at default "{1}" level.
\ No newline at end of file