Android Open Source - pulltorefresh_library_with_Indexable_listView Xml Pull Node Parser






From Project

Back to project page pulltorefresh_library_with_Indexable_listView.

License

The source code is released under:

Apache License

If you think the Android project pulltorefresh_library_with_Indexable_listView listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*******************************************************************************
 * Copyright 2013 Naver Business Platform Corp.
 * // w  w w  .  j ava 2 s. com
 * 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.handmark.pulltorefresh.configuration.xml;


import java.io.IOException;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

import android.util.Log;

import com.handmark.pulltorefresh.configuration.xml.XmlPullParserWrapper.DocumentState;
import com.handmark.pulltorefresh.library.internal.Assert;
/**
 * 
 * {@code XmlPullNode}-based Parser using XmlPullParser <br />
 * When you override this class, you must define parse strategies, and return the root node (in {@link #generateRootNode()} of {@code XmlPullNode}s containing each parse strategy, 
 * and return the result (in {@link #getResult()} for which provide that to client after parse.  
 * @author Wonjun Kim
 * @param <R> Result type 
 */
abstract class XmlPullNodeParser<R> {
  private final XmlPullParserWrapper parser;
  private final XmlPullNode rootNode;
  /**
   * this flag prevents duplicate parse.
   */
  private boolean isParsed = false;
  /**
   * @param parser which has not been read yet. <br /> throw {@code NullPointerException} if {@code parser} is null
   */
  public XmlPullNodeParser(XmlPullParserWrapper parser) {
    Assert.notNull(parser, "XmlPullParser");
    this.parser = parser;
    this.rootNode = generateRootNode();
  }
  /**
   * @return entry point for {@code XmlPullNode}-based parse
   */
  protected abstract XmlPullNode generateRootNode();
  /**
   * Parse the data and return {@code <R>} type result <br />
   * even if you call this methods several times, parsing happens once and no more duplicate parse
   * @return parsed data
   * @throws XmlPullParserException
   * @throws IOException
   */
  public final R parse() throws XmlPullParserException, IOException {

    // avoid duplicate parse 
    if ( isParsed == true ) {
      return getResult();
    }
    
    // First, Find the root node.
    DocumentState documentState;
    
    String rootName = rootNode.getName();
    documentState = parser.nextStartTagByName(rootName);
    
    if ( documentState.END.equals(documentState)) {
      throw new XmlPullParserException(rootName + " tag has not found.");
    }
    // deeply parsing
    parseInternal(rootNode);
    isParsed = true;
    return getResult();
  }
  /**
   * Return a result after parse <br />Be called from {@link #parse()} method 
   * @return result value to return after parsing is done
   */
  protected abstract R getResult();
  /**
   * Call {@link XmlPullNode.XmlPullNodeCallback#process(XmlPullParser)} and parse child nodes of current node
   * 
   * @param currentNode target of which call a callback and parse children
   * @throws XmlPullParserException
   * @throws IOException
   */
  private void parseInternal(XmlPullNode currentNode) throws XmlPullParserException, IOException {
    // NOTE : too many permissions to node
    currentNode.getCallback().process(parser);
    
    while ( true ) {
  
      // if document is end during finding the end tag of this current node, it throws the exception below. 
      if ( parser.isEndDocument() ) {
        throw new XmlPullParserException("XML document is invalid.");
      }      
      
      // if the end tag is found, parsing this scope is being ended.
      if ( parser.isEndTag() && parser.matchCurrentTagName(currentNode.getName())) {
        break;
      }
      
      // get next tag
      parser.next();
      
      // when a child node is found, deeply parsing
      if ( parser.isStartTag() ) {
        
        String currentTagName = parser.getName();
        XmlPullNode childNode = currentNode.getChild(currentTagName);
        if ( childNode != null ) {
          // recursively!
          parseInternal(childNode);
        }
      }
    }
  } 
}




Java Source Code List

