ThreadParser.java :  » Browser » mde-android » de » kamelstall » modsde » xml » Android Open Source

Android Open Source » Browser » mde android 
mde android » de » kamelstall » modsde » xml » ThreadParser.java
package de.kamelstall.modsde.xml;

import org.apache.http.HttpResponse;
import org.xml.sax.Attributes;

import android.sax.Element;
import android.sax.EndElementListener;
import android.sax.EndTextElementListener;
import android.sax.RootElement;
import android.sax.StartElementListener;
import android.util.Xml;
import android.util.Xml.Encoding;
import de.kamelstall.modsde.comm.MdeStatus;
import de.kamelstall.modsde.xml.model.BBThread;
import de.kamelstall.modsde.xml.model.Post;
import de.kamelstall.modsde.xml.model.User;

public class ThreadParser {
  public static String url(Integer threadID, Integer page) {
    return MdeStatus.URL_THREAD + threadID + ((page > 1) ? "&page=" + page : "");
  }

  public BBThread parse(HttpResponse response) {
    final BBThread thread = new BBThread();

    final Post currentPost = new Post();
    final User currentUser = new User();

    RootElement root = new RootElement(BBThread.TAG);

    root.setStartElementListener(new StartElementListener() {
      @Override
      public void start(Attributes attributes) {
        thread.reset();
        thread.id = Integer.parseInt(attributes.getValue(BBThread.A_ID));
      }
    });

    root.getChild("title").setEndTextElementListener(new EndTextElementListener() {
      @Override
      public void end(String body) {
        thread.title = body;
      }
    });

    root.getChild("subtitle").setEndTextElementListener(new EndTextElementListener() {
      @Override
      public void end(String body) {
        thread.subtitle = body;
      }
    });

    root.getChild("number-of-replies").setStartElementListener(new StartElementListener() {
      @Override
      public void start(Attributes attributes) {
        thread.numReplies = Integer.parseInt(attributes.getValue("value"));
      }
    });

    root.getChild("number-of-hits").setStartElementListener(new StartElementListener() {
      @Override
      public void start(Attributes attributes) {
        thread.numReplies = Integer.parseInt(attributes.getValue("value"));
      }
    });

    Element flags = root.getChild(BBThread.FLAGS);
      flags.getChild(BBThread.IS_CLOSED).setStartElementListener(new StartElementListener() {
        @Override
        public void start(Attributes attributes) {
          thread.isClosed = "1".equals(attributes.getValue(BBThread.FLAGS_VALUE));
        }
      });
      flags.getChild(BBThread.IS_STICKY).setStartElementListener(new StartElementListener() {
        @Override
        public void start(Attributes attributes) {
          thread.isSticky = "1".equals(attributes.getValue(BBThread.FLAGS_VALUE));
        }
      });
      flags.getChild(BBThread.IS_IMPORTANT).setStartElementListener(new StartElementListener() {
        @Override
        public void start(Attributes attributes) {
          thread.isImportant = "1".equals(attributes.getValue(BBThread.FLAGS_VALUE));
        }
      });
      flags.getChild(BBThread.IS_ANNOUNCEMENT).setStartElementListener(new StartElementListener() {
        @Override
        public void start(Attributes attributes) {
          thread.isAnnouncement = "1".equals(attributes.getValue(BBThread.FLAGS_VALUE));
        }
      });
      flags.getChild(BBThread.IS_GLOBAL).setStartElementListener(new StartElementListener() {
        @Override
        public void start(Attributes attributes) {
          thread.isGlobal = "1".equals(attributes.getValue(BBThread.FLAGS_VALUE));
        }
      });

    root.getChild(BBThread.INBOARD).setStartElementListener(new StartElementListener() {
      @Override
      public void start(Attributes attributes) {
        thread.inBoard = Integer.parseInt(attributes.getValue(BBThread.A_ID));
      }
    });

    root.getChild("posts").setStartElementListener(new StartElementListener() {
      @Override
      public void start(Attributes attributes) {
        thread.page = Integer.parseInt(attributes.getValue(BBThread.A_PAGE));
        thread.offset = Integer.parseInt(attributes.getValue(BBThread.A_OFFSET));
        thread.count = Integer.parseInt(attributes.getValue(BBThread.A_COUNT));
      }
    });
    
    
    Element post = root.getChild("posts").getChild("post");
    
    post.setStartElementListener(new StartElementListener() {
      @Override
      public void start(Attributes attributes) {
        currentPost.reset();
        
        currentPost.PID = Integer.parseInt(attributes.getValue("id"));
      }
    });
    post.setEndElementListener(new EndElementListener() {
      @Override
      public void end() {
        thread.posts.add(currentPost.copy());
      }
    });
    
    Element user = post.getChild("user");
      user.setStartElementListener(new StartElementListener() {
        @Override
        public void start(Attributes attributes) {
          currentUser.reset();
          
          currentUser.id    = Integer.parseInt(attributes.getValue("id"));
          currentUser.groupID  = Integer.parseInt(attributes.getValue("group-id"));
        }
      });
      user.setEndTextElementListener(new EndTextElementListener() {
        @Override
        public void end(String body) {
          currentUser.name = body;
          currentPost.user = currentUser.copy();
        }
      });
    
    post.getChild("date").setStartElementListener(new StartElementListener() {
      @Override
      public void start(Attributes attributes) {
        currentPost.timestamp = Integer.parseInt(attributes.getValue("timestamp"));
      }
    });
    
    Element message = post.getChild("message");
    
    message.getChild("edited").setStartElementListener(new StartElementListener() {
      @Override
      public void start(Attributes attributes) {
        currentPost.messageEditCount = Integer.parseInt(attributes.getValue("count"));
      }
    });
    
    Element lastEditUser = message.getChild("edited").getChild("lastedit").getChild("user");
      lastEditUser.setStartElementListener(new StartElementListener() {
        @Override
        public void start(Attributes attributes) {
          currentUser.reset();
          
          currentUser.id    = Integer.parseInt(attributes.getValue("id"));
        }
      });
      lastEditUser.setEndTextElementListener(new EndTextElementListener() {
        @Override
        public void end(String body) {
          currentUser.name = body;
          currentPost.lastEditUser = currentUser.copy();
        }
      });
    
    message.getChild("content").setEndTextElementListener(new EndTextElementListener() {
      @Override
      public void end(String body) {
        currentPost.messageContent = body;
      }
    });
    
    message.getChild("title").setEndTextElementListener(new EndTextElementListener() {
      @Override
      public void end(String body) {
        currentPost.messageTitle = body;
      }
    });
    
    post.getChild("avatar").setStartElementListener(new StartElementListener() {
      @Override
      public void start(Attributes attributes) {
        currentPost.avatarId = Integer.parseInt(attributes.getValue("id"));
      }
    });
    post.getChild("avatar").setEndTextElementListener(new EndTextElementListener() {
      @Override
      public void end(String body) {
        currentPost.avatarFileName = body;
      }
    });
    
    post.getChild("in-thread").setStartElementListener(new StartElementListener() {
      @Override
      public void start(Attributes attributes) {
        currentPost.TID = Integer.parseInt(attributes.getValue("id"));
      }
    });
    post.getChild("in-thread").setEndTextElementListener(new EndTextElementListener() {
      @Override
      public void end(String body) {
        currentPost.threadName = body;
      }
    });
    
    post.getChild("in-board").setStartElementListener(new StartElementListener() {
      @Override
      public void start(Attributes attributes) {
        currentPost.BID = Integer.parseInt(attributes.getValue("id"));
      }
    });
    
    try {
      Encoding encoding = null;
      if (response.getEntity().getContentEncoding() != null) {
        encoding = Encoding.valueOf(response.getEntity().getContentEncoding().getValue());
      }
      
      if (encoding == null) {
        encoding = Xml.Encoding.UTF_8;
      }
      Xml.parse(response.getEntity().getContent(), encoding, root.getContentHandler());
      response.getEntity().consumeContent();
    } catch (Exception e) {
      throw new RuntimeException(e);
    }

    return thread;
  }

}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.