package rtt.annotation.editor.model; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import rtt.annotations.Node; import rtt.annotations.Node.Value; /** * A class model contains all {@link ClassElement}s * (within {@link PackageElement}s). * * @author Christian Oelsner <C.Oelsner@web.de> * */ @Node public class ClassModel extends ModelElement { /** * Represents a java package. * * @author Christian Oelsner <C.Oelsner@web.de> * */ @Node public static class PackageElement extends ModelElement { public PackageElement(ClassModel parent, String name) { super(parent); super.setName(name); } @Value private List<ClassElement> getElements() { return ((ClassModel) getParent()).getClasses(getName()); } } private Map<PackageElement, List<ClassElement>> classElements; protected ClassModel() { super(null); classElements = new HashMap<PackageElement, List<ClassElement>>(); } /** * Adds a new {@link ClassElement}. * @param newElement the new {@link ClassElement} */ public void addClassElement(ClassElement newElement) { if (newElement == null) { throw new IllegalArgumentException( "The new class element must not be null."); } PackageElement packageKey = createPackageKey(newElement.getPackageName()); if (!classElements.containsKey(packageKey)) { classElements.put(packageKey, new ArrayList<ClassElement>()); } List<ClassElement> elements = classElements.get(packageKey); if (!elements.contains(newElement)) { elements.add(newElement); packageKey.setParent(this); } } public PackageElement createPackageKey(String packageName) { return new PackageElement(this, packageName); } public Map<PackageElement, List<ClassElement>> getClassElements() { return classElements; } public List<ClassElement> getClasses(String packageName) { PackageElement packageKey = createPackageKey(packageName); if (classElements.containsKey(packageKey)) { return classElements.get(packageKey); } return null; } @Value public Set<PackageElement> getPackages() { return classElements.keySet(); } }