Alan Davis 29f7f5d073 Merged BRANCHES/DEV/V3.4-BUG-FIX to HEAD
28236: ALF-8810: Removed trailing space from discussion.discussion_for Italian translation
   28241: Incremented version revision for 3.4.4
   28284: ALF-835 - WCM/AVM: copy (empty) folder into itself
   28285: ALF-6863: More than one cifs device breaks the web UI (explorer)
   28290: ALF-8840: user-*.atomentry.ftl
   28291: ALF-6863: Continuation of fix by Arseny
   28336: ALF-8768: Fixed typo in comment on wcm-bootstrap-context.xml
   28363: Merged DEV to V3.4-BUG-FIX
      28262: ALF-8847: WCM: OrphanReaper contention throws error after 39 retries.
             Checkin Comment:
                Use JobLockService to make sure that only one OrphanReaper job is working.
                Generate list of nodes that must be processed in OrphanReaper.doBatch() transaction. 
   28386: ALF-9100: Merged PATCHES/V3.4.1 to V3.4-BUG-FIX
      28249: ALF-8946: Avoid one full table scan per batch in full reindex
         - Now each batch scans a single time sample, dynamically adjusted based on the number of transactions
		   in the previous sample, always aiming for 1000 transactions per sample.
   28394: Fixed ALF-9090: NPE during inter-cluster subsystem messaging
    - Bean ID is a List<String> and might not be recognized on receiving machine
    - Log warning when bean ID is not available (unsymmetrical configuration, perhaps?)
   28396: Merged DEV to V3.4-BUG-FIX
      28384: ALF-6150: Initial state lost when non-versionable document is saved for the first time
             Creation of new version of document before writing its content was added to
             - AbstractAlfrescoMethodHandler->putDocument (this method is used by Office 2003, 2007)
             - VtiIfHeaderAction->doPut (this method is used by Office 2007 and 2010 on Windows 7)
               Creation of new version was added twice to AbstractAlfrescoMethodHandler to avoid affecting
               initial version when transaction is committed. 
   28432: Merged DEV to V3.4-BUG-FIX
      28431: ALF-8530: Pressing the info icon creates an unrecorded file in the ContentStore
             Use ContentService.getTempWriter() in BaseContentNode$TemplateContentData.getContentAsText() method. 
   28435: Merged DEV/TEMPORARY to V3.4-BUG-FIX
      28428: ALF-9015: cm:modifier not updated when document is updated via CIFS
         In ContentDiskDriver.closeFile() added ContentModel.PROP_MODIFIER property update.
   28436: ALF-8550: Number of http requests (currentThreadsBusy) increases when session times out during creation of webform
   - Corrected use of read and write locks
   28465: Fix for ALF-8023 Share preview doesn't work if...
     fixed as outlined by Dmitry.
   28478: Merged BRANCHES/DEV/ALAN/AUDIT to BRANCHES/DEV/V3.4-BUG-FIX:
      28062-28477 (28062,28063,28080,28081,28302,28303,28334,28340,28464,28469,28477) ALF-8438 Need higher level audit of user actions

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@28481 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
2011-06-20 12:42:10 +00:00

