head	1.17;
access;
symbols
	TIGRIS_1_1_0RC2:1.11
	TIGRIS_1_1_0RC1:1.11
	TIGRIS_1_1:1.11.0.4
	TIGRIS_1_0_8:1.11
	TIGRIS_1_0_8RC3:1.11
	TIGRIS_1_0_8RC2:1.11
	TIGRIS_1_0_8RC1:1.11
	TIGRIS_1_0_7:1.11
	TIGRIS_1_0_7RC3:1.11
	TIGRIS_1_0_7RC2:1.11
	TIGRIS_1_0_7RC1:1.11
	TIGRIS_1_0_6:1.11
	TIGRIS_1_0_6RC5:1.11
	TIGRIS_1_0_6RC4:1.11
	TIGRIS_1_0_6RC3:1.11
	TIGRIS_1_0_6RC2:1.11
	TIGRIS_1_0_6RC1:1.11
	TIGRIS_1_0_5:1.11
	TIGRIS_1_0_5RC6:1.11
	TIGRIS_1_0_5RC5:1.11
	TIGRIS_1_0_5RC4:1.11
	TIGRIS_1_0_5RC3:1.11
	TIGRIS_1_0_5RC2:1.11
	TIGRIS_1_0_5RC1:1.11
	TIGRIS_1_0_4:1.11
	TIGRIS_1_0_3:1.11
	TIGRIS_1_0_2:1.11
	TIGRIS_1_0_1:1.11
	TIGRIS_1_0:1.11.0.6
	TIGRIS_1_0_0:1.11
	TIGRIS_1_0_0_RC1:1.11.0.2
	dlr:1.1.1
	TIGRIS_0_9_2_4:1.2
	TIGRIS_0_9_2_3:1.2
	HELM_PEER_PORT_BRANCH:1.1.1.1
	TURBINE_PEER:1.5
	TIGRIS_0_9_2_1:1.5
	TIGRIS_0_9_2:1.2.0.2
	TIGRIS_0_9_0:1.1.0.2;
locks; strict;
comment	@# @;


1.17
date	2001.08.11.09.08.07;	author dlr;	state Exp;
branches;
next	1.16;

1.16
date	2001.07.18.10.10.51;	author dlr;	state Exp;
branches;
next	1.15;

1.15
date	2001.07.18.10.05.14;	author dlr;	state Exp;
branches;
next	1.14;

1.14
date	2001.07.17.20.10.49;	author leonardr;	state Exp;
branches;
next	1.13;

1.13
date	2001.05.23.01.50.15;	author dlr;	state Exp;
branches;
next	1.12;

1.12
date	2001.04.12.20.39.23;	author elicia;	state Exp;
branches;
next	1.11;

1.11
date	2001.03.07.01.53.24;	author lucas;	state Exp;
branches;
next	1.10;

1.10
date	2001.03.06.07.13.50;	author dlr;	state Exp;
branches;
next	1.9;

1.9
date	2001.03.03.02.03.37;	author leonardr;	state Exp;
branches;
next	1.8;

1.8
date	2001.03.03.02.02.43;	author dlr;	state Exp;
branches;
next	1.7;

1.7
date	2001.03.03.02.01.57;	author dlr;	state Exp;
branches;
next	1.6;

1.6
date	2001.02.21.01.08.23;	author dlr;	state Exp;
branches;
next	1.5;

1.5
date	2001.01.26.18.29.05;	author edk;	state Exp;
branches
	1.5.2.1;
next	1.4;

1.4
date	2001.01.26.05.24.06;	author edk;	state dead;
branches;
next	1.3;

1.3
date	2001.01.24.21.41.49;	author leonardr;	state Exp;
branches;
next	1.2;

1.2
date	2001.01.08.23.25.03;	author dlr;	state Exp;
branches;
next	1.1;

1.1
date	2000.12.21.23.40.50;	author elicia;	state Exp;
branches
	1.1.1.1;
next	;

1.1.1.1
date	2001.02.21.00.34.57;	author dlr;	state Exp;
branches;
next	;

1.5.2.1
date	2001.01.28.01.02.18;	author dlr;	state dead;
branches;
next	1.5.2.2;

