package org.ieee.odm.adapter.pwd.impl;
import static org.ieee.odm.ODMObjectFactory.OdmObjFactory;
import org.ieee.odm.adapter.pwd.InputLineStringParser;
import org.ieee.odm.common.ODMException;
import org.ieee.odm.model.aclf.AclfModelParser;
import org.ieee.odm.schema.LimitSetXmlType;
import org.ieee.odm.schema.NetAreaXmlType;
import org.ieee.odm.schema.NetZoneXmlType;
import org.ieee.odm.schema.PWDNetworkExtXmlType;
/**
* Network data processor for PowerWorld-TO-ODM Adapter based on power world v16 data definition
* Now it supports both Area data and Zone data, Owner and Interface data is not yet implemented.
* @version 0.2 09/30/2012
* @author
*
*/
public class NetDataProcessor extends InputLineStringParser {
private AclfModelParser parser = null;
private boolean initLimitSet =false;
public NetDataProcessor(AclfModelParser parser) {
this.parser = parser;
}
/**
* Process area data. It creates area XmlType for each area and adds it to the network area list
* Now only areaNum and areaName are considered.
* @param areaDataStr
*/
public void processAreaData(String areaDataStr){
/*
* DATA (AREA, [AreaNum,AreaName,BGAGC,BGAutoSS,BGAutoXF,EnforceGenMWLimits,SchedName,SAName,
ConvergenceTol,AreaEDIncludeLossPF,BusSlack,AreaUnSpecifiedStudyMW])
*/
//now only consider areaNum, areaName
int areaNum=-1;
String areaName="";
parseData(areaDataStr);
try {
areaNum=getInt("AreaNum");
areaName=getString("AreaName");
} catch (ODMException e) {
e.printStackTrace();
}
NetAreaXmlType area=OdmObjFactory.createNetAreaXmlType();
area.setNumber(areaNum);
area.setName(areaName);
if(parser.getNet().getAreaList()==null)
parser.getNet().setAreaList(OdmObjFactory.createNetworkXmlTypeAreaList());
parser.getNet().getAreaList().getArea().add(area);
}
/**
* Process zone data.
* @param zoneDataStr
*/
public void processZoneData(String zoneDataStr){
/*
* DATA (ZONE, [ZoneNum,ZoneName,SchedName])
*/
int zoneNum=-1;
String zoneName="";
parseData(zoneDataStr);
try {
zoneNum=getInt("ZoneNum");
zoneName=getString("ZoneName");
} catch (ODMException e) {
e.printStackTrace();
}
NetZoneXmlType zone=OdmObjFactory.createNetZoneXmlType();
zone.setNumber(zoneNum);
zone.setName(zoneName);
if(parser.getNet().getLossZoneList()==null)
parser.getNet().setLossZoneList(OdmObjFactory.createNetworkXmlTypeLossZoneList());
parser.getNet().getLossZoneList().getLossZone().add(zone);
}
/**
*
* @param limitSetStr
* @throws ODMException
*/
public void processLimitSet(String limitSetStr) throws ODMException{
PWDNetworkExtXmlType pwdNetExt =(PWDNetworkExtXmlType)parser.getNet().getExtension();
if(!initLimitSet){
if (pwdNetExt.getLimitSets()==null)
pwdNetExt.setLimitSets(OdmObjFactory.createPWDNetworkExtXmlTypeLimitSets());
initLimitSet=true;
}
String limitSetName="";
boolean isDisable =false;
int lsNum=0;
parseData(limitSetStr);
if(exist("LSDisabled")){
isDisable = getString("LSDisabled").trim().equalsIgnoreCase("No")?false:true;
}
lsNum = getInt("LSNum");
limitSetName = getString("LSName");
LimitSetXmlType limitSet = OdmObjFactory.createLimitSetXmlType();
limitSet.setNumber(lsNum);
limitSet.setName(limitSetName);
limitSet.setLsDiabled(isDisable);
pwdNetExt.getLimitSets().getLimitSet().add(limitSet);
}
/**
* process owner data
* @param ownerDataStr
*/
public void processOwnerData(String ownerDataStr){
//TODO
/*
* 1. owner data
* 2. subData, judge if ownerDataStr.trim().startWith("<SubData")
*
* add the owner data to a HashTable(ownerNum, OwnerXmlType)
* then for each bus/branch/gen(defined in the subdata), set the corresponding Owner
*
*/
}
/**
* process interface data
* @param interfaceDataStr
*/
public void processInterfaceData(String interfaceDataStr){
//TODO
}
}