Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Eisenberg2012-07-19 17:42:25 +0000
committerIgor Fedorenko2012-08-13 11:22:43 +0000
commit2e7413e5f2b6b0bb98df5fb0699c148320deeeea (patch)
tree153b6c03a3628710ccfec79541b4066346bc9a67 /org.eclipse.m2e.core
parentee868734f9715035106123b37d86af0e3d847115 (diff)
downloadm2e-core-2e7413e5f2b6b0bb98df5fb0699c148320deeeea.tar.gz
m2e-core-2e7413e5f2b6b0bb98df5fb0699c148320deeeea.tar.xz
m2e-core-2e7413e5f2b6b0bb98df5fb0699c148320deeeea.zip
This commit contains most of the work for bug 350414.
This includes adding workspace settings to the chain of lookups for determining lifecycle mappings for m2e projects. There are changes to existing quickfixes, and a new workspace preferences page that allows users to view their workspace mappings and edit the raw text file. There is partial work done for displaying a table of workspace lifecycle mappings in the preferences page. The refactoring of the project lifecycle mappings table is complete, but I just don't know how to populate the viewer with workspace mappings only For compliance with Eclipse.org's contribution rules: (1) I (Andrew Eisenberg) wrote 100% of the code; (2) I have the right to contribute the code to Eclipse; (3) the file header contains the appropriate License header. Also, this patch is built on top of the SHA 170c7936da947d28e7824bc1d2375903dbda9b17
Diffstat (limited to 'org.eclipse.m2e.core')
-rw-r--r--org.eclipse.m2e.core/src/org/eclipse/m2e/core/embedder/IMavenConfiguration.java24
-rw-r--r--org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/MavenPluginActivator.java3
-rw-r--r--org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/lifecyclemapping/LifecycleMappingFactory.java35
-rw-r--r--org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/preferences/MavenConfigurationImpl.java95
-rw-r--r--org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/preferences/MavenPreferenceConstants.java7
-rw-r--r--org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/preferences/MavenPreferenceInitializer.java7
6 files changed, 148 insertions, 23 deletions
diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/embedder/IMavenConfiguration.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/embedder/IMavenConfiguration.java
index bb7466ca..5df81787 100644
--- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/embedder/IMavenConfiguration.java
+++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/embedder/IMavenConfiguration.java
@@ -7,10 +7,13 @@
*
* Contributors:
* Sonatype, Inc. - initial API and implementation
+ * Andrew Eisenberg - Work on Bug 350414
*******************************************************************************/
package org.eclipse.m2e.core.embedder;
+import java.io.File;
+
import org.eclipse.core.runtime.CoreException;
@@ -66,5 +69,26 @@ public interface IMavenConfiguration {
public boolean isHideFoldersOfNestedProjects();
+ // lifecycle mappings
+
+ /**
+ * Sets the text of the workspace lifecycle mapping file
+ * and saves it
+ */
+ public void setWorkspaceMappings(String newMapping);
+
+ /**
+ * Gets the text of the workspace lifecycle mapping file
+ */
+ public String getWorkspaceMappings();
+
+ /**
+ * Gets the workspace lifecycle mappings metadata file located in the .metadata directory
+ * @return the lifecycle mappings metadata file
+ */
+ public String getWorkspaceMappingsFile();
+
+ public void setWorkspaceMappingsFile(String newFile);
+ public String getDefaultWorkspaceMappingsFile();
}
diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/MavenPluginActivator.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/MavenPluginActivator.java
index 64cefb89..58d24da5 100644
--- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/MavenPluginActivator.java
+++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/MavenPluginActivator.java
@@ -21,11 +21,14 @@ import org.osgi.framework.Version;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResourceChangeEvent;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Plugin;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.InstanceScope;
import org.codehaus.plexus.ContainerConfiguration;
import org.codehaus.plexus.DefaultContainerConfiguration;
diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/lifecyclemapping/LifecycleMappingFactory.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/lifecyclemapping/LifecycleMappingFactory.java
index 2ad2969d..98d28c46 100644
--- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/lifecyclemapping/LifecycleMappingFactory.java
+++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/lifecyclemapping/LifecycleMappingFactory.java
@@ -7,6 +7,7 @@
*
* Contributors:
* Sonatype, Inc. - initial API and implementation
+ * Andrew Eisenberg - Work on Bug 350414
*******************************************************************************/
package org.eclipse.m2e.core.internal.lifecyclemapping;
@@ -19,7 +20,6 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.StringReader;
import java.net.URL;
-import java.rmi.activation.Activator;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
@@ -37,7 +37,6 @@ import org.osgi.framework.Bundle;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.eclipse.core.internal.resources.Workspace;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
@@ -46,12 +45,10 @@ import org.eclipse.core.runtime.IExtensionPoint;
import org.eclipse.core.runtime.IExtensionRegistry;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.preferences.IEclipsePreferences;
import org.eclipse.core.runtime.spi.RegistryContributor;
import org.eclipse.osgi.util.NLS;
import org.codehaus.plexus.util.IOUtil;
-import org.codehaus.plexus.util.StringInputStream;
import org.codehaus.plexus.util.xml.Xpp3Dom;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
@@ -232,10 +229,12 @@ public class LifecycleMappingFactory {
// List order
// 1. this pom embedded, this pom referenced, parent embedded, parent referenced, grand parent embedded...
- // 2. preferences in workspace
- // 3. sources contributed by eclipse extensions
- // 4. maven-plugin embedded metadata
- // 5. default source, if present
+ // 2. preferences in project (*** not implemented yet)
+ // 3. preferebces in ancestor project (*** not implemented yet)
+ // 4. preferences in workspace
+ // 5. sources contributed by eclipse extensions
+ // 6. maven-plugin embedded metadata
+ // 7. default source, if present
// TODO validate metadata and replace invalid entries with error mapping
for(LifecycleMappingMetadataSource source : getPomMappingMetadataSources(mavenProject, templateRequest, monitor)) {
metadataSources.add(new SimpleMappingMetadataSource(source));
@@ -372,24 +371,24 @@ public class LifecycleMappingFactory {
private static LifecycleMappingMetadataSource readMavenPluginEmbeddedMetadata(Artifact artifact, InputStream is)
throws IOException, XmlPullParserException {
return new LifecycleMappingMetadataSourceXpp3Reader().read(is);
- /**
- * @return
- */
- private static LifecycleMappingMetadataSource getWorkspacePreferencesMetadataSources() {
- LifecycleMappingMetadataSource source = new LifecycleMappingMetadataSource();
- String mapp = MavenPluginActivator.getDefault().getPluginPreferences().getString("XXX_mappings");
- if (mapp != null) {
+ }
+
+ public static LifecycleMappingMetadataSource getWorkspacePreferencesMetadataSources() {
+ LifecycleMappingMetadataSource source = null;
+ String mappings = MavenPluginActivator.getDefault().getMavenConfiguration().getWorkspaceMappings();
+ if (mappings != null) {
LifecycleMappingMetadataSourceXpp3Reader reader = new LifecycleMappingMetadataSourceXpp3Reader();
try {
- source = reader.read(new StringReader(mapp));
+ source = reader.read(new StringReader(mappings));
} catch(IOException ex) {
- // TODO Auto-generated catch block
log.error(ex.getMessage(), ex);
} catch(XmlPullParserException ex) {
- // TODO Auto-generated catch block
log.error(ex.getMessage(), ex);
}
}
+ if (source == null) {
+ source = new LifecycleMappingMetadataSource();
+ }
return source;
}
diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/preferences/MavenConfigurationImpl.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/preferences/MavenConfigurationImpl.java
index bb7620f3..c3f3ccfa 100644
--- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/preferences/MavenConfigurationImpl.java
+++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/preferences/MavenConfigurationImpl.java
@@ -7,10 +7,16 @@
*
* Contributors:
* Sonatype, Inc. - initial API and implementation
+ * Andrew Eisenberg - Work on Bug 350414
*******************************************************************************/
package org.eclipse.m2e.core.internal.preferences;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
import java.util.Map;
import org.osgi.service.prefs.BackingStoreException;
@@ -36,9 +42,13 @@ import org.eclipse.m2e.core.embedder.IMavenConfiguration;
import org.eclipse.m2e.core.embedder.IMavenConfigurationChangeListener;
import org.eclipse.m2e.core.embedder.MavenConfigurationChangeEvent;
import org.eclipse.m2e.core.internal.IMavenConstants;
+import org.eclipse.m2e.core.internal.MavenPluginActivator;
+import org.eclipse.m2e.core.internal.lifecyclemapping.LifecycleMappingFactory;
public class MavenConfigurationImpl implements IMavenConfiguration, IPreferenceChangeListener, INodeChangeListener {
+ private String defaultWorkspaceMappingsFile;
+
private static final Logger log = LoggerFactory.getLogger(MavenConfigurationImpl.class);
private final IEclipsePreferences[] preferencesLookup = new IEclipsePreferences[2];
@@ -70,7 +80,7 @@ public class MavenConfigurationImpl implements IMavenConfiguration, IPreferenceC
((IEclipsePreferences) preferencesLookup[0].parent()).removeNodeChangeListener(this);
preferencesLookup[0].removePreferenceChangeListener(this);
}
- preferencesLookup[0] = new InstanceScope().getNode(IMavenConstants.PLUGIN_ID);
+ preferencesLookup[0] = InstanceScope.INSTANCE.getNode(IMavenConstants.PLUGIN_ID);
((IEclipsePreferences) preferencesLookup[0].parent()).addNodeChangeListener(this);
preferencesLookup[0].addPreferenceChangeListener(this);
@@ -78,8 +88,10 @@ public class MavenConfigurationImpl implements IMavenConfiguration, IPreferenceC
((IEclipsePreferences) preferencesLookup[1].parent()).removeNodeChangeListener(this);
preferencesLookup[1].removePreferenceChangeListener(this);
}
- preferencesLookup[1] = new DefaultScope().getNode(IMavenConstants.PLUGIN_ID);
+ preferencesLookup[1] = DefaultScope.INSTANCE.getNode(IMavenConstants.PLUGIN_ID);
((IEclipsePreferences) preferencesLookup[1].parent()).addNodeChangeListener(this);
+
+ ensureLifecycleMappingMetadataFile();
}
public String getGlobalSettingsFile() {
@@ -197,4 +209,83 @@ public class MavenConfigurationImpl implements IMavenConfiguration, IPreferenceC
throw new IllegalArgumentException();
}
}
+
+ public void setWorkspaceMappings(String newMappings) {
+ if (newMappings == null) {
+ newMappings = "";
+ }
+ File mappingsFile = new File(getWorkspaceMappingsFile());
+ writeFile(newMappings, mappingsFile);
+ }
+
+ public String getWorkspaceMappings() {
+ File mappingsFile = new File(getWorkspaceMappingsFile());
+ StringBuilder sb = new StringBuilder();
+ try {
+ BufferedReader in = new BufferedReader(new FileReader(mappingsFile));
+ String str;
+ while((str = in.readLine()) != null) {
+ sb.append(str + "\n");
+ }
+ in.close();
+ return sb.toString();
+ } catch(IOException e) {
+ log.error("Could not read workspace lifecycle mapping metadata file from: " + mappingsFile.getAbsolutePath(), e);
+ }
+ return "";
+ }
+
+ /**
+ * Gets the workspace lifecycle mappings metadata file located in the .metadata directory
+ * @return the lifecycle mappings metadata file
+ */
+ public String getWorkspaceMappingsFile() {
+ return preferenceStore.get(MavenPreferenceConstants.P_WORKSPACE_MAPPINGS_LOCATION, getDefaultWorkspaceMappingsFile(),
+ preferencesLookup);
+ }
+
+ /**
+ * Sets the location of the workspace mapping file. Setting to null returns the value to the default
+ */
+ public void setWorkspaceMappingsFile(String newFile) {
+ if (newFile == null) {
+ preferencesLookup[0].remove(MavenPreferenceConstants.P_WORKSPACE_MAPPINGS_LOCATION);
+ } else {
+ preferencesLookup[0].put(MavenPreferenceConstants.P_WORKSPACE_MAPPINGS_LOCATION, newFile);
+ }
+ }
+
+ public String getDefaultWorkspaceMappingsFile() {
+ if (defaultWorkspaceMappingsFile == null) {
+ defaultWorkspaceMappingsFile = MavenPluginActivator.getDefault().getStateLocation()
+ .append(LifecycleMappingFactory.LIFECYCLE_MAPPING_METADATA_SOURCE_NAME).toFile().getAbsolutePath();
+ }
+ return defaultWorkspaceMappingsFile;
+ }
+
+ private static void writeFile(String newMappings, File mappingsFile) {
+ try {
+ FileWriter writer = new FileWriter(mappingsFile);
+ writer.write(newMappings);
+ writer.close();
+ } catch (IOException e) {
+ log.error("Could not write workspace lifecycle mapping metadata file to: " + mappingsFile.getAbsolutePath(), e);
+ }
+ }
+
+ /**
+ * ensures that the worksoace lifecycle mapping metadata file exists
+ * and has the correct root
+ */
+ private void ensureLifecycleMappingMetadataFile() {
+ File workspaceLifecycleMappingsFile = new File(getDefaultWorkspaceMappingsFile());
+ if (!workspaceLifecycleMappingsFile.exists()) {
+ setWorkspaceMappings(
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
+ "<lifecycleMappingMetadata>\n" +
+ "</lifecycleMappingMetadata>");
+ }
+ }
+
+
}
diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/preferences/MavenPreferenceConstants.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/preferences/MavenPreferenceConstants.java
index fdf76d81..51fd1c0e 100644
--- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/preferences/MavenPreferenceConstants.java
+++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/preferences/MavenPreferenceConstants.java
@@ -95,4 +95,11 @@ public interface MavenPreferenceConstants {
/** boolean **/
public static final String P_DISABLE_VERSION_DUP_OF_PARENT_WARNING = PREFIX + ".disableVersionDuplicateOfParentWarning"; //$NON-NLS-1$
+
+ /** string **/
+ public static final String P_LIFECYCLE_MAPPINGS = PREFIX + "lifecycleMappings"; //$NON-NLS-1$
+
+ /** string **/
+ public static final String P_WORKSPACE_MAPPINGS_LOCATION = PREFIX + "WorkspacelifecycleMappingsLocation"; //$NON-NLS-1$
+
}
diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/preferences/MavenPreferenceInitializer.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/preferences/MavenPreferenceInitializer.java
index c646c435..c15451b7 100644
--- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/preferences/MavenPreferenceInitializer.java
+++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/preferences/MavenPreferenceInitializer.java
@@ -14,7 +14,6 @@ package org.eclipse.m2e.core.internal.preferences;
import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
import org.eclipse.core.runtime.preferences.DefaultScope;
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
-import org.eclipse.core.runtime.preferences.IScopeContext;
import org.apache.maven.cli.MavenCli;
@@ -34,7 +33,7 @@ public class MavenPreferenceInitializer extends AbstractPreferenceInitializer {
* @see org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer#initializeDefaultPreferences()
*/
public void initializeDefaultPreferences() {
- IEclipsePreferences store = ((IScopeContext) new DefaultScope()).getNode(IMavenConstants.PLUGIN_ID);
+ IEclipsePreferences store = DefaultScope.INSTANCE.getNode(IMavenConstants.PLUGIN_ID);
store.put(MavenPreferenceConstants.P_USER_SETTINGS_FILE, //
MavenCli.DEFAULT_USER_SETTINGS_FILE.getAbsolutePath());
@@ -65,6 +64,8 @@ public class MavenPreferenceInitializer extends AbstractPreferenceInitializer {
store.putBoolean(MavenPreferenceConstants.P_SHOW_CONSOLE_ON_ERR, true);
store.putBoolean(MavenPreferenceConstants.P_SHOW_CONSOLE_ON_OUTPUT, false);
+
+ // set to null since the plugin state location is not available by the time execution reaches here
+ store.put(MavenPreferenceConstants.P_WORKSPACE_MAPPINGS_LOCATION, null);
}
-
}

Back to the top