diff --git a/config/alfresco/invitation-service-context.xml b/config/alfresco/invitation-service-context.xml index ce5e8d454c..602c5b5ada 100644 --- a/config/alfresco/invitation-service-context.xml +++ b/config/alfresco/invitation-service-context.xml @@ -57,5 +57,12 @@ + + + + invitations + + + \ No newline at end of file diff --git a/source/java/org/alfresco/repo/invitation/InvitationServiceImpl.java b/source/java/org/alfresco/repo/invitation/InvitationServiceImpl.java index 4a18661888..d44d1bdb59 100644 --- a/source/java/org/alfresco/repo/invitation/InvitationServiceImpl.java +++ b/source/java/org/alfresco/repo/invitation/InvitationServiceImpl.java @@ -563,19 +563,6 @@ public class InvitationServiceImpl implements InvitationService List ret = new ArrayList(); - // at least one of 'inviterUserName', - // 'inviteeUserName', 'siteShortName', - // URL request parameters has not been provided - if (!(criteria.getInvitee() != null - || criteria.getResourceName() != null - || criteria.getInviter() != null)) - { - Object[] objs = {}; - throw new InvitationExceptionUserError( - "search invitation: At least one of the following URL request parameters must be provided in URL " - + "'invite', 'inviter', 'resourceName'", objs); - } - InvitationSearchCriteria.InvitationType toSearch = criteria.getInvitationType(); /** @@ -584,42 +571,35 @@ public class InvitationServiceImpl implements InvitationService if(toSearch == InvitationSearchCriteria.InvitationType.ALL || toSearch == InvitationSearchCriteria.InvitationType.NOMINATED) { // query for nominated workflow tasks by given parameters - // create workflow task query WorkflowTaskQuery wfTaskQuery = new WorkflowTaskQuery(); - // the invite URL request - // parameters - // - because this web script class will terminate with a web script - // exception if none of the required - // request parameters are provided, at least one of these query - // properties will be set - // at this point - - // workflow query properties HashMap wfNominatedQueryProps = new HashMap(10, 1.0f); - if (criteria.getInviter() != null) { - wfNominatedQueryProps - .put( - WorkflowModelNominatedInvitation.WF_PROP_INVITER_USER_NAME, - criteria.getInviter()); - } - if (criteria.getInvitee() != null) { - wfNominatedQueryProps - .put( - WorkflowModelNominatedInvitation.WF_PROP_INVITEE_USER_NAME, - criteria.getInvitee()); - } - if (criteria.getResourceName() != null) { + if (criteria.getInviter() != null) + { wfNominatedQueryProps.put( - WorkflowModelNominatedInvitation.WF_PROP_RESOURCE_NAME, - criteria.getResourceName()); - + WorkflowModelNominatedInvitation.WF_PROP_INVITER_USER_NAME, + criteria.getInviter()); + } + if (criteria.getInvitee() != null) + { + wfNominatedQueryProps.put( + WorkflowModelNominatedInvitation.WF_PROP_INVITEE_USER_NAME, + criteria.getInvitee()); + } + if (criteria.getResourceType() != null) + { wfNominatedQueryProps.put( WorkflowModelNominatedInvitation.WF_PROP_RESOURCE_TYPE, criteria.getResourceType().toString()); } + if (criteria.getResourceName() != null) + { + wfNominatedQueryProps.put( + WorkflowModelNominatedInvitation.WF_PROP_RESOURCE_NAME, + criteria.getResourceName()); + } // set workflow task query parameters wfTaskQuery.setProcessCustomProps(wfNominatedQueryProps); @@ -715,14 +695,17 @@ public class InvitationServiceImpl implements InvitationService WorkflowModelModeratedInvitation.WF_PROP_INVITEE_USER_NAME, criteria.getInvitee()); } + if (criteria.getResourceType() != null) + { + wfQueryModeratedProps.put( + WorkflowModelModeratedInvitation.WF_PROP_RESOURCE_TYPE, + criteria.getResourceType().toString()); + } if (criteria.getResourceName() != null) { wfQueryModeratedProps.put( WorkflowModelModeratedInvitation.WF_PROP_RESOURCE_NAME, criteria.getResourceName()); - wfQueryModeratedProps.put( - WorkflowModelModeratedInvitation.WF_PROP_RESOURCE_TYPE, - criteria.getResourceType().toString()); } // set workflow task query parameters diff --git a/source/java/org/alfresco/repo/invitation/script/ScriptInvitationService.java b/source/java/org/alfresco/repo/invitation/script/ScriptInvitationService.java new file mode 100644 index 0000000000..82e06d19e1 --- /dev/null +++ b/source/java/org/alfresco/repo/invitation/script/ScriptInvitationService.java @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2005-2009 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.repo.invitation.script; + +import java.util.List; + +import org.alfresco.repo.invitation.InvitationSearchCriteriaImpl; +import org.alfresco.repo.jscript.BaseScopableProcessorExtension; +import org.alfresco.service.cmr.invitation.Invitation; +import org.alfresco.service.cmr.invitation.InvitationService; +import org.alfresco.service.cmr.invitation.Invitation.ResourceType; +import org.alfresco.service.cmr.invitation.InvitationSearchCriteria.InvitationType; +import org.mozilla.javascript.Scriptable; + + +/** + * Script object representing the invitation service. + * + * Provides access to invitations from outside the context of a web project or a web site + * + * @author Mark Rogers + */ +public class ScriptInvitationService extends BaseScopableProcessorExtension +{ + + /** The invitation service */ + private InvitationService invitationService; + + /** + * Set the invitation service + * + * @param invitationService the invitation service + */ + public void setInvitationService(InvitationService invitationService) + { + this.invitationService = invitationService; + } + + /** + * List the open invitations. + * props specifies optional properties to constrain the search. + * + * @param props inviteeUserName + * @param props resourceName + * @param props resourceType + * @param props invitationType + * + * @return the invitations + */ + + public ScriptInvitation[] listInvitations(Scriptable props) + { + InvitationSearchCriteriaImpl crit = new InvitationSearchCriteriaImpl(); + + if (props.has("resourceName", props)) + { + crit.setResourceName((String)props.get("resourceName", props)); + } + if (props.has("resourceType", props)) + { + crit.setResourceType(ResourceType.valueOf((String)props.get("resourceType", props))); + } + if (props.has("inviteeUserName", props)) + { + crit.setInvitee((String)props.get("inviteeUserName", props)); + } + if (props.has("invitationType", props)) + { + String invitationType = (String)props.get("invitationType", props); + crit.setInvitationType(InvitationType.valueOf(invitationType)); + } + + List invitations = invitationService.searchInvitation(crit); + ScriptInvitation[] ret = new ScriptInvitation[invitations.size()]; + int i = 0; + for(Invitation item : invitations) + { + ret[i++] = ScriptInvitationFactory.toScriptInvitation(item, invitationService); + } + return ret; + } +}