package org.opennaas.extensions.roadm.wonesys.commandsets.commands;
import java.io.IOException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.opennaas.core.resources.command.CommandException;
import org.opennaas.core.resources.command.Response;
import org.opennaas.extensions.roadm.wonesys.commandsets.WonesysCommand;
import org.opennaas.extensions.roadm.wonesys.commandsets.WonesysResponse;
import org.opennaas.extensions.router.model.opticalSwitch.dwdm.proteus.ProteusOpticalSwitch;
import org.opennaas.extensions.router.model.opticalSwitch.dwdm.proteus.cards.ProteusOpticalSwitchCard;
import org.opennaas.extensions.router.model.utils.OpticalSwitchCardFactory;
public class GetInventoryCommand extends WonesysCommand {
Log log = LogFactory.getLog(WonesysCommand.class);
private static final String COMMAND_ID = "ff01";
private static final String DATA_LENGTH = "0000";
@Override
public void parseResponse(Object response, Object model) throws CommandException {
WonesysResponse commandResponse = (WonesysResponse) response;
if (commandResponse.getStatus().equals(Response.Status.ERROR)) {
if (commandResponse.getErrors().size() > 0)
throw new CommandException(commandResponse.getErrors().get(0));
else
throw new CommandException("Command Failed");
}
OpticalSwitchCardFactory factory;
try {
factory = new OpticalSwitchCardFactory();
} catch (IOException e) {
throw new CommandException("Failed to load received data into model. Error loading card profiles file:", e);
}
String responseData = commandResponse.getInformation();
// ID (2B) tipo (1B) subtipo (1B) = 4B per result, 2chars x Byte
int resultLength = 4 * 2;
int resultsCount = responseData.length() / resultLength;
String[] results = new String[resultsCount];
for (int i = 0; i < resultsCount; i++) {
results[i] = responseData.substring(i * resultLength, (i + 1) * resultLength);
String schasis = results[i].substring(0, 2);
String sslot = results[i].substring(2, 4);
String stype = results[i].substring(4, 6);
String ssubtype = results[i].substring(6, 8);
int chasis = Integer.parseInt(schasis, 16);
int slot = Integer.parseInt(sslot, 16);
int type = Integer.parseInt(stype, 16);
int subtype = Integer.parseInt(ssubtype, 16);
log.info("Chasis:" + chasis + " Slot:" + slot + " Type:" + type + " SubType:" + subtype);
ProteusOpticalSwitchCard card = factory.createCard(chasis, slot, type, subtype);
((ProteusOpticalSwitch) model).addLogicalDevice(card);
}
factory.addHardcodedCardConnections((ProteusOpticalSwitch) model);
}
@Override
protected String getWonesysCommandDeviceId() {
return MONITOR_DEVICE_ID;
}
@Override
protected String getWonesysCommandId() {
return COMMAND_ID;
}
@Override
protected String getWonesysCommandRequiredDataLength() {
return DATA_LENGTH;
}
@Override
protected String getWonesysCommandData() {
return "";
}
}