1 /** 2 * Copyright 2011-2012 The Kuali Foundation 3 * 4 * Licensed under the Educational Community License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.opensource.org/licenses/ecl2.php 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package org.kuali.maven.plugins.graph.mojo; 17 18 import org.kuali.maven.plugins.graph.pojo.Conflicts; 19 import org.kuali.maven.plugins.graph.pojo.Direction; 20 import org.kuali.maven.plugins.graph.pojo.Display; 21 22 /** 23 * <p> 24 * </p> 25 * 26 */ 27 public abstract class BaseGraphMojo extends BaseMavenMojo { 28 29 /** 30 * <p> 31 * Controls what dependencies are displayed on the graph by applying different filtering techniques. Valid options 32 * are <code>PATH</code>, <code>TREE</code>, and <code>PT</code> (path and tree). 33 * </p> 34 * 35 * <p> 36 * NOTE: Support for display types other than <code>TREE</code> should be considered experimental. <code>PATH</code> 37 * and <code>PT</code> are not fully implemented or tested. Use at your own risk. 38 * </p> 39 * 40 * <p> 41 * <code>TREE</code> prunes the dependency tree from the top down. Recursive traversal of transitive dependencies 42 * stops when a dependency does not match the filter criteria. Any further transitive dependencies in that part of 43 * the dependency tree are not displayed. 44 * </p> 45 * 46 * <p> 47 * <code>PATH</code> searches the entire tree for any dependencies matching the filter criteria. All matching 48 * dependencies are displayed. In addition, the dependencies in the path from any matching dependency back to the 49 * top of the dependency tree are displayed. Dependencies in the path from a matching dependency to the top of the 50 * tree are always displayed, even if they do not match the filter criteria themselves. 51 * </p> 52 * 53 * <p> 54 * <code>PT</code> is similar to <code>PATH</code>. The difference between <code>PT</code> and <code>PATH</code> is 55 * that <code>PT</code> shows the transitive dependencies of dependencies matching the filter criteria in addition 56 * to the dependencies in the path back to the top of the dependency tree. 57 * </p> 58 * 59 * @parameter expression="${graph.display}" default-value="TREE" 60 */ 61 private Display display; 62 63 /** 64 * <p> 65 * The title for the graph 66 * </p> 67 * 68 * @parameter expression="${graph.title}" default-value="Dependency Graph for ${project.name}" 69 */ 70 private String title; 71 72 /** 73 * <p> 74 * If true, the .dot text file Graphviz uses to draw the graph is retained 75 * </p> 76 * 77 * @parameter expression="${graph.keepDotFile}" default-value="false" 78 */ 79 private boolean keepDotFile; 80 81 /** 82 * <p> 83 * The direction for the graph layout. Valid values are TB, LR, BT, RL. Top to bottom, left to right, bottom to top, 84 * and right to left, respectively. 85 * </p> 86 * 87 * @required 88 * @parameter expression="${graph.direction}" default-value="TB" 89 */ 90 private Direction direction; 91 92 /** 93 * <p> 94 * If true, artifact group id's are displayed on the graph. 95 * </p> 96 * 97 * @parameter expression="${graph.showGroupIds}" default-value="true" 98 */ 99 private boolean showGroupIds; 100 101 /** 102 * <p> 103 * If true, artifact id's are displayed on the graph. 104 * </p> 105 * 106 * @parameter expression="${graph.showArtifactIds}" default-value="true" 107 */ 108 private boolean showArtifactIds; 109 110 /** 111 * <p> 112 * If true, artifact versions's are displayed on the graph. 113 * </p> 114 * 115 * @parameter expression="${graph.showVersions}" default-value="true" 116 */ 117 private boolean showVersions; 118 119 /** 120 * <p> 121 * If true, artifact classifiers's are displayed on the graph. 122 * </p> 123 * 124 * @parameter expression="${graph.showClassifiers}" default-value="true" 125 */ 126 private boolean showClassifiers; 127 128 /** 129 * <p> 130 * If true, artifact types (aka "packaging") are displayed on the graph 131 * </p> 132 * 133 * @parameter expression="${graph.showTypes}" default-value="true" 134 */ 135 private boolean showTypes; 136 137 /** 138 * <p> 139 * If true, duplicate dependencies are displayed on the graph. 140 * </p> 141 * 142 * @parameter expression="${graph.showDuplicates}" default-value="false" 143 */ 144 private boolean showDuplicates; 145 146 /** 147 * <p> 148 * Determines how conflicts in the dependency tree are displayed. Valid options are <code>IGNORE</code>, 149 * <code>LABEL</code>, and <code>SHOW</code>. 150 * </p> 151 * 152 * <p> 153 * <code>IGNORE</code>, ignores conflicts and draws the graph without any reference to them. 154 * </p> 155 * 156 * <p> 157 * <code>LABEL</code>, draws a red line with the word "conflict" for any spots in the dependency tree where there 158 * are conflicts. 159 * </p> 160 * 161 * <p> 162 * <code>SHOW</code>, draws a red line, and also shows what version of the artifact was conflicted out of the build. 163 * </p> 164 * 165 * <p> 166 * Maven supports the resolution of artifact versions by way of nearest-wins. That is, for any set of dependencies 167 * that share the same groupId:artifactId:type:classifier, the one declared nearest to the current project in the 168 * dependency tree will be selected for use. 169 * </p> 170 * 171 * @parameter expression="${graph.conflicts}" default-value="IGNORE" 172 */ 173 private Conflicts conflicts; 174 175 /** 176 * <p> 177 * If true, any dependency marked as optional will have all of its transitive dependencies displayed as optional 178 * also. 179 * </p> 180 * 181 * @parameter expression="${graph.cascadeOptional}" default-value="true" 182 */ 183 private boolean cascadeOptional; 184 185 /** 186 * <p> 187 * If true, any filters applied to the dependency tree are shown in the legend. 188 * </p> 189 * 190 * @parameter expression="${graph.showLegend}" default-value="true" 191 */ 192 private boolean showLegend; 193 194 /** 195 * <p> 196 * If true, the title for the graph will be displayed. 197 * </p> 198 * 199 * @parameter expression="${graph.showTitle}" default-value="true" 200 */ 201 private boolean showTitle; 202 203 /** 204 * <p> 205 * If true, the Graphviz "dot" binary is executed to produce a graph from the .dot text file 206 * </p> 207 * 208 * @parameter expression="${graph.executeDot}" default-value="true" 209 */ 210 private boolean executeDot; 211 212 /** 213 * <p> 214 * If true, the Maven build will continue even if the "dot" executable returns a non-zero exit value. 215 * </p> 216 * 217 * @parameter expression="${graph.ignoreDotFailure}" default-value="false" 218 */ 219 private boolean ignoreDotFailure; 220 221 /** 222 * <p> 223 * If true, skip invoking Graphviz if there are no dependencies to graph. 224 * </p> 225 * 226 * @parameter expression="${graph.skipEmptyGraphs}" default-value="true" 227 */ 228 private boolean skipEmptyGraphs; 229 230 public String getTitle() { 231 return title; 232 } 233 234 public void setTitle(String title) { 235 this.title = title; 236 } 237 238 public boolean isKeepDotFile() { 239 return keepDotFile; 240 } 241 242 public void setKeepDotFile(boolean keepDotFile) { 243 this.keepDotFile = keepDotFile; 244 } 245 246 public Direction getDirection() { 247 return direction; 248 } 249 250 public void setDirection(Direction direction) { 251 this.direction = direction; 252 } 253 254 public boolean isShowGroupIds() { 255 return showGroupIds; 256 } 257 258 public void setShowGroupIds(boolean showGroupIds) { 259 this.showGroupIds = showGroupIds; 260 } 261 262 public boolean isShowLegend() { 263 return showLegend; 264 } 265 266 public void setShowLegend(boolean showLegend) { 267 this.showLegend = showLegend; 268 } 269 270 public boolean isShowTitle() { 271 return showTitle; 272 } 273 274 public void setShowTitle(boolean showTitle) { 275 this.showTitle = showTitle; 276 } 277 278 public boolean isExecuteDot() { 279 return executeDot; 280 } 281 282 public void setExecuteDot(boolean executeDot) { 283 this.executeDot = executeDot; 284 } 285 286 public boolean isIgnoreDotFailure() { 287 return ignoreDotFailure; 288 } 289 290 public void setIgnoreDotFailure(boolean ignoreDotFailure) { 291 this.ignoreDotFailure = ignoreDotFailure; 292 } 293 294 public boolean isShowDuplicates() { 295 return showDuplicates; 296 } 297 298 public void setShowDuplicates(boolean showDuplicates) { 299 this.showDuplicates = showDuplicates; 300 } 301 302 public boolean isCascadeOptional() { 303 return cascadeOptional; 304 } 305 306 public void setCascadeOptional(boolean cascadeOptional) { 307 this.cascadeOptional = cascadeOptional; 308 } 309 310 public boolean isSkipEmptyGraphs() { 311 return skipEmptyGraphs; 312 } 313 314 public void setSkipEmptyGraphs(boolean skipEmptyGraphs) { 315 this.skipEmptyGraphs = skipEmptyGraphs; 316 } 317 318 public Display getDisplay() { 319 return display; 320 } 321 322 public void setDisplay(Display filterType) { 323 this.display = filterType; 324 } 325 326 public Conflicts getConflicts() { 327 return conflicts; 328 } 329 330 public void setConflicts(Conflicts conflicts) { 331 this.conflicts = conflicts; 332 } 333 334 public boolean isShowArtifactIds() { 335 return showArtifactIds; 336 } 337 338 public void setShowArtifactIds(boolean showArtifactIds) { 339 this.showArtifactIds = showArtifactIds; 340 } 341 342 public boolean isShowVersions() { 343 return showVersions; 344 } 345 346 public void setShowVersions(boolean showVersions) { 347 this.showVersions = showVersions; 348 } 349 350 public boolean isShowClassifiers() { 351 return showClassifiers; 352 } 353 354 public void setShowClassifiers(boolean showClassifiers) { 355 this.showClassifiers = showClassifiers; 356 } 357 358 public boolean isShowTypes() { 359 return showTypes; 360 } 361 362 public void setShowTypes(boolean showTypes) { 363 this.showTypes = showTypes; 364 } 365 366 }