blob: d2bf87c5015bb1d846270946702a999f73c927e9 [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.rat.api;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
/**
* Data about the subject.
*/
public class MetaData {
public static final String RAT_BASE_URL = "http://org/apache/rat/meta-data";
// Document Categories
public static final String RAT_URL_DOCUMENT_CATEGORY = RAT_BASE_URL + "#FileCategory";
public static final String RAT_DOCUMENT_CATEGORY_VALUE_GENERATED = "GEN ";
public static final String RAT_DOCUMENT_CATEGORY_VALUE_UNKNOWN = "?????";
public static final String RAT_DOCUMENT_CATEGORY_VALUE_ARCHIVE = "archive";
public static final String RAT_DOCUMENT_CATEGORY_VALUE_NOTICE = "notice";
public static final String RAT_DOCUMENT_CATEGORY_VALUE_BINARY = "binary";
public static final String RAT_DOCUMENT_CATEGORY_VALUE_STANDARD = "standard";
public static final Datum RAT_DOCUMENT_CATEGORY_DATUM_GENERATED = new Datum(RAT_URL_DOCUMENT_CATEGORY, RAT_DOCUMENT_CATEGORY_VALUE_GENERATED);
public static final Datum RAT_DOCUMENT_CATEGORY_DATUM_UNKNOWN = new Datum(RAT_URL_DOCUMENT_CATEGORY, RAT_DOCUMENT_CATEGORY_VALUE_UNKNOWN);
public static final Datum RAT_DOCUMENT_CATEGORY_DATUM_ARCHIVE = new Datum(RAT_URL_DOCUMENT_CATEGORY, RAT_DOCUMENT_CATEGORY_VALUE_ARCHIVE);
public static final Datum RAT_DOCUMENT_CATEGORY_DATUM_NOTICE = new Datum(RAT_URL_DOCUMENT_CATEGORY, RAT_DOCUMENT_CATEGORY_VALUE_NOTICE);
public static final Datum RAT_DOCUMENT_CATEGORY_DATUM_BINARY = new Datum(RAT_URL_DOCUMENT_CATEGORY, RAT_DOCUMENT_CATEGORY_VALUE_BINARY);
public static final Datum RAT_DOCUMENT_CATEGORY_DATUM_STANDARD = new Datum(RAT_URL_DOCUMENT_CATEGORY, RAT_DOCUMENT_CATEGORY_VALUE_STANDARD);
// Header Categories
public static final String RAT_URL_HEADER_CATEGORY = RAT_BASE_URL + "#HeaderCategory";
// License Family Categories
public static final String RAT_URL_LICENSE_FAMILY_CATEGORY= RAT_BASE_URL + "#LicenseFamilyCategory";
// Shortcuts used in report output, must be exactly 5 characters
public static final String RAT_LICENSE_FAMILY_CATEGORY_VALUE_GEN = "GEN ";
public static final String RAT_LICENSE_FAMILY_CATEGORY_VALUE_UNKNOWN = "?????";
public static final String RAT_LICENSE_FAMILY_CATEGORY_VALUE_ASL = "AL ";
public static final String RAT_LICENSE_FAMILY_CATEGORY_VALUE_OASIS = "OASIS";
public static final String RAT_LICENSE_FAMILY_CATEGORY_VALUE_W3CD = "W3CD ";
public static final String RAT_LICENSE_FAMILY_CATEGORY_VALUE_W3C = "W3C ";
public static final String RAT_LICENSE_FAMILY_CATEGORY_VALUE_DOJO = "DOJO ";
public static final String RAT_LICENSE_FAMILY_CATEGORY_VALUE_TMF = "TMF ";
public static final String RAT_LICENSE_FAMILY_CATEGORY_VALUE_GPL1 ="GPL1 ";
public static final String RAT_LICENSE_FAMILY_CATEGORY_VALUE_GPL2 ="GPL2 ";
public static final String RAT_LICENSE_FAMILY_CATEGORY_VALUE_GPL3 = "GPL3 ";
public static final String RAT_LICENSE_FAMILY_CATEGORY_VALUE_MIT = "MIT ";
public static final String RAT_LICENSE_FAMILY_CATEGORY_VALUE_CDDL1 = "CDDL1";
public static final Datum RAT_LICENSE_FAMILY_CATEGORY_DATUM_GEN = new Datum(RAT_URL_LICENSE_FAMILY_CATEGORY, RAT_LICENSE_FAMILY_CATEGORY_VALUE_GEN);
public static final Datum RAT_LICENSE_FAMILY_CATEGORY_DATUM_UNKNOWN = new Datum(RAT_URL_LICENSE_FAMILY_CATEGORY, RAT_LICENSE_FAMILY_CATEGORY_VALUE_UNKNOWN);
public static final Datum RAT_LICENSE_FAMILY_CATEGORY_DATUM_ASL = new Datum(RAT_URL_LICENSE_FAMILY_CATEGORY, RAT_LICENSE_FAMILY_CATEGORY_VALUE_ASL);
public static final Datum RAT_LICENSE_FAMILY_CATEGORY_DATUM_OASIS = new Datum(RAT_URL_LICENSE_FAMILY_CATEGORY, RAT_LICENSE_FAMILY_CATEGORY_VALUE_OASIS);
public static final Datum RAT_LICENSE_FAMILY_CATEGORY_DATUM_W3CD = new Datum(RAT_URL_LICENSE_FAMILY_CATEGORY, RAT_LICENSE_FAMILY_CATEGORY_VALUE_W3CD);
public static final Datum RAT_LICENSE_FAMILY_CATEGORY_DATUM_W3C = new Datum(RAT_URL_LICENSE_FAMILY_CATEGORY, RAT_LICENSE_FAMILY_CATEGORY_VALUE_W3C);
public static final Datum RAT_LICENSE_FAMILY_CATEGORY_DATUM_DOJO = new Datum(RAT_URL_LICENSE_FAMILY_CATEGORY, RAT_LICENSE_FAMILY_CATEGORY_VALUE_DOJO);
public static final Datum RAT_LICENSE_FAMILY_CATEGORY_DATUM_TMF = new Datum(RAT_URL_LICENSE_FAMILY_CATEGORY, RAT_LICENSE_FAMILY_CATEGORY_VALUE_TMF);
public static final Datum RAT_LICENSE_FAMILY_CATEGORY_DATUM_GPL1 = new Datum(RAT_URL_LICENSE_FAMILY_CATEGORY,RAT_LICENSE_FAMILY_CATEGORY_VALUE_GPL1);
public static final Datum RAT_LICENSE_FAMILY_CATEGORY_DATUM_GPL2 = new Datum(RAT_URL_LICENSE_FAMILY_CATEGORY,RAT_LICENSE_FAMILY_CATEGORY_VALUE_GPL2);
public static final Datum RAT_LICENSE_FAMILY_CATEGORY_DATUM_GPL3 = new Datum(RAT_URL_LICENSE_FAMILY_CATEGORY,RAT_LICENSE_FAMILY_CATEGORY_VALUE_GPL3);
public static final Datum RAT_LICENSE_FAMILY_CATEGORY_DATUM_MIT = new Datum(RAT_URL_LICENSE_FAMILY_CATEGORY,RAT_LICENSE_FAMILY_CATEGORY_VALUE_MIT);
public static final Datum RAT_LICENSE_FAMILY_CATEGORY_DATUM_CDLL1 = new Datum(RAT_URL_LICENSE_FAMILY_CATEGORY,RAT_LICENSE_FAMILY_CATEGORY_VALUE_CDDL1);
// License Family Standard Names
public static final String RAT_URL_LICENSE_FAMILY_NAME= RAT_BASE_URL + "#LicenseFamilyName";
public static final String RAT_LICENSE_FAMILY_NAME_VALUE_W3C_SOFTWARE_COPYRIGHT = "W3C Software Copyright";
public static final String RAT_LICENSE_FAMILY_NAME_VALUE_W3C_DOCUMENT_COPYRIGHT = "W3C Document Copyright";
public static final String RAT_LICENSE_FAMILY_NAME_VALUE_OASIS_OPEN_LICENSE = "OASIS Open License";
public static final String RAT_LICENSE_FAMILY_NAME_VALUE_MODIFIED_BSD_LICENSE = "Modified BSD License";
public static final String RAT_LICENSE_FAMILY_NAME_VALUE_APACHE_LICENSE_VERSION_2_0 = "Apache License Version 2.0";
public static final String RAT_LICENSE_FAMILY_NAME_VALUE_GPL_VERSION_1 =
"GNU General Public License, version 1";
public static final String RAT_LICENSE_FAMILY_NAME_VALUE_GPL_VERSION_2 =
"GNU General Public License, version 2";
public static final String RAT_LICENSE_FAMILY_NAME_VALUE_GPL_VERSION_3 =
"GNU General Public License, version 3";
public static final String RAT_LICENSE_FAMILY_NAME_VALUE_MIT =
"The MIT License";
public static final String RAT_LICENSE_FAMILY_NAME_VALUE_CDDL1 =
"COMMON DEVELOPMENT AND DISTRIBUTION LICENSE Version 1.0";
public static final String RAT_LICENSE_FAMILY_NAME_VALUE_ACADEMIC_FREE_LICENSE_VERSION_2_1 = "Academic Free License, Version 2.1";
public static final String RAT_LICENSE_FAMILY_NAME_VALUE_UNKNOWN = "?????";
public static final Datum RAT_LICENSE_FAMILY_NAME_DATUM_W3C_SOFTWARE_COPYRIGHT
= new Datum(RAT_URL_LICENSE_FAMILY_NAME, RAT_LICENSE_FAMILY_NAME_VALUE_W3C_SOFTWARE_COPYRIGHT);
public static final Datum RAT_LICENSE_FAMILY_NAME_DATUM_W3C_DOCUMENT_COPYRIGHT
= new Datum(RAT_URL_LICENSE_FAMILY_NAME, RAT_LICENSE_FAMILY_NAME_VALUE_W3C_DOCUMENT_COPYRIGHT);
public static final Datum RAT_LICENSE_FAMILY_NAME_DATUM_OASIS_OPEN_LICENSE
= new Datum(RAT_URL_LICENSE_FAMILY_NAME, RAT_LICENSE_FAMILY_NAME_VALUE_OASIS_OPEN_LICENSE);
public static final Datum RAT_LICENSE_FAMILY_NAME_DATUM_MODIFIED_BSD_LICENSE
= new Datum(RAT_URL_LICENSE_FAMILY_NAME, RAT_LICENSE_FAMILY_NAME_VALUE_MODIFIED_BSD_LICENSE);
public static final Datum RAT_LICENSE_FAMILY_NAME_DATUM_APACHE_LICENSE_VERSION_2_0
= new Datum(RAT_URL_LICENSE_FAMILY_NAME, RAT_LICENSE_FAMILY_NAME_VALUE_APACHE_LICENSE_VERSION_2_0);
public static final Datum
RAT_LICENSE_FAMILY_NAME_DATUM_GPL_VERSION_1 = new Datum(RAT_URL_LICENSE_FAMILY_NAME, RAT_LICENSE_FAMILY_CATEGORY_VALUE_GPL1);
public static final Datum
RAT_LICENSE_FAMILY_NAME_DATUM_GPL_VERSION_2 = new Datum(RAT_URL_LICENSE_FAMILY_NAME, RAT_LICENSE_FAMILY_CATEGORY_VALUE_GPL2);
public static final Datum
RAT_LICENSE_FAMILY_NAME_DATUM_GPL_VERSION_3 = new Datum(RAT_URL_LICENSE_FAMILY_NAME, RAT_LICENSE_FAMILY_NAME_VALUE_GPL_VERSION_3);
public static final Datum
RAT_LICENSE_FAMILY_NAME_DATUM_MIT = new Datum(RAT_URL_LICENSE_FAMILY_NAME, RAT_LICENSE_FAMILY_NAME_VALUE_MIT);
public static final Datum
RAT_LICENSE_FAMILY_NAME_DATUM_CDDL1 = new Datum(RAT_URL_LICENSE_FAMILY_NAME, RAT_LICENSE_FAMILY_NAME_VALUE_CDDL1);
public static final Datum RAT_LICENSE_FAMILY_NAME_DATUM_ACADEMIC_FREE_LICENSE_VERSION_2_1
= new Datum(RAT_URL_LICENSE_FAMILY_NAME, RAT_LICENSE_FAMILY_NAME_VALUE_ACADEMIC_FREE_LICENSE_VERSION_2_1);
public static final Datum RAT_LICENSE_FAMILY_NAME_DATUM_UNKNOWN
= new Datum(RAT_URL_LICENSE_FAMILY_NAME, RAT_LICENSE_FAMILY_NAME_VALUE_UNKNOWN);
// Header sample
public static final String RAT_URL_HEADER_SAMPLE = RAT_BASE_URL + "#HeaderSample";
// License Approval
public static final String RAT_URL_APPROVED_LICENSE = RAT_BASE_URL + "#ApprovedLicense";
public static final String RAT_APPROVED_LICENSE_VALUE_TRUE = Boolean.TRUE.toString();
public static final String RAT_APPROVED_LICENSE_VALUE_FALSE = Boolean.FALSE.toString();
public static final Datum RAT_APPROVED_LICENSE_DATIM_TRUE = new Datum(RAT_URL_APPROVED_LICENSE, RAT_APPROVED_LICENSE_VALUE_TRUE);
public static final Datum RAT_APPROVED_LICENSE_DATIM_FALSE = new Datum(RAT_URL_APPROVED_LICENSE, RAT_APPROVED_LICENSE_VALUE_FALSE);
private ContentType contentType;
/**
* Only likely to be a small quantity of data
* so trade some performance for simplicity.
*/
private final List<Datum> data;
public MetaData() {
this(null);
}
public MetaData(final ContentType contentType) {
this.contentType = contentType;
this.data = new ArrayList<Datum>(16);
}
/**
* Gets the content type for the subject.
* @return or null when the type is unknown
*/
public ContentType getContentType() {
return contentType;
}
/**
* Sets the content type for this subject.
* @param contentType <code>ContentType</code>,
* or null when the content type is unknown
*/
public void setContentType(final ContentType contentType) {
this.contentType = contentType;
}
/**
* Gets all data.
* @return unmodifiable view of the meta data.
*/
public Collection<Datum> getData() {
return Collections.unmodifiableCollection(data);
}
/**
* Adds a new datum.
* Existing data with the same name are not replaced.
* @param datum datum to add.
* @see #set(org.apache.rat.api.MetaData.Datum)
*/
public void add(final Datum datum) {
data.add(datum);
}
/**
* Puts in a new datum replacing any existing data.
* Any current data matching the name are removed.
* @param datum not null
* @see #add(org.apache.rat.api.MetaData.Datum)
*/
public void set(final Datum datum) {
clear(datum.getName());
add(datum);
}
/**
* Gets the first datum matching the given name.
* @param name not null
* @return the matching datum first added when there is any matching data,
* null otherwise
*/
public Datum get(final String name) {
Datum result = null;
for (Datum next : data) {
if (name.equals(next.getName())) {
result = next;
break;
}
}
return result;
}
/**
* Gets the value of the first datum matching the given name.
* @param name not null
* @return the value of the matchin datum first added when there is any matching data,
* null otherwise
*/
public String value(final String name) {
final Datum datum = get(name);
final String result;
if (datum == null) {
result = null;
} else {
result = datum.getValue();
}
return result;
}
/**
* Removes all data matching the given name.
* @param name not null
* @return true if any data match, false otherwise
*/
public boolean clear(final String name) {
boolean dataRemoved = false;
for (final Iterator<Datum> it = data.iterator();it.hasNext();) {
final Datum datum = it.next();
if (datum.getName().equals(name)) {
it.remove();
dataRemoved = true;
}
}
return dataRemoved;
}
/**
* Clears all data.
*/
public void clear() {
data.clear();
this.contentType = null;
}
/**
* A datum.
*/
public static final class Datum {
private final String name;
private final String value;
/**
* Constructs a datum.
* @param name not null
* @param value not null
*/
public Datum(final String name, final String value) {
super();
this.name = name;
this.value = value;
}
/**
* Gets the name of the data type.
* To avoid collisions, it is recommended that URLs are used.
* @return not null
*/
public String getName() {
return name;
}
/**
* Data type value.
* @return not null
*/
public String getValue() {
return value;
}
/**
* Constructs a <code>String</code> with all attributes
* in name = value format.
*
* @return a <code>String</code> representation
* of this object.
*/
@Override
public String toString()
{
return "Datum [ "
+ "name ='" + this.name + "',"
+ "value ='" + this.value + " "
+ "']";
}
}
}