1.5.2.2
date	2001.02.13.17.45.04;	author leonardr;	state Exp;
branches;
next	1.5.2.3;

1.5.2.3
date	2001.02.15.20.50.42;	author leonardr;	state Exp;
branches;
next	;


desc
@@


1.17
log
@Upgrading to Turbine 3.0-dev, Fulcrum 1.0, and Torque 1.0.
@
text
@/* ================================================================
 * Copyright (c) 2000-2001 CollabNet.  All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
 * met:
 * 
 * 1. Redistributions of source code must retain the above copyright
 * notice, this list of conditions and the following disclaimer.
 * 
 * 2. Redistributions in binary form must reproduce the above copyright
 * notice, this list of conditions and the following disclaimer in the
 * documentation and/or other materials provided with the distribution.
 * 
 * 3. The end-user documentation included with the redistribution, if
 * any, must include the following acknowlegement: "This product includes
 * software developed by CollabNet (http://www.Collab.Net/)."
 * Alternately, this acknowlegement may appear in the software itself, if
 * and wherever such third-party acknowlegements normally appear.
 * 
 * 4. The hosted project names must not be used to endorse or promote
 * products derived from this software without prior written
 * permission. For written permission, please contact info@@collab.net.
 * 
 * 5. Products derived from this software may not use the "Tigris" name
 * nor may "Tigris" appear in their names without prior written
 * permission of CollabNet.
 * 
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 * IN NO EVENT SHALL COLLABNET OR ITS CONTRIBUTORS BE LIABLE FOR ANY
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
 * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 * ====================================================================
 * 
 * This software consists of voluntary contributions made by many
 * individuals on behalf of CollabNet.
 */


package org.tigris.helm.project;

import java.util.*;

import org.apache.velocity.context.Context;

import org.apache.turbine.util.Log;
import org.apache.commons.util.exception.NestableException;

import org.tigris.helm.security.RedirectException;

import org.tigris.helm.security.*;
import org.tigris.helm.tool.DataValidator;
import org.tigris.helm.om.*;
import org.tigris.helm.tool.ContextAPI;

/**
 * Invite people to join a new project.
 *
 * @@author <a href="mailto:elicia@@collab.net">Elicia David</a>
 * @@version $Id: ProjectInvite.java,v 1.16 2001/07/18 10:10:51 dlr Exp $
 */
public class ProjectInvite extends HelmServlet
{
    /**
     * The action which takes the user to the last step.
     */
    private static String SUBMIT_CHANGES_ACTION="Invite";

    /**
     * The project name key.
     */
    private static final String PROJECT_NAME = "projectName";

    /**
     * The project owner key.
     */
    private static final String PROJECT_OWNER = "projectOwner";

    /**
     * The invitation flag key.
     */
    private static final String IS_INVITING = "isInviting";

    /**
     * The list of email addresses for invitation recipients key.
     */
    private static final String INVITE_EMAIL_ADDRS = "inviteEmailAddrs";

    /**
     * The invitation key.
     */
    private static final String INVITATION = "inviteMessage";

    /**
     * Whether to log debugging information.
     */
    private static boolean DEBUG = true;

    /**
     * Collection project invitation information for the new project.
     */
    protected String processRequest(Context context)
        throws NestableException, RedirectException
    {
        String templateName = super.processRequest(context);
    
        try
        {
            User loginUser = getLoginUser(context);
            Project currentProject = getCurrentProject(context);
            String action = getAction(context);

            if (currentProject == null)
            {
                redirectToError(context, "ProjectInvite");
            }

            String inviteEmailAddrs = ContextAPI.processRequiredField
                (context, INVITE_EMAIL_ADDRS, "Email Addresses");
            String inviteMessage = ContextAPI.processRequiredField
                (context, INVITATION, "Invite Message");
            
            List recipients = getRecipients(inviteEmailAddrs);
        
            // Check for invalid emails
            Iterator i = recipients.iterator();
            while (i.hasNext()) 
            {
                String recipient = (String) i.next();
                if (!DataValidator.isValidEmail(recipient))
                    ContextAPI.addValidationError
                        (context, "Email is not valid: " + recipient);
            }


            if (SUBMIT_CHANGES_ACTION.equals(action))
            {
                if (ContextAPI.isValidUserInput(context))
                {
                    // Send invites
                    Invitation.sendInvitations(getCurrentDomain(context),
                                               getRecipients(inviteEmailAddrs),
                                               loginUser,
                                               currentProject,
                                               inviteMessage);
                    redirectTo("ProjectMemberList");
                }
            }
        }
        catch (RedirectException e)
        {
            throw e;
        }
        catch (Exception e)
        {
            Log.error("Unable to send project invitation", e);
            throw new NestableException(e);
        }    
        return templateName;
    }

