blob: 9dcd95c300d344b2bb1fb9fd8e254e9c303de378 [file] [log] [blame]
Thomas Vachuska6b331262015-04-27 11:09:07 -07001package org.onlab.jdvue;
2
3import java.util.Collections;
4import java.util.HashSet;
5import java.util.Set;
6
7import static com.google.common.base.Objects.toStringHelper;
8
9/**
10 * Simple abstraction of a Java package for the purpose of tracking
11 * dependencies and requirements.
12 *
13 * @author Thomas Vachuska
14 */
15public class JavaPackage extends JavaEntity {
16
17 private final Set<JavaSource> sources = new HashSet<>();
18 private Set<JavaPackage> dependencies;
19
20 /**
21 * Creates a new Java package.
22 *
23 * @param name java package file name
24 */
25 JavaPackage(String name) {
26 super(name);
27 }
28
29 /**
30 * Returns the set of sources contained in this Java package.
31 *
32 * @return set of Java sources
33 */
34 public Set<JavaSource> getSources() {
35 return Collections.unmodifiableSet(sources);
36 }
37
38 /**
39 * Adds the specified Java source to the package. Only possible if the
40 * Java package of the source is the same as this Java package.
41 *
42 * @param source Java source to be added
43 */
44 void addSource(JavaSource source) {
45 if (source.getPackage().equals(this)) {
46 sources.add(source);
47 }
48 }
49
50 /**
51 * Returns the set of packages directly required by this package.
52 *
53 * @return set of Java package dependencies
54 */
55 Set<JavaPackage> getDependencies() {
56 return dependencies;
57 }
58
59 /**
60 * Sets the set of resolved Java packages on which this package dependens.
61 *
62 * @param dependencies set of resolved Java packages
63 */
64 void setDependencies(Set<JavaPackage> dependencies) {
65 if (this.dependencies == null) {
66 this.dependencies = Collections.unmodifiableSet(new HashSet<>(dependencies));
67 }
68 }
69
70 @Override
71 public String toString() {
72 return toStringHelper(this)
73 .add("name", name())
74 .add("sources", sources.size())
75 .add("dependencies", (dependencies != null ? dependencies.size() : 0))
76 .toString();
77 }
78
79}