@@ -0,0 +1,1758 @@
+package com.github.ferstl.depgraph.graph.style;%0A%0Aimport com.google.common.base.Joiner;%0A%0Apublic final class StyleKey implements Comparable%3CStyleKey%3E %7B%0A%0A  private static final int NUM_ELEMENTS = 5;%0A%0A  String groupId;%0A  String artifactId;%0A  String version;%0A  String scope;%0A  String type;%0A%0A%0A  private StyleKey(String%5B%5D parts) %7B%0A    if (parts.length %3E NUM_ELEMENTS) %7B%0A      throw new IllegalArgumentException(%22Too many parts. Expecting '%3CgroupId%3E:%3CartifactId%3E:%3Cversion%3E:%3Cscope%3E:%3Ctype%3E'%22);%0A    %7D%0A%0A    String%5B%5D expanded = new String%5BNUM_ELEMENTS%5D;%0A    for (int i = 0; i %3C parts.length; i++) %7B%0A      expanded%5Bi%5D = parts%5Bi%5D;%0A    %7D%0A%0A    this.groupId = expanded%5B0%5D;%0A    this.artifactId = expanded%5B1%5D;%0A    this.version = expanded%5B2%5D;%0A    this.scope = expanded%5B3%5D;%0A    this.type = expanded%5B4%5D;%0A  %7D%0A%0A  public static StyleKey fromString(String keyString) %7B%0A    String%5B%5D parts = keyString.split(%22:%22);%0A    return new StyleKey(parts);%0A  %7D%0A%0A  @Override%0A  public int compareTo(StyleKey o) %7B%0A    return getRank() - o.getRank();%0A  %7D%0A%0A  @Override%0A  public boolean equals(Object obj) %7B%0A    if (obj == this) %7B%0A      return true;%0A    %7D%0A%0A    if (!(obj instanceof StyleKey)) %7B%0A      return false;%0A    %7D%0A%0A    StyleKey other = (StyleKey) obj;%0A%0A    return compareTo(other) == 0;%0A  %7D%0A%0A  @Override%0A  public int hashCode() %7B%0A    return getRank();%0A  %7D%0A%0A  private int getRank() %7B%0A    int rank = 0;%0A%0A    rank += this.groupId != null ? 16 : 0;%0A    rank += this.artifactId != null ? 8 : 0;%0A    rank += this.version != null ? 4 : 0;%0A    rank += this.scope != null ? 2 : 0;%0A    rank += this.type != null ? 1 : 0;%0A%0A    return rank;%0A  %7D%0A%0A  @Override%0A  public String toString() %7B%0A    return Joiner.on(%22,%22).useForNull(%22%22).join(this.groupId, this.artifactId, this.version, this.scope, this.type);%0A  %7D%0A%0A%7D%0A

Introduce StyleKey for custom styling