diff --git a/source/java/org/alfresco/service/cmr/avm/locking/AVMLock.java b/source/java/org/alfresco/service/cmr/avm/locking/AVMLock.java new file mode 100644 index 0000000000..a977e3252c --- /dev/null +++ b/source/java/org/alfresco/service/cmr/avm/locking/AVMLock.java @@ -0,0 +1,156 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing + */ + +package org.alfresco.service.cmr.avm.locking; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +import org.alfresco.repo.attributes.Attribute; +import org.alfresco.repo.attributes.BooleanAttributeImpl; +import org.alfresco.repo.attributes.MapAttribute; +import org.alfresco.repo.attributes.MapAttributeImpl; +import org.alfresco.repo.attributes.StringAttributeImpl; + +/** + * Struct representing an AVM lock. + * @author britt + */ +public class AVMLock implements Serializable +{ + public static String PATH = "path"; + public static String STORE = "store"; + public static String OWNERS = "owners"; + public static String WEBPROJECT = "webproject"; + public static String TYPE = "type"; + + private static final long serialVersionUID = -8026344276097527239L; + + /** + * The store relative path of the lock. + */ + private String fPath; + + /** + * The store of the actual locked version. + */ + private String fStore; + + /** + * The list of users who can access the locked asset. + */ + private List fOwners; + + /** + * The web project for which this lock applies. + */ + private String fWebProject; + + /** + * The type of the lock. + */ + private AVMLockingService.Type fType; + + public AVMLock(String webProject, + String store, + String path, + AVMLockingService.Type type, + List owners) + { + fWebProject = webProject; + fStore = store; + fPath = path; + fType = type; + fOwners = owners; + } + + + public AVMLock(Attribute lockData) + { + fPath = lockData.get(PATH).getStringValue(); + fStore = lockData.get(STORE).getStringValue(); + fOwners = new ArrayList(lockData.get(OWNERS).keySet()); + fType = AVMLockingService.Type.valueOf(lockData.get(TYPE).getStringValue()); + fWebProject = lockData.get(WEBPROJECT).getStringValue(); + } + + public Attribute getAttribute() + { + MapAttribute lockData = new MapAttributeImpl(); + lockData.put(PATH, new StringAttributeImpl(fPath)); + lockData.put(STORE, new StringAttributeImpl(fStore)); + lockData.put(TYPE, new StringAttributeImpl(fType.name())); + lockData.put(WEBPROJECT, new StringAttributeImpl(fWebProject)); + MapAttribute owners = new MapAttributeImpl(); + for (String owner : fOwners) + { + // The value is a dummy. + owners.put(owner, new BooleanAttributeImpl(true)); + } + lockData.put(OWNERS, owners); + return lockData; + } + + /** + * @return the owners + */ + public List getOwners() + { + return fOwners; + } + + /** + * @return the Path + */ + public String getPath() + { + return fPath; + } + + /** + * @return the Store + */ + public String getStore() + { + return fStore; + } + + /** + * @return the Type + */ + public AVMLockingService.Type getType() + { + return fType; + } + + /** + * @return the WebProject + */ + public String getWebProject() + { + return fWebProject; + } +} diff --git a/source/java/org/alfresco/service/cmr/avm/locking/AVMLockingService.java b/source/java/org/alfresco/service/cmr/avm/locking/AVMLockingService.java new file mode 100644 index 0000000000..706069f4d7 --- /dev/null +++ b/source/java/org/alfresco/service/cmr/avm/locking/AVMLockingService.java @@ -0,0 +1,90 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing + */ + +package org.alfresco.service.cmr.avm.locking; + +import java.io.Serializable; +import java.util.List; + +/** + * Service to handle AVM locking. + * @author britt + */ +public interface AVMLockingService +{ + public enum Type implements Serializable + { + DISCRETIONARY + }; + + /** + * Creates a lock of the given type on a path. + * The lock is used to control access to all the + * corresponding paths in the given path's web project. + * @param lock The lock structure to create. + */ + public void lockPath(AVMLock lock); + + /** + * Get a lock on a given path + * @param webProject The website for which to get the lock. + * @param path The path to check for a lock. + * @return The Lock structure or null if there is no lock. + */ + public AVMLock getLock(String webProject, String path); + + /** + * Remove a lock. + * @param webProject The web project the lock lives in. + * @param path The store relative path of the lock. + */ + public void removeLock(String webProject, String path); + + /** + * Get all the locks that a user owns. + * @param user The name of the user. + * @return The (possibly empty list) of the user's locks. + */ + public List getUsersLocks(String user); + + /** + * Get all locks in a webProject. + * @param webProject + * @return A List (possibly empty) of all locks in a web project. + */ + public List getLocks(String webProject); + + /** + * Add a web project. + * @param webProject The web project name. + */ + public void addWebProject(String webProject); + + /** + * Remove a web project from the locking tables. + * @param webProject The web project name. + */ + public void removeWebProject(String webProject); +}