/** * Return ClassDescriptors for simple objects only - simple objects are light weight objects * without an id and with no inheritance. They can't be interfaces and inherit directly from * java.lang.Object. * @return a set of ClassDescriptors for all simple objects in the model */ protected Set<ClassDescriptor> getSimpleObjectClassDescriptors() { Set<ClassDescriptor> simpleObjectClds = new HashSet<ClassDescriptor>(); for (ClassDescriptor cld : getClassDescriptors()) { Set<String> superNames = cld.getSuperclassNames(); if (superNames.size() == 1 && superNames.contains("java.lang.Object")) { simpleObjectClds.add(cld); } } return simpleObjectClds; }
/** * Return ClassDescriptors for simple objects only - simple objects are light weight objects * without an id and with no inheritance. They can't be interfaces and inherit directly from * java.lang.Object. * @return a set of ClassDescriptors for all simple objects in the model */ protected Set<ClassDescriptor> getSimpleObjectClassDescriptors() { Set<ClassDescriptor> simpleObjectClds = new HashSet<ClassDescriptor>(); for (ClassDescriptor cld : getClassDescriptors()) { Set<String> superNames = cld.getSuperclassNames(); if (superNames.size() == 1 && superNames.contains("java.lang.Object")) { simpleObjectClds.add(cld); } } return simpleObjectClds; }
private static void findAllSuperclasses(ClassDescriptor cd, Map<String, ClassDescriptor> classes, Set<String> names) throws ModelMergerException { Set<String> supers = cd.getSuperclassNames(); for (String superClassName : supers) { if (!"java.lang.Object".equals(superClassName)) { names.add(superClassName); ClassDescriptor cld = classes.get(superClassName); if (cld == null) { throw new ModelMergerException("cannot find superclass \"" + superClassName + "\" of " + cd + " in the model"); } findAllSuperclasses(cld, classes, names); } } }
private static void findAllSuperclasses(ClassDescriptor cd, Map<String, ClassDescriptor> classes, Set<String> names) throws ModelMergerException { Set<String> supers = cd.getSuperclassNames(); for (String superClassName : supers) { if (!"java.lang.Object".equals(superClassName)) { names.add(superClassName); ClassDescriptor cld = classes.get(superClassName); if (cld == null) { throw new ModelMergerException("cannot find superclass \"" + superClassName + "\" of " + cd + " in the model"); } findAllSuperclasses(cld, classes, names); } } }
/** * Get the full inheritance list for this class. This set includes not just * this classes' immediate ancestors, but all their ancestors as well, as well as this class' * name. * @return A set of class names. */ public Set<String> getAllSuperclassNames() { Set<String> classNames = new LinkedHashSet<String>(); classNames.add(this.getName()); classNames.addAll(this.getSuperclassNames()); for (ClassDescriptor superCd: this.getSuperDescriptors()) { classNames.addAll(superCd.getAllSuperclassNames()); } return classNames; }
/** * Get the full inheritance list for this class. This set includes not just * this classes' immediate ancestors, but all their ancestors as well, as well as this class' * name. * @return A set of class names. */ public Set<String> getAllSuperclassNames() { Set<String> classNames = new LinkedHashSet<String>(); classNames.add(this.getName()); classNames.addAll(this.getSuperclassNames()); for (ClassDescriptor superCd: this.getSuperDescriptors()) { classNames.addAll(superCd.getAllSuperclassNames()); } return classNames; }
public String toString() { StringBuffer sb = new StringBuffer(); Set<String> superClassNames = getSuperclassNames(); sb.append("<class name=\"" + className.substring(className.lastIndexOf(".") + 1) + "\""); if (superClassNames.size() > 0) {
public String toString() { StringBuffer sb = new StringBuffer(); Set<String> superClassNames = getSuperclassNames(); sb.append("<class name=\"" + className.substring(className.lastIndexOf(".") + 1) + "\""); if (superClassNames.size() > 0) {
Set<String> superClassNames = getSuperclassNames(); String name = className.substring(className.lastIndexOf(".") + 1); sb.append("{\"name\":\"")
Set<String> superClassNames = getSuperclassNames(); String name = className.substring(className.lastIndexOf(".") + 1); sb.append("{\"name\":\"")
/** * Return a list of the super class names for the given class name. * * @param model the Model * @param className the className * @param superClassNames return set of super class names * @throws MetaDataException if className isn't in the model */ static void findSuperClassNames(Model model, String className, Set<String> superClassNames) throws MetaDataException { ClassDescriptor cd = model.getClassDescriptorByName(className); if ((cd == null) && (!"java.lang.Object".equals(className))) { throw new MetaDataException("Model construction failed - class: " + className + " is not in the model but is used as a super class"); } if (cd != null) { for (String superName: cd.getSuperclassNames()) { if (superClassNames.contains(superName)) { continue; } else { superClassNames.add(superName); findSuperClassNames(model, superName, superClassNames); } } } }
/** * Return a list of the super class names for the given class name. * * @param model the Model * @param className the className * @param superClassNames return set of super class names * @throws MetaDataException if className isn't in the model */ static void findSuperClassNames(Model model, String className, Set<String> superClassNames) throws MetaDataException { ClassDescriptor cd = model.getClassDescriptorByName(className); if ((cd == null) && (!"java.lang.Object".equals(className))) { throw new MetaDataException("Model construction failed - class: " + className + " is not in the model but is used as a super class"); } if (cd != null) { for (String superName: cd.getSuperclassNames()) { if (superClassNames.contains(superName)) { continue; } else { superClassNames.add(superName); findSuperClassNames(model, superName, superClassNames); } } } }
public void testSimpleObjectClassDescriptors() throws Exception { ClassDescriptor simpleObjectCld = makeClass("package.name.Simple", "java.lang.Object"); new Model("test", "package.name", Collections.singleton(simpleObjectCld)); Set<String> expected = Collections.singleton("java.lang.Object"); assertEquals(expected, simpleObjectCld.getSuperclassNames()); }
public void testRemoveRedundantInterfaces() throws MetaDataException { String packageName = cdMaker.getPackageName(); ClassDescriptor base = cdMaker.makeInterface("BaseClass"); ClassDescriptor sub = cdMaker.makeInterface("SubClass", "BaseClass", "MidClass"); ClassDescriptor mid = cdMaker.makeInterface("MidClass", "BaseClass"); Model model = new Model("model", packageName, Arrays.asList(base, sub, mid)); ClassDescriptor subCD = model.getClassDescriptorByName("SubClass"); assertEquals(1, subCD.getSuperclassNames().size()); assertEquals(packageName + ".MidClass", subCD.getSuperclassNames().iterator().next()); }
public void testRemoveRedundantClasses() throws MetaDataException { String packageName = cdMaker.getPackageName(); ClassDescriptor base = cdMaker.makeClass("BaseClass"); ClassDescriptor sub = cdMaker.makeClass("SubClass", "BaseClass", "MidClass"); ClassDescriptor mid = cdMaker.makeClass("MidClass", "BaseClass"); Model model = new Model("model", packageName, Arrays.asList(base, sub, mid)); ClassDescriptor subCD = model.getClassDescriptorByName("SubClass"); assertEquals(1, subCD.getSuperclassNames().size()); assertEquals(packageName + ".MidClass", subCD.getSuperclassNames().iterator().next()); }
public void testRemoveRedundantMixed() throws MetaDataException { String packageName = cdMaker.getPackageName(); ClassDescriptor base = cdMaker.makeInterface("BaseClass"); ClassDescriptor sub = cdMaker.makeClass("SubClass", "BaseClass", "MidClass"); ClassDescriptor mid = cdMaker.makeInterface("MidClass", "BaseClass"); Model model = new Model("model", packageName, Arrays.asList(base, sub, mid)); ClassDescriptor subCD = model.getClassDescriptorByName("SubClass"); assertEquals(1, subCD.getSuperclassNames().size()); assertEquals(packageName + ".MidClass", subCD.getSuperclassNames().iterator().next()); }
public void testMergeClassAddingInheritance() throws Exception { String modelStr = "<model name=\"testmodel\" package=\"\">" + "<class name=\"A\" is-interface=\"false\"></class>" + "<class name=\"B\" is-interface=\"false\"></class>" + "</model>"; Model model = parser.process(new StringReader(modelStr)); String addition = "<class name=\"A\" extends=\"B\" is-interface=\"false\"></class>"; ClassDescriptor cld1 = model.getClassDescriptorByName("A"); ClassDescriptor cld2 = (ClassDescriptor) parser .generateClassDescriptors(new StringReader(addition), model.getPackageName()) .iterator().next(); ClassDescriptor res = ModelMerger.mergeClass(cld1, cld2, model, Collections.singleton(cld2)); Set supers = new HashSet(); supers.add("B"); assertEquals(supers, res.getSuperclassNames()); }
public void testMergeClassReplacingInheritance() throws Exception { String modelStr = "<model name=\"testmodel\" package=\"package.name\">" + "<class name=\"A\" extends=\"B\" is-interface=\"false\"></class>" + "<class name=\"B\" is-interface=\"false\"></class>" + "<class name=\"C\" is-interface=\"false\"></class>" + "</model>"; Model model = parser.process(new StringReader(modelStr)); String addition = "<class name=\"A\" extends=\"C\" is-interface=\"false\"></class>"; ClassDescriptor cld1 = model.getClassDescriptorByName("A"); ClassDescriptor cld2 = parseClass(addition, ""); ClassDescriptor res = ModelMerger.mergeClass(cld1, cld2, model, Collections.singleton(cld2)); Set supers = new HashSet(); supers.add("C"); assertEquals(supers, res.getSuperclassNames()); }
/** * Construct a ClassDescriptor that takes on all the properties of <code>cld</code> * without attaching to a particular Model. * * @param cld the ClassDescriptor to clone * @return cloned ClassDescriptor */ protected static ClassDescriptor cloneClassDescriptor(ClassDescriptor cld) { // supers can't be an empty string String supers = StringUtil.join(cld.getSuperclassNames(), " "); if (supers != null && "".equals(supers)) { supers = null; } return new ClassDescriptor(cld.getName(), supers, cld.isInterface(), cloneAttributeDescriptors(cld.getAttributeDescriptors()), cloneReferenceDescriptors(cld.getReferenceDescriptors()), cloneCollectionDescriptors(cld.getCollectionDescriptors())); }
/** * Construct a ClassDescriptor that takes on all the properties of <code>cld</code> * without attaching to a particular Model. * * @param cld the ClassDescriptor to clone * @return cloned ClassDescriptor */ protected static ClassDescriptor cloneClassDescriptor(ClassDescriptor cld) { // supers can't be an empty string String supers = StringUtil.join(cld.getSuperclassNames(), " "); if (supers != null && "".equals(supers)) { supers = null; } return new ClassDescriptor(cld.getName(), supers, cld.isInterface(), cloneAttributeDescriptors(cld.getAttributeDescriptors()), cloneReferenceDescriptors(cld.getReferenceDescriptors()), cloneCollectionDescriptors(cld.getCollectionDescriptors())); }