Author: dgeraskov
Date: 2011-09-15 07:35:25 -0400 (Thu, 15 Sep 2011)
New Revision: 34761
Added:
trunk/hibernatetools/plugins/org.jboss.tools.hibernate.jpt.core/.settings/.api_filters
Modified:
trunk/hibernatetools/plugins/org.jboss.tools.hibernate.jpt.core/src/org/jboss/tools/hibernate/jpt/core/internal/HibernateJpaProject.java
trunk/hibernatetools/plugins/org.jboss.tools.hibernate.jpt.core/src/org/jboss/tools/hibernate/jpt/core/internal/context/HibernatePersistenceUnit.java
trunk/hibernatetools/plugins/org.jboss.tools.hibernate.jpt.core/src/org/jboss/tools/hibernate/jpt/core/internal/context/persistence/HibernateClassRef.java
Log:
https://issues.jboss.org/browse/JBIDE-9701
process implied package-info like implied entities are processed
Added:
trunk/hibernatetools/plugins/org.jboss.tools.hibernate.jpt.core/.settings/.api_filters
===================================================================
---
trunk/hibernatetools/plugins/org.jboss.tools.hibernate.jpt.core/.settings/.api_filters
(rev 0)
+++
trunk/hibernatetools/plugins/org.jboss.tools.hibernate.jpt.core/.settings/.api_filters 2011-09-15
11:35:25 UTC (rev 34761)
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"
standalone="no"?>
+<component id="org.jboss.tools.hibernate.jpt.core"
version="2">
+ <resource
path="src/org/jboss/tools/hibernate/jpt/core/internal/HibernateJpaProject.java"
type="org.jboss.tools.hibernate.jpt.core.internal.HibernateJpaProject">
+ <filter id="576720909">
+ <message_arguments>
+ <message_argument value="AbstractJpaProject"/>
+ <message_argument value="HibernateJpaProject"/>
+ </message_arguments>
+ </filter>
+ </resource>
+ <resource
path="src/org/jboss/tools/hibernate/jpt/core/internal/context/HibernatePersistenceUnit.java"
type="org.jboss.tools.hibernate.jpt.core.internal.context.HibernatePersistenceUnit">
+ <filter id="576720909">
+ <message_arguments>
+ <message_argument value="AbstractPersistenceUnit"/>
+ <message_argument value="HibernatePersistenceUnit"/>
+ </message_arguments>
+ </filter>
+ </resource>
+</component>
Modified:
trunk/hibernatetools/plugins/org.jboss.tools.hibernate.jpt.core/src/org/jboss/tools/hibernate/jpt/core/internal/HibernateJpaProject.java
===================================================================
---
trunk/hibernatetools/plugins/org.jboss.tools.hibernate.jpt.core/src/org/jboss/tools/hibernate/jpt/core/internal/HibernateJpaProject.java 2011-09-15
10:49:15 UTC (rev 34760)
+++
trunk/hibernatetools/plugins/org.jboss.tools.hibernate.jpt.core/src/org/jboss/tools/hibernate/jpt/core/internal/HibernateJpaProject.java 2011-09-15
11:35:25 UTC (rev 34761)
@@ -15,8 +15,14 @@
import org.eclipse.core.resources.ProjectScope;
import org.eclipse.core.runtime.preferences.IScopeContext;
+import org.eclipse.jpt.common.core.JptCommonCorePlugin;
+import org.eclipse.jpt.common.utility.internal.iterables.FilteringIterable;
+import org.eclipse.jpt.common.utility.internal.iterables.TransformationIterable;
+import org.eclipse.jpt.jpa.core.JpaFile;
import org.eclipse.jpt.jpa.core.JpaProject;
import org.eclipse.jpt.jpa.core.internal.AbstractJpaProject;
+import org.eclipse.jpt.jpa.core.resource.java.JavaResourcePackage;
+import org.eclipse.jpt.jpa.core.resource.java.JavaResourcePackageInfoCompilationUnit;
import org.eclipse.wst.validation.internal.provisional.core.IMessage;
import org.eclipse.wst.validation.internal.provisional.core.IReporter;
import org.hibernate.cfg.Configuration;
@@ -77,7 +83,59 @@
}
return this.cachedNamingStrategyEnable;
}
+
+ protected Iterable<JpaFile> getJavaPackageInfoSourceJpaFiles() {
+ return this.getJpaFiles(JptCommonCorePlugin.JAVA_SOURCE_PACKAGE_INFO_CONTENT_TYPE);
+ }
+ /**
+ * Return the JPA project's resource compilation units.
+ */
+ protected Iterable<JavaResourcePackageInfoCompilationUnit>
getInternalJavaResourcePackageInfoCompilationUnits() {
+ return new TransformationIterable<JpaFile,
JavaResourcePackageInfoCompilationUnit>(this.getJavaPackageInfoSourceJpaFiles()) {
+ @Override
+ protected JavaResourcePackageInfoCompilationUnit transform(JpaFile jpaFile) {
+ return (JavaResourcePackageInfoCompilationUnit) jpaFile.getResourceModel();
+ }
+ };
+ }
+
+ protected Iterable<JavaResourcePackage> getInternalSourceJavaResourcePackages() {
+ return new TransformationIterable<JavaResourcePackageInfoCompilationUnit,
JavaResourcePackage>(this.getInternalJavaResourcePackageInfoCompilationUnits()) {
+ @Override
+ protected JavaResourcePackage transform(final JavaResourcePackageInfoCompilationUnit
compilationUnit) {
+ return compilationUnit.getPackage();
+ }
+ };
+ }
+
+ protected Iterable<JavaResourcePackage>
getInternalAnnotatedSourceJavaResourcePacakges() {
+ return new
FilteringIterable<JavaResourcePackage>(this.getInternalSourceJavaResourcePackages())
{
+ @Override
+ protected boolean accept(JavaResourcePackage jrpPackage) {
+ return /*jrpPackage.isPersistable() && jrpPackage.isAnnotated()*/true;
+ }
+ };
+ }
+
+ /**
+ * Return only those valid <em>mapped</em> (i.e. has any annotations) Java
resource
+ * persistent packages that are directly part of the JPA project, ignoring
+ * those in JARs referenced in <code>persistence.xml</code>.
+ */
+ protected Iterable<JavaResourcePackage>
getInternalMappedSourceJavaResourcePackages() {
+ return getInternalAnnotatedSourceJavaResourcePacakges();
+ }
+
+ public Iterable<String> getMappedJavaSourcePackagesNames() {
+ return new TransformationIterable<JavaResourcePackage,
String>(this.getInternalMappedSourceJavaResourcePackages()) {
+ @Override
+ protected String transform(JavaResourcePackage jrpPackage) {
+ return jrpPackage.getName();
+ }
+ };
+ }
+
@Override
protected void validate(List<IMessage> messages, IReporter reporter) {
super.validate(messages, reporter);
Modified:
trunk/hibernatetools/plugins/org.jboss.tools.hibernate.jpt.core/src/org/jboss/tools/hibernate/jpt/core/internal/context/HibernatePersistenceUnit.java
===================================================================
---
trunk/hibernatetools/plugins/org.jboss.tools.hibernate.jpt.core/src/org/jboss/tools/hibernate/jpt/core/internal/context/HibernatePersistenceUnit.java 2011-09-15
10:49:15 UTC (rev 34760)
+++
trunk/hibernatetools/plugins/org.jboss.tools.hibernate.jpt.core/src/org/jboss/tools/hibernate/jpt/core/internal/context/HibernatePersistenceUnit.java 2011-09-15
11:35:25 UTC (rev 34761)
@@ -29,6 +29,7 @@
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jpt.common.utility.internal.CollectionTools;
import org.eclipse.jpt.common.utility.internal.NotNullFilter;
+import org.eclipse.jpt.common.utility.internal.iterables.CompositeIterable;
import org.eclipse.jpt.common.utility.internal.iterables.FilteringIterable;
import org.eclipse.jpt.common.utility.internal.iterables.TransformationIterable;
import org.eclipse.jpt.common.utility.internal.iterators.CloneListIterator;
@@ -42,6 +43,7 @@
import org.eclipse.jpt.jpa.core.resource.persistence.XmlPersistenceUnit;
import org.eclipse.wst.validation.internal.provisional.core.IMessage;
import org.eclipse.wst.validation.internal.provisional.core.IReporter;
+import org.jboss.tools.hibernate.jpt.core.internal.HibernateJpaProject;
import org.jboss.tools.hibernate.jpt.core.internal.HibernateJptPlugin;
import
org.jboss.tools.hibernate.jpt.core.internal.context.basic.BasicHibernateProperties;
import org.jboss.tools.hibernate.jpt.core.internal.context.basic.Hibernate;
@@ -76,6 +78,11 @@
XmlPersistenceUnit persistenceUnit) {
super(parent, persistenceUnit);
}
+
+ @Override
+ public HibernateJpaProject getJpaProject() {
+ return (HibernateJpaProject)super.getJpaProject();
+ }
@Override
protected void addNonUpdateAspectNamesTo(Set<String> nonUpdateAspectNames) {
@@ -225,7 +232,42 @@
CollectionTools.addAll(generatorList,
((HibernateGeneratorContainer)generatorContainer).genericGenerators());
}
}
+
+ /**
+ * Return the names of all the Java classes and packages in the JPA project that are
+ * mapped (i.e. have the appropriate annotation etc.) but not specified
+ * in the persistence unit.
+ */
+ @SuppressWarnings("unchecked")
+ protected Iterable<String> getImpliedClassNames_() {
+ return new CompositeIterable<String>(super.getImpliedClassNames_(),
+ new
FilteringIterable<String>(this.getJpaProject().getMappedJavaSourcePackagesNames())
{
+ @Override
+ protected boolean accept(String mappedPackageName) {
+ return !HibernatePersistenceUnit.this.specifiesPackageInfo(mappedPackageName);
+ }
+ }
+ );
+ }
+
+ /**
+ * Ignore implied class refs and jar files.
+ */
+ public boolean specifiesPackageInfo(String typeName) {
+ for (ClassRef classRef : this.getSpecifiedClassRefs()) {
+ if (classRef.isFor(typeName)) {
+ return true;
+ }
+ }
+ /*for (MappingFileRef mappingFileRef : this.getMappingFileRefs()) {
+ if (mappingFileRef.getPersistentType(typeName) != null) {
+ return true;
+ }
+ }*/
+ return false;
+ }
+
// ********** Validation ***********************************************
@Override
public void validate(List<IMessage> messages, IReporter reporter) {
@@ -273,213 +315,6 @@
}
}
-//
-// // ********** specified package-info refs **********
-//
-// public ListIterator<PackageInfoRef> specifiedPackageInfoRefs() {
-// return this.getSpecifiedPackageInfoRefs().iterator();
-// }
-//
-// protected ListIterable<PackageInfoRef> getSpecifiedPackageInfoRefs() {
-// return new
LiveCloneListIterable<PackageInfoRef>(this.specifiedPackageInfoRefs);
-// }
-//
-// public int specifiedPackageInfoRefsSize() {
-// return this.specifiedPackageInfoRefs.size();
-// }
-//
-// public PackageInfoRef addSpecifiedPackageInfoRef(String packageName) {
-// return this.addSpecifiedPackageInfoRef(this.specifiedPackageInfoRefs.size(),
packageName);
-// }
-//
-// public PackageInfoRef addSpecifiedPackageInfoRef(int index, String packageName) {
-// XmlPackageInfoRef xmlPackageInfoRef = this.buildXmlPackageInfoRef(packageName);
-// PackageInfoRef classRef = this.addSpecifiedPackageInfoRef_(index,
xmlPackageInfoRef);
-// this.xmlPersistenceUnit.getClasses().add(index, xmlPackageInfoRef);
-// return classRef;
-// }
-//
-// protected XmlPackageInfoRef buildXmlPackageInfoRef(String packageName) {
-// XmlPackageInfoRef ref = PersistenceFactory.eINSTANCE.createXmlPackageInfoRef();
-// ref.setJavaClass(packageName);
-// return ref;
-// }
-//
-// protected PackageInfoRef buildPackageInfoRef(XmlPackageInfoRef xmlPackageInfoRef) {
-// return this.getContextNodeFactory().buildPackageInfoRef(this, xmlPackageInfoRef);
-// }
-//
-// public void removeSpecifiedPackageInfoRef(PackageInfoRef classRef) {
-// this.removeSpecifiedPackageInfoRef(this.specifiedPackageInfoRefs.indexOf(classRef));
-// }
-//
-// public void removeSpecifiedPackageInfoRef(int index) {
-// this.removeSpecifiedPackageInfoRef_(index);
-// this.xmlPersistenceUnit.getClasses().remove(index);
-// }
-//
-// /**
-// * dispose the class ref
-// */
-// protected void removeSpecifiedPackageInfoRef_(int index) {
-// this.removeItemFromList(index, this.specifiedPackageInfoRefs,
SPECIFIED_CLASS_REFS_LIST).dispose();
-// }
-//
-// protected void initializeSpecifiedPackageInfoRefs() {
-// for (XmlPackageInfoRef xmlJavaPackageInfoRef : this.getXmlPackageInfoRefs()) {
-// this.specifiedPackageInfoRefs.add(this.buildPackageInfoRef(xmlJavaPackageInfoRef));
-// }
-// }
-//
-// protected void syncSpecifiedPackageInfoRefs() {
-// ContextContainerTools.synchronizeWithResourceModel(this.specifiedPackageInfoRefContainerAdapter);
-// }
-//
-// protected Iterable<XmlPackageInfoRef> getXmlPackageInfoRefs() {
-// // clone to reduce chance of concurrency problems
-// return new
LiveCloneIterable<XmlPackageInfoRef>(this.xmlPersistenceUnit.getClasses());
-// }
-//
-// protected void moveSpecifiedPackageInfoRef_(int index, PackageInfoRef classRef) {
-// this.moveItemInList(index, classRef, this.specifiedPackageInfoRefs,
SPECIFIED_CLASS_REFS_LIST);
-// }
-//
-// protected PackageInfoRef addSpecifiedPackageInfoRef_(int index, XmlPackageInfoRef
xmlPackageInfoRef) {
-// PackageInfoRef classRef = this.buildPackageInfoRef(xmlPackageInfoRef);
-// this.addItemToList(index, classRef, this.specifiedPackageInfoRefs,
SPECIFIED_CLASS_REFS_LIST);
-// return classRef;
-// }
-//
-// protected void removeSpecifiedPackageInfoRef_(PackageInfoRef classRef) {
-// this.removeSpecifiedPackageInfoRef_(this.specifiedPackageInfoRefs.indexOf(classRef));
-// }
-//
-// /**
-// * specified class ref container adapter
-// */
-// protected class SpecifiedPackageInfoRefContainerAdapter
-// implements ContextContainerTools.Adapter<PackageInfoRef, XmlPackageInfoRef>
-// {
-// public Iterable<PackageInfoRef> getContextElements() {
-// return HibernatePersistenceUnit.this.getSpecifiedPackageInfoRefs();
-// }
-// public Iterable<XmlPackageInfoRef> getResourceElements() {
-// return HibernatePersistenceUnit.this.getXmlPackageInfoRefs();
-// }
-// public XmlPackageInfoRef getResourceElement(PackageInfoRef contextElement) {
-// return contextElement.getXmlPackageInfoRef();
-// }
-// public void moveContextElement(int index, PackageInfoRef element) {
-// HibernatePersistenceUnit.this.moveSpecifiedPackageInfoRef_(index, element);
-// }
-// public void addContextElement(int index, XmlPackageInfoRef resourceElement) {
-// HibernatePersistenceUnit.this.addSpecifiedPackageInfoRef_(index, resourceElement);
-// }
-// public void removeContextElement(PackageInfoRef element) {
-// HibernatePersistenceUnit.this.removeSpecifiedPackageInfoRef_(element);
-// }
-// }
-//
-// // ********** virtual package-info refs **********
-//
-// public Iterator<PackageInfoRef> impliedPackageInfoRefs() {
-// return this.getImpliedPackageInfoRefs().iterator();
-// }
-//
-// protected Iterable<PackageInfoRef> getImpliedPackageInfoRefs() {
-// return new LiveCloneIterable<PackageInfoRef>(this.impliedPackageInfoRefs);
-// }
-//
-// public int impliedPackageInfoRefsSize() {
-// return this.impliedPackageInfoRefs.size();
-// }
-//
-// protected PackageInfoRef addImpliedPackageInfoRef(String packageName) {
-// PackageInfoRef classRef = this.buildPackageInfoRef(packageName);
-// this.addItemToCollection(classRef, this.impliedPackageInfoRefs,
IMPLIED_CLASS_REFS_COLLECTION);
-// return classRef;
-// }
-//
-// protected PackageInfoRef buildPackageInfoRef(String packageName) {
-// return this.getContextNodeFactory().buildPackageInfoRef(this, packageName);
-// }
-//
-// protected void removeImpliedPackageInfoRef(PackageInfoRef classRef) {
-// this.impliedPackageInfoRefs.remove(classRef);
-// classRef.dispose();
-// this.fireItemRemoved(IMPLIED_CLASS_REFS_COLLECTION, classRef);
-// }
-//
-// protected void updateImpliedPackageInfoRefs() {
-// ContextContainerTools.update(this.impliedPackageInfoRefContainerAdapter);
-// }
-//
-// protected Iterable<String> getImpliedClassNames() {
-// return this.excludesUnlistedClasses() ?
-// EmptyIterable.<String>instance() :
-// this.getImpliedClassNames_();
-// }
-//
-// /**
-// * Return the names of all the Java classes in the JPA project that are
-// * mapped (i.e. have the appropriate annotation etc.) but not specified
-// * in the persistence unit.
-// */
-// protected Iterable<String> getImpliedClassNames_() {
-// return new
FilteringIterable<String>(this.getJpaProject().getMappedJavaSourceClassNames()) {
-// @Override
-// protected boolean accept(String mappedClassName) {
-// return ! HibernatePersistenceUnit.this.specifiesPersistentType(mappedClassName);
-// }
-// };
-// }
-//
-// /**
-// * Virtual class ref container adapter.
-// * <p>
-// * <strong>NB:</strong> The context class ref is matched with a resource
-// * class by name.
-// * <p>
-// * This is used during <strong>both</strong> <em>sync</em>
and
-// * <em>update</em> because the list of implied class refs can be modified
-// * in either situation. In particular, we cannot simply rely on
-// * <em>update</em> because there are situations where a
<em>sync</em> is
-// * triggered but a follow-up <em>update</em> is not. (Of course, any
-// * change discovered here will trigger an <em>update</em>.)
-// * <p>
-// * The most obvious example is when the JPA project is configured to
-// * discover annotated classes and a Java class is annotated for the first
-// * time (via code editing, not via the context model). This will trigger
-// * a <em>sync</em>; but, since the unannotated class is not yet in the
-// * context model and, as a result, the context model's state is untouched,
-// * an <em>update</em> will not be triggered.
-// * <p>
-// * Obviously, other context model changes can change this collection (e.g.
-// * setting whether the persistence unit excludes unlisted classes); o the
-// * collection must also be synchronized during <em>update</em>.
-// */
-// protected class ImpliedPackageInfoRefContainerAdapter
-// implements ContextContainerTools.Adapter<PackageInfoRef, String>
-// {
-// public Iterable<PackageInfoRef> getContextElements() {
-// return HibernatePersistenceUnit.this.getImpliedPackageInfoRef();
-// }
-// public Iterable<String> getResourceElements() {
-// return HibernatePersistenceUnit.this.getImpliedPackageInfoNames();
-// }
-// public String getResourceElement(PackageInfoRef contextElement) {
-// return contextElement.getPackageName();
-// }
-// public void moveContextElement(int index, PackageInfoRef element) {
-// // ignore moves - we don't care about the order of the implied package-info
refs
-// }
-// public void addContextElement(int index, String resourceElement) {
-// // ignore the index - we don't care about the order of the implied package-info
refs
-// HibernatePersistenceUnit.this.addImpliedPackageInfoRef(resourceElement);
-// }
-// public void removeContextElement(PackageInfoRef element) {
-// HibernatePersistenceUnit.this.removeImpliedPackageInfoRef(element);
-// }
-// }
+
}
Modified:
trunk/hibernatetools/plugins/org.jboss.tools.hibernate.jpt.core/src/org/jboss/tools/hibernate/jpt/core/internal/context/persistence/HibernateClassRef.java
===================================================================
---
trunk/hibernatetools/plugins/org.jboss.tools.hibernate.jpt.core/src/org/jboss/tools/hibernate/jpt/core/internal/context/persistence/HibernateClassRef.java 2011-09-15
10:49:15 UTC (rev 34760)
+++
trunk/hibernatetools/plugins/org.jboss.tools.hibernate.jpt.core/src/org/jboss/tools/hibernate/jpt/core/internal/context/persistence/HibernateClassRef.java 2011-09-15
11:35:25 UTC (rev 34761)
@@ -15,7 +15,6 @@
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jpt.common.utility.internal.StringTools;
-import org.eclipse.jpt.jpa.core.JptJpaCorePlugin;
import org.eclipse.jpt.jpa.core.context.persistence.MappingFileRef;
import org.eclipse.jpt.jpa.core.context.persistence.PersistenceUnit;
import org.eclipse.jpt.jpa.core.internal.jpa1.context.persistence.GenericClassRef;
@@ -30,6 +29,7 @@
import org.jboss.tools.hibernate.jpt.core.internal.HibernateJptPlugin;
import org.jboss.tools.hibernate.jpt.core.internal.context.java.JavaPackageInfo;
+
/**
* @author Dmitry Geraskov
*