blob: 9d2f99aca9cc1a02fab89e0798fa842a186f5817 [file] [log] [blame]
/*
* Copyright (C) 2007 Esmertec AG.
* Copyright (C) 2007 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.im.imps;
import java.util.Stack;
import org.xml.sax.Attributes;
import org.xml.sax.helpers.DefaultHandler;
import com.android.im.imps.Primitive.TransactionMode;
public final class PrimitiveContentHandler extends DefaultHandler {
private Primitive mPrimitive;
private String mCurTagName;
private boolean mIsTransContent;
private Stack<PrimitiveElement> mContentElementsStack;
public PrimitiveContentHandler() {
mPrimitive = new Primitive();
mContentElementsStack = new Stack<PrimitiveElement>();
}
public void reset() {
mPrimitive = new Primitive();
mContentElementsStack.clear();
mIsTransContent = false;
}
public Primitive getPrimitive() {
return mPrimitive;
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) {
if (mIsTransContent) {
if (mContentElementsStack.empty()) {
mPrimitive.setContentElement(localName);
mContentElementsStack.push(mPrimitive.getContentElement());
} else {
PrimitiveElement parentPrimitive = mContentElementsStack.peek();
PrimitiveElement childPrimitive = new PrimitiveElement(
localName);
parentPrimitive.addChild(childPrimitive);
mContentElementsStack.push(childPrimitive);
}
} else {
if (ImpsTags.TransactionContent.equals(localName)) {
mIsTransContent = true;
}
}
mCurTagName = localName;
}
@Override
public void endElement(String uri, String localName, String qName) {
if (ImpsTags.TransactionContent.equals(localName)) {
mIsTransContent = false;
}
if (mIsTransContent) {
if (!mContentElementsStack.empty()) {
mContentElementsStack.pop();
}
}
mCurTagName = null;
}
@Override
public void characters(char[] ch, int start, int length) {
String contentStr = ImpsUtils.trim(new String(ch, start, length));
if (contentStr == null || contentStr.length() == 0) {
return;
}
if (mIsTransContent) {
if (!ImpsTags.TransactionContent.equals(mCurTagName)) {
PrimitiveElement curPrimitive = mContentElementsStack.peek();
curPrimitive.setContents(contentStr);
}
} else {
if (ImpsTags.TransactionID.equals(mCurTagName)) {
mPrimitive.setTransactionId(contentStr);
} else if (ImpsTags.TransactionMode.equals(mCurTagName)) {
mPrimitive.setTransactionMode(TransactionMode.valueOf(contentStr));
} else if (ImpsTags.SessionID.equals(mCurTagName)) {
mPrimitive.setSession(contentStr);
} else if (ImpsTags.Poll.equals(mCurTagName)) {
mPrimitive.setPoll(contentStr);
} else if (ImpsTags.CIR.equals(mCurTagName)) {
mPrimitive.setCir(contentStr);
}
}
}
}