/**
 * JOnAS: Java(TM) Open Application Server
 * Copyright (C) 1999-2004 Bull S.A.
 * Contact: jonas-team@objectweb.org
 *
 * This library 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 2.1 of the License, or any later version.
 *
 * This library 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 this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
 * USA
 *
 * --------------------------------------------------------------------------
 * $Id$
 * --------------------------------------------------------------------------
 */

package org.objectweb.jonas.webapp.jonasadmin.domain;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.objectweb.jonas.management.cluster.BaseCluster;
import org.objectweb.jonas.management.j2eemanagement.J2EEDomain;
import org.objectweb.jonas.management.monitoring.DomainMonitor;
import org.objectweb.jonas.management.monitoring.ServerProxy;
import org.objectweb.jonas.webapp.jonasadmin.JonasBaseAction;

/**
 * This action is called when adding a server to the domain (Add server button)
 * @author Adriana Danes
 */
public class CreateJonasServerAction extends JonasBaseAction {

// --------------------------------------------------------- Public Methods
    public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form
            , HttpServletRequest p_Request, HttpServletResponse p_Response)
    throws IOException, ServletException {

        // Form used
        NewServerForm oForm = new NewServerForm();
        m_Session.setAttribute("newServerForm", oForm);
        String clusterName = (String) m_Session.getAttribute("currentCluster");
        String domainName = m_WhereAreYou.getCurrentDomainName();
        // Forward to the jsp.
        if (domainName.equals(clusterName)) {
            return (p_Mapping.findForward("AddServerToDomain"));
        } else {
            oForm.setCluster(true);
            // Get access to the DomainMonitor and domain to the domain's
            // and current cluster's server list
            DomainMonitor dm = J2EEDomain.getInstance().getDomainMonitor();
            if (dm != null) {
                BaseCluster domainCluster = dm.findCluster(domainName);
                if (domainCluster == null) {
                    throw new RuntimeException("Cannot find cluster " + domainName);
                }
                BaseCluster currentCluster = dm.findCluster(clusterName);
                if (domainCluster == null) {
                    throw new RuntimeException("Cannot find cluster " + clusterName);
                }
                // add all server names to the list
                ArrayList serverNameList = new ArrayList();
                for (Iterator it = domainCluster.getServerProxyList().iterator(); it.hasNext();) {
                    ServerProxy proxy = (ServerProxy) it.next();
                    serverNameList.add(proxy.getName());
                }
                // remove the names if servers already in the cluster
                for (Iterator it = currentCluster.getServerProxyList().iterator(); it.hasNext();) {
                    ServerProxy proxy = (ServerProxy) it.next();
                    serverNameList.remove(proxy.getName());
                }
                String[] serverNames = new String[serverNameList.size()];
                for (int i = 0; i < serverNameList.size(); i++) {
                    serverNames[i] = (String) serverNameList.get(i);
                }
                oForm.setServerNames(serverNames);
            }
            return (p_Mapping.findForward("AddServerToCluster"));
        }
    }
}