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.app.analysis;
20  
21  /**
22   * Describes a resource in a software distribution.
23   */
24  public class ResourceDescription implements Comparable<ResourceDescription> {
25      /** Containing directory. */
26      private final String directory;
27      /** Resource name. */
28      private final String resource;
29  
30      /**
31       * Constructs a description of the given resource.
32       * @param directoryName not null
33       * @param resourceName not null
34       */
35      public ResourceDescription(
36              final String directoryName, final String resourceName) {
37          super();
38          this.directory = directoryName;
39          this.resource = resourceName;
40      }
41  
42      /**
43       * Gets the name of the containing directory.
44       * @return the directoryName, not null
45       */
46      public final String getDirectory() {
47          return directory;
48      }
49  
50      /**
51       * Gets the resource name.
52       * @return the resourceName, not null
53       */
54      public final String getResource() {
55          return resource;
56      }
57  
58      /**
59       * Hash code compatible with equals.
60       * @return a suitable hash code
61       * @see java.lang.Object#hashCode()
62       */
63      @Override
64      public int hashCode() {
65          final int prime = 31;
66          int result = 1;
67          result = prime * result
68                  + ((directory == null) ? 0 : directory.hashCode());
69          result = prime * result
70                  + ((resource == null) ? 0 : resource.hashCode());
71          return result;
72      }
73  
74      /**
75       * Equal means identical name and directory.
76       * @param obj object to be compared against
77       * @return true when equal
78       * @see java.lang.Object#equals(java.lang.Object)
79       */
80      @Override
81      public boolean equals(final Object obj) {
82          if (this == obj) {
83              return true;
84          }
85          if (obj == null) {
86              return false;
87          }
88          if (getClass() != obj.getClass()) {
89              return false;
90          }
91          final ResourceDescription other = (ResourceDescription) obj;
92          if (directory == null) {
93              if (other.directory != null) {
94                  return false;
95              }
96          } else if (!directory.equals(other.directory)) {
97              return false;
98          }
99          if (resource == null) {
100             return other.resource == null;
101         } else return resource.equals(other.resource);
102     }
103 
104     /**
105      * Suitable for logging.
106      * @return not null
107      * @see java.lang.Object#toString()
108      */
109     @Override
110     public String toString() {
111         return "ResourceMissingLicense [directoryName=" + directory
112                 + ", resourceName=" + resource + "]";
113     }
114 
115     /**
116      * Natural comparison is directory name, then resource name.
117      * @param other possibly null
118      * @return numeric comparison
119      * @see java.lang.Comparable#compareTo(java.lang.Object)
120      */
121     public int compareTo(final ResourceDescription other) {
122         final int result;
123         final int compareOnDirectoryName = this.getDirectory().compareTo(other.getDirectory());
124         if (compareOnDirectoryName == 0) {
125             result = this.getResource().compareTo(other.getResource());
126         } else {
127             result = compareOnDirectoryName;
128         }
129         return result;
130     }
131 
132 
133 }