PrimitiveContentHandler.java
上传用户:szyujian
上传日期:2016-09-20
资源大小:320k
文件大小:4k
源码类别:

android开发

开发平台:

C/C++

  1. /*
  2.  * Copyright (C) 2007 Esmertec AG.
  3.  * Copyright (C) 2007 The Android Open Source Project
  4.  *
  5.  * Licensed under the Apache License, Version 2.0 (the "License");
  6.  * you may not use this file except in compliance with the License.
  7.  * You may obtain a copy of the License at
  8.  *
  9.  *      http://www.apache.org/licenses/LICENSE-2.0
  10.  *
  11.  * Unless required by applicable law or agreed to in writing, software
  12.  * distributed under the License is distributed on an "AS IS" BASIS,
  13.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14.  * See the License for the specific language governing permissions and
  15.  * limitations under the License.
  16.  */
  17. package com.android.im.imps;
  18. import java.util.Stack;
  19. import org.xml.sax.Attributes;
  20. import org.xml.sax.helpers.DefaultHandler;
  21. import com.android.im.imps.Primitive.TransactionMode;
  22. public final class PrimitiveContentHandler extends DefaultHandler {
  23.     private Primitive mPrimitive;
  24.     private String mCurTagName;
  25.     private boolean mIsTransContent;
  26.     private Stack<PrimitiveElement> mContentElementsStack;
  27.     public PrimitiveContentHandler() {
  28.         mPrimitive = new Primitive();
  29.         mContentElementsStack = new Stack<PrimitiveElement>();
  30.     }
  31.     public void reset() {
  32.         mPrimitive = new Primitive();
  33.         mContentElementsStack.clear();
  34.         mIsTransContent = false;
  35.     }
  36.     public Primitive getPrimitive() {
  37.         return mPrimitive;
  38.     }
  39.     @Override
  40.     public void startElement(String uri, String localName, String qName,
  41.             Attributes attributes) {
  42.         if (mIsTransContent) {
  43.             if (mContentElementsStack.empty()) {
  44.                 mPrimitive.setContentElement(localName);
  45.                 mContentElementsStack.push(mPrimitive.getContentElement());
  46.             } else {
  47.                 PrimitiveElement parentPrimitive = mContentElementsStack.peek();
  48.                 PrimitiveElement childPrimitive = new PrimitiveElement(
  49.                         localName);
  50.                 parentPrimitive.addChild(childPrimitive);
  51.                 mContentElementsStack.push(childPrimitive);
  52.             }
  53.         } else {
  54.             if (ImpsTags.TransactionContent.equals(localName)) {
  55.                 mIsTransContent = true;
  56.             }
  57.         }
  58.         mCurTagName = localName;
  59.     }
  60.     @Override
  61.     public void endElement(String uri, String localName, String qName) {
  62.         if (ImpsTags.TransactionContent.equals(localName)) {
  63.             mIsTransContent = false;
  64.         }
  65.         if (mIsTransContent) {
  66.             if (!mContentElementsStack.empty()) {
  67.                 mContentElementsStack.pop();
  68.             }
  69.         }
  70.         mCurTagName = null;
  71.     }
  72.     @Override
  73.     public void characters(char[] ch, int start, int length) {
  74.         String contentStr = ImpsUtils.trim(new String(ch, start, length));
  75.         if (contentStr == null || contentStr.length() == 0) {
  76.             return;
  77.         }
  78.         if (mIsTransContent) {
  79.             if (!ImpsTags.TransactionContent.equals(mCurTagName)) {
  80.                 PrimitiveElement curPrimitive = mContentElementsStack.peek();
  81.                 curPrimitive.setContents(contentStr);
  82.             }
  83.         } else {
  84.             if (ImpsTags.TransactionID.equals(mCurTagName)) {
  85.                 mPrimitive.setTransactionId(contentStr);
  86.             } else if (ImpsTags.TransactionMode.equals(mCurTagName)) {
  87.                 mPrimitive.setTransactionMode(TransactionMode.valueOf(contentStr));
  88.             } else if (ImpsTags.SessionID.equals(mCurTagName)) {
  89.                 mPrimitive.setSession(contentStr);
  90.             } else if (ImpsTags.Poll.equals(mCurTagName)) {
  91.                 mPrimitive.setPoll(contentStr);
  92.             } else if (ImpsTags.CIR.equals(mCurTagName)) {
  93.                 mPrimitive.setCir(contentStr);
  94.             }
  95.         }
  96.     }
  97. }