/********************************************************************************** * $URL: https://source.sakaiproject.org/svn/rights/trunk/rights-api/api/src/java/org/sakaiproject/rights/api/CreativeCommonsLicense.java $ * $Id: CreativeCommonsLicense.java 105079 2012-02-24 23:08:11Z ottenhoff@longsight.com $ *********************************************************************************** * * Copyright (c) 2003, 2004, 2005, 2006, 2008, 2009 The Sakai Foundation * * Licensed under the Educational Community 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.opensource.org/licenses/ECL-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.sakaiproject.rights.api; import java.util.Collection; import java.util.Stack; import org.sakaiproject.rights.util.RightsException; import org.w3c.dom.Document; import org.w3c.dom.Element; /** * Creative Commons Licenses are described by their characteristics, which come in three types: * * Permissions (rights granted by the license) * Prohibitions (things prohibited by the license) * Requirements (restrictions imposed by the license) * */ public interface CreativeCommonsLicense { public String getIdentifier(); public String getUri(); /***************************************************** * Permissions *****************************************************/ /** * @return */ public boolean hasPermissions(); /** * @return */ public Collection<Permission> getPermissions(); /** * @param permission * @throws RightsException */ public void addPermission(String permission) throws RightsException; /** * @param permission */ public void addPermission(Permission permission); /** * @param permission */ public void removePermission(String permission); /** * @param permissions */ public void setPermissions(Collection<Object> permissions); /***************************************************** * Prohibitions *****************************************************/ /** * @return */ public boolean hasProhibitions(); /** * @return */ public Collection<Prohibition> getProhibitions(); /** * @param prohibition */ public void addProhibition(String prohibition) throws RightsException; /** * @param prohibition */ public void addProhibition(Prohibition prohibition); /** * @param prohibitions */ public void removeProhibitions(Collection<Object> prohibitions); /** * @param prohibitions */ public void setProhibitions(Collection<Object> prohibitions); /***************************************************** * Prohibitions *****************************************************/ /** * @return */ public boolean hasRequirements(); /** * @return */ public Collection<Requirement> getRequirements(); /** * @param requirement */ public void addRequirement(String requirement) throws RightsException; /** * @param requirement */ public void addRequirement(Requirement requirement); /** * @param requirements */ public void removeRequirements(Collection<Object> requirements); /** * @param requirements */ public void setRequirements(Collection<Object> requirements); /** * Permissions describe rights granted by the license. Three kinds of permissions may be granted: * * Reproduction * the work may be reproduced * Distribution * the work (and, if authorized, derivative works) may be distributed, publicly displayed, and publicly performed * DerivativeWorks * derivative works may be created and reproduced */ public class Permission { protected final String m_id; /** * @param id */ private Permission(String id) { m_id = id; } /* (non-Javadoc) * @see java.lang.Object#toString() */ public String toString() { return m_id; } /* (non-Javadoc) * @see java.lang.Object#equals(java.lang.Object) */ public boolean equals(Object obj) { boolean rv = false; if(obj instanceof Permission) { rv = ((Permission) obj).toString().equals(this.toString()); } return rv; } /* (non-Javadoc) * @see java.lang.Object#hashCode() */ public int hashCode() { return this.toString().hashCode(); } /** * @param permitted * @return */ public static Permission fromString(String permitted) { if (REPRODUCTION.m_id.equals(permitted)) return REPRODUCTION; if (DISTRIBUTION.m_id.equals(permitted)) return DISTRIBUTION; if (DERIVATIVE_WORKS.m_id.equals(permitted)) return DERIVATIVE_WORKS; return null; } /** the work may be reproduced */ public static final Permission REPRODUCTION = new Permission("Reproduction"); /** the work (and, if authorized, derivative works) may be distributed, publicly displayed, and publicly performed */ public static final Permission DISTRIBUTION = new Permission("Distribution"); /** derivative works may be created and reproduced */ public static final Permission DERIVATIVE_WORKS = new Permission("DerivativeWorks"); } /** * Prohibitions describe things prohibited by the license: * * CommercialUse * rights may be exercised for commercial purposes unless CommercialUse is prohibited */ public class Prohibition { protected final String m_id; /** * @param id */ private Prohibition(String id) { m_id = id; } /* (non-Javadoc) * @see java.lang.Object#toString() */ public String toString() { return m_id; } /* (non-Javadoc) * @see java.lang.Object#equals(java.lang.Object) */ public boolean equals(Object obj) { boolean rv = false; if(obj instanceof Prohibition) { rv = ((Prohibition) obj).toString().equals(this.toString()); } return rv; } /* (non-Javadoc) * @see java.lang.Object#hashCode() */ public int hashCode() { return this.toString().hashCode(); } /** * @param prohibited * @return */ public static Prohibition fromString(String prohibited) { if (COMMERCIAL_USE.m_id.equals(prohibited)) return COMMERCIAL_USE; return null; } /** rights may be exercised for commercial purposes unless CommercialUse is prohibited */ public static final Prohibition COMMERCIAL_USE = new Prohibition("CommercialUse"); } /** * Requirements describe restrictions imposed by the license: * * Notice * copyright and license notices must be kept intact * Attribution * credit must be given to copyright holder and/or author * ShareAlike * derivative works must be licensed under the same terms as the original work * SourceCode * source code (the preferred form for making modifications) must be provided for all derivative works */ public class Requirement { protected final String m_id; /** * @param id */ private Requirement(String id) { m_id = id; } /* (non-Javadoc) * @see java.lang.Object#toString() */ public String toString() { return m_id; } /* (non-Javadoc) * @see java.lang.Object#equals(java.lang.Object) */ public boolean equals(Object obj) { boolean rv = false; if(obj instanceof Requirement) { rv = ((Requirement) obj).toString().equals(this.toString()); } return rv; } /* (non-Javadoc) * @see java.lang.Object#hashCode() */ public int hashCode() { return this.toString().hashCode(); } /** * @param required * @return */ public static Requirement fromString(String required) { if (NOTICE.m_id.equals(required)) return NOTICE; if (ATTRIBUTION.m_id.equals(required)) return ATTRIBUTION; if (SHARE_ALIKE.m_id.equals(required)) return SHARE_ALIKE; if (SOURCE_CODE.m_id.equals(required)) return SOURCE_CODE; return null; } /** copyright and license notices must be kept intact */ public static final Requirement NOTICE = new Requirement("Notice"); /** credit must be given to copyright holder and/or author */ public static final Requirement ATTRIBUTION = new Requirement("Attribution"); /** derivative works must be licensed under the same terms as the original work */ public static final Requirement SHARE_ALIKE = new Requirement("ShareAlike"); /** source code (the preferred form for making modifications) must be provided for all derivative works */ public static final Requirement SOURCE_CODE = new Requirement("SourceCode"); } /** * @param doc * @param stack * @return */ public Element toXml(Document doc, Stack<Object> stack); } // interface CreativeCommonsLicense