You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@maven.apache.org by jd...@apache.org on 2005/06/15 05:01:49 UTC
svn commit: r190704 - in /maven/components/trunk/maven-settings: ./
src/main/java/org/apache/maven/settings/
Author: jdcasey
Date: Tue Jun 14 20:01:48 2005
New Revision: 190704
URL: http://svn.apache.org/viewcvs?rev=190704&view=rev
Log:
o Added sourceLevel (meaning global vs. user) to most base classes in the model, to track for the purposes of rewriting the user-level settings ONLY.
o Added an identity base class for many of these same base classes, to allow sorting/merging based on id (shallow merging) using a common piece of code.
o Added support for pluginUpdates (first pass) within the settings.xml, and support for merging this new section based on plugin key (g:a)
Working toward: MNG-379
Modified:
maven/components/trunk/maven-settings/settings.mdo
maven/components/trunk/maven-settings/src/main/java/org/apache/maven/settings/DefaultMavenSettingsBuilder.java
maven/components/trunk/maven-settings/src/main/java/org/apache/maven/settings/SettingsUtils.java
Modified: maven/components/trunk/maven-settings/settings.mdo
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-settings/settings.mdo?rev=190704&r1=190703&r2=190704&view=diff
==============================================================================
--- maven/components/trunk/maven-settings/settings.mdo (original)
+++ maven/components/trunk/maven-settings/settings.mdo Tue Jun 14 20:01:48 2005
@@ -12,9 +12,63 @@
</default>
</defaults>
<classes>
+ <class>
+ <name>TrackableBase</name>
+ <version>1.0.0</version>
+ <description>common base class that contains code to track the source for this instance (USER|GLOBAL)</description>
+ <codeSegments>
+ <codeSegment>
+ <version>1.0.0</version>
+ <code><![CDATA[
+ public static final String USER_LEVEL = "user-level";
+ public static final String GLOBAL_LEVEL = "global-level";
+
+ private String sourceLevel = USER_LEVEL;
+ private boolean sourceLevelSet = false;
+
+ public void setSourceLevel( String sourceLevel )
+ {
+ if ( sourceLevelSet )
+ {
+ throw new IllegalStateException( "Cannot reset sourceLevel attribute; it is already set to: " + sourceLevel );
+ }
+ else if ( !( USER_LEVEL.equals( sourceLevel ) || GLOBAL_LEVEL.equals( sourceLevel ) ) )
+ {
+ throw new IllegalArgumentException( "sourceLevel must be one of: {" + USER_LEVEL + "," + GLOBAL_LEVEL + "}" );
+ }
+ else
+ {
+ this.sourceLevel = sourceLevel;
+ this.sourceLevelSet = true;
+ }
+ }
+
+ public String getSourceLevel()
+ {
+ return sourceLevel;
+ }
+ ]]></code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+ <class>
+ <name>IdentifiableBase</name>
+ <superClass>TrackableBase</superClass>
+ <version>1.0.0</version>
+ <fields>
+ <field>
+ <name>id</name>
+ <version>1.0.0</version>
+ <type>String</type>
+ <default>default</default>
+ <required>true</required>
+ </field>
+ </fields>
+ </class>
<class rootElement="true" xml.tagName="settings">
<name>Settings</name>
<version>1.0.0</version>
+ <superClass>TrackableBase</superClass>
<description>Root element of the user configuration file.</description>
<fields>
<field>
@@ -119,6 +173,15 @@
<multiplicity>*</multiplicity>
</association>
</field>
+ <field>
+ <name>pluginUpdates</name>
+ <version>1.0.0</version>
+ <description>Specified plugin update policy information.</description>
+ <association>
+ <type>PluginUpdate</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
</fields>
<codeSegments>
<codeSegment>
@@ -161,102 +224,6 @@
return activeProxy;
}
- private Map mirrorMap;
-
- public void flushMirrorMap()
- {
- this.mirrorMap = null;
- }
-
- public Map getMirrorsAsMap()
- {
- if ( mirrorMap == null )
- {
- mirrorMap = new HashMap();
-
- for ( Iterator it = getMirrors().iterator(); it.hasNext(); )
- {
- Mirror mirror = (Mirror) it.next();
-
- mirrorMap.put( mirror.getId(), mirror );
- }
- }
-
- return mirrorMap;
- }
-
- private Map serverMap;
-
- public void flushServerMap()
- {
- this.serverMap = null;
- }
-
- public Map getServersAsMap()
- {
- if ( serverMap == null )
- {
- serverMap = new HashMap();
-
- for ( Iterator it = getServers().iterator(); it.hasNext(); )
- {
- Server server = (Server) it.next();
-
- serverMap.put( server.getId(), server );
- }
- }
-
- return serverMap;
- }
-
- private Map proxyMap;
-
- public void flushProxyMap()
- {
- this.proxyMap = null;
- }
-
- public Map getProxiesAsMap()
- {
- if ( proxyMap == null )
- {
- proxyMap = new HashMap();
-
- for ( Iterator it = getProxies().iterator(); it.hasNext(); )
- {
- Proxy proxy = (Proxy) it.next();
-
- proxyMap.put( proxy.getId(), proxy );
- }
- }
-
- return proxyMap;
- }
-
- private Map profileMap;
-
- public void flushProfileMap()
- {
- this.profileMap = null;
- }
-
- public Map getProfilesAsMap()
- {
- if ( profileMap == null )
- {
- profileMap = new HashMap();
-
- for ( Iterator it = getProfiles().iterator(); it.hasNext(); )
- {
- Profile profile = (Profile) it.next();
-
- profileMap.put( profile.getId(), profile );
- }
- }
-
- return profileMap;
- }
-
public Server getServer( String serverId )
{
Server match = null;
@@ -298,6 +265,63 @@
return match;
}
+
+ private Map activeProfileToSourceLevel = new HashMap();
+
+ public void setActiveProfileSourceLevel( String activeProfile, String sourceLevel )
+ {
+ activeProfileToSourceLevel.put( activeProfile, sourceLevel );
+ }
+
+ public String getSourceLevelForActiveProfile( String activeProfile )
+ {
+ String sourceLevel = (String) activeProfileToSourceLevel.get( activeProfile );
+
+ if ( sourceLevel != null )
+ {
+ return sourceLevel;
+ }
+ else
+ {
+ return getSourceLevel();
+ }
+ }
+
+ private String localRepositorySourceLevel = TrackableBase.USER_LEVEL;
+
+ public void setLocalRepositorySourceLevel( String localRepoSourceLevel )
+ {
+ this.localRepositorySourceLevel = localRepoSourceLevel;
+ }
+
+ public String getLocalRepositorySourceLevel()
+ {
+ return localRepositorySourceLevel;
+ }
+
+ private Map pluginUpdatesByKey;
+
+ public Map getPluginUpdatesByKey()
+ {
+ if ( pluginUpdatesByKey == null )
+ {
+ pluginUpdatesByKey = new HashMap();
+
+ for ( Iterator it = getPluginUpdates().iterator(); it.hasNext(); )
+ {
+ PluginUpdate pluginUpdate = (PluginUpdate) it.next();
+
+ pluginUpdatesByKey.put( pluginUpdate.getKey(), pluginUpdate );
+ }
+ }
+
+ return pluginUpdatesByKey;
+ }
+
+ public void flushPluginUpdatesByKey()
+ {
+ this.pluginUpdatesByKey = null;
+ }
]]></code>
</codeSegment>
</codeSegments>
@@ -307,6 +331,7 @@
<!-- class>
<name>Jdk</name>
<version>1.0.0</version>
+ <superClass>TrackableBase</superClass>
<description><![CDATA[Describes one Java environment]]></description>
<fields>
<field>
@@ -336,14 +361,9 @@
<class>
<name>Proxy</name>
<version>1.0.0</version>
+ <superClass>IdentifiableBase</superClass>
<fields>
<field>
- <name>id</name>
- <required>true</required>
- <default>default</default>
- <type>String</type>
- </field>
- <field>
<name>active</name>
<version>1.0.0</version>
<required>false</required>
@@ -397,18 +417,9 @@
<class>
<name>Server</name>
<version>1.0.0</version>
+ <superClass>IdentifiableBase</superClass>
<fields>
<field>
- <name>id</name>
- <version>1.0.0</version>
- <required>true</required>
- <description><![CDATA[
- The ID of this configuration for indicating the default or "active"
- profile.
- ]]></description>
- <type>String</type>
- </field>
- <field>
<name>username</name>
<version>1.0.0</version>
<description><![CDATA[The username used to authenticate.]]>
@@ -443,23 +454,16 @@
<class>
<name>Mirror</name>
<version>1.0.0</version>
+ <superClass>IdentifiableBase</superClass>
<description> A download mirror for a given repository. </description>
<fields>
<field>
- <name>id</name>
- <required>true</required>
- <version>1.0.0</version>
- <type>String</type>
- <description> The server ID of this mirror. This must -not- be the
- same as that of the repository you are mirroring. </description>
- </field>
- <field>
<name>mirrorOf</name>
<required>true</required>
<version>1.0.0</version>
<type>String</type>
<description> The server ID of the repository being mirrored, eg
- "central". </description>
+ "central". This MUST NOT match the mirror id. </description>
</field>
<field>
<name>name</name>
@@ -493,20 +497,13 @@
<class>
<name>Profile</name>
<version>1.0.0</version>
+ <superClass>IdentifiableBase</superClass>
<description><![CDATA[
Modifications to the build process which is keyed on some
sort of environmental parameter.
]]></description>
<fields>
<field>
- <name>id</name>
- <required>true</required>
- <version>1.0.0</version>
- <type>String</type>
- <description>The ID of this build profile, for activation
- purposes.</description>
- </field>
- <field>
<name>activation</name>
<version>1.0.0</version>
<description><![CDATA[The conditional logic which will automatically
@@ -675,5 +672,58 @@
</fields>
</class>
<!-- /BuildProfile support -->
+ <class>
+ <name>PluginUpdate</name>
+ <version>1.0.0</version>
+ <superClass>TrackableBase</superClass>
+ <description>Policy for updating a single plugin.</description>
+ <fields>
+ <field>
+ <name>groupId</name>
+ <version>1.0.0</version>
+ <required>true</required>
+ <type>String</type>
+ </field>
+ <field>
+ <name>artifactId</name>
+ <version>1.0.0</version>
+ <required>true</required>
+ <type>String</type>
+ </field>
+ <field>
+ <name>autoUpdate</name>
+ <version>1.0.0</version>
+ <type>boolean</type>
+ <default>false</default>
+ <description>Whether to automatically update this plugin - false means prompt the user.</description>
+ </field>
+ <field>
+ <name>useVersion</name>
+ <version>1.0.0</version>
+ <type>String</type>
+ <description>The current version of this plugin, to be used until the appropriate update actions happen.</description>
+ </field>
+ <field>
+ <name>rejectedVersions</name>
+ <version>1.0.0</version>
+ <description>The list of versions for this plugin that the user declined to "install"</description>
+ <association>
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>1.0.0</version>
+ <code><![CDATA[
+ public String getKey()
+ {
+ return getGroupId() + ":" + getArtifactId();
+ }
+ ]]></code>
+ </codeSegment>
+ </codeSegments>
+ </class>
</classes>
</model>
Modified: maven/components/trunk/maven-settings/src/main/java/org/apache/maven/settings/DefaultMavenSettingsBuilder.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-settings/src/main/java/org/apache/maven/settings/DefaultMavenSettingsBuilder.java?rev=190704&r1=190703&r2=190704&view=diff
==============================================================================
--- maven/components/trunk/maven-settings/src/main/java/org/apache/maven/settings/DefaultMavenSettingsBuilder.java (original)
+++ maven/components/trunk/maven-settings/src/main/java/org/apache/maven/settings/DefaultMavenSettingsBuilder.java Tue Jun 14 20:01:48 2005
@@ -105,7 +105,7 @@
userSettings = new Settings();
}
- SettingsUtils.merge( userSettings, globalSettings );
+ SettingsUtils.merge( userSettings, globalSettings, TrackableBase.GLOBAL_LEVEL );
if ( userSettings.getLocalRepository() == null || userSettings.getLocalRepository().length() < 1 )
{
Modified: maven/components/trunk/maven-settings/src/main/java/org/apache/maven/settings/SettingsUtils.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-settings/src/main/java/org/apache/maven/settings/SettingsUtils.java?rev=190704&r1=190703&r2=190704&view=diff
==============================================================================
--- maven/components/trunk/maven-settings/src/main/java/org/apache/maven/settings/SettingsUtils.java (original)
+++ maven/components/trunk/maven-settings/src/main/java/org/apache/maven/settings/SettingsUtils.java Tue Jun 14 20:01:48 2005
@@ -2,7 +2,7 @@
import org.codehaus.plexus.util.StringUtils;
-import java.util.ArrayList;
+import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -29,13 +29,15 @@
private SettingsUtils()
{
}
-
- public static void merge( Settings dominant, Settings recessive )
+
+ public static void merge( Settings dominant, Settings recessive, String recessiveSourceLevel )
{
if ( dominant == null || recessive == null )
{
return;
}
+
+ recessive.setSourceLevel( recessiveSourceLevel );
List dominantActiveProfiles = dominant.getActiveProfiles();
List recessiveActiveProfiles = recessive.getActiveProfiles();
@@ -47,88 +49,76 @@
if ( !dominantActiveProfiles.contains( profileId ) )
{
dominantActiveProfiles.add( profileId );
+
+ dominant.setActiveProfileSourceLevel( profileId, recessiveSourceLevel );
}
}
if ( StringUtils.isEmpty( dominant.getLocalRepository() ) )
{
dominant.setLocalRepository( recessive.getLocalRepository() );
+
+ dominant.setLocalRepositorySourceLevel( recessiveSourceLevel );
}
- List mergedMirrors = new ArrayList( dominant.getMirrors() );
-
- List recessiveMirrors = recessive.getMirrors();
-
- Map dominantMirrors = dominant.getMirrorsAsMap();
-
- for ( Iterator it = recessiveMirrors.iterator(); it.hasNext(); )
- {
- Mirror recessiveMirror = (Mirror) it.next();
-
- Mirror dominantMirror = (Mirror) dominantMirrors.get( recessiveMirror.getId() );
-
- if ( dominantMirror == null )
- {
- mergedMirrors.add( recessiveMirror );
- }
- }
-
- dominant.setMirrors( mergedMirrors );
-
- List mergedServers = new ArrayList( dominant.getServers() );
-
- List recessiveServers = recessive.getServers();
-
- Map dominantServers = dominant.getServersAsMap();
-
- for ( Iterator it = recessiveServers.iterator(); it.hasNext(); )
- {
- Server recessiveServer = (Server) it.next();
+ shallowMergeById( dominant.getMirrors(), recessive.getMirrors(), recessiveSourceLevel );
+ shallowMergeById( dominant.getServers(), recessive.getServers(), recessiveSourceLevel );
+ shallowMergeById( dominant.getProxies(), recessive.getProxies(), recessiveSourceLevel );
+ shallowMergeById( dominant.getProfiles(), recessive.getProfiles(), recessiveSourceLevel );
- if ( !dominantServers.containsKey( recessiveServer.getId() ) )
+ shallowMergePluginUpdates( dominant, recessive.getPluginUpdates(), recessiveSourceLevel );
+ }
+
+ private static void shallowMergePluginUpdates( Settings dominant, List recessive, String recessiveSourceLevel )
+ {
+ Map dominantByKey = dominant.getPluginUpdatesByKey();
+
+ List dominantPluginUpdates = dominant.getPluginUpdates();
+
+ for ( Iterator it = recessive.iterator(); it.hasNext(); )
+ {
+ PluginUpdate recessivePluginUpdate = (PluginUpdate) it.next();
+
+ if( !dominantByKey.containsKey( recessivePluginUpdate.getKey() ) )
{
- mergedServers.add( recessiveServer );
+ recessivePluginUpdate.setSourceLevel( recessiveSourceLevel );
+
+ dominantPluginUpdates.add( recessivePluginUpdate );
}
}
+
+ dominant.flushPluginUpdatesByKey();
+ }
- dominant.setServers( mergedServers );
-
- List mergedProxies = new ArrayList( dominant.getProxies() );
-
- List recessiveProxies = recessive.getProxies();
-
- Map dominantProxies = dominant.getProxiesAsMap();
-
- for ( Iterator it = recessiveProxies.iterator(); it.hasNext(); )
- {
- Proxy recessiveProxy = (Proxy) it.next();
-
- if ( !dominantProxies.containsKey( recessiveProxy ) )
+ private static void shallowMergeById( List dominant, List recessive, String recessiveSourceLevel )
+ {
+ Map dominantById = mapById( dominant );
+
+ for ( Iterator it = recessive.iterator(); it.hasNext(); )
+ {
+ IdentifiableBase identifiable = (IdentifiableBase) it.next();
+
+ if( !dominantById.containsKey(identifiable.getId()))
{
- mergedProxies.add( recessiveProxy );
+ identifiable.setSourceLevel( recessiveSourceLevel );
+
+ dominant.add( identifiable );
}
}
-
- dominant.setProxies( mergedProxies );
-
- List mergedProfiles = new ArrayList( dominant.getProfiles() );
-
- List recessiveProfiles = recessive.getProfiles();
-
- Map dominantProfiles = dominant.getProfilesAsMap();
-
- for ( Iterator it = recessiveProfiles.iterator(); it.hasNext(); )
- {
- Profile recessiveProfile = (Profile) it.next();
-
- if ( !dominantProfiles.containsKey( recessiveProfile.getId() ) )
- {
- mergedProfiles.add( recessiveProfile );
- }
+ }
+
+ private static Map mapById( List identifiables )
+ {
+ Map byId = new HashMap();
+
+ for ( Iterator it = identifiables.iterator(); it.hasNext(); )
+ {
+ IdentifiableBase identifiable = (IdentifiableBase) it.next();
+
+ byId.put( identifiable.getId(), identifiable );
}
-
- dominant.setProfiles( mergedProfiles );
-
+
+ return byId;
}
public static org.apache.maven.model.Profile convertFromSettingsProfile( Profile settingsProfile )
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org