package com.limegroup.gnutella.licenses;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.limegroup.gnutella.metadata.WRMXML;
import com.limegroup.gnutella.metadata.WeedInfo;
/**
* various constants for the different licenses to be inserted in QRT
*/
public class LicenseConstants {
public static final int NO_LICENSE = 0;
public static final int CC_LICENSE = 1;
public static final int WEED_LICENSE = 2;
public static final int DRM_LICENSE = 3;
public static final int GPL = 4;
public static final int LGPL = 5;
public static final int APACHE_BSD = 6;
public static final int MIT_X = 7;
public static final int FDL = 8;
public static final int ARTISTIC = 9;
public static final int PUBLIC_DOMAIN = 10;
public static final int SHAREWARE = 11;
private static final String []LICENSE_DESCS;
static {
List descList = new ArrayList();
descList.add(""); // no license
descList.add(CCConstants.CC_URI_PREFIX); // cc
descList.add(WeedInfo.LAINFO); // weed ...
descList.add(""); // general drm
descList.add("http://www.gnu.org/copyleft/gpl.html");
descList.add("http://www.gnu.org/copyleft/lgpl.html");
descList.add("http://opensource.org/licenses/apache2.0.php");
descList.add("http://opensource.org/licenses/mit-license.php");
descList.add("http://www.gnu.org/copyleft/fdl.html");
descList.add("http://www.opensource.org/licenses/artistic-license.php");
descList.add("http://www.public-domain.org");
descList.add("http://en.wikipedia.org/wiki/Shareware");
// .. others in same order as above
LICENSE_DESCS = (String [])descList.toArray(new String[0]);
}
private static final Map LICENSE_DESC_CACHE = new HashMap();
public static List getIndivisible(int type) {
if (type >= LICENSE_DESCS.length) // unknown type
return Collections.EMPTY_LIST;
if (type == NO_LICENSE || type == DRM_LICENSE)
return Collections.EMPTY_LIST;
Integer i = new Integer(type);
List ret = (List) LICENSE_DESC_CACHE.get(i);
if (ret != null)
return ret;
ret = new ArrayList(1);
ret.add(LICENSE_DESCS[type]);
ret = Collections.unmodifiableList(ret);
LICENSE_DESC_CACHE.put(i,ret);
return ret;
}
/**
* Determines the license type based on the a license type and the actual license
*/
public static int determineLicenseType(String license, String type) {
if (hasCCLicense(license, type))
return CC_LICENSE;
if (hasWeedLicense(type))
return WEED_LICENSE;
if (hasDRMLicense(type))
return DRM_LICENSE;
// the other licenses do not have any special requirements
// for the license or type field (yet)
for (int i = 0;i < LICENSE_DESCS.length; i++) {
if (LICENSE_DESCS[i].equals(type))
return i;
}
return NO_LICENSE;
}
private static boolean hasCCLicense(String license, String type) {
return (type != null && type.equals(CCConstants.CC_URI_PREFIX)) ||
(license != null && license.indexOf(CCConstants.CC_URI_PREFIX) != -1
&& license.indexOf(CCConstants.URL_INDICATOR) != -1)
;
}
private static boolean hasWeedLicense(String type) {
return type != null &&
type.startsWith(WeedInfo.LAINFO) &&
type.indexOf(WeedInfo.VID) != -1 &&
type.indexOf(WeedInfo.CID) != -1;
}
private static boolean hasDRMLicense(String type) {
return type != null &&
type.startsWith(WRMXML.PROTECTED);
}
public static boolean isDRMLicense(int type) {
return type == WEED_LICENSE || type == DRM_LICENSE;
}
}