1 package org.kite9.diagram.builders;
2
3 import java.util.ArrayList;
4 import java.util.List;
5 import java.util.Set;
6
7 import org.kite9.framework.model.MemberHandle;
8 import org.kite9.framework.model.ProjectModel;
9
10 public class PackageBuilder extends AbstractAnnotatedElementBuilder<Package> {
11
12 public PackageBuilder(List<Tie<? extends Object, Package>> packages, ProjectModel model) {
13 super(packages, model);
14 }
15
16 public PackageBuilder show(Format f ) {
17 return (PackageBuilder) super.show(f);
18 }
19
20
21 public ClassBuilder withMembers(Class<?>... classes) {
22 List<Tie<? extends Object, Class<?>>> ties = new ArrayList<Tie<? extends Object,Class<?>>>(classes.length);
23 for (Class<?> c : classes) {
24 Package p = c.getPackage();
25 if (allElements.contains(p)) {
26 ties.add(new Tie<Object, Class<?>>(p, HasRelationship.CLASS, c));
27 }
28 }
29 ClassBuilder ch = new ClassBuilder(ties, model);
30 return ch;
31 }
32
33 public ClassBuilder withMemberClasses(Filter<? super Class<?>> f) {
34 List<Tie<? extends Object, Class<?>>> ties = new ArrayList<Tie<? extends Object,Class<?>>>(10);
35 final ClassLoader cl = Thread.currentThread().getContextClassLoader();
36
37 for (Package p : allElements) {
38 Set<String> classNames = model.getClassesInPackage(MemberHandle.convertPackageName(p));
39 for (Class<?> c : MemberHandle.hydrateClasses(classNames, cl)) {
40 if ((f==null) || (f.accept(c))) {
41 ties.add(new Tie<Object, Class<?>>(p, HasRelationship.CLASS, c));
42 }
43 }
44 }
45 ClassBuilder ch = new ClassBuilder(ties, model);
46 return ch;
47 }
48
49 @Override
50 public PackageBuilder reduce(Filter<? super Package> f) {
51 return new PackageBuilder(reduceInner(f), model);
52 }
53 }