/* * @(#)IeeeCDFInterchangeDataMapper.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 02/11/2008 * * Revision History * ================ * */ package org.ieee.odm.adapter.ieeecdf.mapper; import static org.ieee.odm.ODMObjectFactory.OdmObjFactory; import org.ieee.odm.adapter.ieeecdf.parser.IeeeCDFInterchangeDataParser; import org.ieee.odm.common.ODMException; import org.ieee.odm.model.IODMModelParser; import org.ieee.odm.model.aclf.AclfModelParser; import org.ieee.odm.model.base.BaseDataSetter; import org.ieee.odm.schema.ActivePowerUnitType; import org.ieee.odm.schema.InterchangeXmlType; import org.ieee.odm.schema.PowerInterchangeXmlType; /** * IEEE CDF inter-change record ODM mapper * * @author mzhou * */ public class IeeeCDFInterchangeDataMapper extends AbstractIeeeCDFDataMapper { /** * constructor */ public IeeeCDFInterchangeDataMapper() { this.dataParser = new IeeeCDFInterchangeDataParser(); } @Override public void mapInputLine(final String str, AclfModelParser parser) throws ODMException { InterchangeXmlType interchange = parser.createInterchange(); PowerInterchangeXmlType pxchange = OdmObjFactory.createPowerInterchangeXmlType(); interchange.setPowerEx(pxchange); dataParser.parseFields(str); // Columns 1- 2 Area number [I], no zeros! * final int no = dataParser.getInt("AreaNum"); // Columns 4- 7 Interchange slack bus number [I] * // Columns 9-20 Alternate swing bus name [A] int slackBusNumber = dataParser.getInt("SwingBusNum"); String slackBusId = IODMModelParser.BusIdPreFix + slackBusNumber; final String alSwingBusName = dataParser.getString("AltSwingBusName"); // Columns 21-28 Area interchange export, MW [F] (+ = out) * // Columns 30-35 Area interchange tolerance, MW [F] * final double mw = dataParser.getDouble("ExportMw"); final double err = dataParser.getDouble("ExTolerance"); // Columns 38-43 Area code (abbreviated name) [A] * // Columns 46-75 Area name [A] final String code = dataParser.getString("AreaCode"); final String name = dataParser.getString("AreaName"); pxchange.setAreaNumber(no); if (slackBusNumber > 0) { pxchange.setSwingBus(parser.createBusRef(slackBusId)); pxchange.setAlternateSwingBusName(alSwingBusName); } pxchange.setDesiredExPower(BaseDataSetter.createActivePowerValue(mw, ActivePowerUnitType.MW)); pxchange.setExErrTolerance(BaseDataSetter.createActivePowerValue(err, ActivePowerUnitType.MW)); pxchange.setAreaCode(code); pxchange.setAreaName(name); } }