package org.ieee.odm.adapter;
import org.ieee.odm.ODMFileFormatEnum;
import org.ieee.odm.adapter.ge.PSLFDynAdapter;
import org.ieee.odm.adapter.psse.PSSEAdapter.PsseVersion;
import org.ieee.odm.adapter.psse.impl.PSSEDynAdapter;
import org.ieee.odm.adapter.psse.impl.PSSELFAdapter;
import org.ieee.odm.common.IFileReader;
import org.ieee.odm.common.ODMException;
import org.ieee.odm.model.IODMModelParser;
import org.ieee.odm.model.aclf.AclfModelParser;
import org.ieee.odm.model.aclf.BaseAclfModelParser;
import org.ieee.odm.model.dstab.DStabModelParser;
import org.ieee.odm.schema.AnalysisCategoryEnumType;
import org.ieee.odm.schema.DStabNetXmlType;
import org.ieee.odm.schema.LoadflowNetXmlType;
/**
* A generic adapter that supports the formats for the power flow, sequence and dynamic data can be different.
* For example, the power flow is of PSS/E format, and the dynamic data is of PSLF format.
* @author Qiuhua
*
*/
public class GenericODMAdapter extends AbstractODMAdapter{
protected BaseAclfModelParser<? extends LoadflowNetXmlType> parser =null;
// power flow data format
protected ODMFileFormatEnum pfDataFormat = null;
// dynamic data format
protected ODMFileFormatEnum dynDataFormat = null;
// pfAdapter
AbstractODMAdapter pfAdapter = null;
// Dynamic Adapter
AbstractODMAdapter dynAdapter = null;
public GenericODMAdapter(ODMFileFormatEnum powerflowDataFormat,ODMFileFormatEnum dynamicDataFormat){
pfDataFormat = powerflowDataFormat;
dynDataFormat = dynamicDataFormat;
if(dynDataFormat != null){
parser = new DStabModelParser();
parser.getStudyCase().setAnalysisCategory(AnalysisCategoryEnumType.TRANSIENT_STABILITY);
}
else
parser = new AclfModelParser();
if(pfDataFormat != null){
switch(pfDataFormat){
case PsseV30:
pfAdapter = new PSSELFAdapter(PsseVersion.PSSE_30);
break;
default:
break;
}
if(pfAdapter !=null)
pfAdapter.setModelParser(parser);
}
if(dynDataFormat != null){
switch(dynDataFormat){
case PsseV30:
dynAdapter = new PSSEDynAdapter(PsseVersion.PSSE_30);
break;
case GePSLF:
dynAdapter = new PSLFDynAdapter();
break;
}
if(dynAdapter !=null)
dynAdapter.setModelParser(parser);
}
}
@Override
protected IODMModelParser parseInputFile(IFileReader din, String encoding)
throws ODMException {
return null;
}
@Override
protected IODMModelParser parseInputFile(NetType type, IFileReader[] dins,
String encoding) throws ODMException {
if(type==NetType.DStabNet && dins.length>=2){
DStabNetXmlType baseCaseNet = (DStabNetXmlType) parser.getNet();
if(dins.length==2){
baseCaseNet.setHasLoadflowData(true);
baseCaseNet.setPositiveSeqDataOnly(true);
pfAdapter.parseInputFile(dins[0], encoding);
//TODO not applicable to PSS/E dyn adapter
if(dynDataFormat == ODMFileFormatEnum.GePSLF){
dynAdapter.parseInputFile(dins[1], encoding);
}
else
throw new UnsupportedOperationException("The input dyn data format is not supported yet!");
}
else{
}
}
return this.parser;
}
}