com.handmark.pulltorefresh.configuration.xml.ExtendedXmlConfigParserFactory.java
com.handmark.pulltorefresh.configuration.xml.PullToRefreshConfigXmlParser.java
com.handmark.pulltorefresh.configuration.xml.PullToRefreshNode.java
com.handmark.pulltorefresh.configuration.xml.PullToRefreshXmlConfiguration.java
com.handmark.pulltorefresh.configuration.xml.XmlPullNodeParser.java
com.handmark.pulltorefresh.configuration.xml.XmlPullNode.java
com.handmark.pulltorefresh.configuration.xml.XmlPullParserWrapper.java
com.handmark.pulltorefresh.extras.listfragment.PullToRefreshBaseListFragment.java
com.handmark.pulltorefresh.extras.listfragment.PullToRefreshExpandableListFragment.java
com.handmark.pulltorefresh.extras.listfragment.PullToRefreshIndexableListFragment.java
com.handmark.pulltorefresh.extras.listfragment.PullToRefreshListFragment.java
com.handmark.pulltorefresh.library.AlphaAnimator.java
com.handmark.pulltorefresh.library.GoogleStyleProgressLayoutFactory.java
com.handmark.pulltorefresh.library.GoogleStyleProgressLayout.java
com.handmark.pulltorefresh.library.GoogleStyleViewLayoutFactory.java
com.handmark.pulltorefresh.library.GoogleStyleViewLayout.java
com.handmark.pulltorefresh.library.IGoogleStyleProgressLayout.java
com.handmark.pulltorefresh.library.IGoogleStyleViewLayout.java
com.handmark.pulltorefresh.library.IIndicatorLayout.java
com.handmark.pulltorefresh.library.ILoadingLayout.java
com.handmark.pulltorefresh.library.IPullToRefreshConsumer.java
com.handmark.pulltorefresh.library.IPullToRefresh.java
com.handmark.pulltorefresh.library.IndicatorLayoutFactory.java
com.handmark.pulltorefresh.library.LoadingLayoutFactory.java
com.handmark.pulltorefresh.library.LoadingLayoutProxy.java
com.handmark.pulltorefresh.library.OverscrollHelper.java
com.handmark.pulltorefresh.library.PullToRefreshAdapterViewBase.java
com.handmark.pulltorefresh.library.PullToRefreshBase.java
com.handmark.pulltorefresh.library.PullToRefreshExpandableListView.java
com.handmark.pulltorefresh.library.PullToRefreshGridView.java
com.handmark.pulltorefresh.library.PullToRefreshHorizontalScrollView.java
com.handmark.pulltorefresh.library.PullToRefreshIndexableListView.java
com.handmark.pulltorefresh.library.PullToRefreshListView.java
com.handmark.pulltorefresh.library.PullToRefreshScrollView.java
com.handmark.pulltorefresh.library.PullToRefreshWebView.java
com.handmark.pulltorefresh.library.StringMatcher.java
com.handmark.pulltorefresh.library.extras.IndexScroller.java
com.handmark.pulltorefresh.library.extras.IndexableListView.java
com.handmark.pulltorefresh.library.extras.PullToRefreshWebView2.java
com.handmark.pulltorefresh.library.extras.SoundPullEventListener.java
com.handmark.pulltorefresh.library.internal.AbstractDefaultGoogleStyleViewLayout.java
com.handmark.pulltorefresh.library.internal.Assert.java
com.handmark.pulltorefresh.library.internal.DefaultGoogleStyleProgressLayout.java
com.handmark.pulltorefresh.library.internal.DefaultGoogleStyleViewLayout.java
com.handmark.pulltorefresh.library.internal.DefaultIndicatorLayout.java
com.handmark.pulltorefresh.library.internal.EmptyViewMethodAccessor.java
com.handmark.pulltorefresh.library.internal.FlipLoadingLayout.java
com.handmark.pulltorefresh.library.internal.FlippedProgressBar.java
com.handmark.pulltorefresh.library.internal.IndicatorLayout.java
com.handmark.pulltorefresh.library.internal.LoadingLayout.java
com.handmark.pulltorefresh.library.internal.PullingProgressLayout.java
com.handmark.pulltorefresh.library.internal.RotateLoadingLayout.java
com.handmark.pulltorefresh.library.internal.Utils.java
com.handmark.pulltorefresh.library.internal.ViewCompat.java