/*******************************************************************************
* This file is part of OpenNMS(R).
*
* Copyright (C) 2010-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.mock;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.opennms.core.utils.LogUtils;
import org.opennms.netmgt.xml.event.Event;
/**
* A test network configuration
*
* @author brozow
* @version $Id: $
*/
public class MockNetwork extends MockContainer<MockContainer<?,?>,MockElement> {
/**
* <p>createDownEvent</p>
*
* @return a {@link org.opennms.netmgt.xml.event.Event} object.
*/
public Event createDownEvent() {
throw new UnsupportedOperationException("Cannot generate down event for the network");
}
/**
* <p>createUpEvent</p>
*
* @return a {@link org.opennms.netmgt.xml.event.Event} object.
*/
public Event createUpEvent() {
throw new UnsupportedOperationException("Cannot generate up event for the network");
}
/**
* <p>createNewEvent</p>
*
* @return a {@link org.opennms.netmgt.xml.event.Event} object.
*/
public Event createNewEvent() {
throw new UnsupportedOperationException("Cannot generate new event for the network");
}
/**
* <p>createDeleteEvent</p>
*
* @return a {@link org.opennms.netmgt.xml.event.Event} object.
*/
public Event createDeleteEvent() {
throw new UnsupportedOperationException("Cannot generate delete event for the network");
}
private MockInterface m_currentInterface;
private MockNode m_currentNode;
private Map<Integer, String> m_idToNameMap = new HashMap<Integer, String>();
private int m_invalidPollCount;
private Map<String, Integer> m_nameToIdMap = new HashMap<String, Integer>();
private String m_criticalService;
private String m_ifAlias;
private int m_nextServiceId = 1;
/**
* <p>Constructor for MockNetwork.</p>
*/
public MockNetwork() {
super(null);
m_criticalService = "ICMP";
}
/**
* <p>getCriticalService</p>
*
* @return a {@link java.lang.String} object.
*/
public String getCriticalService() {
return m_criticalService;
}
/**
* <p>setCriticalService</p>
*
* @param svcName a {@link java.lang.String} object.
*/
public void setCriticalService(String svcName) {
m_criticalService = svcName;
}
/**
* <p>getIfAlias</p>
*
* @return a {@link java.lang.String} object.
*/
public String getIfAlias() {
return m_ifAlias;
}
/**
* <p>setIfAlias</p>
*
* @param ifAlias a {@link java.lang.String} object.
*/
public void setIfAlias(String ifAlias) {
m_currentInterface.setIfAlias(ifAlias);
}
// model
/**
* <p>addInterface</p>
*
* @param nodeId a int.
* @param ipAddr a {@link java.lang.String} object.
* @return a {@link org.opennms.netmgt.mock.MockInterface} object.
*/
public MockInterface addInterface(int nodeId, String ipAddr) {
return getNode(nodeId).addInterface(ipAddr);
}
// model
/**
* <p>addInterface</p>
*
* @param ipAddr a {@link java.lang.String} object.
* @return a {@link org.opennms.netmgt.mock.MockInterface} object.
*/
public MockInterface addInterface(String ipAddr) {
m_currentInterface = m_currentNode.addInterface(ipAddr);
return m_currentInterface;
}
// model
/**
* <p>addNode</p>
*
* @param nodeid a int.
* @param label a {@link java.lang.String} object.
* @return a {@link org.opennms.netmgt.mock.MockNode} object.
*/
public MockNode addNode(int nodeid, String label) {
m_currentNode = (MockNode) addMember(new MockNode(this, nodeid, label));
return m_currentNode;
}
// model
/**
* <p>addService</p>
*
* @param nodeId a int.
* @param ipAddr a {@link java.lang.String} object.
* @param svcName a {@link java.lang.String} object.
* @return a {@link org.opennms.netmgt.mock.MockService} object.
*/
public MockService addService(int nodeId, String ipAddr, String svcName) {
int serviceId = getServiceId(svcName);
return getInterface(nodeId, ipAddr).addService(svcName, serviceId);
}
// model
/**
* <p>addService</p>
*
* @param svcName a {@link java.lang.String} object.
* @return a {@link org.opennms.netmgt.mock.MockService} object.
*/
public MockService addService(String svcName) {
int serviceId = getServiceId(svcName);
return m_currentInterface.addService(svcName, serviceId);
}
// model
/**
* <p>getIdToNameMap</p>
*
* @return a {@link java.util.Map} object.
*/
public Map<Integer, String> getIdToNameMap() {
return Collections.unmodifiableMap(m_idToNameMap);
}
// model
/**
* <p>getInterface</p>
*
* @param nodeid a int.
* @param ipAddr a {@link java.lang.String} object.
* @return a {@link org.opennms.netmgt.mock.MockInterface} object.
*/
public MockInterface getInterface(int nodeid, String ipAddr) {
MockNode node = getNode(nodeid);
return (node == null ? null : node.getInterface(ipAddr));
}
// stats
/**
* <p>getInvalidPollCount</p>
*
* @return a int.
*/
public int getInvalidPollCount() {
return m_invalidPollCount;
}
// impl
Object getKey() {
return this;
}
// model
/**
* <p>getNameToIdMap</p>
*
* @return a {@link java.util.Map} object.
*/
public Map<String, Integer> getNameToIdMap() {
return Collections.unmodifiableMap(m_nameToIdMap);
}
// model
/**
* <p>getNode</p>
*
* @param i a int.
* @return a {@link org.opennms.netmgt.mock.MockNode} object.
*/
public MockNode getNode(int i) {
return (MockNode) getMember(new Integer(i));
}
// model
/**
* <p>getNodeIdForInterface</p>
*
* @param ipAddr a {@link java.lang.String} object.
* @return a int.
*/
public int getNodeIdForInterface(final String ipAddr) {
class NodeFinder extends MockVisitorAdapter {
MockNode node;
public MockNode getNode() {
return node;
}
public void visitInterface(MockInterface iface) {
if (iface.getIpAddr().equals(ipAddr)) {
node = iface.getNode();
}
}
}
NodeFinder finder = new NodeFinder();
visit(finder);
return finder.getNode() == null ? -1 : finder.getNode().getNodeId();
}
// model
/**
* <p>getService</p>
*
* @param nodeid a int.
* @param ipAddr a {@link java.lang.String} object.
* @param svcName a {@link java.lang.String} object.
* @return a {@link org.opennms.netmgt.mock.MockService} object.
*/
public MockService getService(int nodeid, String ipAddr, String svcName) {
final MockInterface iface = getInterface(nodeid, ipAddr);
LogUtils.debugf(this, "getService(%d, %s, %s) = %s", nodeid, ipAddr, svcName, iface);
return (iface == null ? null : iface.getService(svcName));
}
public List<MockService> getServices(int nodeId) {
final List<MockService> services = new ArrayList<MockService>();
for (final MockElement me : getMembers()) {
if (me instanceof MockService) {
services.add((MockService)me);
}
}
return services;
}
// model
private int getServiceId(String svcName) {
int serviceId;
if (m_nameToIdMap.containsKey(svcName)) {
serviceId = m_nameToIdMap.get(svcName).intValue();
} else {
serviceId = m_nextServiceId++;
Integer serviceIdObj = new Integer(serviceId);
m_nameToIdMap.put(svcName, serviceIdObj);
m_idToNameMap.put(serviceIdObj, svcName);
}
return serviceId;
}
// stats
/**
* <p>receivedInvalidPoll</p>
*
* @param ipAddr a {@link java.lang.String} object.
* @param svcName a {@link java.lang.String} object.
*/
public void receivedInvalidPoll(String ipAddr, String svcName) {
m_invalidPollCount++;
}
// model
/**
* <p>removeElement</p>
*
* @param element a {@link org.opennms.netmgt.mock.MockElement} object.
*/
public synchronized void removeElement(MockElement element) {
MockContainer<?,?> parent = element.getParent();
parent.removeMember(element);
}
// model
/**
* <p>removeInterface</p>
*
* @param iface a {@link org.opennms.netmgt.mock.MockInterface} object.
*/
public void removeInterface(MockInterface iface) {
removeElement(iface);
}
// model
/**
* <p>removeNode</p>
*
* @param node a {@link org.opennms.netmgt.mock.MockNode} object.
*/
public void removeNode(MockNode node) {
removeElement(node);
}
// model
/**
* <p>removeService</p>
*
* @param svc a {@link org.opennms.netmgt.mock.MockService} object.
*/
public void removeService(MockService svc) {
removeElement(svc);
}
// stats
/**
* <p>resetInvalidPollCount</p>
*/
public void resetInvalidPollCount() {
m_invalidPollCount = 0;
}
// impl
/** {@inheritDoc} */
@Override
public void visit(MockVisitor v) {
super.visit(v);
v.visitNetwork(this);
visitMembers(v);
}
/**
* <p>getNodeCount</p>
*
* @return a int.
*/
public int getNodeCount() {
class NodeCounter extends MockVisitorAdapter {
int count = 0;
public void visitNode(MockNode node) {
count++;
}
public int getCount() {
return count;
}
}
NodeCounter counter = new NodeCounter();
visit(counter);
return counter.getCount();
}
/**
* <p>getInterfaceCount</p>
*
* @return a int.
*/
public int getInterfaceCount() {
class InterfaceCounter extends MockVisitorAdapter {
int count = 0;
public void visitInterface(MockInterface iface) {
count++;
}
public int getCount() {
return count;
}
}
InterfaceCounter counter = new InterfaceCounter();
visit(counter);
return counter.getCount();
}
/**
* <p>getServiceCount</p>
*
* @return a int.
*/
public int getServiceCount() {
class ServiceCounter extends MockVisitorAdapter {
int count = 0;
public void visitService(MockService svc) {
count++;
}
public int getCount() {
return count;
}
}
ServiceCounter counter = new ServiceCounter();
visit(counter);
return counter.getCount();
}
public String toString() {
return new ToStringBuilder(this)
.append("critical-service", m_criticalService)
.append("members", getMembers())
.toString();
}
/**
* <p>createStandardNetwork</p>
*/
public void createStandardNetwork() {
setCriticalService("ICMP");
addNode(1, "Router");
addInterface("192.168.1.1");
setIfAlias("dot1 interface alias");
addService("ICMP");
addService("SMTP");
addInterface("192.168.1.2");
setIfAlias("dot2 interface alias");
addService("ICMP");
addService("SMTP");
addNode(2, "Server");
addInterface("192.168.1.3");
setIfAlias("dot3 interface alias");
addService("ICMP");
addService("HTTP");
addNode(3, "Firewall");
addInterface("192.168.1.4");
addService("SMTP");
addService("HTTP");
addInterface("192.168.1.5");
addService("SMTP");
addService("HTTP");
}
}