001 // License: GPL. For details, see LICENSE file.
002 package org.openstreetmap.josm.actions.upload;
003
004 import static org.openstreetmap.josm.tools.I18n.tr;
005
006 import java.util.ArrayList;
007 import java.util.List;
008 import java.util.Stack;
009
010 import org.openstreetmap.josm.data.osm.Relation;
011
012 public class CyclicUploadDependencyException extends Exception {
013 private Stack<Relation> cycle;
014
015 public CyclicUploadDependencyException(Stack<Relation> cycle) {
016 super();
017 this.cycle = cycle;
018 }
019
020 protected String formatRelation(Relation r) {
021 StringBuffer sb = new StringBuffer();
022 if (r.getName() != null) {
023 sb.append("'").append(r.getName()).append("'");
024 } else if (!r.isNew()) {
025 sb.append(r.getId());
026 } else {
027 sb.append("relation@").append(r.hashCode());
028 }
029 return sb.toString();
030 }
031
032 @Override
033 public String getMessage() {
034 StringBuffer sb = new StringBuffer();
035 sb.append(tr("Cyclic dependency between relations:"));
036 sb.append("[");
037 for (int i=0; i< cycle.size(); i++) {
038 if (i >0 ) {
039 sb.append(",");
040 }
041 sb.append(formatRelation(cycle.get(i)));
042 }
043 sb.append("]");
044 return sb.toString();
045 }
046
047 public List<Relation> getCyclicUploadDependency() {
048 return new ArrayList<Relation>(cycle);
049 }
050 }