update 2013-6-4
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/AdjacencyListWritable.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/AdjacencyListWritable.java
index fae1970..a0a8ea5 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/AdjacencyListWritable.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/AdjacencyListWritable.java
@@ -27,6 +27,10 @@
         reverseList.reset();
     }
     
+    public int getCountOfPosition(){
+    	return forwardList.getCountOfPosition() + reverseList.getCountOfPosition();
+    }
+    
     public PositionListWritable getForwardList() {
         return forwardList;
     }
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/tipremove/BridgeRemoveVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bridgeremove/BridgeRemoveVertex.java
similarity index 97%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/tipremove/BridgeRemoveVertex.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bridgeremove/BridgeRemoveVertex.java
index bdabaa4..9a46a67 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/tipremove/BridgeRemoveVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bridgeremove/BridgeRemoveVertex.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.genomix.pregelix.operator.tipremove;
+package edu.uci.ics.genomix.pregelix.operator.bridgeremove;
 
 import java.util.Iterator;
 import org.apache.hadoop.io.NullWritable;
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/tipremove/BubbleMergeVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bubblemerge/BubbleMergeVertex.java
similarity index 97%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/tipremove/BubbleMergeVertex.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bubblemerge/BubbleMergeVertex.java
index f33bcd4..a9c9c5b 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/tipremove/BubbleMergeVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bubblemerge/BubbleMergeVertex.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.genomix.pregelix.operator.tipremove;
+package edu.uci.ics.genomix.pregelix.operator.bubblemerge;
 
 import java.util.Iterator;
 import org.apache.hadoop.io.NullWritable;
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/tipremove/TipRemoveVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/tipremove/TipRemoveVertex.java
index 7e184d1..534da5c 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/tipremove/TipRemoveVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/tipremove/TipRemoveVertex.java
@@ -11,6 +11,8 @@
 import edu.uci.ics.genomix.pregelix.format.DataCleanOutputFormat;
 import edu.uci.ics.genomix.pregelix.io.MessageWritable;
 import edu.uci.ics.genomix.pregelix.io.ValueStateWritable;
+import edu.uci.ics.genomix.pregelix.type.Message;
+import edu.uci.ics.genomix.pregelix.util.VertexUtil;
 
 /*
  * vertexId: BytesWritable
@@ -50,6 +52,9 @@
     public static int kmerSize = -1;
     private int length = -1;
 
+    private MessageWritable incomingMsg = new MessageWritable();
+    private MessageWritable outgoingMsg = new MessageWritable();
+    
     /**
      * initiate kmerSize, length
      */
@@ -58,14 +63,33 @@
             kmerSize = getContext().getConfiguration().getInt(KMER_SIZE, 5);
         if(length == -1)
             length = getContext().getConfiguration().getInt(LENGTH, kmerSize + 5);
+        outgoingMsg.reset();
     }
 
     @Override
     public void compute(Iterator<MessageWritable> msgIterator) {
         initVertex(); //getVertexValue().getLengthOfMergeChain() < length
         if(getSuperstep() == 1){
-            
+            if(VertexUtil.isIncomingTipVertex(getVertexValue())){
+            	if(getVertexValue().getLengthOfMergeChain() > length){
+            		if(getVertexValue().getOutgoingList().getCountOfPosition() != 0){
+	            		if(getVertexValue().getFFList().getCountOfPosition() > 0)
+	            			outgoingMsg.setMessage(Message.TOFORWARD);
+	            		else if(getVertexValue().getFRList().getCountOfPosition() > 0)
+	            			outgoingMsg.setMessage(Message.TOREVERSE);
+	            		outgoingMsg.setSourceVertexId(getVertexId());
+            		}
+            	}
+            	
+            }
+            else if(VertexUtil.isOutgoingTipVertex(getVertexValue())){
+            	
+            }
         }
+        else if(getSuperstep() == 2){
+        	
+        }
+        voteToHalt();
     }
 
     public static void main(String[] args) throws Exception {
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/Message.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/Message.java
index fa5f73b..b97f0bb 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/Message.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/Message.java
@@ -8,7 +8,8 @@
     public static final byte STOP = 3;
     public static final byte FROMPSEUDOHEAD = 4;
     public static final byte FROMPSEUDOREAR = 5;
-    public static final byte FROMSELF = 6;
+    public static final byte TOFORWARD = 6;
+    public static final byte TOREVERSE = 7;
 
     public final static class MESSAGE_CONTENT {
 
@@ -33,8 +34,11 @@
                 case FROMPSEUDOREAR:
                     r = "FROMPSEUDOREAR";
                     break;
-                case FROMSELF:
-                    r = "FROMSELF";
+                case TOFORWARD:
+                    r = "TOFORWARD";
+                    break;
+                case TOREVERSE:
+                    r = "TOREVERSE";
                     break;
             }
             return r;
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/util/VertexUtil.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/util/VertexUtil.java
index 1740744..19839c7 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/util/VertexUtil.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/util/VertexUtil.java
@@ -47,4 +47,15 @@
         }
         return false;*/
     }
+    
+    /**
+     * check if vertex is a tip
+     */
+    public static boolean isIncomingTipVertex(ValueStateWritable value){
+    	return value.inDegree() == 0 && value.outDegree() == 1;
+    }
+    
+    public static boolean isOutgoingTipVertex(ValueStateWritable value){
+    	return value.inDegree() == 1 && value.outDegree() == 0;
+    }
 }