1 /**
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 */
19 package org.apache.creadur.whisker.model;
20
21 import java.util.Collection;
22
23 /**
24 * Links resources expected within a directory in the distribution
25 * to licensing meta-data.
26 */
27 public class WithinDirectory implements Comparable<WithinDirectory>, ContentElement {
28
29 /** Resources grouped by license applicable. */
30 private final Collection<WithLicense> licenses;
31 /** Public domain resources, grouped by responsible organisation. */
32 private final Collection<ByOrganisation> publicDomain;
33 /** The directory name. */
34 private final String name;
35
36 /**
37 * Constructs a description of a directory
38 * @param name directory name, not null
39 * @param licenses resources contained,
40 * grouped by license applicable, not null
41 * @param publicDomain resources in the public domain,
42 * grouped by responsible organisation
43 */
44 public WithinDirectory(final String name,
45 final Collection<WithLicense> licenses,
46 final Collection<ByOrganisation> publicDomain) {
47 super();
48 this.name = name;
49 this.licenses = licenses;
50 this.publicDomain = publicDomain;
51 }
52
53 /**
54 * Gets resources in the public domain,
55 * grouped by the organisation responsible.
56 * @return not null
57 */
58 public Collection<ByOrganisation> getPublicDomain() {
59 return this.publicDomain;
60 }
61
62 /**
63 * Gets the name of the directory described.
64 * @return not null
65 */
66 public String getName() {
67 return this.name;
68 }
69
70 /**
71 * Gets resources contained,
72 * grouped by license applicable.
73 * @return not null
74 */
75 public Collection<WithLicense> getLicenses() {
76 return this.licenses;
77 }
78
79 /**
80 * Based on name.
81 * @see java.lang.Object#hashCode()
82 * @return hash code
83 */
84 @Override
85 public int hashCode() {
86 return getName().hashCode();
87 }
88
89 /**
90 * Based on directory name.
91 * @see java.lang.Object#equals(java.lang.Object)
92 * @param obj possibly null
93 * @return true when directory names are equal,
94 * false otherwise
95 */
96 @Override
97 public boolean equals(final Object obj) {
98 if (this == obj) {
99 return true;
100 }
101 if (obj == null) {
102 return false;
103 }
104 if (getClass() != obj.getClass()) {
105 return false;
106 }
107 final WithinDirectory other = (WithinDirectory) obj;
108 return getName().equals(other.getName());
109 }
110
111 /**
112 * Based on name.
113 * @see java.lang.Comparable#compareTo(java.lang.Object)
114 * @return based on name
115 */
116 public int compareTo(final WithinDirectory other) {
117 return getName().compareTo(other.getName());
118 }
119
120 /**
121 * Does the directory described have the given name?
122 * @param directoryName not null
123 * @return true when the name match that of this directory,
124 * false otherwise
125 */
126 public boolean isNamed(final String directoryName) {
127 return getName().equals(directoryName);
128 }
129
130 /**
131 * Accepts a visitor.
132 * @param visitor possibly null
133 */
134 public void accept(final Visitor visitor) {
135 if (visitor != null) {
136 visitor.visit(this);
137 if (visitor.traversePublicDomain()) {
138 for (final ByOrganisation organisation : getPublicDomain()) {
139 organisation.accept(visitor);
140 }
141 }
142
143 for (final ContentElement license : getLicenses()) {
144 license.accept(visitor);
145 }
146 }
147 }
148 }