--- /dev/null
+package org.argeo.slc.repo;
+
+import java.io.InputStream;
+import java.net.URL;
+
+import org.apache.commons.io.IOUtils;
+import org.argeo.slc.SlcException;
+import org.argeo.slc.build.License;
+
+/** A free software license */
+public abstract class FreeLicense implements License {
+ final static String RESOURCES = "/org/argeo/slc/repo/license/";
+
+ /** GNU */
+ public final static FreeLicense GPL_v3 = new FreeLicense("GPL-3.0-or-later",
+ "http://www.gnu.org/licenses/gpl-3.0.txt", null, RESOURCES + "gpl-3.0.txt") {
+ };
+
+ public final static FreeLicense GPL_v2 = new FreeLicense("GPL-2.0-or-later",
+ "http://www.gnu.org/licenses/gpl-2.0.txt", null, RESOURCES + "gpl-2.0.txt") {
+ };
+ public final static FreeLicense GPL = GPL_v3;
+
+ public final static FreeLicense LGPL_v3 = new FreeLicense("LGPL-3.0-or-later",
+ "http://www.gnu.org/licenses/lgpl-3.0.txt", null, RESOURCES + "lgpl-3.0.txt") {
+ };
+
+ public final static FreeLicense LGPL_v2 = new FreeLicense("LGPL-2.0-or-later",
+ "http://www.gnu.org/licenses/lgpl-2.1.txt", null, RESOURCES + "lgpl-2.1.txt") {
+ };
+ public final static FreeLicense LGPL = LGPL_v3;
+
+ /** Apache */
+ public final static FreeLicense APACHE_v2 = new FreeLicense("Apache-2.0",
+ "http://www.apache.org/licenses/LICENSE-2.0.txt", null, RESOURCES + "apache-2.0.txt") {
+ };
+ public final static FreeLicense APACHE = APACHE_v2;
+
+ /** Eclipse */
+ public final static FreeLicense EPL_v1 = new FreeLicense("EPL-1.0", "http://www.eclipse.org/legal/epl-v10.html",
+ null, RESOURCES + "epl-1.0.txt") {
+ };
+ public final static FreeLicense EPL_v2 = new FreeLicense("EPL-2.0", "http://www.eclipse.org/legal/epl-v20.html",
+ null, RESOURCES + "epl-1.0.txt") {
+ };
+ public final static FreeLicense EPL = EPL_v1;
+
+ /** Miscellaneous */
+ public final static FreeLicense MIT = new FreeLicense("MIT", "http://opensource.org/licenses/MIT", null,
+ RESOURCES + "mit.txt") {
+ };
+
+ public final static FreeLicense BSD_NEW = new FreeLicense("BSD-3-Clause",
+ "http://opensource.org/licenses/BSD-3-Clause", null, RESOURCES + "bsd-3-clause.txt") {
+ };
+
+ public final static FreeLicense BSD = BSD_NEW;
+
+ public final static FreeLicense CDDL_v1 = new FreeLicense("CDDL-1.0", "http://opensource.org/licenses/CDDL-1.0",
+ null, RESOURCES + "cddl-1.0.txt") {
+ };
+ public final static FreeLicense CDDL = CDDL_v1;
+
+ public final static FreeLicense MOZILLA_v2 = new FreeLicense("MPL-2.0", "https://opensource.org/licenses/MPL-2.0",
+ null, RESOURCES + "cddl-1.0.txt") {
+ };
+ public final static FreeLicense MOZILLA = MOZILLA_v2;
+
+ /** Public domain corner case */
+ public final static License PUBLIC_DOMAIN = new License() {
+
+ public String getUri() {
+ return "http://creativecommons.org/about/pdm";
+ }
+
+ public String getText() {
+ return "This work is free of known copyright restrictions.";
+ }
+
+ public String getName() {
+ return "Public Domain License";
+ }
+
+ public String getLink() {
+ return "http://wiki.creativecommons.org/PDM_FAQ";
+ }
+ };
+
+ private final String name, uri, link, resource;
+
+ public FreeLicense(String name, String uri) {
+ this(name, uri, null, null);
+ }
+
+ public FreeLicense(String name, String uri, String link) {
+ this(name, uri, link, null);
+ }
+
+ public FreeLicense(String name, String uri, String link, String resource) {
+ if (uri == null)
+ throw new SlcException("URI cannot be null");
+ this.name = name;
+ this.uri = uri;
+ this.link = link;
+ this.resource = resource;
+ getText();
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public String getUri() {
+ return uri;
+ }
+
+ public String getLink() {
+ return link;
+ }
+
+ @Override
+ public String getText() {
+ InputStream in = null;
+ URL url = null;
+ try {
+ if (resource != null)
+ url = getClass().getClassLoader().getResource(resource);
+ else
+ url = new URL(uri);
+ in = url.openStream();
+ String text = IOUtils.toString(in);
+ return text;
+ } catch (Exception e) {
+ throw new SlcException("Cannot retrieve license " + name + " from " + url, e);
+ } finally {
+ IOUtils.closeQuietly(in);
+ }
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (!(obj instanceof License))
+ return false;
+ return ((License) obj).getUri().equals(getUri());
+ }
+
+ @Override
+ public int hashCode() {
+ return getUri().hashCode();
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder(name != null ? name : uri);
+// if (link != null)
+// sb.append(';').append("link=").append(link);
+// else if (uri != null && name != null)
+// sb.append(';').append("link=").append(uri);
+ return sb.toString();
+ }
+}