View Javadoc
1   /*******************************************************************************
2    * Copyright (c) 2010, 2012 Sonatype, Inc.
3    * All rights reserved. This program and the accompanying materials
4    * are made available under the terms of the Eclipse Public License v1.0
5    * which accompanies this distribution, and is available at
6    * http://www.eclipse.org/legal/epl-v10.html
7    *
8    * Contributors:
9    *    Sonatype, Inc. - initial API and implementation
10   *******************************************************************************/
11  package org.eclipse.aether.metadata;
12  
13  import java.io.File;
14  import java.util.Map;
15  
16  /**
17   * A basic metadata instance. <em>Note:</em> Instances of this class are immutable and the exposed mutators return new
18   * objects rather than changing the current instance.
19   */
20  public final class DefaultMetadata
21      extends AbstractMetadata
22  {
23  
24      private final String groupId;
25  
26      private final String artifactId;
27  
28      private final String version;
29  
30      private final String type;
31  
32      private final Nature nature;
33  
34      private final File file;
35  
36      private final Map<String, String> properties;
37  
38      /**
39       * Creates a new metadata for the repository root with the specific type and nature.
40       * 
41       * @param type The type of the metadata, e.g. "maven-metadata.xml", may be {@code null}.
42       * @param nature The nature of the metadata, must not be {@code null}.
43       */
44      public DefaultMetadata( String type, Nature nature )
45      {
46          this( "", "", "", type, nature, null, (File) null );
47      }
48  
49      /**
50       * Creates a new metadata for the groupId level with the specific type and nature.
51       * 
52       * @param groupId The group identifier to which this metadata applies, may be {@code null}.
53       * @param type The type of the metadata, e.g. "maven-metadata.xml", may be {@code null}.
54       * @param nature The nature of the metadata, must not be {@code null}.
55       */
56      public DefaultMetadata( String groupId, String type, Nature nature )
57      {
58          this( groupId, "", "", type, nature, null, (File) null );
59      }
60  
61      /**
62       * Creates a new metadata for the groupId:artifactId level with the specific type and nature.
63       * 
64       * @param groupId The group identifier to which this metadata applies, may be {@code null}.
65       * @param artifactId The artifact identifier to which this metadata applies, may be {@code null}.
66       * @param type The type of the metadata, e.g. "maven-metadata.xml", may be {@code null}.
67       * @param nature The nature of the metadata, must not be {@code null}.
68       */
69      public DefaultMetadata( String groupId, String artifactId, String type, Nature nature )
70      {
71          this( groupId, artifactId, "", type, nature, null, (File) null );
72      }
73  
74      /**
75       * Creates a new metadata for the groupId:artifactId:version level with the specific type and nature.
76       * 
77       * @param groupId The group identifier to which this metadata applies, may be {@code null}.
78       * @param artifactId The artifact identifier to which this metadata applies, may be {@code null}.
79       * @param version The version to which this metadata applies, may be {@code null}.
80       * @param type The type of the metadata, e.g. "maven-metadata.xml", may be {@code null}.
81       * @param nature The nature of the metadata, must not be {@code null}.
82       */
83      public DefaultMetadata( String groupId, String artifactId, String version, String type, Nature nature )
84      {
85          this( groupId, artifactId, version, type, nature, null, (File) null );
86      }
87  
88      /**
89       * Creates a new metadata for the groupId:artifactId:version level with the specific type and nature.
90       * 
91       * @param groupId The group identifier to which this metadata applies, may be {@code null}.
92       * @param artifactId The artifact identifier to which this metadata applies, may be {@code null}.
93       * @param version The version to which this metadata applies, may be {@code null}.
94       * @param type The type of the metadata, e.g. "maven-metadata.xml", may be {@code null}.
95       * @param nature The nature of the metadata, must not be {@code null}.
96       * @param file The resolved file of the metadata, may be {@code null}.
97       */
98      public DefaultMetadata( String groupId, String artifactId, String version, String type, Nature nature, File file )
99      {
100         this( groupId, artifactId, version, type, nature, null, file );
101     }
102 
103     /**
104      * Creates a new metadata for the groupId:artifactId:version level with the specific type and nature.
105      * 
106      * @param groupId The group identifier to which this metadata applies, may be {@code null}.
107      * @param artifactId The artifact identifier to which this metadata applies, may be {@code null}.
108      * @param version The version to which this metadata applies, may be {@code null}.
109      * @param type The type of the metadata, e.g. "maven-metadata.xml", may be {@code null}.
110      * @param nature The nature of the metadata, must not be {@code null}.
111      * @param properties The properties of the metadata, may be {@code null} if none.
112      * @param file The resolved file of the metadata, may be {@code null}.
113      */
114     public DefaultMetadata( String groupId, String artifactId, String version, String type, Nature nature,
115                             Map<String, String> properties, File file )
116     {
117         this.groupId = emptify( groupId );
118         this.artifactId = emptify( artifactId );
119         this.version = emptify( version );
120         this.type = emptify( type );
121         if ( nature == null )
122         {
123             throw new IllegalArgumentException( "metadata nature was not specified" );
124         }
125         this.nature = nature;
126         this.file = file;
127         this.properties = copyProperties( properties );
128     }
129 
130     DefaultMetadata( String groupId, String artifactId, String version, String type, Nature nature, File file,
131                      Map<String, String> properties )
132     {
133         // NOTE: This constructor assumes immutability of the provided properties, for internal use only
134         this.groupId = emptify( groupId );
135         this.artifactId = emptify( artifactId );
136         this.version = emptify( version );
137         this.type = emptify( type );
138         this.nature = nature;
139         this.file = file;
140         this.properties = properties;
141     }
142 
143     private static String emptify( String str )
144     {
145         return ( str == null ) ? "" : str;
146     }
147 
148     public String getGroupId()
149     {
150         return groupId;
151     }
152 
153     public String getArtifactId()
154     {
155         return artifactId;
156     }
157 
158     public String getVersion()
159     {
160         return version;
161     }
162 
163     public String getType()
164     {
165         return type;
166     }
167 
168     public Nature getNature()
169     {
170         return nature;
171     }
172 
173     public File getFile()
174     {
175         return file;
176     }
177 
178     public Map<String, String> getProperties()
179     {
180         return properties;
181     }
182 
183 }