564 lines
20 KiB
Java
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* Copyright (C) 2005-2011 Alfresco Software Limited.
*
* This file is part of Alfresco
*
* Alfresco is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Alfresco 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/
package org.alfresco.wcm.webproject;
import java.util.List;
import java.util.Map;
import org.alfresco.service.PublicService;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.Auditable;
import org.alfresco.service.NotAuditable;
/**
* Web Project Service fundamental API.
* <p>
* This service API is designed to support the public facing Web Project APIs.
*
* @author janv
*/
public interface WebProjectService
{
//
// Web project operations
//
/**
* Create a new web project (with a default ROOT webapp)
* <p>
* Note: the DNS name will be used to generate the web project store id, which can be subsequently retrieved via WebProjectInfo.getStoreId()
*
* @param dnsName DNS name (required, must be unique)
* @param name name (required, must be unique)
* @param title title
* @param description description
* @return WebProjectInfo the created web project info
*/
@NotAuditable
public WebProjectInfo createWebProject(String dnsName, String name, String title, String description);
/**
* Create a new web project (with a default ROOT webapp)
* <p>
* Note: the DNS name will be used to generate the web project store id, which can be subsequently retrieved via WebProjectInfo.getStoreId()
*
* @param dnsName DNS name (required, must be unique)
* @param name name (required, must be unique)
* @param title title
* @param description description
* @param sourceNodeRef web project node ref to branch from (can be null)
* @return WebProjectInfo the created web project info
*
* @deprecated see createWebProject(String dnsName, WebProjectInfo wpInfo)
*/
@NotAuditable
public WebProjectInfo createWebProject(String dnsName, String name, String title, String description, NodeRef sourceNodeRef);
/**
* Create a new web project (with given default web app)
* <p>
* Note: the DNS name will be used to generate the web project store id, which can be subsequently retrieved via WebProjectInfo.getStoreId()
*
* @param dnsName DNS name (required, must be unique)
* @param name name (required, must be unique)
* @param title title
* @param description description
* @param defaultWebApp default webapp (if null, will default to ROOT webapp)
* @param useAsTemplate <tt>true</tt> if this web project can be used as a template to branch from
* @param sourceNodeRef web project node ref to branch from (can be null)
* @return WebProjectInfo the created web project info
*/
@NotAuditable
public WebProjectInfo createWebProject(String dnsName, String name, String title, String description, String defaultWebApp, boolean useAsTemplate, NodeRef sourceNodeRef);
/**
* Create a new web project (with given web project info)
* <p>
* Note: the DNS name will be used to generate the web project store id, which can be subsequently retrieved via WebProjectInfo.getStoreId()
*
* @param wpInfo web project info
*
* Note:
*
* @param dnsName DNS name (required, must be unique)
* @param name name (required, must be unique)
* @param title title
* @param description description
* @param defaultWebApp default webapp (if null, will default to ROOT webapp)
* @param useAsTemplate <tt>true</tt> if this web project can be used as a template to branch from
* @param sourceNodeRef web project node ref to branch from (can be null)
* @param previewProvider preview URI service provider name (must correspond to registered name, if null will be set to default provider)
*
* @return WebProjectInfo the created web project info
*/
@NotAuditable
public WebProjectInfo createWebProject(WebProjectInfo wpInfo);
/**
* Determines whether the "Web Projects" container node is present.
*
* @return true if the "Web Projects" container node is present
*/
@NotAuditable
public boolean hasWebProjectsRoot();
/**
* Returns the Web Projects container
*
* @return NodeRef the node ref of the "Web Projects" container node
*/
@NotAuditable
public NodeRef getWebProjectsRoot();
/**
* Returns the Web Project for the given AVM path
*
* @param absoluteAVMPath the AVM path from which to determine the Web Project
* @return NodeRef the web project node ref for the path or null if it could not be determined
*/
@NotAuditable
public NodeRef getWebProjectNodeFromPath(String absoluteAVMPath);
/**
* Returns the Web Project for the given AVM store name (sandbox store id)
*
* @param storeName the AVM store name (sandbox store id) from which to determine the Web Project
* @return NodeRef the web project node ref for the path or null if it could not be determined
*/
@NotAuditable
public NodeRef getWebProjectNodeFromStore(String storeName);
/**
* List the available web projects for the current user
*
* @return List<WebProjectInfo> list of web project info
*/
@NotAuditable
public List<WebProjectInfo> listWebProjects();
/**
* List the web projects for the given user (based on the available web projects for the current user)
*
* @param userName user name
* @return List<WebProjectInfo> list of web project info
*/
@NotAuditable
public List<WebProjectInfo> listWebProjects(String userName);
/**
* Return true if web project node ref is a web project
*
* @param wpNodeRef web project store id
* @return boolean true, if web project
*/
@NotAuditable
public boolean isWebProject(String wpStoreId);
/**
* Return true if web project node ref is a web project
*
* @param wpNodeRef web project node ref
* @return boolean true, if web project
*/
@NotAuditable
public boolean isWebProject(NodeRef wpNodeRef);
/**
* Gets web project info based on the store id of a web project
* <p>
* Returns null if the web project can not be found
*
* @param wpStoreId web project store id
* @return WebProjectInfo web project info
*/
@NotAuditable
public WebProjectInfo getWebProject(String wpStoreId);
/**
* Gets web project info based on the DM nodeRef of a web project
* <p>
* Returns null if the web project can not be found
*
* @param wpNodeRef web project node ref
* @return WebProjectInfo web project info
*/
@NotAuditable
public WebProjectInfo getWebProject(NodeRef wpNodeRef);
/**
* Get preview provider name configured for given web project (if not configured then return default preview provider)
* @param wpStoreId web project store id
* @return previewProviderName preview URI service provide name
*/
@NotAuditable
public String getPreviewProvider(String wpStoreId);
/**
* Update the web project info
* <p>
* Note: the nodeRef and storeId (dnsName) of a web project cannot be updated once the web project has been created
*
* @param wpInfo web project info
*/
@NotAuditable
public void updateWebProject(WebProjectInfo wpInfo);
/**
* Delete the web project
* <p>
* If the web project does not exist, will log a warning and succeed
* <p>
* Current user must be a content manager for the web project
*
* @param name web project store id
*/
@NotAuditable
public void deleteWebProject(String wpStoreId);
/**
* Delete the web project
* <p>
* If the web project does not exist, will log a warning and succeed
* <p>
* Current user must be a content manager for the web project
* <p>
* Note: this will cascade delete all sandboxes associated with a web project
*
* @param name web project node ref
*/
@NotAuditable
public void deleteWebProject(NodeRef wpNodeRef);
//
// Web app operations
//
/**
* Create webapp for the given web project.
* <p>
* Current user must be a content manager for the web project
*
* @param wpStoreId web project store id
* @param name webapp name (must be unique within a web project)
* @param description webapp description
*/
@NotAuditable
public void createWebApp(String wpStoreId, String name, String description);
/**
* Create webapp for the given web project.
* <p>
* Current user must be a content manager for the web project
*
* @param wpNodeRef web project node ref
* @param name webapp name (must be unique within a web project)
* @param description webapp description
*/
@NotAuditable
public void createWebApp(NodeRef wpNodeRef, String name, String description);
/**
* List webapps for the web project
*
* @param wpStoreId web project store id
* @return List<String> list of webapp names
*/
@NotAuditable
public List<String> listWebApps(String wpStoreId);
/**
* List webapps for the web project
*
* @param wpNodeRef web project node ref
* @return List<String> list of webapp names
*/
@NotAuditable
public List<String> listWebApps(NodeRef wpNodeRef);
/**
* Delete webapp from the given web project
* <p>
* Current user must be a content manager for the web project
* <p>
* Note: this will cascade delete all assets within a webapp
*
* @param wpStoreId web project store id
* @param name webapp name
*/
@NotAuditable
public void deleteWebApp(String wpStoreId, String name);
/**
* Delete webapp from the given web project
* <p>
* Current user must be a content manager for the web project
* <p>
* Note: this will cascade delete all assets within a webapp
*
* @param wpNodeRef web project node ref
* @param name webapp name
*/
@NotAuditable
public void deleteWebApp(NodeRef wpNodeRef, String name);
//
// Web user operations
//
/**
* Returns <tt>true</tt> if the current user is a manager of this web project
* <p>
* Note: This includes admin users but does not include the System user
*
* @param wpStoreId web project store id
* @return boolean <tt>true</tt> if the user is a manager (role = WCMUtil.ROLE_CONTENT_MANAGER), <tt>false</tt> otherwise
*/
@NotAuditable
public boolean isContentManager(String wpStoreId);
/**
* Returns <tt>true</tt> if the current user is a manager of this web project
*
* @param wpNodeRef web project node ref
* @return boolean <tt>true</tt> if the user is a manager (role = WCMUtil.ROLE_CONTENT_MANAGER), <tt>false</tt> otherwise
*/
@NotAuditable
public boolean isContentManager(NodeRef wpNodeRef);
/**
* Returns <tt>true</tt> if the user is a manager of this web project
* <p>
* Note: This includes admin users but does not include the System user
*
* @param storeName web project store id
* @param username user name
* @return boolean <tt>true</tt> if the user is a manager, <tt>false</tt> otherwise
*/
@NotAuditable
public boolean isContentManager(String wpStoreId, String username);
/**
* Returns <tt>true</tt> if the user is a manager of this web project
* <p>
* Note: This includes admin users but does not include the System user
*
* @param wpNodeRef web project node ref
* @param userName user name
* @return boolean <tt>true</tt> if the user is a manager (role = WCMUtil.ROLE_CONTENT_MANAGER), <tt>false</tt> otherwise
*/
@NotAuditable
public boolean isContentManager(NodeRef wpNodeRef, String userName);
/**
* List the web users of the web project
* <p>
* Current user must be a content manager for the web project
*
* @param wpStoreId web project store id
* @return Map<String, String> map of <authority name, role name> pairs
*/
@NotAuditable
public Map<String, String> listWebUsers(String wpStoreId);
/**
* List the web users of the web project
* <p>
* Current user must be a content manager for the web project
*
* @param wpNodeRef web project node ref
* @return Map<String, String> map of <authority name, role name> pairs
*/
@NotAuditable
public Map<String, String> listWebUsers(NodeRef wpNodeRef);
/**
* Get the number of web users invited to this web project
*
* @param wpNodeRef web project node ref
* @return int number of invited web users
*/
@NotAuditable
public int getWebUserCount(NodeRef wpNodeRef);
/**
* Gets the role of the specified user
*
* @param wpStoreId web project store id
* @param userName user name
* @return String web project role for this user, null if no assigned role
*/
@NotAuditable
public String getWebUserRole(String wpStoreId, String userName);
/**
* Gets the role of the specified user
*
* @param wpNodeRef web project node ref
* @param userName user name
* @return String web project role for this user, null if no assigned role
*/
@NotAuditable
public String getWebUserRole(NodeRef wpNodeRef, String userName);
/**
* Indicates whether current user is a web user of the web project or not
*
* @param store id web project store id
* @return boolean <tt>true</tt> if the current user is a web user of the web project, <tt>false</tt> otherwise
*/
@NotAuditable
public boolean isWebUser(String wpStoreId);
/**
* Indicates whether current user is a web user of the web project or not
*
* @param wpNodeRef web project node ref
* @return boolean <tt>true</tt> if the current user is a web user of the web project, <tt>false</tt> otherwise
*/
@NotAuditable
public boolean isWebUser(NodeRef wpNodeRef);
/**
* Indicates whether given user is a web user of the web project or not
*
* @param store id web project store id
* @param userName user name
* @return boolean <tt>true</tt> if the user is a web user of the web project, <tt>false</tt> otherwise
*/
@NotAuditable
public boolean isWebUser(String wpStoreId, String userName);
/**
* Indicates whether given user is a web user of the web project or not
*
* @param wpNodeRef web project node ref
* @param userName user name
* @return boolean <tt>true</tt> if the user is a web user of the web project, <tt>false</tt> otherwise
*/
@NotAuditable
public boolean isWebUser(NodeRef wpNodeRef, String userName);
/**
* Invite users/groups to web project
* <p>
* Note: authority name can be user or group, although a group is flattened into a set of users
* <p>
* Note: author sandbox will NOT be auto created for each invited user
*
* @param wpStoreId web project store id
* @param userGroupRoles map of <authority name, role name> pairs
*/
@NotAuditable
public void inviteWebUsersGroups(String wpStoreId, Map<String, String> userGroupRoles);
/**
* Invite users/groups to web project
* <p>
* Note: authority name can be user or group, although a group is flattened into a set of users
*
* @param wpStoreId web project store id
* @param userGroupRoles map of <authority name, role name> pairs
* @param autoCreateAuthorSandbox if <tt>true</tt> then auto create an author sandbox for each invited user
*/
@NotAuditable
public void inviteWebUsersGroups(String wpStoreId, Map<String, String> userGroupRoles, boolean autoCreateAuthorSandbox);
/**
* Invite users/groups to web project
* <p>
* Note: authority name can be user or group, although a group is flattened into a set of users
*
* @param wpNodeRef web project node ref
* @param userGroupRoles map of <authority name, role name> pairs
* @param autoCreateAuthorSandbox if <tt>true</tt> then auto create the author sandbox for each invited user
*/
@NotAuditable
public void inviteWebUsersGroups(NodeRef wpNodeRef, Map<String, String> userGroupRoles, boolean autoCreateAuthorSandbox);
/**
* Invite user to web project
* <p>
* Note: author sandbox will NOT be auto created for each invited user
*
* @param wpStoreId web project store id
* @param userName user name (not a group)
* @param userRole web project role
*/
@NotAuditable
public void inviteWebUser(String wpStoreId, String userName, String userRole);
/**
* Invite user to web project
*
* @param wpStoreId web project store id
* @param userName user name (not a group)
* @param userRole web project role
* @param autoCreateAuthorSandbox if <tt>true</tt> then auto create the author sandbox for each invited user
*/
@NotAuditable
public void inviteWebUser(String wpStoreId, String userName, String userRole, boolean autoCreateAuthorSandbox);
/**
* Invite user to web project
*
* @param wpNodeRef web project node ref
* @param userName user name (not a group)
* @param userRole web project role
* @param autoCreateAuthorSandbox if <tt>true</tt> then auto create the author sandbox for each invited user
*/
@NotAuditable
public void inviteWebUser(NodeRef wpNodeRef, String userName, String userRole, boolean autoCreateAuthorSandbox);
/**
* Uninvite user from a web project
* <p>
* Note: author sandbox will NOT be auto deleted
*
* @param wpStoreId web project store id
* @param userName user name
*/
@NotAuditable
public void uninviteWebUser(String wpStoreId, String userName);
/**
* Uninvite user from a web project
* <p>
* Note: if author sandbox is auto deleted then this will cascade delete without warning (even if there are changed items)
*
* @param wpStoreId web project store id
* @param userName user name
* @param autoDeleteAuthorSandbox if <tt>true</tt> then auto delete the author sandbox
*/
@NotAuditable
public void uninviteWebUser(String wpStoreId, String userName, boolean autoDeleteAuthorSandbox);
/**
* Uninvite user from a web project
* <p>
* Note: if author sandbox is auto deleted then this will cascade delete without warning (even if there are changed items)
*
* @param wpNodeRef web project node ref
* @param userName user name
* @param autoDeleteAuthorSandbox if <tt>true</tt> then auto delete the author sandbox
*/
@NotAuditable
public void uninviteWebUser(NodeRef wpNodeRef, String userName, boolean autoDeleteAuthorSandbox);
}