package jetbrains.mps.make.java; /*Generated by MPS */ import java.util.List; import jetbrains.mps.util.InternAwareStringList; import jetbrains.mps.util.InternUtil; import org.jdom.Element; import org.jdom.Attribute; import java.util.Set; import java.util.HashSet; import java.util.Collection; public class RootDependencies implements Comparable<RootDependencies> { private static final String CLASS_NAME = "className"; private static final String FILE_NAME = "file"; private static final String DEPEND_CLASS = "classNode"; private static final String DEPEND_CLASS_NAME = "dependClassName"; private static final String EXTENDS_CLASS_NAME = "extendsClassName"; private final List<String> myDependNodes; private final List<String> myExtendsNodes; private String myClassName; private String myFileName; /*package*/ RootDependencies() { myDependNodes = new InternAwareStringList(); myExtendsNodes = new InternAwareStringList(); } public RootDependencies(String nodeName, List<String> dependNodes, List<String> extendsNodes) { this.myClassName = InternUtil.intern(nodeName); if (dependNodes != null) { this.myDependNodes = new InternAwareStringList(dependNodes.size()); this.myDependNodes.addAll(dependNodes); } else { this.myDependNodes = new InternAwareStringList(2); } if (extendsNodes != null) { myExtendsNodes = new InternAwareStringList(extendsNodes.size()); myExtendsNodes.addAll(extendsNodes); } else { myExtendsNodes = new InternAwareStringList(2); } } /** * * @deprecated Shall move fileName (if needed at all) to ModelDependencies */ @Deprecated public RootDependencies(String nodeName, String fileName, List<String> dependNodes, List<String> extendsNodes) { this(nodeName, dependNodes, extendsNodes); this.myFileName = InternUtil.intern(fileName); } public RootDependencies(Element element) { this(); myClassName = InternUtil.intern(element.getAttribute(CLASS_NAME).getValue()); Attribute attr = element.getAttribute(FILE_NAME); if (attr != null) { myFileName = InternUtil.intern(attr.getValue()); } for (Element e : ((List<Element>) element.getChildren(DEPEND_CLASS))) { if (e == null) { continue; } if (e.getAttribute(DEPEND_CLASS_NAME) != null) { String d = e.getAttribute(DEPEND_CLASS_NAME).getValue(); myDependNodes.add(d); } if (e.getAttribute(EXTENDS_CLASS_NAME) != null) { String ext = e.getAttribute(EXTENDS_CLASS_NAME).getValue(); myExtendsNodes.add(ext); } } } public void saveTo(Element element) { element.setAttribute(CLASS_NAME, myClassName); if (myFileName != null) { element.setAttribute(FILE_NAME, myFileName); } for (String dependNodeName : this.myDependNodes) { Element e = new Element(DEPEND_CLASS); e.setAttribute(DEPEND_CLASS_NAME, dependNodeName); element.addContent(e); } for (String dependNodeName : this.myExtendsNodes) { Element e = new Element(DEPEND_CLASS); e.setAttribute(EXTENDS_CLASS_NAME, dependNodeName); element.addContent(e); } } public Set<String> getDependencies() { return new HashSet<String>((Collection) myDependNodes); } public Set<String> getExtends() { return new HashSet<String>((Collection) myExtendsNodes); } /*package*/ void addDependNode(String s) { myDependNodes.add(s); } /*package*/ void addExtendsNode(String s) { myExtendsNodes.add(s); } /*package*/ void setFileName(String fileName) { this.myFileName = InternUtil.intern(fileName); } /*package*/ void setClassName(String className) { this.myClassName = InternUtil.intern(className); } public String getClassName() { return myClassName; } public String getFileName() { return (myFileName == null ? myClassName : myFileName); } @Override public int compareTo(RootDependencies p0) { if (p0 == null || this.myClassName == null || p0.myClassName == null) { return 0; } return this.myClassName.compareTo(p0.myClassName); } public interface Source { RootDependencies getDependencies(); } }