Author: snjeza
Date: 2009-08-21 06:52:38 -0400 (Fri, 21 Aug 2009)
New Revision: 17212
Modified:
trunk/maven/plugins/org.jboss.tools.maven.seam/src/org/jboss/tools/maven/seam/MavenSeamActivator.java
trunk/maven/plugins/org.jboss.tools.maven.seam/src/org/jboss/tools/maven/seam/configurators/SeamProjectConfigurator.java
trunk/maven/plugins/org.jboss.tools.maven.seam/src/org/jboss/tools/maven/seam/preferences/SeamConfiguratorPreferencePage.java
trunk/maven/plugins/org.jboss.tools.maven.seam/src/org/jboss/tools/maven/seam/preferences/SeamConfiguratorPreferencesInitializer.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/project/facet/ISeamFacetDataModelProperties.java
trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/preferences/SeamSettingsPreferencePage.java
Log:
https://jira.jboss.org/jira/browse/JBIDE-4736 Add m2eclipse project-configurator for Seam
projects
Modified:
trunk/maven/plugins/org.jboss.tools.maven.seam/src/org/jboss/tools/maven/seam/MavenSeamActivator.java
===================================================================
---
trunk/maven/plugins/org.jboss.tools.maven.seam/src/org/jboss/tools/maven/seam/MavenSeamActivator.java 2009-08-21
10:44:28 UTC (rev 17211)
+++
trunk/maven/plugins/org.jboss.tools.maven.seam/src/org/jboss/tools/maven/seam/MavenSeamActivator.java 2009-08-21
10:52:38 UTC (rev 17212)
@@ -80,7 +80,11 @@
public static final String CONFIGURE_SEAM_RUNTIME = "configureSeamRuntime";
//$NON-NLS-1$
public static final boolean CONFIGURE_SEAM_RUNTIME_VALUE = true;
+
+ public static final String CONFIGURE_SEAM_ARTIFACTS =
"configureSeamArtifacts"; //$NON-NLS-1$
+ public static final boolean CONFIGURE_SEAM_ARTIFACTS_VALUE = true;
+
// The shared instance
private static MavenSeamActivator plugin;
Modified:
trunk/maven/plugins/org.jboss.tools.maven.seam/src/org/jboss/tools/maven/seam/configurators/SeamProjectConfigurator.java
===================================================================
---
trunk/maven/plugins/org.jboss.tools.maven.seam/src/org/jboss/tools/maven/seam/configurators/SeamProjectConfigurator.java 2009-08-21
10:44:28 UTC (rev 17211)
+++
trunk/maven/plugins/org.jboss.tools.maven.seam/src/org/jboss/tools/maven/seam/configurators/SeamProjectConfigurator.java 2009-08-21
10:52:38 UTC (rev 17212)
@@ -1,6 +1,7 @@
package org.jboss.tools.maven.seam.configurators;
import java.io.File;
+import java.util.ArrayList;
import java.util.List;
import org.apache.maven.model.Dependency;
@@ -9,15 +10,24 @@
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ProjectScope;
import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
import org.eclipse.core.runtime.preferences.IScopeContext;
+import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.IPackageFragment;
+import org.eclipse.jdt.core.IPackageFragmentRoot;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jst.j2ee.internal.project.J2EEProjectUtilities;
import org.eclipse.jst.j2ee.project.JavaEEProjectUtilities;
import org.eclipse.wst.common.componentcore.ComponentCore;
import org.eclipse.wst.common.componentcore.ModuleCoreNature;
import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
+import org.eclipse.wst.common.componentcore.resources.IVirtualFolder;
import org.eclipse.wst.common.componentcore.resources.IVirtualReference;
import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
import org.eclipse.wst.common.project.facet.core.IFacetedProject;
@@ -37,6 +47,7 @@
import org.jboss.tools.seam.core.project.facet.SeamVersion;
import org.jboss.tools.seam.internal.core.project.facet.ISeamFacetDataModelProperties;
import
org.jboss.tools.seam.internal.core.project.facet.SeamFacetInstallDataModelProvider;
+import org.jboss.tools.seam.ui.wizard.SeamWizardUtils;
import org.maven.ide.eclipse.MavenPlugin;
import org.maven.ide.eclipse.core.IMavenConstants;
import org.maven.ide.eclipse.project.IMavenProjectFacade;
@@ -92,6 +103,12 @@
}
+ private boolean isSeamSettingChangedByUser(IProject project) {
+ IEclipsePreferences projectPreferences = SeamCorePlugin.getSeamPreferences(project);
+ boolean seamSettingsChangedByUser =
projectPreferences.getBoolean(ISeamFacetDataModelProperties.SEAM_SETTINGS_CHANGED_BY_USER,
false);
+ return seamSettingsChangedByUser;
+ }
+
private void configureInternal(MavenProject mavenProject,IProject project,
IProgressMonitor monitor) throws CoreException {
IPreferenceStore store = MavenSeamActivator.getDefault().getPreferenceStore();
@@ -99,6 +116,13 @@
if (!configureSeam) {
return;
}
+ if (isSeamSettingChangedByUser(project)) {
+ return;
+ }
+ IProject rootSeamProject = SeamWizardUtils.getRootSeamProject(project);
+ if (rootSeamProject != null && isSeamSettingChangedByUser(rootSeamProject)) {
+ return;
+ }
String packaging = mavenProject.getPackaging();
String seamVersion = getSeamVersion(mavenProject);
if (seamVersion != null) {
@@ -107,10 +131,10 @@
if (earProjects.length > 0) {
deploying = "ear"; //$NON-NLS-1$
}
- IDataModel model = createSeamDataModel(deploying, seamVersion);
- final IFacetedProject fproj = ProjectFacetsManager.create(project);
+ final IFacetedProject fproj = ProjectFacetsManager.create(project);
if ("war".equals(packaging)) { //$NON-NLS-1$
- installWarFacets(fproj,model,seamVersion, monitor);
+ IDataModel model = createSeamDataModel(deploying, seamVersion, project);
+ installWarFacets(fproj, model, seamVersion, monitor);
} else if ("ear".equals(packaging)) { //$NON-NLS-1$
installEarFacets(fproj, monitor);
installM2Facet(fproj, monitor);
@@ -122,7 +146,45 @@
prefs.put(ISeamFacetDataModelProperties.JBOSS_AS_DEPLOY_AS,ISeamFacetDataModelProperties.DEPLOY_AS_EAR);
storeSettings(webProject);
}
+ IProject ejbProject = getReferencingSeamEJBProject(project);
+ if (ejbProject != null) {
+ prefs.put(ISeamFacetDataModelProperties.SEAM_EJB_PROJECT,
ejbProject.getName());
+ IJavaProject javaProject = JavaCore.create(ejbProject);
+ boolean configureSeamArtifacts =
store.getBoolean(MavenSeamActivator.CONFIGURE_SEAM_ARTIFACTS);
+ if (configureSeamArtifacts) {
+ if (javaProject != null && javaProject.isOpen()) {
+ try {
+ IClasspathEntry[] entries = javaProject.getRawClasspath();
+ for (int i = 0; i < entries.length; i++) {
+ IClasspathEntry entry = entries[i];
+ if (entry.getEntryKind() == IClasspathEntry.CPE_SOURCE) {
+ String sourceFolder = entry.getPath().toString();
+ prefs.put(ISeamFacetDataModelProperties.SESSION_BEAN_SOURCE_FOLDER,
sourceFolder);
+ prefs.put(ISeamFacetDataModelProperties.ENTITY_BEAN_SOURCE_FOLDER,
sourceFolder);
+ break;
+ }
+ }
+ } catch (JavaModelException e) {
+ MavenSeamActivator.log(e);
+ }
+ }
+ IPackageFragment[] packageFragments = javaProject.getPackageFragments();
+ for (int i = 0; i < packageFragments.length; i++) {
+ IPackageFragment pf = packageFragments[i];
+ if (pf != null && pf.getKind() == IPackageFragmentRoot.K_SOURCE
&& !pf.isDefaultPackage()) {
+ if (pf.hasSubpackages() && !pf.hasChildren()) {
+ continue;
+ }
+ String packageName = pf.getElementName();
+ prefs.put(ISeamFacetDataModelProperties.SESSION_BEAN_PACKAGE_NAME,
packageName);
+ prefs.put(ISeamFacetDataModelProperties.ENTITY_BEAN_PACKAGE_NAME, packageName);
+ }
+ }
+ }
+ }
+ storeSettings(webProject);
}
+
} else if ("ejb".equals(packaging)) { //$NON-NLS-1$
installM2Facet(fproj,monitor);
installEjbFacets(fproj, monitor);
@@ -136,6 +198,18 @@
}
}
+ private String getViewFolder(IProject project) {
+ IVirtualComponent com = ComponentCore.createComponent(project);
+ String viewFolder = null;
+ if(com!=null) {
+ IVirtualFolder webRootFolder = com.getRootFolder().getFolder(new Path("/"));
//$NON-NLS-1$
+ if(webRootFolder!=null) {
+ viewFolder = webRootFolder.getUnderlyingFolder().getFullPath().toString();
+ }
+ }
+ return viewFolder;
+ }
+
@Override
protected void mavenProjectChanged(MavenProjectChangedEvent event,
IProgressMonitor monitor) throws CoreException {
@@ -195,9 +269,31 @@
if (!fproj.hasProjectFacet(seamFacet)) {
IProjectFacetVersion seamFacetVersion = getSeamFacetVersion(seamVersion);
fproj.installProjectFacet(seamFacetVersion, model, monitor);
+ } else {
+ String deploying =
model.getStringProperty(ISeamFacetDataModelProperties.JBOSS_AS_DEPLOY_AS);
+ if (deploying != null &&
deploying.equals(ISeamFacetDataModelProperties.DEPLOY_AS_WAR)) {
+ IPreferenceStore store = MavenSeamActivator.getDefault().getPreferenceStore();
+ boolean configureSeamArtifacts =
store.getBoolean(MavenSeamActivator.CONFIGURE_SEAM_ARTIFACTS);
+ if (!configureSeamArtifacts) {
+ return;
+ }
+ IEclipsePreferences prefs = SeamCorePlugin.getSeamPreferences(fproj.getProject());
+ setModelProperty(model,
prefs,ISeamFacetDataModelProperties.SESSION_BEAN_SOURCE_FOLDER);
+ setModelProperty(model,
prefs,ISeamFacetDataModelProperties.ENTITY_BEAN_SOURCE_FOLDER);
+ setModelProperty(model,
prefs,ISeamFacetDataModelProperties.SESSION_BEAN_PACKAGE_NAME);
+ setModelProperty(model,
prefs,ISeamFacetDataModelProperties.ENTITY_BEAN_PACKAGE_NAME);
+ setModelProperty(model, prefs,ISeamFacetDataModelProperties.WEB_CONTENTS_FOLDER);
+ }
}
}
+ private void setModelProperty(IDataModel model, IEclipsePreferences prefs, String
property) {
+ String value = model.getStringProperty(property);
+ if (value != null && value.trim().length() > 0) {
+ prefs.put(property, value);
+ }
+ }
+
private void installJSFFacet(IFacetedProject fproj, IProgressMonitor monitor)
throws CoreException {
if (!fproj.hasProjectFacet(jsfFacet)) {
@@ -208,9 +304,11 @@
private void storeSettings(IProject project) {
IScopeContext projectScope = new ProjectScope(project);
IEclipsePreferences prefs = projectScope.getNode(SeamCorePlugin.PLUGIN_ID);
- prefs.put(ISeamFacetDataModelProperties.SEAM_SETTINGS_VERSION,
+ String version = prefs.get(ISeamFacetDataModelProperties.SEAM_SETTINGS_VERSION, null);
+ if (version == null) {
+ prefs.put(ISeamFacetDataModelProperties.SEAM_SETTINGS_VERSION,
ISeamFacetDataModelProperties.SEAM_SETTINGS_VERSION_1_1);
-
+ }
try {
prefs.flush();
} catch (BackingStoreException e) {
@@ -281,6 +379,43 @@
return null;
}
+ private IProject getReferencingSeamEJBProject(IProject earProject)
+ throws CoreException {
+ IVirtualComponent component = ComponentCore.createComponent(earProject);
+ if (component != null) {
+ IVirtualReference[] references = component.getReferences();
+ for (int i = 0; i < references.length; i++) {
+ IVirtualComponent refComponent = references[i]
+ .getReferencedComponent();
+ IProject refProject = refComponent.getProject();
+ if (JavaEEProjectUtilities.isEJBProject(refProject)) {
+ if (refProject.hasNature(IMavenConstants.NATURE_ID)) {
+ IFile pom = refProject
+ .getFile(IMavenConstants.POM_FILE_NAME);
+ if (pom.exists()) {
+ MavenProjectManager projectManager = MavenPlugin
+ .getDefault().getMavenProjectManager();
+ IMavenProjectFacade facade = projectManager.create(
+ pom, true, null);
+ if (facade != null) {
+ MavenProject mavenProject = facade
+ .getMavenProject(null);
+ if (mavenProject != null) {
+ String version = getSeamVersion(mavenProject);
+ if (version != null) {
+ return refProject;
+ }
+ }
+ }
+ }
+
+ }
+ }
+ }
+ }
+ return null;
+ }
+
private String getSeamVersion(MavenProject mavenProject) {
List<Dependency> dependencies = mavenProject.getDependencies();
Dependency seamDependency = null;
@@ -301,7 +436,7 @@
return null;
}
- private IDataModel createSeamDataModel(String deployType, String seamVersion) {
+ private IDataModel createSeamDataModel(String deployType, String seamVersion, IProject
project) {
IDataModel config = (IDataModel) new SeamFacetInstallDataModelProvider().create();
String seamRuntimeName = getSeamRuntimeName(seamVersion);
if (seamRuntimeName != null) {
@@ -310,11 +445,67 @@
config.setBooleanProperty(ISeamFacetDataModelProperties.DB_ALREADY_EXISTS, true);
config.setBooleanProperty(ISeamFacetDataModelProperties.RECREATE_TABLES_AND_DATA_ON_DEPLOY,
false);
config.setStringProperty(ISeamFacetDataModelProperties.JBOSS_AS_DEPLOY_AS,
deployType);
- //config.setStringProperty(ISeamFacetDataModelProperties.SESSION_BEAN_PACKAGE_NAME,
"org.session.beans");
- //config.setStringProperty(ISeamFacetDataModelProperties.ENTITY_BEAN_PACKAGE_NAME,
"org.entity.beans");
- //config.setStringProperty(ISeamFacetDataModelProperties.TEST_CASES_PACKAGE_NAME,
"org.test.beans");
config.setBooleanProperty(ISeamFacetDataModelProperties.CONFIGURE_DEFAULT_SEAM_RUNTIME,
false);
config.setBooleanProperty(ISeamFacetDataModelProperties.CONFIGURE_WAR_PROJECT, false);
+ IPreferenceStore store = MavenSeamActivator.getDefault().getPreferenceStore();
+ boolean configureSeamArtifacts =
store.getBoolean(MavenSeamActivator.CONFIGURE_SEAM_ARTIFACTS);
+ if (!configureSeamArtifacts) {
+ return config;
+ }
+ String viewFolder = getViewFolder(project);
+ if (viewFolder != null) {
+ config.setStringProperty(ISeamFacetDataModelProperties.WEB_CONTENTS_FOLDER,
viewFolder);
+ }
+ IJavaProject javaProject = JavaCore.create(project);
+ List<IPath> sourcePaths = new ArrayList<IPath>();
+ if (javaProject != null && javaProject.isOpen()) {
+ try {
+ IClasspathEntry[] entries = javaProject.getRawClasspath();
+ for (int i = 0; i < entries.length; i++) {
+ IClasspathEntry entry = entries[i];
+ if (entry.getEntryKind() == IClasspathEntry.CPE_SOURCE) {
+ sourcePaths.add(entry.getPath());
+ }
+ }
+ } catch (JavaModelException e) {
+ MavenSeamActivator.log(e);
+ }
+ if (sourcePaths.size() > 0) {
+ IPath actionSourceFolder = null;
+ IPath modelSourceFolder = null;
+ for (IPath sourcePath:sourcePaths) {
+ if (sourcePath.toString().contains("hot")) { //$NON-NLS-1$
+ actionSourceFolder = sourcePath;
+ } else {
+ modelSourceFolder = sourcePath;
+ }
+ }
+ if (actionSourceFolder == null) {
+ actionSourceFolder = modelSourceFolder;
+ }
+ if (modelSourceFolder == null) {
+ modelSourceFolder = actionSourceFolder;
+ }
+ String modelSourceFolderStr = modelSourceFolder.toString();
+ config.setStringProperty(ISeamFacetDataModelProperties.ENTITY_BEAN_SOURCE_FOLDER,
modelSourceFolderStr);
+ String actionSourceFolderStr = actionSourceFolder.toString();
+ config.setStringProperty(ISeamFacetDataModelProperties.SESSION_BEAN_SOURCE_FOLDER,
actionSourceFolderStr);
+ }
+ try {
+ IPackageFragment[] packageFragments = javaProject.getPackageFragments();
+ for (int i = 0; i < packageFragments.length; i++) {
+ IPackageFragment pf = packageFragments[i];
+ if (pf != null && pf.getKind() == IPackageFragmentRoot.K_SOURCE &&
!pf.isDefaultPackage()) {
+ String packageName = pf.getElementName();
+ config.setStringProperty(ISeamFacetDataModelProperties.SESSION_BEAN_PACKAGE_NAME,
packageName);
+ config.setStringProperty(ISeamFacetDataModelProperties.ENTITY_BEAN_PACKAGE_NAME,
packageName);
+ }
+ }
+ } catch (JavaModelException e) {
+ MavenSeamActivator.log(e);
+ }
+ }
+ //config.setStringProperty(ISeamFacetDataModelProperties.TEST_CASES_PACKAGE_NAME,
"org.test.beans");
//config.setStringProperty(ISeamFacetDataModelProperties.SEAM_CONNECTION_PROFILE,
"noop-connection");
//config.setProperty(ISeamFacetDataModelProperties.JDBC_DRIVER_JAR_PATH, new String[] {
"noop-driver.jar" });
return config;
Modified:
trunk/maven/plugins/org.jboss.tools.maven.seam/src/org/jboss/tools/maven/seam/preferences/SeamConfiguratorPreferencePage.java
===================================================================
---
trunk/maven/plugins/org.jboss.tools.maven.seam/src/org/jboss/tools/maven/seam/preferences/SeamConfiguratorPreferencePage.java 2009-08-21
10:44:28 UTC (rev 17211)
+++
trunk/maven/plugins/org.jboss.tools.maven.seam/src/org/jboss/tools/maven/seam/preferences/SeamConfiguratorPreferencePage.java 2009-08-21
10:52:38 UTC (rev 17212)
@@ -19,6 +19,7 @@
private Button configureSeamButton;
private Button configureSeamRuntimeButton;
+ private Button configureSeamArtifactsButton;
@Override
protected Control createContents(Composite parent) {
@@ -40,11 +41,18 @@
configureSeamRuntimeButton.setSelection(configureSeamRuntime);
configureSeamRuntimeButton.setEnabled(configureSeam);
+ configureSeamArtifactsButton = new Button(composite,SWT.CHECK);
+ configureSeamArtifactsButton.setText("Configure Seam Artifacts (view folder, model
source folder, package ...)");
+ boolean configureSeamArtifacts =
store.getBoolean(MavenSeamActivator.CONFIGURE_SEAM_ARTIFACTS);
+ configureSeamArtifactsButton.setSelection(configureSeamArtifacts);
+ configureSeamArtifactsButton.setEnabled(configureSeam);
+
configureSeamButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
configureSeamRuntimeButton.setEnabled(configureSeamButton.getSelection());
+ configureSeamArtifactsButton.setEnabled(configureSeamButton.getSelection());
}
});
Modified:
trunk/maven/plugins/org.jboss.tools.maven.seam/src/org/jboss/tools/maven/seam/preferences/SeamConfiguratorPreferencesInitializer.java
===================================================================
---
trunk/maven/plugins/org.jboss.tools.maven.seam/src/org/jboss/tools/maven/seam/preferences/SeamConfiguratorPreferencesInitializer.java 2009-08-21
10:44:28 UTC (rev 17211)
+++
trunk/maven/plugins/org.jboss.tools.maven.seam/src/org/jboss/tools/maven/seam/preferences/SeamConfiguratorPreferencesInitializer.java 2009-08-21
10:52:38 UTC (rev 17212)
@@ -19,6 +19,9 @@
node.putBoolean(
MavenSeamActivator.CONFIGURE_SEAM_RUNTIME,
MavenSeamActivator.CONFIGURE_SEAM_RUNTIME_VALUE);
+ node.putBoolean(
+ MavenSeamActivator.CONFIGURE_SEAM_ARTIFACTS,
+ MavenSeamActivator.CONFIGURE_SEAM_ARTIFACTS_VALUE);
}
}
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/project/facet/ISeamFacetDataModelProperties.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/project/facet/ISeamFacetDataModelProperties.java 2009-08-21
10:44:28 UTC (rev 17211)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/project/facet/ISeamFacetDataModelProperties.java 2009-08-21
10:52:38 UTC (rev 17212)
@@ -297,4 +297,6 @@
String CONFIGURE_DEFAULT_SEAM_RUNTIME = "configure.default.seam.runtime";
//$NON-NLS-1$
String CONFIGURE_WAR_PROJECT = "configure.war.project"; //$NON-NLS-1$
+
+ String SEAM_SETTINGS_CHANGED_BY_USER = "seam.settings.changed.by.user";
//$NON-NLS-1$
}
\ No newline at end of file
Modified:
trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/preferences/SeamSettingsPreferencePage.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/preferences/SeamSettingsPreferencePage.java 2009-08-21
10:44:28 UTC (rev 17211)
+++
trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/preferences/SeamSettingsPreferencePage.java 2009-08-21
10:52:38 UTC (rev 17212)
@@ -765,6 +765,13 @@
if (isSeamSupported()) {
addSeamSupport(project);
addSeamSupport(warProject);
+ if (warProject != null) {
+ IEclipsePreferences prefs = SeamCorePlugin.getSeamPreferences(warProject);
+ prefs.putBoolean(ISeamFacetDataModelProperties.SEAM_SETTINGS_CHANGED_BY_USER, true);
+ } else {
+ IEclipsePreferences prefs = SeamCorePlugin.getSeamPreferences(project);
+ prefs.putBoolean(ISeamFacetDataModelProperties.SEAM_SETTINGS_CHANGED_BY_USER, true);
+ }
storeSettings();
} else {
removeSeamSupport();