    /**
     * Parse the recipients from the provided address list text.
     *
     * @@param addresses The data to parse.
     * @@return          The recipients.
     */
    private List getRecipients (String addresses)
    {
        ArrayList recipients = new ArrayList(); 
        StringTokenizer tok = new StringTokenizer
            (addresses, myProperties.getProperty("recipientSeparators"));
        while (tok.hasMoreTokens())
        {
            recipients.add(tok.nextToken());
        }
        return recipients;
    }
}
@


1.16
log
@clean up
@
text
@d55 1
a55 1
import org.apache.turbine.util.TurbineException;
d68 1
a68 1
 * @@version $Id: ProjectInvite.java,v 1.15 2001/07/18 10:05:14 dlr Exp $
d111 1
a111 1
        throws TurbineException, RedirectException
d165 1
a165 1
            throw new TurbineException(e);
@


1.15
log
@Ported Joist Redirect*Exception to Helm.
@
text
@a50 1
import java.sql.Connection;
a55 1
import org.apache.turbine.util.TurbineException;
d68 1
a68 1
 * @@version $Id: ProjectInvite.java,v 1.14 2001/07/17 20:10:49 leonardr Exp $
a71 2
    public static final  String versionID = "$Id: ProjectInvite.java,v 1.14 2001/07/17 20:10:49 leonardr Exp $";

@


1.14
log
@Ported servlets to new error-handling mechanism.
@
text
@d59 1
a59 1
import org.joist.security.RedirectException;
d70 1
a70 1
 * @@version $Id: ProjectInvite.java,v 1.13 2001/05/23 01:50:15 dlr Exp $
d74 1
a74 1
    public static final  String versionID = "$Id: ProjectInvite.java,v 1.13 2001/05/23 01:50:15 dlr Exp $";
@


