/*******************************************************************************
* This file is part of OpenNMS(R).
*
* Copyright (C) 2009-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.netmgt.provision.persist;
import java.util.ArrayList;
import java.util.List;
import org.opennms.core.utils.LogUtils;
import org.opennms.core.utils.ThreadCategory;
import org.opennms.netmgt.model.NetworkBuilder;
import org.opennms.netmgt.model.OnmsNode;
import org.opennms.netmgt.model.NetworkBuilder.InterfaceBuilder;
import org.opennms.netmgt.model.NetworkBuilder.NodeBuilder;
import org.opennms.netmgt.provision.persist.requisition.RequisitionAsset;
import org.opennms.netmgt.provision.persist.requisition.RequisitionCategory;
import org.opennms.netmgt.provision.persist.requisition.RequisitionInterface;
import org.opennms.netmgt.provision.persist.requisition.RequisitionNode;
/**
* OnmsNodeRequistion
*
* @author brozow
* @version $Id: $
*/
public class OnmsNodeRequisition {
private String m_foreignSource;
private RequisitionNode m_node;
private List<OnmsAssetRequisition> m_assetReqs;
private List<OnmsIpInterfaceRequisition> m_ifaceReqs;
private List<OnmsNodeCategoryRequisition> m_categoryReqs;
/**
* <p>Constructor for OnmsNodeRequisition.</p>
*
* @param foreignSource a {@link java.lang.String} object.
* @param node a {@link org.opennms.netmgt.provision.persist.requisition.RequisitionNode} object.
*/
public OnmsNodeRequisition(final String foreignSource, final RequisitionNode node) {
m_foreignSource = foreignSource;
m_node = node;
m_assetReqs = constructAssetRequistions();
m_ifaceReqs = constructIpInterfaceRequistions();
m_categoryReqs = constructCategoryRequistions();
}
/* (non-Javadoc)
* @see org.opennms.netmgt.provision.persist.NodeRequisition#getForeignSource()
*/
/**
* <p>getForeignSource</p>
*
* @return a {@link java.lang.String} object.
*/
public String getForeignSource() {
return m_foreignSource;
}
private List<OnmsAssetRequisition> constructAssetRequistions() {
final List<OnmsAssetRequisition> reqs = new ArrayList<OnmsAssetRequisition>(m_node.getAssets().size());
for(final RequisitionAsset asset : m_node.getAssets()) {
reqs.add(new OnmsAssetRequisition(asset));
}
return reqs;
}
private List<OnmsIpInterfaceRequisition> constructIpInterfaceRequistions() {
final List<OnmsIpInterfaceRequisition> reqs = new ArrayList<OnmsIpInterfaceRequisition>(m_node.getInterfaces().size());
for(final RequisitionInterface iface : m_node.getInterfaces()) {
reqs.add(new OnmsIpInterfaceRequisition(iface));
}
return reqs;
}
private List<OnmsNodeCategoryRequisition> constructCategoryRequistions() {
final List<OnmsNodeCategoryRequisition> reqs = new ArrayList<OnmsNodeCategoryRequisition>(m_node.getCategories().size());
for(final RequisitionCategory category : m_node.getCategories()) {
reqs.add(new OnmsNodeCategoryRequisition(category));
}
return reqs;
}
/* (non-Javadoc)
* @see org.opennms.netmgt.provision.persist.NodeRequisition#visit(org.opennms.netmgt.provision.persist.RequisitionVisitor)
*/
/**
* <p>visit</p>
*
* @param visitor a {@link org.opennms.netmgt.provision.persist.RequisitionVisitor} object.
*/
public void visit(final RequisitionVisitor visitor) {
visitor.visitNode(this);
for (final OnmsNodeCategoryRequisition catReq : m_categoryReqs) {
catReq.visit(visitor);
}
for(final OnmsIpInterfaceRequisition ipReq : m_ifaceReqs) {
ipReq.visit(visitor);
}
for(final OnmsAssetRequisition assetReq : m_assetReqs) {
assetReq.visit(visitor);
}
visitor.completeNode(this);
}
private static class OnmsNodeBuilder extends AbstractRequisitionVisitor {
private NetworkBuilder bldr = new NetworkBuilder();
public OnmsNode getNode() {
return bldr.getCurrentNode();
}
@Override
public void visitAsset(final OnmsAssetRequisition assetReq) {
bldr.setAssetAttribute(assetReq.getName(), assetReq.getValue());
}
@Override
public void visitNodeCategory(final OnmsNodeCategoryRequisition catReq) {
bldr.addCategory(catReq.getName());
}
@Override
public void visitInterface(final OnmsIpInterfaceRequisition ifaceReq) {
final String ipAddr = ifaceReq.getIpAddr();
if (ipAddr == null || "".equals(ipAddr)) {
bldr.clearInterface();
final String msg = String.format("Found interface on node %s with an empty ipaddr! Ignoring!", bldr.getCurrentNode().getLabel());
LogUtils.errorf(this, msg);
return;
}
final InterfaceBuilder ifBldr = bldr.addInterface(ipAddr);
ifBldr.setIsManaged(ifaceReq.getStatus() == 3 ? "U" : "M");
ifBldr.setIsSnmpPrimary(ifaceReq.getSnmpPrimary().getCode());
}
@Override
public void visitMonitoredService(final OnmsMonitoredServiceRequisition monSvcReq) {
bldr.addService(monSvcReq.getServiceName());
}
@Override
public void visitNode(final OnmsNodeRequisition nodeReq) {
final NodeBuilder nodeBldr = bldr.addNode(nodeReq.getNodeLabel());
nodeBldr.setLabelSource("U");
nodeBldr.setType("A");
nodeBldr.setForeignSource(nodeReq.getForeignSource());
nodeBldr.setForeignId(nodeReq.getForeignId());
nodeBldr.getAssetRecord().setBuilding(nodeReq.getBuilding());
nodeBldr.getAssetRecord().setCity(nodeReq.getCity());
}
}
/* (non-Javadoc)
* @see org.opennms.netmgt.provision.persist.NodeRequisition#constructOnmsNodeFromRequisition()
*/
/**
* <p>constructOnmsNodeFromRequisition</p>
*
* @return a {@link org.opennms.netmgt.model.OnmsNode} object.
*/
public OnmsNode constructOnmsNodeFromRequisition() {
final OnmsNodeBuilder visitor = new OnmsNodeBuilder();
visit(visitor);
return visitor.getNode();
}
/* (non-Javadoc)
* @see org.opennms.netmgt.provision.persist.NodeRequisition#log()
*/
/**
* <p>log</p>
*
* @return a {@link org.opennms.core.utils.ThreadCategory} object.
*/
public ThreadCategory log() {
return ThreadCategory.getInstance(getClass());
}
/* (non-Javadoc)
* @see org.opennms.netmgt.provision.persist.NodeRequisition#getNodeLabel()
*/
/**
* <p>getNodeLabel</p>
*
* @return a {@link java.lang.String} object.
*/
public String getNodeLabel() {
return m_node.getNodeLabel();
}
/* (non-Javadoc)
* @see org.opennms.netmgt.provision.persist.NodeRequisition#getForeignId()
*/
/**
* <p>getForeignId</p>
*
* @return a {@link java.lang.String} object.
*/
public String getForeignId() {
return m_node.getForeignId();
}
/* (non-Javadoc)
* @see org.opennms.netmgt.provision.persist.NodeRequisition#getBuilding()
*/
/**
* <p>getBuilding</p>
*
* @return a {@link java.lang.String} object.
*/
public String getBuilding() {
return m_node.getBuilding();
}
/* (non-Javadoc)
* @see org.opennms.netmgt.provision.persist.NodeRequisition#getCity()
*/
/**
* <p>getCity</p>
*
* @return a {@link java.lang.String} object.
*/
public String getCity() {
return m_node.getCity();
}
/* (non-Javadoc)
* @see org.opennms.netmgt.provision.persist.NodeRequisition#getParentForeignSource()
*/
/**
* <p>getParentForeignSource</p>
*
* @return a {@link java.lang.String} object.
*/
public String getParentForeignSource() {
return m_node.getParentForeignSource();
}
/* (non-Javadoc)
* @see org.opennms.netmgt.provision.persist.NodeRequisition#getParentForeignId()
*/
/**
* <p>getParentForeignId</p>
*
* @return a {@link java.lang.String} object.
*/
public String getParentForeignId() {
return m_node.getParentForeignId();
}
/* (non-Javadoc)
* @see org.opennms.netmgt.provision.persist.NodeRequisition#getParentNodeLabel()
*/
/**
* <p>getParentNodeLabel</p>
*
* @return a {@link java.lang.String} object.
*/
public String getParentNodeLabel() {
return m_node.getParentNodeLabel();
}
/* (non-Javadoc)
* @see org.opennms.netmgt.provision.persist.NodeRequisition#getNode()
*/
/**
* <p>getNode</p>
*
* @return a {@link org.opennms.netmgt.provision.persist.requisition.RequisitionNode} object.
*/
public RequisitionNode getNode() {
return m_node;
}
}