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 }