/** * Return the classes in the model in level order from shallowest to deepest, the order of nodes * at any given level is undefined. The list does not include InterMineObject. * @return ClassDescriptors from the model in depth order */ public synchronized List<ClassDescriptor> getTopDownLevelTraversal() { if (topDownOrderClasses == null) { topDownOrderClasses = new ArrayList<ClassDescriptor>(); // start from InterMineObject which is the root LinkedList<ClassDescriptor> queue = new LinkedList<ClassDescriptor>(); // Simple objects don't have any inheritance so can go at the front queue.addAll(getSimpleObjectClassDescriptors()); queue.add(rootCld); while (!queue.isEmpty()) { ClassDescriptor node = queue.remove(); if (!topDownOrderClasses.contains(node)) { topDownOrderClasses.add(node); } // add direct subclasses to the queue if (node.getSubDescriptors() != null) { queue.addAll(node.getSubDescriptors()); } } } return topDownOrderClasses; }
/** * Return the classes in the model in level order from shallowest to deepest, the order of nodes * at any given level is undefined. The list does not include InterMineObject. * @return ClassDescriptors from the model in depth order */ public synchronized List<ClassDescriptor> getTopDownLevelTraversal() { if (topDownOrderClasses == null) { topDownOrderClasses = new ArrayList<ClassDescriptor>(); // start from InterMineObject which is the root LinkedList<ClassDescriptor> queue = new LinkedList<ClassDescriptor>(); // Simple objects don't have any inheritance so can go at the front queue.addAll(getSimpleObjectClassDescriptors()); queue.add(rootCld); while (!queue.isEmpty()) { ClassDescriptor node = queue.remove(); if (!topDownOrderClasses.contains(node)) { topDownOrderClasses.add(node); } // add direct subclasses to the queue if (node.getSubDescriptors() != null) { queue.addAll(node.getSubDescriptors()); } } } return topDownOrderClasses; }
private static void addToIgnoredFields( Map<Class<? extends InterMineObject>, Set<String>> ignoredFieldMap, ClassDescriptor cld, String fieldName) { if (cld == null) { LOG.error("ClassDesriptor was null when attempting to add an ignored field."); } else if (InterMineObject.class.isAssignableFrom(cld.getType())) { Set<ClassDescriptor> clds = new HashSet<ClassDescriptor>(); clds.add(cld); for (ClassDescriptor subCld : cld.getSubDescriptors()) { clds.add(subCld); } for (ClassDescriptor ignoreCld : clds) { Set<String> fields = ignoredFieldMap.get(ignoreCld.getType()); @SuppressWarnings("unchecked") Class<? extends InterMineObject> cls = (Class<? extends InterMineObject>) ignoreCld.getType(); if (fields == null) { fields = new HashSet<String>(); ignoredFieldMap.put(cls, fields); } fields.add(fieldName); } } else { LOG.error("cld " + cld + " is not IMO!"); } }
private static void addToIgnoredFields( Map<Class<? extends InterMineObject>, Set<String>> ignoredFieldMap, ClassDescriptor cld, String fieldName) { if (cld == null) { LOG.error("ClassDesriptor was null when attempting to add an ignored field."); } else if (InterMineObject.class.isAssignableFrom(cld.getType())) { Set<ClassDescriptor> clds = new HashSet<ClassDescriptor>(); clds.add(cld); for (ClassDescriptor subCld : cld.getSubDescriptors()) { clds.add(subCld); } for (ClassDescriptor ignoreCld : clds) { Set<String> fields = ignoredFieldMap.get(ignoreCld.getType()); @SuppressWarnings("unchecked") Class<? extends InterMineObject> cls = (Class<? extends InterMineObject>) ignoreCld.getType(); if (fields == null) { fields = new HashSet<String>(); ignoredFieldMap.put(cls, fields); } fields.add(fieldName); } } else { LOG.error("cld " + cld + " is not IMO!"); } }
/** * recurse into class descriptor and add all subclasses to ignoredClasses * @param ignoredClassMap * set of classes * @param cld * super class descriptor */ @SuppressWarnings("unchecked") private void addCldToIgnored(Set<Class<? extends InterMineObject>> ignoredClassMap, ClassDescriptor cld) { if (cld == null) { LOG.error("cld is null!"); } else if (InterMineObject.class.isAssignableFrom(cld.getType())) { ignoredClassMap.add((Class<? extends InterMineObject>) cld.getType()); for (ClassDescriptor subCld : cld.getSubDescriptors()) { addCldToIgnored(ignoredClassMap, subCld); } } else { LOG.error("cld " + cld + " is not IMO!"); } }
/** * recurse into class descriptor and add all subclasses to ignoredClasses * @param ignoredClassMap * set of classes * @param cld * super class descriptor */ @SuppressWarnings("unchecked") private void addCldToIgnored(Set<Class<? extends InterMineObject>> ignoredClassMap, ClassDescriptor cld) { if (cld == null) { LOG.error("cld is null!"); } else if (InterMineObject.class.isAssignableFrom(cld.getType())) { ignoredClassMap.add((Class<? extends InterMineObject>) cld.getType()); for (ClassDescriptor subCld : cld.getSubDescriptors()) { addCldToIgnored(ignoredClassMap, subCld); } } else { LOG.error("cld " + cld + " is not IMO!"); } }
public void testGetImplementorDescriptors() throws Exception { ClassDescriptor cld1 = makeInterface("package.name.Interface1"); ClassDescriptor cld2 = makeClass("package.name.Class2", "package.name.Interface1"); ClassDescriptor cld3 = makeClass("package.name.Class3", "package.name.Interface1"); ClassDescriptor cld4 = makeClass("package.name.Class4", "package.name.Class2"); new Model("test2", "package.name", Arrays.asList(cld1, cld2, cld3, cld4)); // getImplementorDescriptrors should just return direct implementations (cld2, cld3) Set<ClassDescriptor> impls = new HashSet<ClassDescriptor>(Arrays.asList(cld2, cld3)); assertEquals(impls, cld1.getSubDescriptors()); }
while (!todo.empty()) { ClassDescriptor subCld = todo.pop(); for (ClassDescriptor subSubCld : subCld.getSubDescriptors()) { if (!added.contains(subSubCld)) { todo.push(subSubCld);
while (!todo.empty()) { ClassDescriptor subCld = todo.pop(); for (ClassDescriptor subSubCld : subCld.getSubDescriptors()) { if (!added.contains(subSubCld)) { todo.push(subSubCld);
public void testInterfaceNotImplemented() throws MetaDataException { ClassDescriptor cld1 = makeInterface("package.name.Interface1"); Model model = new Model("model", "package.name", Collections.singleton(cld1)); assertTrue(model.getClassDescriptorByName(cld1.getName()).getSubDescriptors().size() == 0); }
public void testGetSubDescriptors() throws Exception { ClassDescriptor cld1 = makeClass("package.name.Class1"); ClassDescriptor cld2 = makeClass("package.name.Class2", "package.name.Class1"); ClassDescriptor cld3 = makeClass("package.name.Class3", "package.name.Class1"); ClassDescriptor cld4 = makeClass("package.name.Class4", "package.name.Class2"); new Model("test2", "package.name", Arrays.asList(cld1, cld2, cld3, cld4)); // getSubDescriptrors should just return direct subclasses (cld2, cld3) Set<ClassDescriptor> subs = new HashSet<ClassDescriptor>(Arrays.asList(cld2, cld3)); assertEquals(subs, cld1.getSubDescriptors()); }