package org.ieee.odm.adapter.ge.parser.dynamic.load; import org.ieee.odm.adapter.AbstractDataFieldParser; import org.ieee.odm.common.ODMException; import org.ieee.odm.model.base.ODMModelStringUtil; public class PSLFDynLoadCMPLDWDataParser extends AbstractDataFieldParser { @Override public String[] getMetadata() { return new String[]{ // 0----------1----------2----------3----------4 "Type", "IBUS", "NAME", "BASEKV", "Id", // 5----------6----------7----------8----------9 "MVA", "Bss", "Rfdr", "Xfdr", "Fb", // 10----------11----------12--------13--------14 "Xxf", "Tfixhs", "Tfixls", "LTC", "Tmin", // 15----------16-------17---------18---------19---- "Tmax", "step", "Vmin", "Vmax", "Tdel", // 20--------21--------22---------23-----------24- "Ttap", "Rcomp", "Xcomp", "FmA", "FmB", // 25--------26--------27---------28-----------29- "FmC", "FmD", "Fel", "PFel", "Vd1", // 30--------31--------32---------33-----------34 "Vd2", "frcel", "PFs", "P1e", "P1c", // 35--------36--------37---------38-----------39 "P2e", "P2c", "Pfrq", "Q1e", "Q1c", // 40--------41--------42--------43-----------44 "Q2e", "Q2c", "Qfrq", "MtypA", "MtypB", // 45--------46--------47--------48-----------49 "MtypC", "MtypD", "LfmA", "RsA" , "LsA" , // "LpA" , "LppA" , "TpoA", "TppoA", "HA" , "EtrqA" , "Vtr1A", "Ttr1A" , "Ftr1A" , "Vrc1A" , "Trc1A" , "Vtr2A", "Ttr2A", "Ftr2A", "Vrc2A" , "Trc2A" , "LfmB" , "RsB", "LsB", "LpB", "LppB", "TpoB" , "TppoB" , "HB" , "EtrqB", "Vtr1B" , "Ttr1B" , "Ftr1B" , "Vrc1B" , "Trc1B" , "Vtr2B" , "Ttr2B" , "Ftr2B" , "Vrc2B" , "Trc2B" , "LfmC" , "RsC" , "LsC" , "LpC" , "LppC", "TpoC" , "TppoC" , "HC" , "EtrqC" , "Vtr1C" , "Ttr1C" , "Ftr1C" , "Vrc1C" , "Trc1C" , "Vtr2C" , "Ttr2C" , "Ftr2C" , "Vrc2C" , "Trc2C" , "LfmD" , "CompPF" , "Vstall" , "Rstall" , "Xstall" , "Tstall", "Frst" , "Vrst" , "Trst" , "Fuvr" , "Vtr1" , "Ttr1" , "Vtr2" , "Ttr2", "Vc1off" , "Vc2off", "Vc1on", "Vc2on" , "Tth" , "Th1t" , "Th2t" , "Tv" }; } @Override public void parseFields(final String lineStr) throws ODMException { boolean hasMVAData = lineStr.contains("mva="); this.clearNVPairTableData(); // split the line string by multi-blanks while treating contents within quotes as a single entities String[] strAry=lineStr.split("\\s+(?=([^\"]*\"[^\"]*\")*[^\"]*$)"); int cnt =strAry.length; int k = 0; // for the ID, there could be blank within quotes for (int i = 0; i <cnt ; i++){ if(i==0) setValue(k++, strAry[i].trim().toUpperCase()); else if(i<5){ if(strAry[i].contains("\"")){ setValue(k++,ODMModelStringUtil.trimQuote(strAry[i]).trim()); } else setValue(k++, strAry[i].trim()); } else if(i==5 || i==6){ // skip the " : #9" } else if(i>=7){ if(strAry[i].contains("\"")){ // just skip items like "tpdo" } else{ if(i==7){ if(hasMVAData){ if(strAry[i].contains("mva=")){ String mvaString = strAry[i].substring(4, strAry[i].length()); setValue(k++,mvaString); } } else{ // since MVA is in the meta data part, even it is not provided, k index need to be updated //setValue(k++,"-999"); //use -999 to denote that MVA is not provided; k++; // the data corresponding to i=7 becomes the parameter next to MVA. setValue(k++, strAry[i].trim()); } } else setValue(k++, strAry[i].trim()); } } } } }