1.13
log
@Ported Helm from WebMacro to Velocity.
@
text
@d17 1
a17 1
 * software developed by Collab.Net (http://www.Collab.Net/)."
d27 1
a27 1
 * permission of Collab.Net.
d32 1
a32 1
 * IN NO EVENT SHALL COLLAB.NET OR ITS CONTRIBUTORS BE LIABLE FOR ANY
d64 1
d70 1
a70 1
 * @@version $Id: ProjectInvite.java,v 1.12 2001/04/12 20:39:23 elicia Exp $
d74 1
a74 1
    public static final  String versionID = "$Id: ProjectInvite.java,v 1.12 2001/04/12 20:39:23 elicia Exp $";
d130 4
a133 6
            List missingFields = new ArrayList();
            List validationErrors = new ArrayList();
            String inviteEmailAddrs = processField
                (context, INVITE_EMAIL_ADDRS, "Email Address", missingFields);
            String inviteMessage = processField
                (context, INVITATION, "Invite Message", missingFields);
d143 2
a144 1
                    validationErrors.add("Email is not valid: " + recipient);
d148 1
a148 1
            if (action != null && action.equals(SUBMIT_CHANGES_ACTION))
d150 1
a150 1
                if (isValidUserInput(missingFields, validationErrors))
a158 6
                }
                else
                {
                    // Report missing fields and validation errors.
                    reportInvalidUserInput(context, missingFields,
                                           validationErrors);
@


1.12
log
@added check for invalid email addresses when inviting people to a project
@
text
@d53 1
a53 1
import org.webmacro.servlet.*;
d56 2
d69 1
a69 1
 * @@version $Id: ProjectInvite.java,v 1.11 2001/03/07 01:53:24 lucas Exp $
d73 1
a73 1
    public static final  String versionID = "$Id: ProjectInvite.java,v 1.11 2001/03/07 01:53:24 lucas Exp $";
d113 2
a114 2
    protected String processRequest (Connection conn, WebContext context)
        throws HandlerException, RedirectException
d116 1
a116 1
        String templateName = super.processRequest(conn, context);
d175 1
a175 1
            throw new HandlerException(e.getMessage());
@


1.11
log
@Corrected regex madness for Torque upgrade.  -dlr
@
text
@d60 1
d62 1
d67 1
a67 1
 * @@version $Id: ProjectInvite.java,v 1.10 2001/03/06 07:13:50 dlr Exp $
d71 1
a71 1
    public static final  String versionID = "$Id: ProjectInvite.java,v 1.10 2001/03/06 07:13:50 dlr Exp $";
d133 11
@


1.10
log
@Added braces.
@
text
@a60 1

d65 1
a65 1
 * @@version $Id: ProjectInvite.java,v 1.9 2001/03/03 02:03:37 leonardr Exp $
d69 1
a69 1
    public static final  String versionID = "$Id: ProjectInvite.java,v 1.9 2001/03/03 02:03:37 leonardr Exp $";
@


1.9
log
@Corrected servlet name.
@
text
@d66 1
a66 1
 * @@version $Id: ProjectInvite.java,v 1.8 2001/03/03 02:02:43 dlr Exp $
d70 1
a70 1
    public static final  String versionID = "$Id: ProjectInvite.java,v 1.8 2001/03/03 02:02:43 dlr Exp $";
d122 3
a124 1
                redirectToError(context, "ProjectInvite: No project specified");
d145 3
a147 1
                } else {
@


1.8
log
@More informative error message.
@
text
@d66 1
a66 1
 * @@version $Id: ProjectInvite.java,v 1.7 2001/03/03 02:01:57 dlr Exp $
d70 1
a70 1
    public static final  String versionID = "$Id: ProjectInvite.java,v 1.7 2001/03/03 02:01:57 dlr Exp $";
d142 1
a142 1
                    redirectTo("ProjectMembers");
@


1.7
log
@Removed redundant message supplied by super class.
@
text
@d66 1
a66 1
 * @@version $Id: ProjectInvite.java,v 1.6 2001/02/21 01:08:23 dlr Exp $
d70 1
a70 1
    public static final  String versionID = "$Id: ProjectInvite.java,v 1.6 2001/02/21 01:08:23 dlr Exp $";
d156 1
a156 1
            Log.error("Exception thrown in ProjectInvite", e);
@


1.6
log
@This is the highest revision from the HELM_PEER_PORT_BRANCH.  The previous import caused too many conflicts to resolve manually
@
text
@d66 1
a66 1
 * @@version $Id: ProjectInvite.java,v 1.5.2.3 2001/02/15 20:50:42 leonardr Exp $
d70 1
a70 1
    public static final  String versionID = "$Id: ProjectInvite.java,v 1.5.2.3 2001/02/15 20:50:42 leonardr Exp $";
a156 1
            appendToError(context, e.getMessage());
@


1.5
log
@readding all the files as part of the process of returning to the way
things were as of tuesday
@
text
@d2 1
a2 1
 * Copyright (c) 2000 CollabNet.  All rights reserved.
d51 1
a51 3
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
a52 1
import org.webmacro.util.Log;
d55 1
a55 4
import org.joist.*;
import org.joist.util.*;

import com.workingdogs.village.*;
a57 2
import org.joist.database.DataManager;
import org.joist.database.UserManager;
d59 2
a60 6
import org.tigris.helm.security.AccessControlList;
import org.tigris.helm.security.HelmServlet;
import org.tigris.helm.database.ProjectManager;
import org.tigris.helm.tool.Invitation;
import org.tigris.helm.project.Project;
import org.tigris.helm.domain.User;
d66 1
a66 1
 * @@version $Id: ProjectInvite.java,v 1.2 2001/01/08 23:25:03 dlr Exp $
d70 1
a70 1
    public static final  String versionID = "$Id: ProjectInvite.java,v 1.2 2001/01/08 23:25:03 dlr Exp $";
a101 4
    /** Open the log file.
     */
    private static Log log = new Log("projInvte", "ProjectInvite");

d105 1
a105 1
    private static boolean debug = true;
d110 1
a110 1
    protected String processRequest (Connection conn, WebContext ctx)
d113 1
a113 2
        if (debug) log.info("started");
        String templateName = super.processRequest(conn, ctx);
d117 3
a119 3
            User loginUser = getLoginUser(ctx);
            Project currentProject = getCurrentProject(ctx);
            String action = getAction(ctx);
d122 1
a122 7
                redirectToError(ctx, "ProjectInvite: No project specified");

            if (debug)
            {
                log.info("userID=" + loginUser.getID());
                log.info("action=" + action);
            }
d126 4
a129 6
            String inviteEmailAddrs = processField(ctx, INVITE_EMAIL_ADDRS,
                                                   "Email Address",
                                                   missingFields);
            String inviteMessage = processField(ctx, INVITATION, 
                                                   "Invite Message",
                                                   missingFields);
d137 5
a141 7
                    Invitation.sendInvitations(conn,
                                   super.dMgr,
                                   getCurrentDomain(ctx),
                                   getRecipients(inviteEmailAddrs),
                                   loginUser,
                                   currentProject,
                                   inviteMessage);
d145 1
a145 1
                    reportInvalidUserInput(ctx, missingFields,
d156 4
a159 6
            log.exception(e);
            String msg = e.getMessage();
            appendToMessage(ctx, msg);
            throw new HandlerException(msg);
        }
    
d169 1
a169 1
    private ArrayList getRecipients (String addresses)
@


1.5.2.1
log
@Porting to the Turbine Peer system.  -dlr and leonardr
@
text
@d78 1
a78 1
 * @@version $Id: ProjectInvite.java,v 1.5 2001/01/26 18:29:05 edk Exp $
d82 1
a82 1
    public static final  String versionID = "$Id: ProjectInvite.java,v 1.5 2001/01/26 18:29:05 edk Exp $";
@


1.5.2.2
log
@Ported ProjectInvite servlet.
@
text
@d51 3
a53 1
import java.sql.Connection;
d55 1
d58 4
a61 1
import org.apache.turbine.util.Log;
d64 2
d67 6
a72 2
import org.tigris.helm.security.*;
import org.tigris.helm.om.*;
d114 4
d121 1
a121 1
    private static boolean DEBUG = true;
d126 1
a126 1
    protected String processRequest (Connection conn, WebContext context)
d129 2
a130 1
        String templateName = super.processRequest(conn, context);
d134 3
a136 3
            User loginUser = getLoginUser(context);
            Project currentProject = getCurrentProject(context);
            String action = getAction(context);
d139 7
a145 1
                redirectToError(context, "ProjectInvite: No project specified");
d149 6
a154 4
            String inviteEmailAddrs = processField
                (context, INVITE_EMAIL_ADDRS, "Email Address", missingFields);
            String inviteMessage = processField
                (context, INVITATION, "Invite Message", missingFields);
d162 7
a168 5
                    Invitation.sendInvitations(getCurrentDomain(context),
                                               getRecipients(inviteEmailAddrs),
                                               loginUser,
                                               currentProject,
                                               inviteMessage);
d172 1
a172 1
                    reportInvalidUserInput(context, missingFields,
d183 6
a188 4
            Log.error("Exception thrown in ProjectInvite", e);
            appendToError(context, e.getMessage());
            throw new HandlerException(e.getMessage());
        }    
d198 1
a198 1
    private List getRecipients (String addresses)
@


1.5.2.3
log
@Normalized copyright dates.
@
text
@d2 1
a2 1
 * Copyright (c) 2000-2001 CollabNet.  All rights reserved.
d66 1
a66 1
 * @@version $Id: ProjectInvite.java,v 1.5.2.2 2001/02/13 17:45:04 leonardr Exp $
d70 1
a70 1
    public static final  String versionID = "$Id: ProjectInvite.java,v 1.5.2.2 2001/02/13 17:45:04 leonardr Exp $";
@


1.4
log
@revert this stuff to its state as of 2001/01/24 12:42:00 GMT -- with
the following exceptions, which have some different modifications so
they'll work with changes which have happened in joist:

ProjectNewsEdit.java
SkinManager.java
SkinStyleElementValueManager.java
StyleElementManager.java
StyleManager.java

it compiles.  i dunno if it works, though.
@
text
@d65 1
a65 1
import org.tigris.helm.database.UserManager;
d78 1
a78 1
 * @@version $Id: ProjectInvite.java,v 1.3 2001/01/24 21:41:49 leonardr Exp $
d82 1
a82 1
    public static final  String versionID = "$Id: ProjectInvite.java,v 1.3 2001/01/24 21:41:49 leonardr Exp $";
@


1.3
log
@Ported UserManager and RoleManager to Helm. Started moving other TableManagers toward a grab-connection-on-demand model. Massive breakage ensues. dlr and I are working on it.
@
text
@d78 1
a78 1
 * @@version $Id: ProjectInvite.java,v 1.2 2001/01/08 23:25:03 dlr Exp $
d82 1
a82 1
    public static final  String versionID = "$Id: ProjectInvite.java,v 1.2 2001/01/08 23:25:03 dlr Exp $";
@


1.2
log
@Corrected a bunch of regressions to previous User instantion method.  Deprecated User's getUserID() method in favor of getID() for better conformance with BusinessObject interface and orthoginality with other business objects.  Added a guest user and interface.  Added some JavaDoc to User.
@
text
@d65 1
a65 1
import org.joist.database.UserManager;
d78 1
a78 1
 * @@version $Id: ProjectInvite.java,v 1.1 2000/12/21 23:40:50 elicia Exp $
d82 1
a82 1
    public static final  String versionID = "$Id: ProjectInvite.java,v 1.1 2000/12/21 23:40:50 elicia Exp $";
@


1.1
log
@initial revision
@
text
@d78 1
a78 1
 * @@version $Id: ProjectInvite.java,v 1.15 2000/11/29 07:56:30 dlr Exp $
d82 1
a82 1
    public static final  String versionID = "$Id: ProjectInvite.java,v 1.15 2000/11/29 07:56:30 dlr Exp $";
d143 1
a143 1
                log.info("userID=" + loginUser.getUserID());
@


1.1.1.1
log
@Replacing the HEAD with the HELM_PEER_PORT_BRANCH.
@
text
@d2 1
a2 1
 * Copyright (c) 2000-2001 CollabNet.  All rights reserved.
d51 3
a53 1
import java.sql.Connection;
d55 1
d58 4
a61 1
import org.apache.turbine.util.Log;
d64 2
d67 6
a72 2
import org.tigris.helm.security.*;
import org.tigris.helm.om.*;
d78 1
a78 1
 * @@version $Id: ProjectInvite.java,v 1.5.2.3 2001/02/15 20:50:42 leonardr Exp $
d82 1
a82 1
    public static final  String versionID = "$Id: ProjectInvite.java,v 1.5.2.3 2001/02/15 20:50:42 leonardr Exp $";
d114 4
d121 1
a121 1
    private static boolean DEBUG = true;
d126 1
a126 1
    protected String processRequest (Connection conn, WebContext context)
d129 2
a130 1
        String templateName = super.processRequest(conn, context);
d134 3
a136 3
            User loginUser = getLoginUser(context);
            Project currentProject = getCurrentProject(context);
            String action = getAction(context);
d139 7
a145 1
                redirectToError(context, "ProjectInvite: No project specified");
d149 6
a154 4
            String inviteEmailAddrs = processField
                (context, INVITE_EMAIL_ADDRS, "Email Address", missingFields);
            String inviteMessage = processField
                (context, INVITATION, "Invite Message", missingFields);
d162 7
a168 5
                    Invitation.sendInvitations(getCurrentDomain(context),
                                               getRecipients(inviteEmailAddrs),
                                               loginUser,
                                               currentProject,
                                               inviteMessage);
d172 1
a172 1
                    reportInvalidUserInput(context, missingFields,
d183 6
a188 4
            Log.error("Exception thrown in ProjectInvite", e);
            appendToError(context, e.getMessage());
            throw new HandlerException(e.getMessage());
        }    
d198 1
a198 1
    private List getRecipients (String addresses)
@


