package org.angularjs.codeInsight.router; import com.intellij.psi.SmartPsiElementPointer; import com.intellij.util.SmartList; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @author Irina.Chernushina on 3/23/2016. */ public class DiagramObject { @NotNull private Type myType; @NotNull private final String myName; @Nullable private String myTooltip; @Nullable private final SmartPsiElementPointer myNavigationTarget; private boolean myIsValid = true; //invalid = created by reference from other place, but not defined @NotNull private final List<String> myNotes; @NotNull private final List<String> myWarnings; @NotNull private final List<String> myErrors; private final Map<String, DiagramObject> myChildren; private final List<String> myChildOrder; private AngularUiRouterNode myContainer; private String myParentName; public DiagramObject(@NotNull Type type, @NotNull String name, @Nullable SmartPsiElementPointer navigationTarget) { myType = type; myName = name; myNavigationTarget = navigationTarget; myWarnings = new SmartList<>(); myErrors = new SmartList<>(); myNotes = new SmartList<>(); myChildren = new HashMap<>(); myChildOrder = new ArrayList<>(); } public void addChild(@NotNull final DiagramObject child, AngularUiRouterNode parent) { myChildren.put(child.getName(), child); child.myContainer = parent; myChildOrder.add(child.getName()); } public List<DiagramObject> getChildrenList() { final List<DiagramObject> list = new ArrayList<>(); for (String s : myChildOrder) { list.add(myChildren.get(s)); } return list; } public AngularUiRouterNode getContainer() { return myContainer; } @NotNull public Type getType() { return myType; } @NotNull public String getName() { return myName; } @Nullable public SmartPsiElementPointer getNavigationTarget() { return myNavigationTarget; } public void addError(@NotNull final String error) { myErrors.add(error); myIsValid = false; } public void addWarning(@NotNull final String warning) { myWarnings.add(warning); myIsValid = false; } public void addNote(@NotNull final String note) { myNotes.add(note); } public boolean isValid() { return myIsValid; } @NotNull public List<String> getErrors() { return myErrors; } @NotNull public List<String> getWarnings() { return myWarnings; } @NotNull public List<String> getNotes() { return myNotes; } @Nullable public String getTooltip() { return myTooltip == null ? myName : myTooltip; } public void setTooltip(@Nullable String tooltip) { myTooltip = tooltip; } public void setType(Type type) { myType = type; } public String getParent() { return myParentName; } public void setParent(String parentName) { myParentName = parentName; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; DiagramObject object = (DiagramObject)o; if (myType != object.myType) return false; if (!myName.equals(object.myName)) return false; if (myTooltip != null ? !myTooltip.equals(object.myTooltip) : object.myTooltip != null) return false; if (myNavigationTarget != null ? !myNavigationTarget.equals(object.myNavigationTarget) : object.myNavigationTarget != null) return false; if (myContainer != null ? !myContainer.equals(object.myContainer) : object.myContainer != null) return false; return true; } @Override public int hashCode() { int result = myType.hashCode(); result = 31 * result + myName.hashCode(); result = 31 * result + (myTooltip != null ? myTooltip.hashCode() : 0); result = 31 * result + (myContainer != null ? myContainer.hashCode() : 0); return result; } }