View Javadoc
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 }