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.Map;
22
23 /**
24 * Describes a group or individual with responsibility for
25 * upstream distributions.
26 */
27 public class Organisation implements Comparable<Organisation> {
28
29 /** Identifies this group or individual with responsibility. */
30 private final String id;
31 /** A name for this group or individual suitable for presentation. */
32 private final String name;
33 /** A locator for the home of this group or individual. */
34 private final String url;
35
36 /**
37 * Constructs an instance.
38 * @param id identifies this group or individual
39 * with responsibility for
40 * upstream distributions, not null
41 * @param name a name for this group or individual
42 * suitable for presentation, not null
43 * @param url a locator for the home of this group
44 * or individual, not null
45 */
46 public Organisation(final String id, final String name, final String url) {
47 super();
48 this.id = id;
49 this.name = name;
50 this.url = url;
51 }
52
53 /**
54 * Stores this organisation by id.
55 * @param organisationsById not null
56 * @return this organisation
57 */
58 public Organisation storeIn(
59 final Map<String, Organisation> organisationsById) {
60 organisationsById.put(this.id, this);
61 return this;
62 }
63
64 /**
65 * Gets a name for this group or individual
66 * suitable for presentation.
67 * @return not null
68 */
69 public String getName() {
70 return this.name;
71 }
72
73 /**
74 * Gets a locator for the home of this group
75 * or individual.
76 * @return not null
77 */
78 public String getURL() {
79 return this.url;
80 }
81
82 /**
83 * Gets an identifier for this group or individual
84 * with responsibility for
85 * upstream distributions.
86 * @return not null
87 */
88 public String getId() {
89 return this.id;
90 }
91
92 @Override
93 public int hashCode() {
94 final int prime = 31;
95 int result = 1;
96 result = prime * result + ((this.id == null) ? 0 : this.id.hashCode());
97 return result;
98 }
99
100 @Override
101 public boolean equals(final Object obj) {
102 if (this == obj) {
103 return true;
104 }
105 if (obj == null) {
106 return false;
107 }
108 if (getClass() != obj.getClass()) {
109 return false;
110 }
111 final Organisation other = (Organisation) obj;
112 if (this.id == null) {
113 return other.id == null;
114 } else return this.id.equals(other.id);
115 }
116
117 /**
118 * @see java.lang.Comparable#compareTo(java.lang.Object)
119 */
120 public int compareTo(final Organisation other) {
121 final int nameDifference = getName().compareTo(other.getName());
122 return nameDifference == 0 ? getId().compareTo(other.getId())
123 : nameDifference;
124 }
125
126 @Override
127 public String toString() {
128 return "Organisation [id=" + this.id + ", name=" + this.name + ", url="
129 + this.url + "]";
130 }
131 }