package com.limegroup.gnutella.licenses;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
import com.limegroup.gnutella.metadata.audio.reader.AudioDataReader;
import com.limegroup.gnutella.metadata.audio.reader.WRMXML;
import com.limegroup.gnutella.metadata.audio.reader.WeedInfo;
public enum LicenseType {
NO_LICENSE(""),
CC_LICENSE (CCConstants.CC_URI_PREFIX),
WEED_LICENSE (WeedInfo.LAINFO),
DRM_LICENSE (""),
GPL ("http://www.gnu.org/copyleft/gpl.html"),
LGPL ("http://www.gnu.org/copyleft/lgpl.html"),
APACHE_BSD ("http://opensource.org/licenses/apache2.0.php"),
MIT_X ("http://opensource.org/licenses/mit-license.php"),
FDL ("http://www.gnu.org/copyleft/fdl.html"),
ARTISTIC ("http://www.opensource.org/licenses/artistic-license.php"),
PUBLIC_DOMAIN ("http://www.public-domain.org"),
SHAREWARE ("http://en.wikipedia.org/wiki/Shareware"),
LIMEWIRE_STORE_PURCHASE("LIMEWIRE_STORE_PURCHASE");
private final String keyword;
private final List<String> indivList;
private LicenseType(String keyword) {
this.keyword = keyword;
List<String> indiv = new ArrayList<String>(1);
indiv.add(keyword);
this.indivList = Collections.unmodifiableList(indiv);
}
public boolean isDRMLicense() {
return this == WEED_LICENSE || this == DRM_LICENSE || this == LIMEWIRE_STORE_PURCHASE;
}
public List<String> getIndivisibleKeywords() {
return indivList;
}
/**
* Determines the license type based on the a license type and the actual license.
*/
public static LicenseType determineLicenseType(String license, String type) {
if (hasCCLicense(license, type))
return CC_LICENSE;
if (hasWeedLicense(type))
return WEED_LICENSE;
if (hasDRMLicense(type))
return DRM_LICENSE;
if (hasLWSLicense(type))
return LIMEWIRE_STORE_PURCHASE;
// the other licenses do not have any special requirements
// for the license or type field (yet)
for(LicenseType licenseType : values()) {
if(licenseType.keyword.equals(type))
return licenseType;
}
return NO_LICENSE;
}
private static boolean hasCCLicense(String license, String type) {
if(license != null)
license = license.toLowerCase(Locale.US);
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);
}
private static boolean hasLWSLicense(String type) {
return type != null &&
type.startsWith(AudioDataReader.MAGIC_KEY);
}
}