/******************************************************************************* * This file is part of OpenNMS(R). * * Copyright (C) 2006-2011 The OpenNMS Group, Inc. * OpenNMS(R) is Copyright (C) 1999-2011 The OpenNMS Group, Inc. * * OpenNMS(R) is a registered trademark of The OpenNMS Group, Inc. * * OpenNMS(R) 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 3 of the License, * or (at your option) any later version. * * OpenNMS(R) 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 OpenNMS(R). If not, see: * http://www.gnu.org/licenses/ * * For more information contact: * OpenNMS(R) Licensing <license@opennms.org> * http://www.opennms.org/ * http://www.opennms.com/ *******************************************************************************/ package org.opennms.web.controller; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang.builder.ToStringBuilder; import org.opennms.core.utils.LogUtils; import org.opennms.netmgt.model.PrimaryType; import org.opennms.netmgt.provision.persist.requisition.Requisition; import org.opennms.web.svclayer.ManualProvisioningService; import org.springframework.validation.BindException; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.SimpleFormController; /** * <p>EditProvisioningGroupController class.</p> */ public class EditProvisioningGroupController extends SimpleFormController { public static class TreeCommand { private String m_formPath; private String m_action; private Requisition m_formData; private String m_currentNode; private String m_groupName = "hardcoded"; public String getAction() { return m_action; } public void setAction(String action) { m_action = action; } public String getGroupName() { return m_groupName; } public void setGroupName(String groupName) { m_groupName = groupName; } public Requisition getFormData() { return m_formData; } public void setFormData(final Requisition importData) { m_formData = importData; } public String getFormPath() { return m_formPath; } public void setFormPath(String target) { m_formPath = target; } public String getCurrentNode() { return m_currentNode; } public void setCurrentNode(String node) { m_currentNode = node; } public String getDataPath() { //added nodeEditForm. to the formData. because somehow we are getting that attached a prefix as well. return m_formPath.substring("nodeEditForm.formData.".length()); } public void setDataPath(String path) { //added nodeEditForm. to the formData. because somehow we are getting that attached a prefix as well. m_formPath = "nodeEditForm.formData."+path; } public String toString() { return new ToStringBuilder(this) .append("action", getAction()) .append("currentNode", getCurrentNode()) .append("dataPath", getDataPath()) .append("formData", getFormData()) .append("formPath", getFormPath()) .append("groupName", getGroupName()) .toString(); } } private ManualProvisioningService m_provisioningService; /** * <p>setProvisioningService</p> * * @param provisioningService a {@link org.opennms.web.svclayer.ManualProvisioningService} object. */ public void setProvisioningService(ManualProvisioningService provisioningService) { m_provisioningService = provisioningService; } /** {@inheritDoc} */ @Override protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { return super.handleRequestInternal(request, response); } /** {@inheritDoc} */ @Override protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors) throws Exception { TreeCommand treeCmd = (TreeCommand)command; String action = treeCmd.getAction(); if (action == null) { return doShow(request, response, treeCmd, errors); } else if ("addNode".equalsIgnoreCase(action)) { return doAddNode(request, response, treeCmd, errors); } else if ("addInterface".equalsIgnoreCase(action)) { return doAddInterface(request, response, treeCmd, errors); } else if ("addService".equalsIgnoreCase(action)) { return doAddService(request, response, treeCmd, errors); } else if ("addCategory".equalsIgnoreCase(action)) { return doAddCategory(request, response, treeCmd, errors); } else if ("addAssetField".equalsIgnoreCase(action)) { return doAddAssetField(request, response, treeCmd, errors); } else if ("save".equalsIgnoreCase(action)) { return doSave(request, response, treeCmd, errors); } else if ("edit".equalsIgnoreCase(action)) { return doEdit(request, response, treeCmd, errors); } else if ("cancel".equalsIgnoreCase(action)) { return doCancel(request, response, treeCmd, errors); } else if ("delete".equalsIgnoreCase(action)) { return doDelete(request, response, treeCmd, errors); } else if ("import".equalsIgnoreCase(action)) { return doImport(request, response, treeCmd, errors); } else if ("done".equalsIgnoreCase(action)) { return done(request, response, treeCmd, errors); } else { errors.reject("Unrecognized action: "+action); return showForm(request, response, errors); } } private ModelAndView done(HttpServletRequest request, HttpServletResponse response, TreeCommand treeCmd, BindException errors) throws Exception { return new ModelAndView(getSuccessView()); } private ModelAndView doShow(HttpServletRequest request, HttpServletResponse response, TreeCommand treeCmd, BindException errors) throws Exception { return showForm(request, response, errors); } private ModelAndView doCancel(HttpServletRequest request, HttpServletResponse response, TreeCommand treeCmd, BindException errors) throws Exception { Requisition formData = m_provisioningService.getProvisioningGroup(treeCmd.getGroupName()); treeCmd.setFormData(formData); treeCmd.setCurrentNode(""); return showForm(request, response, errors); } private ModelAndView doImport(HttpServletRequest request, HttpServletResponse response, TreeCommand treeCmd, BindException errors) throws Exception { m_provisioningService.importProvisioningGroup(treeCmd.getGroupName()); return super.showForm(request, response, errors); } private ModelAndView doDelete(HttpServletRequest request, HttpServletResponse response, TreeCommand treeCmd, BindException errors) throws Exception { Requisition formData = m_provisioningService.deletePath(treeCmd.getGroupName(), treeCmd.getDataPath()); treeCmd.setFormData(formData); return showForm(request, response, errors); } private ModelAndView doAddCategory(HttpServletRequest request, HttpServletResponse response, TreeCommand treeCmd, BindException errors) throws Exception { Requisition formData = m_provisioningService.addCategoryToNode(treeCmd.getGroupName(), treeCmd.getDataPath(), "New Category"); treeCmd.setFormData(formData); treeCmd.setCurrentNode(treeCmd.getFormPath()+".category[0]"); return showForm(request, response, errors); } private ModelAndView doAddAssetField(HttpServletRequest request, HttpServletResponse response, TreeCommand treeCmd, BindException errors) throws Exception { Requisition formData = m_provisioningService.addAssetFieldToNode(treeCmd.getGroupName(), treeCmd.getDataPath(), "key", "value"); treeCmd.setFormData(formData); treeCmd.setCurrentNode(treeCmd.getFormPath()+".asset[0]"); return showForm(request, response, errors); } private ModelAndView doEdit(HttpServletRequest request, HttpServletResponse response, TreeCommand treeCmd, BindException errors) throws Exception { treeCmd.setCurrentNode(treeCmd.getFormPath()); return showForm(request, response, errors); } private ModelAndView doSave(HttpServletRequest request, HttpServletResponse response, TreeCommand treeCmd, BindException errors) throws Exception { try { LogUtils.debugf(this, "treeCmd = %s", treeCmd); treeCmd.getFormData().validate(); final Requisition formData = m_provisioningService.saveProvisioningGroup(treeCmd.getGroupName(), treeCmd.getFormData()); treeCmd.setFormData(formData); treeCmd.setCurrentNode(""); } catch (final Throwable t) { errors.reject(t.getMessage()); } return showForm(request, response, errors); } private ModelAndView doAddService(HttpServletRequest request, HttpServletResponse response, TreeCommand treeCmd, BindException errors) throws Exception { Requisition formData = m_provisioningService.addServiceToInterface(treeCmd.getGroupName(), treeCmd.getDataPath(), "SVC"); treeCmd.setFormData(formData); treeCmd.setCurrentNode(treeCmd.getFormPath()+".monitoredService[0]"); return showForm(request, response, errors); } private ModelAndView doAddInterface(HttpServletRequest request, HttpServletResponse response, TreeCommand treeCmd, BindException errors) throws Exception { Requisition formData = m_provisioningService.addInterfaceToNode(treeCmd.getGroupName(), treeCmd.getDataPath(), ""); treeCmd.setFormData(formData); treeCmd.setCurrentNode(treeCmd.getFormPath()+".interface[0]"); return showForm(request, response, errors); } private ModelAndView doAddNode(HttpServletRequest request, HttpServletResponse response, TreeCommand treeCmd, BindException errors) throws Exception { treeCmd.setFormData(m_provisioningService.addNewNodeToGroup(treeCmd.getGroupName(), "New Node")); treeCmd.setCurrentNode(treeCmd.getFormPath()+".node[0]"); return showForm(request, response, errors); } /** {@inheritDoc} */ @Override protected Object formBackingObject(HttpServletRequest request) throws Exception { TreeCommand formCommand = new TreeCommand(); initializeTreeCommand(request, formCommand); return formCommand; } private void initializeTreeCommand(HttpServletRequest request, TreeCommand formCommand) throws Exception { String groupName = request.getParameter("groupName"); if (groupName == null) { throw new IllegalArgumentException("groupName required"); } Requisition formData = m_provisioningService.getProvisioningGroup(groupName); if (formData == null) { formData = m_provisioningService.createProvisioningGroup(groupName); } formCommand.setFormData(formData); } /** {@inheritDoc} */ @Override protected Map<String, Collection<String>> referenceData(HttpServletRequest request) throws Exception { Map<String, Collection<String>> map = new HashMap<String, Collection<String>>(); // Fetch the list of possible values out of the Castor enumeration List<String> choices = new ArrayList<String>(); for (PrimaryType type : PrimaryType.getAllTypes()) { choices.add(type.getCode()); } map.put("snmpPrimaryChoices", choices); String groupName = request.getParameter("groupName"); if (groupName != null) { List<String> services = new ArrayList<String>(m_provisioningService.getServiceTypeNames(groupName)); Collections.sort(services); map.put("services", services); } List<String> categories = new ArrayList<String>(m_provisioningService.getNodeCategoryNames()); Collections.sort(categories); List<String> assetFields = new ArrayList<String>(m_provisioningService.getAssetFieldNames()); Collections.sort(assetFields); map.put("categories", categories); map.put("assetFields", assetFields); return map; } }