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 import java.util.Collections;
23 import java.util.Map;
24
25 /**
26 * Groups resources sharing a license and claimed copyright.
27 */
28 public class WithLicense implements Comparable<WithLicense>, ContentElement {
29
30 /** License shared by contained resources, not null. */
31 private final License license;
32 /** Resources grouped by responsible organisation. */
33 private final Collection<ByOrganisation> organisations;
34 /** Copyright claim shared by contained resources. */
35 private final String copyrightNotice;
36 /** Parameters to specialise the license family template. */
37 private final Map<String, String> parameters;
38
39 /**
40 * Groups resources sharing a license and copyright claim.
41 * @param license License shared by contained resources,
42 * not null
43 * @param copyrightNotice copyright claim
44 * shared by contained resources, possibly null
45 * @param parameters parameters to specialise
46 * the license family template, not null
47 * @param organisations resources grouped by
48 * responsible organisation, not null
49 */
50 public WithLicense(final License license, final String copyrightNotice,
51 final Map<String, String> parameters,
52 final Collection<ByOrganisation> organisations) {
53 super();
54 this.license = license;
55 this.copyrightNotice = copyrightNotice;
56 this.parameters = Collections.unmodifiableMap(parameters);
57 this.organisations = Collections.unmodifiableCollection(organisations);
58 }
59
60 /**
61 * Gets the copyright claim shared
62 * by the resources contained.
63 * @return possibly null
64 */
65 public String getCopyrightNotice() {
66 return this.copyrightNotice;
67 }
68
69
70 /**
71 * Indicates whether a copyright notice
72 * accumpianies this license.
73 * @return true when {@link #getCopyrightNotice()} is not null,
74 * false when {@link #getCopyrightNotice()} is null
75 */
76 public boolean hasCopyrightNotice() {
77 return getCopyrightNotice() != null;
78 }
79
80 /**
81 * Gets the presentation name for the license
82 * shared by the resources contained.
83 * @return not null
84 */
85 public String getName() {
86 return this.license.getName();
87 }
88
89 /**
90 * Gets a locator for the license
91 * shared by the resources contained.
92 * @return not null
93 */
94 public String getURL() {
95 return this.license.getURL();
96 }
97
98 /**
99 * Gets license meta-data shared by the resources
100 * contained.
101 * @return not null
102 */
103 public License getLicense() {
104 return this.license;
105 }
106
107 /**
108 * Gets the license legalise shared by the resources
109 * contained. Computed by applying the parameters
110 * to the license template.
111 * @return not null
112 * @throws LicenseTemplateException when the license
113 * text cannot be generated from the template
114 */
115 public String getText() throws LicenseTemplateException {
116 return this.license.getText(this.parameters);
117 }
118
119 /**
120 * Gets resources grouped by responsible organisation.
121 * @return not null
122 */
123 public Collection<ByOrganisation> getOrganisations() {
124 return this.organisations;
125 }
126
127 /**
128 * Gets the parameters substituted into the license
129 * template when generating the license legalise.
130 * @return not null
131 */
132 public Map<String, String> getParameters() {
133 return this.parameters;
134 }
135
136 /**
137 * Based on license.
138 * @see java.lang.Comparable#compareTo(java.lang.Object)
139 * @param other possibly null
140 * @return license comparison
141 */
142 public int compareTo(final WithLicense other) {
143 return this.license.compareTo(other.getLicense());
144 }
145
146 /**
147 * Accepts a visit.
148 * @param visitor possibly null
149 */
150 public void accept(final Visitor visitor) {
151 if (visitor != null && visitor.traverseWithLicense()) {
152 visitor.visit(this);
153 for (final ByOrganisation organisation : getOrganisations()) {
154 organisation.accept(visitor);
155 }
156 }
157 }
158
159 /**
160 * Should information about the source distribution of
161 * contained resources be included?
162 * @return true when license asks that information
163 * about the source distribution is included,
164 * false otherwise
165 */
166 public boolean isSourceRequired() {
167 return this.license.isSourceRequired();
168 }
169 }