View Javadoc

1   /*
2    * $Id$
3    */
4   
5   package org.apache.maven.model;
6   
7     //---------------------------------/
8    //- Imported classes and packages -/
9   //---------------------------------/
10  
11  import java.util.Date;
12  
13  /**
14   * 
15   *         
16   *         The <code>&lt;plugin&gt;</code> element contains
17   * informations required for a plugin.
18   *         
19   *       
20   * 
21   * @version $Revision$ $Date$
22   */
23  public class Plugin extends ConfigurationContainer 
24  implements java.io.Serializable
25  {
26  
27  
28        //--------------------------/
29       //- Class/Member Variables -/
30      //--------------------------/
31  
32      /**
33       * The group ID of the plugin in the repository.
34       */
35      private String groupId = "org.apache.maven.plugins";
36  
37      /**
38       * The artifact ID of the plugin in the repository.
39       */
40      private String artifactId;
41  
42      /**
43       * The version (or valid range of versions) of the plugin to be
44       * used.
45       */
46      private String version;
47  
48      /**
49       * Whether to load Maven extensions (such as packaging and type
50       * handlers) from
51       *             this plugin. For performance reasons, this
52       * should only be enabled when necessary.
53       */
54      private boolean extensions = false;
55  
56      /**
57       * Field executions.
58       */
59      private java.util.List executions;
60  
61      /**
62       * Field dependencies.
63       */
64      private java.util.List dependencies;
65  
66      /**
67       * 
68       *             
69       *             <b>Deprecated</b>. Unused by Maven.
70       *             
71       *           
72       */
73      private Object goals;
74  
75  
76        //-----------/
77       //- Methods -/
78      //-----------/
79  
80      /**
81       * Method addDependency.
82       * 
83       * @param dependency
84       */
85      public void addDependency( Dependency dependency )
86      {
87          if ( !(dependency instanceof Dependency) )
88          {
89              throw new ClassCastException( "Plugin.addDependencies(dependency) parameter must be instanceof " + Dependency.class.getName() );
90          }
91          getDependencies().add( dependency );
92      } //-- void addDependency( Dependency ) 
93  
94      /**
95       * Method addExecution.
96       * 
97       * @param pluginExecution
98       */
99      public void addExecution( PluginExecution pluginExecution )
100     {
101         if ( !(pluginExecution instanceof PluginExecution) )
102         {
103             throw new ClassCastException( "Plugin.addExecutions(pluginExecution) parameter must be instanceof " + PluginExecution.class.getName() );
104         }
105         getExecutions().add( pluginExecution );
106     } //-- void addExecution( PluginExecution ) 
107 
108     /**
109      * Get the artifact ID of the plugin in the repository.
110      * 
111      * @return String
112      */
113     public String getArtifactId()
114     {
115         return this.artifactId;
116     } //-- String getArtifactId() 
117 
118     /**
119      * Method getDependencies.
120      * 
121      * @return java.util.List
122      */
123     public java.util.List getDependencies()
124     {
125         if ( this.dependencies == null )
126         {
127             this.dependencies = new java.util.ArrayList();
128         }
129     
130         return this.dependencies;
131     } //-- java.util.List getDependencies() 
132 
133     /**
134      * Method getExecutions.
135      * 
136      * @return java.util.List
137      */
138     public java.util.List getExecutions()
139     {
140         if ( this.executions == null )
141         {
142             this.executions = new java.util.ArrayList();
143         }
144     
145         return this.executions;
146     } //-- java.util.List getExecutions() 
147 
148     /**
149      * Get 
150      *             
151      *             <b>Deprecated</b>. Unused by Maven.
152      *             
153      *           
154      * 
155      * @return Object
156      */
157     public Object getGoals()
158     {
159         return this.goals;
160     } //-- Object getGoals() 
161 
162     /**
163      * Get the group ID of the plugin in the repository.
164      * 
165      * @return String
166      */
167     public String getGroupId()
168     {
169         return this.groupId;
170     } //-- String getGroupId() 
171 
172     /**
173      * Get the version (or valid range of versions) of the plugin
174      * to be used.
175      * 
176      * @return String
177      */
178     public String getVersion()
179     {
180         return this.version;
181     } //-- String getVersion() 
182 
183     /**
184      * Get whether to load Maven extensions (such as packaging and
185      * type handlers) from
186      *             this plugin. For performance reasons, this
187      * should only be enabled when necessary.
188      * 
189      * @return boolean
190      */
191     public boolean isExtensions()
192     {
193         return this.extensions;
194     } //-- boolean isExtensions() 
195 
196     /**
197      * Method removeDependency.
198      * 
199      * @param dependency
200      */
201     public void removeDependency( Dependency dependency )
202     {
203         if ( !(dependency instanceof Dependency) )
204         {
205             throw new ClassCastException( "Plugin.removeDependencies(dependency) parameter must be instanceof " + Dependency.class.getName() );
206         }
207         getDependencies().remove( dependency );
208     } //-- void removeDependency( Dependency ) 
209 
210     /**
211      * Method removeExecution.
212      * 
213      * @param pluginExecution
214      */
215     public void removeExecution( PluginExecution pluginExecution )
216     {
217         if ( !(pluginExecution instanceof PluginExecution) )
218         {
219             throw new ClassCastException( "Plugin.removeExecutions(pluginExecution) parameter must be instanceof " + PluginExecution.class.getName() );
220         }
221         getExecutions().remove( pluginExecution );
222     } //-- void removeExecution( PluginExecution ) 
223 
224     /**
225      * Set the artifact ID of the plugin in the repository.
226      * 
227      * @param artifactId
228      */
229     public void setArtifactId( String artifactId )
230     {
231         this.artifactId = artifactId;
232     } //-- void setArtifactId( String ) 
233 
234     /**
235      * Set additional dependencies that this project needs to
236      * introduce to the plugin's
237      *             classloader.
238      * 
239      * @param dependencies
240      */
241     public void setDependencies( java.util.List dependencies )
242     {
243         this.dependencies = dependencies;
244     } //-- void setDependencies( java.util.List ) 
245 
246     /**
247      * Set multiple specifications of a set of goals to execute
248      * during the build
249      *             lifecycle, each having (possibly) a different
250      * configuration.
251      * 
252      * @param executions
253      */
254     public void setExecutions( java.util.List executions )
255     {
256         this.executions = executions;
257     } //-- void setExecutions( java.util.List ) 
258 
259     /**
260      * Set whether to load Maven extensions (such as packaging and
261      * type handlers) from
262      *             this plugin. For performance reasons, this
263      * should only be enabled when necessary.
264      * 
265      * @param extensions
266      */
267     public void setExtensions( boolean extensions )
268     {
269         this.extensions = extensions;
270     } //-- void setExtensions( boolean ) 
271 
272     /**
273      * Set 
274      *             
275      *             <b>Deprecated</b>. Unused by Maven.
276      *             
277      *           
278      * 
279      * @param goals
280      */
281     public void setGoals( Object goals )
282     {
283         this.goals = goals;
284     } //-- void setGoals( Object ) 
285 
286     /**
287      * Set the group ID of the plugin in the repository.
288      * 
289      * @param groupId
290      */
291     public void setGroupId( String groupId )
292     {
293         this.groupId = groupId;
294     } //-- void setGroupId( String ) 
295 
296     /**
297      * Set the version (or valid range of versions) of the plugin
298      * to be used.
299      * 
300      * @param version
301      */
302     public void setVersion( String version )
303     {
304         this.version = version;
305     } //-- void setVersion( String ) 
306 
307 
308             
309     private java.util.Map executionMap = null;
310 
311     /**
312      * Reset the <code>executionMap</code> field to <code>null</code>
313      */
314     public void flushExecutionMap()
315     {
316         this.executionMap = null;
317     }
318 
319     /**
320      * @return a Map of executions field with <code>PluginExecution#getId()</code> as key
321      * @see org.apache.maven.model.PluginExecution#getId()
322      */
323     public java.util.Map getExecutionsAsMap()
324     {
325         if ( executionMap == null )
326         {
327             executionMap = new java.util.LinkedHashMap();
328             if ( getExecutions() != null )
329             {
330                 for ( java.util.Iterator i = getExecutions().iterator(); i.hasNext(); )
331                 {
332                     PluginExecution exec = (PluginExecution) i.next();
333 
334                     if ( executionMap.containsKey( exec.getId() ) )
335                     {
336                         throw new IllegalStateException( "You cannot have two plugin executions with the same (or missing) <id/> elements.\nOffending execution\n\nId: \'" + exec.getId() + "\'\nPlugin:\'" + getKey() + "\'\n\n" );
337                     }
338 
339                     executionMap.put( exec.getId(), exec );
340                 }
341             }
342         }
343 
344         return executionMap;
345     }
346 
347     /**
348      * @return the key of the plugin, ie <code>groupId:artifactId</code>
349      */
350     public String getKey()
351     {
352         return constructKey( groupId, artifactId );
353     }
354 
355     /**
356      * @param groupId
357      * @param artifactId
358      * @return the key of the plugin, ie <code>groupId:artifactId</code>
359      */
360     public static String constructKey( String groupId, String artifactId )
361     {
362         return groupId + ":" + artifactId;
363     }
364 
365     /**
366      * @see java.lang.Object#equals(java.lang.Object)
367      */
368     public boolean equals( Object other )
369     {
370         if ( other instanceof Plugin )
371         {
372             Plugin otherPlugin = (Plugin) other;
373 
374             return getKey().equals( otherPlugin.getKey() );
375         }
376 
377         return false;
378     }
379 
380     /**
381      * @see java.lang.Object#hashCode()
382      */
383     public int hashCode()
384     {
385         return getKey().hashCode();
386     }
387 
388     /**
389      * @see java.lang.Object#toString()
390      */
391     public String toString()
392     {
393         return "Plugin [" + getKey() + "]";
394     }
395             
396           
397     private String modelEncoding = "UTF-8";
398 
399     /**
400      * Set an encoding used for reading/writing the model.
401      *
402      * @param modelEncoding the encoding used when reading/writing the model.
403      */
404     public void setModelEncoding( String modelEncoding )
405     {
406         this.modelEncoding = modelEncoding;
407     }
408 
409     /**
410      * @return the current encoding used when reading/writing this model.
411      */
412     public String getModelEncoding()
413     {
414         return modelEncoding;
415     }
416 }