head	1.5;
access;
symbols;
locks; strict;
comment	@# @;


1.5
date	2001.08.28.00.56.12;	author leonardr;	state Exp;
branches;
next	1.4;

1.4
date	2001.08.11.09.08.01;	author dlr;	state Exp;
branches;
next	1.3;

1.3
date	2001.07.18.10.05.12;	author dlr;	state Exp;
branches;
next	1.2;

1.2
date	2001.07.17.17.55.44;	author leonardr;	state Exp;
branches;
next	1.1;

1.1
date	2001.06.29.00.57.48;	author leonardr;	state Exp;
branches;
next	;


desc
@@


1.5
log
@Moved code out of BaseHelmServlet and into other classes which suit it better.
@
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.domain;


import java.sql.*;
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.om.*;

import org.tigris.helm.tool.DBFlag;
import org.tigris.helm.tool.ContextAPI;

/**
 * Changes the info for the selected category. Also can remove
 * projects from the category.
 * @@author <a href="mailto:leonardr@@collab.net">Leonard Richardson</a>
 */
public class CategoryEdit extends HelmServlet 
{
    private static final boolean DEBUG = true;
    
    private static String MAKE_CHANGES_ACTION = "Submit Changes";
    private static String REMOVE_ELEMENTS_ACTION = "Remove Elements";

    private static String PARENT_FIELD="parent";
    private static String SHORT_DESCRIPTION_FIELD = "shortDescription";
    private static String LONG_DESCRIPTION_FIELD = "longDescription";
    private static String IS_PUBLIC_FIELD = "isPublic";
    private static String REMOVE_ELEMENT_FIELD_PREFIX = "Remove";

    /**
     *  If they've submitted changes, make them.
     */
    protected String processRequest(Context context)
	throws NestableException, RedirectException
    {
	String templateName = super.processRequest(context);
        try 
        {
            Domain currentDomain = getCurrentDomain(context);
            AccessControlList acl = getLoginUser(context).getACL();
            Category category = getCurrentCategory(context);            
            Project currentParent = null;
            if (category != null)
            {
                currentParent = category.getParentProject();
            }

            String action = getAction(context);
            
            String parentID = ContextAPI.processField
                (context, PARENT_FIELD, currentParent.getID());
            Project newParent = ProjectPeer.getInstance(parentID);

            String shortDescription  = ContextAPI.processField
                (context, SHORT_DESCRIPTION_FIELD, "Summary");
            String longDescription = ContextAPI.processField
                (context, LONG_DESCRIPTION_FIELD, "Description");
            boolean isPublic  =
                ContextAPI.processCheckbox(context, IS_PUBLIC_FIELD);

            if (MAKE_CHANGES_ACTION.equals(action))
            {
                category.updateInfo(acl, shortDescription, longDescription, 
                                    DBFlag.flagValueOf(isPublic));

                if (parentID != currentParent.getID())
                {
                    category.changeParent(acl, newParent);
                }

                context.put("currentCategory", category);
                ContextAPI.addMessage(context, "Update succeeded.");
            } 
            else if (REMOVE_ELEMENTS_ACTION.equals(action))
            {
                List projectIDsToRemove = ContextAPI.searchParamsForPrefix
                    (context, REMOVE_ELEMENT_FIELD_PREFIX);

                for (Iterator i = projectIDsToRemove.iterator(); i.hasNext();)
                {
                    String projectID =  (String)i.next();
                    Project project = ProjectPeer.getInstance(projectID);
                    category.disassociate(acl, project);
                }

                String msg = String.valueOf(projectIDsToRemove.size())
                    + " project" + (projectIDsToRemove.size() == 1?"":"s")
                    + " removed.";
                ContextAPI.addMessage(context, msg);
            }
        } 
        catch (RedirectException e)
        {
            throw e;
        }
        catch (Exception e)
        {
            String msg = "Couldn't edit category: " + e.getMessage();
            Log.error(msg, e);
            throw new NestableException(e);
        }    
        return templateName;        
    }
}
@


1.4
log
@Upgrading to Turbine 3.0-dev, Fulcrum 1.0, and Torque 1.0.
@
text
@d132 1
a132 1
                List projectIDsToRemove = searchParamsForPrefix
@


1.3
log
@Ported Joist Redirect*Exception to Helm.
@
text
@d57 1
a57 1
import org.apache.turbine.util.TurbineException;
d90 1
a90 1
	throws TurbineException, RedirectException
d156 1
a156 1
            throw new TurbineException(e);
@


1.2
log
@Porting of domain package to new error handling API.
@
text
@d59 1
a59 1
import org.joist.security.RedirectException;
@


1.1
log
@Implemented basic project group and category nesting.
@
text
@d66 1
a104 2
            List missingFields = new ArrayList();
            List validationErrors = new ArrayList();
d106 1
a106 1
            String parentID = processField
d110 4
a113 6
            String shortDescription  =
                processField(context, SHORT_DESCRIPTION_FIELD, 
                             "Summary", missingFields);
            String longDescription = processField
                (context, LONG_DESCRIPTION_FIELD, "Description", 
                 missingFields);    
d115 1
a115 1
                processCheckbox(context, IS_PUBLIC_FIELD);            
d128 1
a128 1
                appendToMessage(context, "Update succeeded.");
d145 1
a145 1
                appendToMessage(context, msg);
@

