/********************************************************************************** * $URL: https://source.sakaiproject.org/svn/rights/trunk/rights-impl/impl/src/java/org/sakaiproject/rights/impl/BaseRightsService.java $ * $Id: BaseRightsService.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.impl; import java.util.Collection; import java.util.Hashtable; import java.util.Map; import java.util.Set; import java.util.Stack; import java.util.TreeSet; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.sakaiproject.exception.IdUnusedException; import org.sakaiproject.id.cover.IdManager; import org.sakaiproject.rights.api.Copyright; import org.sakaiproject.rights.api.RightsPolicy; import org.sakaiproject.rights.api.RightsService; import org.sakaiproject.rights.api.CreativeCommonsLicense; import org.sakaiproject.rights.api.RightsAssignment; import org.sakaiproject.rights.api.SiteRightsPolicy; import org.sakaiproject.rights.api.UserRightsPolicy; import org.sakaiproject.rights.util.RightsException; import org.w3c.dom.Document; import org.w3c.dom.Element; public abstract class BaseRightsService implements RightsService { public static class BasicCopyright implements Copyright { protected String m_id; protected String m_entityRef; protected String m_year; protected String m_owner; public BasicCopyright(String entityRef) { m_entityRef = entityRef; } public BasicCopyright(String entityRef, String year, String owner) { m_entityRef = entityRef; m_year = year; m_owner = owner; } public String getCopyrightId() { return m_id; } public String getEntityRef() { return m_entityRef; } public String getOwner() { return m_owner; } public String getYear() { return m_year; } public void setOwner(String owner) { m_owner = owner; } public void setYear(String year) { m_year = year; } public Element toXml(Document doc, Stack<Object> stack) { // TODO Auto-generated method stub return null; } } // class BasicCopyright public static class BasicCreativeCommonsLicense implements CreativeCommonsLicense { protected String m_id; protected Set<Permission> m_permissions = new TreeSet<Permission>(); protected Set<Prohibition> m_prohibitions = new TreeSet<Prohibition>(); protected Set<Requirement> m_requirements = new TreeSet<Requirement>(); public void addPermission(Permission permission) { if(m_permissions == null) { m_permissions = new TreeSet<Permission>(); } m_permissions.add(permission); } public void addPermission(String permission) throws RightsException { Permission p = Permission.fromString(permission); if(p == null) { throw new RightsException(); } addPermission(p); } public void addProhibition(Prohibition prohibition) { if(m_prohibitions == null) { m_prohibitions = new TreeSet<Prohibition>(); } m_prohibitions.add(prohibition); } public void addProhibition(String prohibition) throws RightsException { Prohibition p = Prohibition.fromString(prohibition); if(p == null) { throw new RightsException(); } addProhibition(p); } public void addRequirement(Requirement requirement) { if(m_requirements == null) { m_requirements = new TreeSet<Requirement>(); } m_requirements.add(requirement); } public void addRequirement(String requirement) throws RightsException { Requirement r = Requirement.fromString(requirement); if(r == null) { throw new RightsException(); } addRequirement(r); } public String getIdentifier() { // TODO Auto-generated method stub return null; } public Collection<Permission> getPermissions() { return m_permissions; } public Collection<Prohibition> getProhibitions() { return m_prohibitions; } public Collection<Requirement> getRequirements() { return m_requirements; } public String getUri() { // TODO Auto-generated method stub return null; } public boolean hasPermissions() { return m_permissions != null && ! m_permissions.isEmpty(); } public boolean hasProhibitions() { return m_prohibitions != null && ! m_prohibitions.isEmpty(); } public boolean hasRequirements() { return m_requirements != null && ! m_requirements.isEmpty(); } public void removePermission(String permission) { Permission p = Permission.fromString(permission); if(p != null) { this.m_permissions.remove(p); } } public void removeProhibitions(Collection<Object> prohibitions) { if(prohibitions != null) { for (Object obj : prohibitions) { Prohibition p = null; if(obj instanceof Prohibition) { p = (Prohibition) obj; } else if(obj instanceof String) { p = Prohibition.fromString((String) obj); } if(p != null) { this.m_prohibitions.remove(p); } } } } public void removeRequirements(Collection<Object> requirements) { if(this.m_requirements == null) { this.m_requirements = new TreeSet<Requirement>(); } this.m_requirements.clear(); if(requirements != null) { for (Object obj : requirements) { Requirement r = null; if(obj instanceof Requirement) { r = (Requirement) obj; } else if(obj instanceof String) { r = Requirement.fromString((String) obj); } if(r != null) { this.m_requirements.remove(r); } } } } public void setPermissions(Collection<Object> permissions) { if(this.m_permissions == null) { this.m_permissions = new TreeSet<Permission>(); } this.m_permissions.clear(); if(permissions != null) { for (Object obj : permissions) { Permission p = null; if(obj instanceof Permission) { p = (Permission) obj; } else if(obj instanceof String) { p = Permission.fromString((String) obj); } if(p != null) { this.m_permissions.add(p); } } } } public void setProhibitions(Collection<Object> prohibitions) { if(this.m_prohibitions == null) { this.m_prohibitions = new TreeSet<Prohibition>(); } this.m_prohibitions.clear(); if(prohibitions != null) { for (Object obj : prohibitions) { Prohibition p = null; if(obj instanceof Prohibition) { p = (Prohibition) obj; } else if(obj instanceof String) { p = Prohibition.fromString((String) obj); } if(p != null) { this.m_prohibitions.add(p); } } } } public void setRequirements(Collection<Object> requirements) { // TODO Auto-generated method stub } public Element toXml(Document doc, Stack<Object> stack) { // TODO Auto-generated method stub return null; } } // class BasicCreativeCommonsLicense /********************************************************************************************************************************************************************************************************************************************************** * Init and Destroy *********************************************************************************************************************************************************************************************************************************************************/ public static class BasicRightsAssignment implements RightsAssignment { protected Map<String, CreativeCommonsLicense> m_licenses = new Hashtable<String, CreativeCommonsLicense>(); protected Copyright m_copyright; protected String m_entityRef = null; protected String m_id; protected boolean m_copyrightAlert = false; public BasicRightsAssignment(String entityRef) { m_id = IdManager.createUuid(); m_entityRef = entityRef; } public void addLicense(CreativeCommonsLicense license) { if(m_licenses == null) { m_licenses = new Hashtable<String, CreativeCommonsLicense>(); } m_licenses.put(license.getIdentifier(), license); } public int countLicenses() { return m_licenses.size(); } public Copyright getCopyright() { return m_copyright; } public String getEntityRef() { return m_entityRef; } public Collection<CreativeCommonsLicense> getLicenses() { return m_licenses.values(); } public String getRightsId() { return m_id; } public boolean hasCopyright() { return m_copyright != null; } public boolean hasCopyrightAlert() { return m_copyrightAlert; } public boolean hasLicense() { return m_licenses != null && ! m_licenses.isEmpty(); } public void setCopyright(Copyright copyright) { m_copyright = copyright; } public void setLicenses(Collection<CreativeCommonsLicense> licenses) { } public Element toXml(Document doc, Stack<Object> stack) { // TODO Auto-generated method stub return null; } } public interface Storage { public void close(); public Copyright getCopyright(String copyrightId) throws IdUnusedException; public CreativeCommonsLicense getLicense(String licenseId) throws IdUnusedException; public RightsAssignment getRightsAssignment(String entityRef) throws IdUnusedException; public RightsPolicy getRightsPolicy(String context, String userId) throws IdUnusedException; public Copyright newCopyright(String rightsId); public CreativeCommonsLicense newLicense(String rightsId); public RightsAssignment newRightsAssignment(String entityRef); public RightsPolicy newRightsPolicy(String context, String userId); public void open(); public void remove(Copyright copyright); public void remove(CreativeCommonsLicense license); public void remove(RightsAssignment rights); public void remove(RightsPolicy policy); public String save(Copyright copyright); public String save(CreativeCommonsLicense license); public String save(RightsAssignment rights); public String save(RightsPolicy policy); } /** Our logger. */ private static Log M_log = LogFactory.getLog(BaseRightsService.class); protected Storage m_storage = null; /** * @param entityRef * @return */ public RightsAssignment addRightsAssignment(String entityRef) { return m_storage.newRightsAssignment(entityRef); } public SiteRightsPolicy addSiteRightsPolicy(String context) { // TODO Auto-generated method stub return null; } public UserRightsPolicy addUserRightsPolicy(String context, String userId) { // TODO Auto-generated method stub return null; } /** * Returns to uninitialized state. */ public void destroy() { m_storage.close(); m_storage = null; M_log.info("destroy()"); } public RightsAssignment getRightsAssignment(String entityRef) throws IdUnusedException { return m_storage.getRightsAssignment(entityRef); } public SiteRightsPolicy getSiteRightsPolicy(String context) { // TODO Auto-generated method stub return null; } public UserRightsPolicy getUserRightsPolicy(String context, String userId) { // TODO Auto-generated method stub return null; } /** * Final initialization, once all dependencies are set. */ public void init() { try { // construct a storage helper and read m_storage = newStorage(); m_storage.open(); M_log.info("init()"); } catch (Throwable t) { M_log.warn("init(): ", t); } } // init /** * Construct a Storage object. * * @return The new storage object. */ protected abstract Storage newStorage(); /** * @param rights */ public void save(RightsAssignment rights) { m_storage.save(rights); } public void save(RightsPolicy policy) { m_storage.save(policy); } public void setRightsAssignment(String entityRef, RightsAssignment rights) { // m_storage } } // class BaseCopyrightService