OSDN Git Service

CommentTypeを別ファイルに切り出し
[coroid/inqubus.git] / frontend / src / saccubus / conv / NicoXMLReader.java
index 8fb5425..075bcc4 100644 (file)
@@ -4,6 +4,8 @@ import java.util.EnumSet;
 import java.util.Set;
 import java.util.regex.Pattern;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.xml.sax.helpers.DefaultHandler;
 import org.xml.sax.Attributes;
 
@@ -29,19 +31,23 @@ import org.xml.sax.Attributes;
  */
 public class NicoXMLReader extends DefaultHandler {
 
-    private final Set<ProcessType> processTypes;
+    private static final Logger logger = LoggerFactory.getLogger(NicoXMLReader.class);
+    private final Set<CommentType> processTypes;
     private final Packet packet;
     private final Pattern ngWord;
     private final Pattern ngId;
+    private String mainThreadId;
     private Chat item;
     private boolean itemKicked;
 
-    public enum ProcessType {
-
-        NORMAL, OWNER;
-    }
-
-    public NicoXMLReader(Set<ProcessType> types, Packet packet, String ng_id, String ng_word) {
+    /**
+     * コンストラクタ.
+     * @param types 処理するコメントの種別.
+     * @param packet
+     * @param ng_id NG ID.
+     * @param ng_word NG ワード.
+     */
+    public NicoXMLReader(Set<CommentType> types, Packet packet, String ng_id, String ng_word) {
         this.processTypes = EnumSet.copyOf(types);
         this.packet = packet;
         this.ngWord = makePattern(ng_word);
@@ -87,7 +93,7 @@ public class NicoXMLReader extends DefaultHandler {
         final StringBuilder reg = new StringBuilder();
         for (int i = 0; i < elt.length; i++) {
             final String e = elt[i];
-            System.out.println(e);
+            logger.debug(e);
             if (i > 0) {
                 reg.append("|");
             }
@@ -100,7 +106,7 @@ public class NicoXMLReader extends DefaultHandler {
                 reg.append("(.*(").append(Pattern.quote(e)).append(")+.*)");
             }
         }
-        System.out.println("reg:" + reg);
+        logger.debug("reg:" + reg);
         return Pattern.compile(reg.toString());
     }
 
@@ -116,7 +122,7 @@ public class NicoXMLReader extends DefaultHandler {
      */
     @Override
     public void startDocument() {
-        System.out.println("Start converting to interval file.");
+        logger.debug("Start converting to interval file.");
     }
 
     /**
@@ -134,21 +140,24 @@ public class NicoXMLReader extends DefaultHandler {
     public void startElement(final String uri, final String localName, final String qName,
             final Attributes attributes) {
         if (qName.equalsIgnoreCase("chat")) {
-            // System.out.println("----------");
             item = new Chat();
             itemKicked = false;
 
             // 通常コメントを処理するか, 投稿者コメントを処理するか
             final String fork = attributes.getValue("fork");
             final boolean isOwner = "1".equals(fork);
-            if (isOwner) {
-                if (!processTypes.contains(ProcessType.OWNER)) {
-                    itemKicked = true;
-                }
-            } else {
-                if (!processTypes.contains(ProcessType.NORMAL)) {
-                    itemKicked = true;
-                }
+            final String th = attributes.getValue("thread");
+
+            // 初めて見つけたthreadをメインスレッド(非オプショナルスレッド)とみなす
+            if (mainThreadId == null) {
+                mainThreadId = th;
+            }
+
+            final boolean isOptional = (mainThreadId == null) ? false : !mainThreadId.equals(th);
+
+            if(!processTypes.contains(CommentType.valueOf(isOwner, isOptional))){
+                itemKicked = true;
+                return;
             }
 
             //マイメモリ削除対象
@@ -227,7 +236,6 @@ public class NicoXMLReader extends DefaultHandler {
      */
     @Override
     public void endDocument() {
-        // System.out.println("----------");
-        System.out.println("Converting finished.");
+        logger.debug("Converting finished.");
     }
 }