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 * Relates the responsible group or individual to one
25 * or more resources.
26 */
27 public class ByOrganisation implements Comparable<ByOrganisation>, ContentElement {
28
29 /** The responsible group or individual. */
30 private final Organisation organisation;
31 /** The resources for which the group or individual is responsible. */
32 private final Collection<Resource> resources;
33
34 /**
35 * Links an individual or group
36 * to the resources for which they have responsibility.
37 * @param resources
38 * not null
39 * @param organisation
40 * not null
41 */
42 public ByOrganisation(final Organisation organisation,
43 final Collection<Resource> resources) {
44 super();
45 this.organisation = organisation;
46 this.resources = resources;
47 }
48
49 /**
50 * Gets the name of the individual or group responsible.
51 * @return not null
52 */
53 public String getName() {
54 return this.organisation.getName();
55 }
56
57 /**
58 * Gets the primary URL for the individual or group responsible.
59 * @return not null
60 */
61 public String getURL() {
62 return this.organisation.getURL();
63 }
64
65 /**
66 * Gets the primary identifier for the individual or group responsible.
67 * @return not null
68 */
69 public String getId() {
70 return this.organisation.getId();
71 }
72
73 /**
74 * Gets the resource for which the linked individual or group is responsible.
75 * @return not null, possibly empty
76 */
77 public Collection<Resource> getResources() {
78 return this.resources;
79 }
80
81 /**
82 * Gets the organisation representing the individual or group responible
83 * for the linked resources.
84 * @return the organisation , not ull
85 */
86 public Organisation getOrganisation() {
87 return this.organisation;
88 }
89
90 /**
91 * Based on organisation.
92 * @see java.lang.Object#hashCode()
93 * @return hash based on organisation
94 */
95 @Override
96 public final int hashCode() {
97 final int prime = 31;
98 int result = 1;
99 result = prime
100 * result
101 + ((this.organisation == null) ? 0 : this.organisation
102 .hashCode());
103 return result;
104 }
105
106 /**
107 * Equal iff organisations are equal.
108 * @see java.lang.Object#equals(java.lang.Object)
109 * @param obj possibly null
110 * @return true when organisations are equal,
111 * false otherwise
112 */
113 @Override
114 public boolean equals(final Object obj) {
115 if (this == obj) {
116 return true;
117 }
118 if (obj == null) {
119 return false;
120 }
121 if (getClass() != obj.getClass()) {
122 return false;
123 }
124 final ByOrganisation other = (ByOrganisation) obj;
125 if (this.organisation == null) {
126 return other.organisation == null;
127 } else return this.organisation.equals(other.organisation);
128 }
129
130 /**
131 * Delegates to organisation.
132 * @see java.lang.Comparable#compareTo(java.lang.Object)
133 * @param other possibly null
134 * @return {@link Organisation#compareTo(Organisation)}
135 */
136 public int compareTo(final ByOrganisation other) {
137 return this.organisation.compareTo(other.getOrganisation());
138 }
139
140 /**
141 * Accepts a visitor.
142 * @param visitor possibly null
143 */
144 public void accept(final Visitor visitor) {
145 if (visitor != null && visitor.traverseByOrganisation()) {
146 visitor.visit(this);
147 for (final Resource resource : getResources()) {
148 resource.accept(visitor);
149 }
150 }
151 }
152
153 /**
154 * Describes object suitably for logging.
155 * @return something suitable for logging
156 */
157 @Override
158 public String toString() {
159 return "ByOrganisation [organisation=" + this.organisation
160 + ", resources=" + this.resources + "]";
161 }
162 }