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