001// =================== DO NOT EDIT THIS FILE ====================
002// Generated by Modello 1.8.1,
003// any modifications will be overwritten.
004// ==============================================================
005
006package org.apache.maven.artifact.repository.metadata;
007
008/**
009 * Class Metadata.
010 * 
011 * @version $Revision$ $Date$
012 */
013@SuppressWarnings( "all" )
014public class Metadata
015    implements java.io.Serializable, java.lang.Cloneable
016{
017
018      //--------------------------/
019     //- Class/Member Variables -/
020    //--------------------------/
021
022    /**
023     * The version of the underlying metadata model.
024     */
025    private String modelVersion;
026
027    /**
028     * The groupId that this directory represents, if any.
029     */
030    private String groupId;
031
032    /**
033     * The artifactId that this directory represents, if any.
034     */
035    private String artifactId;
036
037    /**
038     * The version that this directory represents, if any. It is
039     * used for artifact snapshots only.
040     */
041    private String version;
042
043    /**
044     * Versioning information for the artifact.
045     */
046    private Versioning versioning;
047
048    /**
049     * Field plugins.
050     */
051    private java.util.List<Plugin> plugins;
052
053    /**
054     * Field modelEncoding.
055     */
056    private String modelEncoding = "UTF-8";
057
058
059      //-----------/
060     //- Methods -/
061    //-----------/
062
063    /**
064     * Method addPlugin.
065     * 
066     * @param plugin
067     */
068    public void addPlugin( Plugin plugin )
069    {
070        getPlugins().add( plugin );
071    } //-- void addPlugin( Plugin )
072
073    /**
074     * Method clone.
075     * 
076     * @return Metadata
077     */
078    public Metadata clone()
079    {
080        try
081        {
082            Metadata copy = (Metadata) super.clone();
083
084            if ( this.versioning != null )
085            {
086                copy.versioning = (Versioning) this.versioning.clone();
087            }
088
089            if ( this.plugins != null )
090            {
091                copy.plugins = new java.util.ArrayList<Plugin>();
092                for ( Plugin item : this.plugins )
093                {
094                    copy.plugins.add( ( (Plugin) item).clone() );
095                }
096            }
097
098            return copy;
099        }
100        catch ( java.lang.Exception ex )
101        {
102            throw (java.lang.RuntimeException) new java.lang.UnsupportedOperationException( getClass().getName()
103                + " does not support clone()" ).initCause( ex );
104        }
105    } //-- Metadata clone()
106
107    /**
108     * Get the artifactId that this directory represents, if any.
109     * 
110     * @return String
111     */
112    public String getArtifactId()
113    {
114        return this.artifactId;
115    } //-- String getArtifactId()
116
117    /**
118     * Get the groupId that this directory represents, if any.
119     * 
120     * @return String
121     */
122    public String getGroupId()
123    {
124        return this.groupId;
125    } //-- String getGroupId()
126
127    /**
128     * Get the modelEncoding field.
129     * 
130     * @return String
131     */
132    public String getModelEncoding()
133    {
134        return this.modelEncoding;
135    } //-- String getModelEncoding()
136
137    /**
138     * Get the version of the underlying metadata model.
139     * 
140     * @return String
141     */
142    public String getModelVersion()
143    {
144        return this.modelVersion;
145    } //-- String getModelVersion()
146
147    /**
148     * Method getPlugins.
149     * 
150     * @return List
151     */
152    public java.util.List<Plugin> getPlugins()
153    {
154        if ( this.plugins == null )
155        {
156            this.plugins = new java.util.ArrayList<Plugin>();
157        }
158
159        return this.plugins;
160    } //-- java.util.List<Plugin> getPlugins()
161
162    /**
163     * Get the version that this directory represents, if any. It
164     * is used for artifact snapshots only.
165     * 
166     * @return String
167     */
168    public String getVersion()
169    {
170        return this.version;
171    } //-- String getVersion()
172
173    /**
174     * Get versioning information for the artifact.
175     * 
176     * @return Versioning
177     */
178    public Versioning getVersioning()
179    {
180        return this.versioning;
181    } //-- Versioning getVersioning()
182
183    /**
184     * Method removePlugin.
185     * 
186     * @param plugin
187     */
188    public void removePlugin( Plugin plugin )
189    {
190        getPlugins().remove( plugin );
191    } //-- void removePlugin( Plugin )
192
193    /**
194     * Set the artifactId that this directory represents, if any.
195     * 
196     * @param artifactId
197     */
198    public void setArtifactId( String artifactId )
199    {
200        this.artifactId = artifactId;
201    } //-- void setArtifactId( String )
202
203    /**
204     * Set the groupId that this directory represents, if any.
205     * 
206     * @param groupId
207     */
208    public void setGroupId( String groupId )
209    {
210        this.groupId = groupId;
211    } //-- void setGroupId( String )
212
213    /**
214     * Set the modelEncoding field.
215     * 
216     * @param modelEncoding
217     */
218    public void setModelEncoding( String modelEncoding )
219    {
220        this.modelEncoding = modelEncoding;
221    } //-- void setModelEncoding( String )
222
223    /**
224     * Set the version of the underlying metadata model.
225     * 
226     * @param modelVersion
227     */
228    public void setModelVersion( String modelVersion )
229    {
230        this.modelVersion = modelVersion;
231    } //-- void setModelVersion( String )
232
233    /**
234     * Set the set of plugin mappings for the group represented by
235     * this directory.
236     * 
237     * @param plugins
238     */
239    public void setPlugins( java.util.List<Plugin> plugins )
240    {
241        this.plugins = plugins;
242    } //-- void setPlugins( java.util.List )
243
244    /**
245     * Set the version that this directory represents, if any. It
246     * is used for artifact snapshots only.
247     * 
248     * @param version
249     */
250    public void setVersion( String version )
251    {
252        this.version = version;
253    } //-- void setVersion( String )
254
255    /**
256     * Set versioning information for the artifact.
257     * 
258     * @param versioning
259     */
260    public void setVersioning( Versioning versioning )
261    {
262        this.versioning = versioning;
263    } //-- void setVersioning( Versioning )
264
265    
266    public boolean merge( Metadata sourceMetadata )
267    {
268        boolean changed = false;
269
270        for ( Plugin plugin : sourceMetadata.getPlugins() )
271        {
272            boolean found = false;
273
274            for ( Plugin preExisting : getPlugins() )
275            {
276                if ( preExisting.getPrefix().equals( plugin.getPrefix() ) )
277                {
278                    found = true;
279                    break;
280                }
281            }
282
283            if ( !found )
284            {
285                Plugin mappedPlugin = new Plugin();
286
287                mappedPlugin.setArtifactId( plugin.getArtifactId() );
288
289                mappedPlugin.setPrefix( plugin.getPrefix() );
290
291                mappedPlugin.setName( plugin.getName() );
292
293                addPlugin( mappedPlugin );
294
295                changed = true;
296            }
297        }
298
299        Versioning versioning = sourceMetadata.getVersioning();
300        if ( versioning != null )
301        {
302            Versioning v = getVersioning();
303            if ( v == null )
304            {
305                v = new Versioning();
306                setVersioning( v );
307                changed = true;
308            }
309
310            for ( String version : versioning.getVersions() )
311            {
312                if ( !v.getVersions().contains( version ) )
313                {
314                    changed = true;
315                    v.getVersions().add( version );
316                }
317            }
318
319            if ( "null".equals( versioning.getLastUpdated() ) )
320            {
321                versioning.setLastUpdated( null );
322            }
323
324            if ( "null".equals( v.getLastUpdated() ) )
325            {
326                v.setLastUpdated( null );
327            }
328
329            if ( versioning.getLastUpdated() == null || versioning.getLastUpdated().length() == 0 )
330            {
331                // this should only be for historical reasons - we assume local is newer
332                versioning.setLastUpdated( v.getLastUpdated() );
333            }
334
335            if ( v.getLastUpdated() == null || v.getLastUpdated().length() == 0
336                 || versioning.getLastUpdated().compareTo( v.getLastUpdated() ) >= 0 )
337            {
338                changed = true;
339                v.setLastUpdated( versioning.getLastUpdated() );
340
341                if ( versioning.getRelease() != null )
342                {
343                    changed = true;
344                    v.setRelease( versioning.getRelease() );
345                }
346                if ( versioning.getLatest() != null )
347                {
348                    changed = true;
349                    v.setLatest( versioning.getLatest() );
350                }
351
352                Snapshot s = v.getSnapshot();
353                Snapshot snapshot = versioning.getSnapshot();
354                if ( snapshot != null )
355                {
356                    if ( s == null )
357                    {
358                        s = new Snapshot();
359                        v.setSnapshot( s );
360                        changed = true;
361                    }
362
363                    // overwrite
364                    if ( s.getTimestamp() == null ? snapshot.getTimestamp() != null
365                        : !s.getTimestamp().equals( snapshot.getTimestamp() ) )
366                    {
367                        s.setTimestamp( snapshot.getTimestamp() );
368                        changed = true;
369                    }
370                    if ( s.getBuildNumber() != snapshot.getBuildNumber() )
371                    {
372                        s.setBuildNumber( snapshot.getBuildNumber() );
373                        changed = true;
374                    }
375                    if ( s.isLocalCopy() != snapshot.isLocalCopy() )
376                    {
377                        s.setLocalCopy( snapshot.isLocalCopy() );
378                        changed = true;
379                    }
380                }
381            }
382        }
383        return changed;
384    }
385          
386}