package org.opennaas.extensions.roadm.wonesys.protocols.alarms;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import org.osgi.service.event.Event;
import com.wonesys.emsModule.alarms.Alarm;
public class WonesysAlarmFactory {
// public static WonesysAlarm createAlarm(String alarmMessage) {
// // TODO auto-generated stub method
// return null;
// }
public static WonesysAlarm createAlarm(Map<String, Object> properties) {
return new WonesysAlarm(properties);
}
/**
* Assumes given event contains all WonesysAlarm required properties
*
* @param event
* @return
*/
public static WonesysAlarm createAlarm(Event event) {
Map<String, Object> properties = new HashMap<String, Object>();
for (String name : event.getPropertyNames()) {
properties.put(name, event.getProperty(name));
}
return new WonesysAlarm(properties);
}
public static WonesysAlarm createAlarm(Alarm alarm) {
Map<String, Object> properties = new HashMap<String, Object>();
properties.put(WonesysAlarm.CHASSIS_PROPERTY, alarm.getChasis());
properties.put(WonesysAlarm.SLOT_PROPERTY, alarm.getSlot());
properties.put(WonesysAlarm.SEVERITY_PROPERTY, alarm.getSeverity());
properties.put(WonesysAlarm.ALARM_ID_PROPERTY, alarm.getTypeID());
properties.put(WonesysAlarm.ALARM_DATA_PROPERTY, alarm.getRawIndo());
properties.put(WonesysAlarm.ARRIVAL_TIME, alarm.getDataRecepcio());
return new WonesysAlarm(properties);
}
/* HELPERS */
public static Map<String, Object> loadAlarmProperties(String message) {
// Alarm format:
// Reserved (2B) + data length (2B) + elementId (2B) + alarmType (1B) + Reserved (1B) + alarmId (1B) + Data (var)
String dataLengthS = message.substring(4, 8);
int dataLength = Integer.parseInt(convertLittleBigEndian(dataLengthS), 16);
String elementId = message.substring(8, 12);
int chasis = Integer.parseInt(elementId.substring(0, 2), 16);
int slot = Integer.parseInt(elementId.substring(2, 4), 16);
String alarmType = message.substring(12, 14);
int severity = Integer.parseInt(alarmType, 16);
String alarmId = message.substring(16, 18);
String data = "";
if (message.length() > 18)
data = message.substring(18, 18 + dataLength * 2);
Map<String, Object> properties = new HashMap<String, Object>();
properties.put(WonesysAlarm.CHASSIS_PROPERTY, chasis);
properties.put(WonesysAlarm.SLOT_PROPERTY, slot);
properties.put(WonesysAlarm.ALARM_ID_PROPERTY, alarmId);
properties.put(WonesysAlarm.SEVERITY_PROPERTY, severity);
properties.put(WonesysAlarm.ALARM_DATA_PROPERTY, data);
properties.put(WonesysAlarm.ARRIVAL_TIME, (new Date()).getTime());
return properties;
}
/**
* changes the order of bytes in the given hex string. For given 0,1,2,...,n returns n,...,2,1,0
*/
private static String convertLittleBigEndian(String value) {
StringBuilder builder = new StringBuilder();
int totalBytes = value.length() / 2;
for (int i = totalBytes; i > 0; i--) {
builder.append(value.substring(i * 2 - 2, i * 2));
}
return builder.toString();
}
}