blob: 339c309338646193f19edf80bbc2d5fc4c7db24c [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.creadur.whisker.model;
import java.util.Collection;
import java.util.Collections;
import java.util.Map;
/**
* Groups resources sharing a license and claimed copyright.
*/
public class WithLicense implements Comparable<WithLicense>, ContentElement {
/** License shared by contained resources, not null. */
private final License license;
/** Resources grouped by responsible organisation. */
private final Collection<ByOrganisation> organisations;
/** Copyright claim shared by contained resources. */
private final String copyrightNotice;
/** Parameters to specialise the license family template. */
private final Map<String, String> parameters;
/**
* Groups resources sharing a license and copyright claim.
* @param license License shared by contained resources,
* not null
* @param copyrightNotice copyright claim
* shared by contained resources, possibly null
* @param parameters parameters to specialise
* the license family template, not null
* @param organisations resources grouped by
* responsible organisation, not null
*/
public WithLicense(final License license, final String copyrightNotice,
final Map<String, String> parameters,
final Collection<ByOrganisation> organisations) {
super();
this.license = license;
this.copyrightNotice = copyrightNotice;
this.parameters = Collections.unmodifiableMap(parameters);
this.organisations = Collections.unmodifiableCollection(organisations);
}
/**
* Gets the copyright claim shared
* by the resources contained.
* @return possibly null
*/
public String getCopyrightNotice() {
return this.copyrightNotice;
}
/**
* Indicates whether a copyright notice
* accumpianies this license.
* @return true when {@link #getCopyrightNotice()} is not null,
* false when {@link #getCopyrightNotice()} is null
*/
public boolean hasCopyrightNotice() {
return getCopyrightNotice() != null;
}
/**
* Gets the presentation name for the license
* shared by the resources contained.
* @return not null
*/
public String getName() {
return this.license.getName();
}
/**
* Gets a locator for the license
* shared by the resources contained.
* @return not null
*/
public String getURL() {
return this.license.getURL();
}
/**
* Gets license meta-data shared by the resources
* contained.
* @return not null
*/
public License getLicense() {
return this.license;
}
/**
* Gets the license legalise shared by the resources
* contained. Computed by applying the parameters
* to the license template.
* @return not null
* @throws LicenseTemplateException when the license
* text cannot be generated from the template
*/
public String getText() throws LicenseTemplateException {
return this.license.getText(this.parameters);
}
/**
* Gets resources grouped by responsible organisation.
* @return not null
*/
public Collection<ByOrganisation> getOrganisations() {
return this.organisations;
}
/**
* Gets the parameters substituted into the license
* template when generating the license legalise.
* @return not null
*/
public Map<String, String> getParameters() {
return this.parameters;
}
/**
* Based on license.
* @see java.lang.Comparable#compareTo(java.lang.Object)
* @param other possibly null
* @return license comparison
*/
public int compareTo(final WithLicense other) {
return this.license.compareTo(other.getLicense());
}
/**
* Accepts a visit.
* @param visitor possibly null
*/
public void accept(final Visitor visitor) {
if (visitor != null && visitor.traverseWithLicense()) {
visitor.visit(this);
for (final ByOrganisation organisation : getOrganisations()) {
organisation.accept(visitor);
}
}
}
/**
* Should information about the source distribution of
* contained resources be included?
* @return true when license asks that information
* about the source distribution is included,
* false otherwise
*/
public boolean isSourceRequired() {
return this.license.isSourceRequired();
}
}