001package 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 022import org.apache.maven.artifact.ArtifactScopeEnum; 023 024/** 025 * metadata graph edge - combination of version, scope and depth define 026 * an edge in the graph 027 * 028 * @author <a href="oleg@codehaus.org">Oleg Gusakov</a> 029 * 030 */ 031 032public class MetadataGraphEdge 033{ 034 String version; 035 ArtifactScopeEnum scope; 036 int depth = -1; 037 int pomOrder = -1; 038 boolean resolved = true; 039 String artifactUri; 040 041 /** 042 * capturing where this link came from 043 * and where it is linked to. 044 * 045 * In the first implementation only source used for explanatory function 046 */ 047 MetadataGraphVertex source; 048 MetadataGraphVertex target; 049 050 //---------------------------------------------------------------------------- 051 public MetadataGraphEdge( String version, boolean resolved, ArtifactScopeEnum scope, String artifactUri, int depth, 052 int pomOrder ) 053 { 054 super(); 055 this.version = version; 056 this.scope = scope; 057 this.artifactUri = artifactUri; 058 this.depth = depth; 059 this.resolved = resolved; 060 this.pomOrder = pomOrder; 061 } 062 //---------------------------------------------------------------------------- 063 /** 064 * helper for equals 065 */ 066 private static boolean objectsEqual( Object o1, Object o2 ) 067 { 068 if ( o1 == null && o2 == null ) 069 { 070 return true; 071 } 072 if ( o1 == null || o2 == null ) 073 { 074 return false; // as they are not both null 075 } 076 return o1.equals( o2 ); 077 } 078 079 //---------------------------------------------------------------------------- 080 /** 081 * used to eliminate exact duplicates in the edge list 082 */ 083 @Override 084 public boolean equals( Object o ) 085 { 086 if ( o instanceof MetadataGraphEdge ) 087 { 088 MetadataGraphEdge e = (MetadataGraphEdge) o; 089 090 return objectsEqual( version, e.version ) 091 && ArtifactScopeEnum.checkScope( scope ).getScope().equals( ArtifactScopeEnum.checkScope( e.scope ).getScope() ) 092 && depth == e.depth; 093 } 094 return false; 095 } 096 097 //---------------------------------------------------------------------------- 098 public String getVersion() 099 { 100 return version; 101 } 102 103 public void setVersion( String version ) 104 { 105 this.version = version; 106 } 107 108 public ArtifactScopeEnum getScope() 109 { 110 return scope; 111 } 112 113 public void setScope( ArtifactScopeEnum scope ) 114 { 115 this.scope = scope; 116 } 117 118 public int getDepth() 119 { 120 return depth; 121 } 122 123 public void setDepth( int depth ) 124 { 125 this.depth = depth; 126 } 127 128 public boolean isResolved() 129 { 130 return resolved; 131 } 132 133 public void setResolved( boolean resolved ) 134 { 135 this.resolved = resolved; 136 } 137 138 public int getPomOrder() 139 { 140 return pomOrder; 141 } 142 143 public void setPomOrder( int pomOrder ) 144 { 145 this.pomOrder = pomOrder; 146 } 147 148 public String getArtifactUri() 149 { 150 return artifactUri; 151 } 152 153 public void setArtifactUri( String artifactUri ) 154 { 155 this.artifactUri = artifactUri; 156 } 157 158 public MetadataGraphVertex getSource() 159 { 160 return source; 161 } 162 163 public void setSource( MetadataGraphVertex source ) 164 { 165 this.source = source; 166 } 167 168 public MetadataGraphVertex getTarget() 169 { 170 return target; 171 } 172 173 public void setTarget( MetadataGraphVertex target ) 174 { 175 this.target = target; 176 } 177 178 @Override 179 public String toString() 180 { 181 return "[ " + "FROM:(" 182 + ( source == null ? "no source" : ( source.md == null ? "no source MD" : source.md.toString() ) ) + ") " 183 + "TO:(" + ( target == null ? "no target" : ( target.md == null ? "no target MD" : target.md.toString() ) ) 184 + ") " + "version=" + version + ", scope=" + ( scope == null ? "null" : scope.getScope() ) + ", depth=" 185 + depth + "]"; 186 } 187 //---------------------------------------------------------------------------- 188 //---------------------------------------------------------------------------- 189}