# HG changeset patch # Parent 3a138ec500cd07d3e46762650ebb419c265935c9 diff --git a/j2ee.api.ejbmodule/nbproject/project.xml b/j2ee.api.ejbmodule/nbproject/project.xml --- a/j2ee.api.ejbmodule/nbproject/project.xml +++ b/j2ee.api.ejbmodule/nbproject/project.xml @@ -240,6 +240,7 @@ org.netbeans.modules.j2ee.ejbrefactoring org.netbeans.modules.j2ee.ejbverification org.netbeans.modules.j2ee.performancetests + org.netbeans.modules.j2ee.persistence org.netbeans.modules.maven.j2ee org.netbeans.modules.maven.jaxws org.netbeans.modules.profiler.j2ee diff --git a/j2ee.persistence/nbproject/project.xml b/j2ee.persistence/nbproject/project.xml --- a/j2ee.persistence/nbproject/project.xml +++ b/j2ee.persistence/nbproject/project.xml @@ -179,6 +179,14 @@ + org.netbeans.modules.j2ee.api.ejbmodule + + + + 1.28 + + + org.netbeans.modules.j2ee.core.utilities diff --git a/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/wizard/EntityClosure.java b/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/wizard/EntityClosure.java --- a/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/wizard/EntityClosure.java +++ b/j2ee.persistence/src/org/netbeans/modules/j2ee/persistence/wizard/EntityClosure.java @@ -45,9 +45,12 @@ package org.netbeans.modules.j2ee.persistence.wizard; import java.io.IOException; +import java.net.URL; import java.util.*; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; +import java.util.logging.Level; +import java.util.logging.Logger; import javax.lang.model.element.Element; import javax.lang.model.element.ElementKind; import javax.lang.model.element.TypeElement; @@ -59,11 +62,16 @@ import javax.swing.SwingUtilities; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; +import org.netbeans.api.java.classpath.ClassPath; +import org.netbeans.api.java.source.ClasspathInfo; import org.netbeans.api.java.source.CompilationController; import org.netbeans.api.java.source.ElementHandle; import org.netbeans.api.java.source.JavaSource; +import org.netbeans.api.java.source.SourceUtils; import org.netbeans.api.java.source.Task; +import org.netbeans.api.project.FileOwnerQuery; import org.netbeans.api.project.Project; +import org.netbeans.modules.j2ee.api.ejbjar.EjbJar; import org.netbeans.modules.j2ee.metadata.model.api.MetadataModel; import org.netbeans.modules.j2ee.metadata.model.api.MetadataModelAction; import org.netbeans.modules.j2ee.metadata.model.api.MetadataModelException; @@ -74,6 +82,8 @@ import org.netbeans.modules.j2ee.persistence.util.MetadataModelReadHelper; import org.netbeans.modules.j2ee.persistence.util.MetadataModelReadHelper.State; import org.netbeans.modules.j2ee.persistence.wizard.jpacontroller.JpaControllerUtil; +import org.openide.filesystems.FileObject; +import org.openide.filesystems.URLMapper; import org.openide.util.ChangeSupport; import org.openide.util.Exceptions; @@ -82,7 +92,8 @@ * @author Pavel Buzek */ public class EntityClosure { - + private static final Logger LOG = Logger.getLogger(EntityClosure.class.getName()); + // XXX this class needs a complete rewrite: the computing of the available // entity classes and of the referenced classes need to be moved away. @@ -169,17 +180,32 @@ if( source!=null ) { try { + final Set ejbProjects = new HashSet(); + ClassPath classPath = source.getClasspathInfo().getClassPath(ClasspathInfo.PathKind.COMPILE); + for (FileObject fileObject : classPath.getRoots()) { + Project rootOwner = FileOwnerQuery.getOwner(fileObject); + if (rootOwner != null) { + if (EjbJar.getEjbJar(rootOwner.getProjectDirectory()) != null) { + ejbProjects.add(rootOwner); + } + } + } source.runUserActionTask(new Task() { @Override public void run(CompilationController parameter) throws Exception { for (Entity en : entities) { - availableEntities.add(en.getClass2()); - fqnEntityMap.put(en.getClass2(), en); PersistentObject po = (PersistentObject) en; ElementHandle teh = po.getTypeElementHandle(); - TypeElement te = teh.resolve(parameter); - fqnIdExistMap.put(en.getClass2(), JpaControllerUtil.haveId(te)); + FileObject file = SourceUtils.getFile(teh, parameter.getClasspathInfo()); + if (!isFromEjbProject(ejbProjects, file)) { + availableEntities.add(en.getClass2()); + fqnEntityMap.put(en.getClass2(), en); + TypeElement te = teh.resolve(parameter); + fqnIdExistMap.put(en.getClass2(), JpaControllerUtil.haveId(te)); + } else { + LOG.log(Level.INFO, "Omitted entity since the visibility wasn''t ensured, entity={0}", en.getClass2()); + } } } }, true); @@ -190,6 +216,15 @@ availableEntities.removeAll(selectedEntities); changeSupport.fireChange(); } + + private boolean isFromEjbProject(Set ejbProjects, FileObject fo) { + for (Project relatedProject : ejbProjects) { + if (fo.getPath().startsWith(relatedProject.getProjectDirectory().getPath())) { + return true; + } + } + return false; + } public void addChangeListener(ChangeListener listener) { changeSupport.addChangeListener(listener);