/*******************************************************************************
* 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.provisiond.utils;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import org.opennms.netmgt.provision.persist.FilesystemForeignSourceRepository;
import org.opennms.netmgt.provision.persist.requisition.Requisition;
import org.opennms.netmgt.provision.persist.requisition.RequisitionAsset;
import org.opennms.netmgt.provision.persist.requisition.RequisitionAssetCollection;
import org.opennms.netmgt.provision.persist.requisition.RequisitionInterface;
import org.opennms.netmgt.provision.persist.requisition.RequisitionInterfaceCollection;
import org.opennms.netmgt.provision.persist.requisition.RequisitionMonitoredService;
import org.opennms.netmgt.provision.persist.requisition.RequisitionMonitoredServiceCollection;
import org.opennms.netmgt.provision.persist.requisition.RequisitionNode;
public class CsvRequisitionParser {
private static FilesystemForeignSourceRepository m_fsr = null;
public static void main(String[] args) {
Runtime.getRuntime().addShutdownHook(createShutdownHook());
if (args.length < 2) {
System.err.println("Requires 2 parameters.");
System.exit(1);
}
String fn = args[0];
String outDir = args[1];
try {
parseCsv(fn, outDir);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Finished.");
}
protected static void parseCsv(String fname, String outDir) throws IOException {
File csv = new File(fname);
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(csv)));
String line = null;
int lineNum = 0;
while ((line = br.readLine()) != null) {
lineNum++;
if (line != null && line.startsWith("#")) {
continue;
}
String[] fields = line.split(",", 6);
int commas = fields.length;
if (commas != 6) {
System.out.println("Error on line: "+Integer.toString(lineNum)+". Found "+Integer.toString(commas)+" fields and expected 6");
continue;
}
m_fsr = new FilesystemForeignSourceRepository();
m_fsr.setRequisitionPath(outDir);
RequisitionData rd;
try {
rd = new RequisitionData(fields);
} catch (Throwable e) {
System.err.println(e);
continue;
}
System.out.println("Line "+Integer.toString(lineNum)+":"+rd.toString());
Requisition r;
String foreignSource = rd.getForeignSource();
r = m_fsr.getRequisition(foreignSource);
if (r== null) {
r = new Requisition(foreignSource);
}
System.err.println("Creating/Updating requistion: "+foreignSource);
r.updateDateStamp();
RequisitionMonitoredServiceCollection services = new RequisitionMonitoredServiceCollection();
services.add(new RequisitionMonitoredService("ICMP"));
services.add(new RequisitionMonitoredService("SNMP"));
RequisitionInterface iface = new RequisitionInterface();
iface.setDescr("mgmt-if");
iface.setIpAddr(rd.getPrimaryIp());
iface.setManaged(true);
iface.setSnmpPrimary("P");
iface.setStatus(Integer.valueOf(1));
iface.setMonitoredServices(services);
RequisitionInterfaceCollection ric = new RequisitionInterfaceCollection();
ric.add(iface);
RequisitionAssetCollection rac = new RequisitionAssetCollection();
rac.add(new RequisitionAsset("Comment", "Customer: "+rd.getCustomerName()));
//rac.add(new RequisitionAsset("CustomerID", rd.getCustomerId()));
//add categories
RequisitionNode rn = new RequisitionNode();
rn.setAssets(rac);
rn.setBuilding(foreignSource);
rn.setCategories(null);
rn.setForeignId(rd.getForeignId());
rn.setInterfaces(ric);
rn.setNodeLabel(rd.getNodeLabel());
r.insertNode(rn);
m_fsr.save(r);
}
br.close();
}
public static Thread createShutdownHook() {
Thread t = new Thread() {
@Override
public void run() {
System.out.println("\nHave a nice day! :)");
Runtime.getRuntime().halt(0);
}
};
return t;
}
}