001 package org.apache.maven.repository.metadata;
002
003 /*
004 * Licensed to the Apache Software Foundation (ASF) under one
005 * or more contributor license agreements. See the NOTICE file
006 * distributed with this work for additional information
007 * regarding copyright ownership. The ASF licenses this file
008 * to you under the Apache License, Version 2.0 (the
009 * "License"); you may not use this file except in compliance
010 * with the License. You may obtain a copy of the License at
011 *
012 * http://www.apache.org/licenses/LICENSE-2.0
013 *
014 * Unless required by applicable law or agreed to in writing,
015 * software distributed under the License is distributed on an
016 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017 * KIND, either express or implied. See the License for the
018 * specific language governing permissions and limitations
019 * under the License.
020 */
021
022 import org.apache.maven.artifact.ArtifactScopeEnum;
023
024 /**
025 * metadata graph vertice - just a wrapper around artifact's metadata
026 *
027 * @author <a href="oleg@codehaus.org">Oleg Gusakov</a>
028 */
029 public class MetadataGraphVertex
030 implements Comparable<MetadataGraphVertex>
031 {
032 ArtifactMetadata md;
033
034 // indications to use these in comparrison
035 private boolean compareVersion = false;
036 private boolean compareScope = false;
037
038 public MetadataGraphVertex( ArtifactMetadata md )
039 {
040 super();
041 this.md = md;
042 }
043
044 public MetadataGraphVertex( ArtifactMetadata md, boolean compareVersion, boolean compareScope )
045 {
046 this( md );
047 this.compareVersion = compareVersion;
048 this.compareScope = compareScope;
049 }
050
051 public ArtifactMetadata getMd()
052 {
053 return md;
054 }
055
056 public void setMd( ArtifactMetadata md )
057 {
058 this.md = md;
059 }
060
061 // ---------------------------------------------------------------------
062 public boolean isCompareVersion()
063 {
064 return compareVersion;
065 }
066
067 public void setCompareVersion( boolean compareVersion )
068 {
069 this.compareVersion = compareVersion;
070 }
071
072 public boolean isCompareScope()
073 {
074 return compareScope;
075 }
076
077 public void setCompareScope( boolean compareScope )
078 {
079 this.compareScope = compareScope;
080 }
081
082 // ---------------------------------------------------------------------
083 @Override
084 public String toString()
085 {
086 return "[" + ( md == null ? "no metadata" : md.toString() ) + "]";
087 }
088
089 // ---------------------------------------------------------------------
090 private static int compareStrings( String s1, String s2 )
091 {
092 if ( s1 == null && s2 == null )
093 {
094 return 0;
095 }
096
097 if ( s1 == null && s2 != null )
098 {
099 return -1;
100 }
101
102 if ( s1 != null && s2 == null )
103 {
104 return 1;
105 }
106
107 return s1.compareTo( s2 );
108 }
109
110 // ---------------------------------------------------------------------
111 public int compareTo( MetadataGraphVertex vertex )
112 {
113 if ( vertex == null || vertex.getMd() == null )
114 {
115 return 1;
116 }
117
118 ArtifactMetadata vmd = vertex.getMd();
119
120 if ( vmd == null )
121 {
122 if ( md == null )
123 {
124 return 0;
125 }
126 else
127 {
128 return 1;
129 }
130 }
131
132 int g = compareStrings( md.groupId, vmd.groupId );
133
134 if ( g == 0 )
135 {
136 int a = compareStrings( md.artifactId, vmd.artifactId );
137 if ( a == 0 )
138 {
139 if ( compareVersion )
140 {
141 int v = compareStrings( md.version, vmd.version );
142 if ( v == 0 )
143 {
144 if ( compareScope )
145 {
146 String s1 = ArtifactScopeEnum.checkScope( md.artifactScope ).getScope();
147 String s2 = ArtifactScopeEnum.checkScope( vmd.artifactScope ).getScope();
148 return s1.compareTo( s2 );
149 }
150 else
151 {
152 return 0;
153 }
154 }
155 else
156 {
157 return v;
158 }
159 }
160 else
161 {
162 return 0;
163 }
164 }
165 else
166 {
167 return a;
168 }
169 }
170
171 return g;
172 }
173
174 // ---------------------------------------------------------------------
175 @Override
176 public boolean equals( Object vo )
177 {
178 if ( vo == null || !( vo instanceof MetadataGraphVertex ) )
179 {
180 return false;
181 }
182 return compareTo( (MetadataGraphVertex) vo ) == 0;
183 }
184
185 // ---------------------------------------------------------------------
186
187 @Override
188 public int hashCode()
189 {
190 if ( md == null )
191 {
192 return super.hashCode();
193 }
194 StringBuilder hashString = new StringBuilder( 128 );
195 hashString.append( md.groupId + "|" );
196 hashString.append( md.artifactId + "|" );
197
198 if ( compareVersion )
199 {
200 hashString.append( md.version + "|" );
201 }
202
203 if ( compareScope )
204 {
205 hashString.append( md.getArtifactScope() + "|" );
206 }
207
208 return hashString.toString().hashCode();
209
210 // BASE64Encoder b64 = new BASE64Encoder();
211 // return b64.encode( hashString.toString().getBytes() ).hashCode();
212 }
213
214 // ---------------------------------------------------------------------
215 // ---------------------------------------------------------------------
216 }