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();
}
}