+ public boolean processPMXml(File file) {
+
+ FileInputStream fis = null;
+ InputStreamReader isr = null;
+ XMLStreamReader reader = null;
+ try {
+ fis = new FileInputStream(file);
+ isr = new InputStreamReader(fis, Constant.ENCODING_UTF8);
+
+ XMLInputFactory fac = XMLInputFactory.newInstance();
+ reader = fac.createXMLStreamReader(isr);
+
+ boolean fileHeaderStart = false;
+ boolean measurementStart = false;
+ boolean pmNameFlag = false;
+ boolean pmDataFlag = false;
+ boolean objectFlag = true;
+
+ int index = -1;
+ int nameIndex = -1;
+ String currentMea = null;
+ String subName = null;
+ String localName = null;
+ String endLocalName = null;
+ String objectType = null;
+
+
+ LinkedHashMap<String, String> commonNameAndValue = new LinkedHashMap<String, String>();
+ LinkedHashMap<String, String> pmDatas = null;
+ LinkedHashMap<Integer, String> pmNames = null;
+
+
+ int event = -1;
+ while (reader.hasNext()) {
+ try{
+ event = reader.next();
+
+ switch (event) {
+ case XMLStreamConstants.START_ELEMENT:
+ localName = reader.getLocalName();
+ if ("FileHeader".equalsIgnoreCase(localName)) {
+ fileHeaderStart = true;
+ }
+ if(fileHeaderStart){
+ if(!"FileHeader".equalsIgnoreCase(localName)){
+ commonNameAndValue.put(localName,reader.getElementText().trim());
+ }
+
+ }
+ if ("Measurements".equalsIgnoreCase(localName)) {
+ // a new Measurement starts
+ measurementStart = true;
+ }
+ if (measurementStart) {
+ // measurement handler
+ if ("ObjectType".equalsIgnoreCase(localName)) {
+ objectType = reader.getElementText().trim();
+ commonNameAndValue.put("ObjectType",objectType);
+ }
+ if ("PmName".equalsIgnoreCase(localName)) {
+ pmNameFlag = true;
+ pmNames = new LinkedHashMap<Integer, String>();
+
+ }
+ if (pmNameFlag) {
+ // pmname handler, add columnNames
+ if ("N".equalsIgnoreCase(localName)) {
+ nameIndex = Integer.parseInt(getXMLAttribute(reader, "i"));
+ String text = reader.getElementText().trim();
+ pmNames.put(nameIndex, text);
+ }
+ }
+ if ("PmData".equalsIgnoreCase(localName)) {
+ pmDataFlag = true;
+ pmDatas = new LinkedHashMap<String, String>();
+ }
+
+ if (pmDataFlag) {
+ // pmdata handler
+ if ("Object".equalsIgnoreCase(localName)) {
+ objectFlag = true;
+ int n = reader.getAttributeCount();
+ for(int i = 0; i < n; i++) {
+ String name = reader.getAttributeLocalName(i);
+ commonNameAndValue.put(name, reader.getAttributeValue(i));
+ }
+ }
+ if (objectFlag) {
+
+ // add columnValues
+ if ("V".equalsIgnoreCase(localName)) {
+ String indexStr = getXMLAttribute(reader, "i");
+ if(indexStr == null) {
+ log.error("ERROR: illegal value index");
+ continue;
+ }
+ index = Integer.parseInt(indexStr);
+ String name = pmNames.get(index);
+ if(name == null){
+ log.error("illegal data: valueIndex="+index);
+ continue;
+ }
+
+ String value = reader.getElementText().trim();
+ pmDatas.put(name, value);
+ }
+ if ("CV".equalsIgnoreCase(localName)) {
+
+ String indexStr = getXMLAttribute(reader, "i");
+ if(indexStr == null) {
+ log.error("ERROR: illegal value index");
+ continue;
+ }
+ index = Integer.parseInt(indexStr);
+
+ currentMea = pmNames.get(index);
+ if(currentMea == null){
+ log.error("illegal data: valueIndex="+index);
+ continue;
+ }
+ }
+
+ if ("SN".equalsIgnoreCase(localName)) {
+ subName = reader.getElementText().trim();
+
+ }
+ if ("SV".equalsIgnoreCase(localName)) {
+ String subValue = reader.getElementText().trim();
+// pmDatas.put(currentMea+subName, subValue);
+ pmDatas.put(subName, subValue);
+ }
+ }
+ }
+
+ }
+
+ break;
+ case XMLStreamConstants.CHARACTERS:
+ // ...
+ break;
+ case XMLStreamConstants.END_ELEMENT:
+ // ...
+ endLocalName = reader.getLocalName();
+ if("Object".equalsIgnoreCase(endLocalName)){
+ objectFlag = false;
+ pmDatas.putAll(commonNameAndValue);
+ try {
+ pmResultChannel.put(pmDatas);
+
+ } catch (InterruptedException e) {
+ log.error("collectResultChannel.put(resultMap) error ",e);
+ }
+// System.out.println(pmDatas);
+// pmDatas.clear();
+ }
+ if (endLocalName.equalsIgnoreCase("PmData")) {
+ pmDataFlag = false;
+ }
+
+ if (endLocalName.equalsIgnoreCase("PmName")) {
+ pmNameFlag = false;
+ }
+ if (endLocalName.equalsIgnoreCase("Measurements")) {
+ // a measurement over
+ measurementStart = false;
+ }
+
+ if("FileHeader".equalsIgnoreCase(endLocalName)){
+ fileHeaderStart = false;
+ }
+ break;
+ }
+ }catch (Exception e){
+ log.error("",e);
+ event = reader.next();
+ }
+ }
+
+ } catch (Exception e) {
+ log.error("processPMXml is Exception ",e);
+ return false;
+ } finally{
+ try{
+ if(reader != null)reader.close();
+ if(isr!= null)isr.close();
+ if(fis != null)fis.close();
+ }catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ return true;
+ }
+
+ private String getXMLAttribute(XMLStreamReader reader, String obj) {
+ String res = null;
+ if(obj == null || reader == null){
+ return res;
+ }
+ int n = reader.getAttributeCount();
+ for(int i = 0; i < n; i++) {
+ String name = reader.getAttributeLocalName(i);
+ if(obj.equalsIgnoreCase(name)){
+ res = reader.getAttributeValue(i);
+ }
+ }
+ return res;
+ }
+