/*
* @(#)IeeeCDFNetDataMapper.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 org.ieee.odm.adapter.ieeecdf.parser.IeeeCDFNetDataParser;
import org.ieee.odm.common.ODMException;
import org.ieee.odm.common.ODMLogger;
import org.ieee.odm.model.aclf.AclfModelParser;
import org.ieee.odm.model.base.BaseDataSetter;
import org.ieee.odm.model.base.BaseJaxbHelper;
import org.ieee.odm.schema.LoadflowNetXmlType;
/**
* IEEE CDF network (head) record ODM mapper
*
* @author mzhou
*
*/
public class IeeeCDFNetDataMapper extends AbstractIeeeCDFDataMapper {
public final static String Token_Date = "Date";
public final static String Token_OrgName = "Originator Name";
public final static String Token_Year = "Year";
public final static String Token_Season = "Season";
public final static String Token_CaseId = "Case Identification";
/**
* constructor
*/
public IeeeCDFNetDataMapper() {
this.dataParser = new IeeeCDFNetDataParser();
}
@Override public void mapInputLine(final String str, final AclfModelParser parser) throws ODMException {
dataParser.parseFields(str);
LoadflowNetXmlType baseCaseNet = parser.getNet();
//[0] Columns 2- 9 Date, in format DD/MM/YY with leading zeros. If no date provided, use 0b/0b/0b where b is blank.
if (dataParser.exist("Date")) {
final String date = dataParser.getString("Date");
BaseJaxbHelper.addNVPair(baseCaseNet, Token_Date, date);
}
//[1] Columns 11-30 Originator's name [A]
if (dataParser.exist("Originator")) {
final String orgName = dataParser.getString("Originator");
BaseJaxbHelper.addNVPair(baseCaseNet, Token_OrgName, orgName);
}
//[3] Columns 39-42 Year [I]
if (dataParser.equals("Year")) {
final String year = dataParser.getString("Year");
BaseJaxbHelper.addNVPair(baseCaseNet, Token_Year, year);
}
//[4] Column 44 Season (S - Summer, W - Winter)
if (dataParser.exist("Season")) {
final String season = dataParser.getString("Season");
BaseJaxbHelper.addNVPair(baseCaseNet, Token_Season, season);
}
//[5] Column 46-73 Case identification [A]
if (dataParser.exist("CaseId")) {
final String caseId = dataParser.getString("CaseId");
if (caseId != null)
BaseJaxbHelper.addNVPair(baseCaseNet, Token_CaseId, caseId);
//ODMLogger.getLogger().fine("date, orgName, year, season, caseId: " + date + ", "
// + orgName + ", " + year + ", " + season + ", " + caseId);
}
//[2] Columns 32-37 MVA Base [F] *
double baseMva = 100.0;
if (dataParser.exist("MVA")) {
baseMva = dataParser.getDouble("MVA"); // in MVA
ODMLogger.getLogger().fine("BaseKva: " + baseMva);
}
else{
throw new ODMException("Network Mva base is required, but not defined in the header of input file, please make sure the file is of IEEE-CDF format and the MVABase is correctly defined");
}
baseCaseNet.setBasePower(BaseDataSetter.createPowerMvaValue(baseMva));
}
}