/*
* @(#)PSSELineDataMapper.java
*
* Copyright (C) 2006 www.interpss.org
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU LESSER GENERAL PUBLIC LICENSE
* as published by the Free Software Foundation; either version 2.1
* of the License, or (at your option) any later version.
*
* This program 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.
*
* @Author Mike Zhou
* @Version 1.0
* @Date 09/15/2006
*
* Revision History
* ================
*
*/
package org.ieee.odm.adapter.psse.mapper.aclf;
import static org.ieee.odm.ODMObjectFactory.OdmObjFactory;
import org.ieee.odm.adapter.psse.PSSEAdapter;
import org.ieee.odm.adapter.psse.PSSEAdapter.PsseVersion;
import org.ieee.odm.adapter.psse.parser.aclf.PSSELineDataParser;
import org.ieee.odm.common.ODMBranchDuplicationException;
import org.ieee.odm.common.ODMException;
import org.ieee.odm.common.ODMLogger;
import org.ieee.odm.model.IODMModelParser;
import org.ieee.odm.model.aclf.AclfDataSetter;
import org.ieee.odm.model.aclf.BaseAclfModelParser;
import org.ieee.odm.model.base.BaseDataSetter;
import org.ieee.odm.schema.ApparentPowerUnitType;
import org.ieee.odm.schema.BranchBusSideEnumType;
import org.ieee.odm.schema.LineBranchXmlType;
import org.ieee.odm.schema.NetworkXmlType;
import org.ieee.odm.schema.YUnitType;
import org.ieee.odm.schema.ZUnitType;
public class PSSELineDataMapper extends BasePSSEDataMapper{
public PSSELineDataMapper(PsseVersion ver) {
super(ver);
this.dataParser = new PSSELineDataParser(ver);
}
/*
* BranchData
* I,J,CKT,R,X,B,RATEA,RATEB,RATEC,GI,BI,GJ,BJ,ST,LEN,O1,F1,...,O4,F4
*/
public void procLineString(String lineStr, BaseAclfModelParser<? extends NetworkXmlType> parser) throws ODMException {
//procLineFields(lineStr, version);
dataParser.parseFields(lineStr);
//System.out.println(lineStr + "\n" + dataParser.toString());
/*
I,J,CKT,R,X,B,RATEA,RATEB,RATEC,GI,BI,GJ,BJ,ST,LEN,O1,F1,...,O4,F4
ST Initial branch status where 1 designates in-service and 0 designates out-of-service. ST = 1 by default.
*/
int i = dataParser.getInt("I");
int j = dataParser.getInt("J");
/* starting from V32
* MET Metered end flag;
<=1 to designate bus I as the metered end
=>2 to designate bus J as the metered end.
MET = 1 by default.
*/
boolean fromMetered = true;
if (PSSEAdapter.getVersionNo(this.version) >= 32) {
int met = dataParser.getInt("MET", 1);
if (met >= 2)
fromMetered = false;
}
else {
if (j < 0) {
fromMetered = false;
j = -j;
}
}
final String fid = IODMModelParser.BusIdPreFix+i;
final String tid = IODMModelParser.BusIdPreFix+j;
LineBranchXmlType braRecXml;
try {
braRecXml = (LineBranchXmlType) parser.createLineBranch(fid, tid, dataParser.getString("CKT"));
} catch (ODMBranchDuplicationException e) {
ODMLogger.getLogger().severe(e.toString());
return;
}
int status = dataParser.getInt("ST", 1);
braRecXml.setOffLine(status != 1);
braRecXml.setMeterLocation( fromMetered ? BranchBusSideEnumType.FROM_SIDE :
BranchBusSideEnumType.TO_SIDE);
double r = dataParser.getDouble("R", 0.0);
double x = dataParser.getDouble("X", 0.0);
double b = dataParser.getDouble("B", 0.0);
AclfDataSetter.setLineData(braRecXml, r, x, ZUnitType.PU, 0.0, b, YUnitType.PU);
double ratea = dataParser.getDouble("RATEA", 0.0);
double rateb = dataParser.getDouble("RATEB", 0.0);
double ratec = dataParser.getDouble("RATEC", 0.0);
braRecXml.setRatingLimit(OdmObjFactory.createBranchRatingLimitXmlType());
AclfDataSetter.setBranchRatingLimitData(braRecXml.getRatingLimit(),
ratea, rateb, ratec, ApparentPowerUnitType.MVA);
double gi = dataParser.getDouble("GI", 0.0);
double bi = dataParser.getDouble("BI", 0.0);
if ( gi != 0.0 || bi != 0.0)
braRecXml.setFromShuntY(BaseDataSetter.createYValue(gi, bi, YUnitType.PU));
double gj = dataParser.getDouble("GJ", 0.0);
double bj = dataParser.getDouble("BJ", 0.0);
if ( gj != 0.0 || bj != 0.0)
braRecXml.setToShuntY(BaseDataSetter.createYValue(gj, bj, YUnitType.PU));
mapOwnerInfo(braRecXml);
}
}