Fix checkstyle whitespace issues - WHITESPACE ONLY

Change-Id: Ic205c1afd639c6008d61d9de95cb764eeb6238ca
diff --git a/src/main/java/net/onrc/onos/core/intent/Action.java b/src/main/java/net/onrc/onos/core/intent/Action.java
index 71c7183..6490fe5 100644
--- a/src/main/java/net/onrc/onos/core/intent/Action.java
+++ b/src/main/java/net/onrc/onos/core/intent/Action.java
@@ -3,9 +3,7 @@
 import net.onrc.onos.core.util.FlowEntryAction;
 
 /**
- * 
  * @author Brian O'Connor <bocon@onlab.us>
- *
  */
 
 public abstract class Action {
diff --git a/src/main/java/net/onrc/onos/core/intent/ConstrainedBFSTree.java b/src/main/java/net/onrc/onos/core/intent/ConstrainedBFSTree.java
index fece148..c72ef4e 100644
--- a/src/main/java/net/onrc/onos/core/intent/ConstrainedBFSTree.java
+++ b/src/main/java/net/onrc/onos/core/intent/ConstrainedBFSTree.java
@@ -15,58 +15,62 @@
  * which satisfies the bandwidth condition.
  * If bandwidth parameter is not specified, the normal breadth first tree will be calculated.
  * The paths are snapshot paths at the point of the class instantiation.
+ *
  * @author Toshio Koide (t-koide@onlab.us)
  */
 public class ConstrainedBFSTree {
-	LinkedList<Switch> switchQueue = new LinkedList<>();
-	HashSet<Switch> switchSearched = new HashSet<>();
-	HashMap<Long, LinkEvent> upstreamLinks = new HashMap<>();
-	HashMap<Switch, Path> paths = new HashMap<>();
-	Switch rootSwitch;
-	PathIntentMap intents = null;
-	double bandwidth = 0.0; // 0.0 means no limit for bandwidth (normal BFS tree)
+    LinkedList<Switch> switchQueue = new LinkedList<>();
+    HashSet<Switch> switchSearched = new HashSet<>();
+    HashMap<Long, LinkEvent> upstreamLinks = new HashMap<>();
+    HashMap<Switch, Path> paths = new HashMap<>();
+    Switch rootSwitch;
+    PathIntentMap intents = null;
+    double bandwidth = 0.0; // 0.0 means no limit for bandwidth (normal BFS tree)
 
-	public ConstrainedBFSTree(Switch rootSwitch) {
-		this.rootSwitch = rootSwitch;
-		calcTree();
-	}
+    public ConstrainedBFSTree(Switch rootSwitch) {
+        this.rootSwitch = rootSwitch;
+        calcTree();
+    }
 
-	public ConstrainedBFSTree(Switch rootSwitch, PathIntentMap intents, double bandwidth) {
-		this.rootSwitch = rootSwitch;
-		this.intents = intents;
-		this.bandwidth = bandwidth;
-		calcTree();
-	}
+    public ConstrainedBFSTree(Switch rootSwitch, PathIntentMap intents, double bandwidth) {
+        this.rootSwitch = rootSwitch;
+        this.intents = intents;
+        this.bandwidth = bandwidth;
+        calcTree();
+    }
 
-	protected void calcTree() {
-		switchQueue.add(rootSwitch);
-		switchSearched.add(rootSwitch);
-		while (!switchQueue.isEmpty()) {
-			Switch sw = switchQueue.poll();
-			for (Link link: sw.getOutgoingLinks()) {
-				Switch reachedSwitch = link.getDstPort().getSwitch();
-				if (switchSearched.contains(reachedSwitch)) continue;
-				if (intents != null && intents.getAvailableBandwidth(link) < bandwidth) continue;
-				switchQueue.add(reachedSwitch);
-				switchSearched.add(reachedSwitch);
-				upstreamLinks.put(reachedSwitch.getDpid(), new LinkEvent(link));
-			}
-		}
-	}
+    protected void calcTree() {
+        switchQueue.add(rootSwitch);
+        switchSearched.add(rootSwitch);
+        while (!switchQueue.isEmpty()) {
+            Switch sw = switchQueue.poll();
+            for (Link link : sw.getOutgoingLinks()) {
+                Switch reachedSwitch = link.getDstPort().getSwitch();
+                if (switchSearched.contains(reachedSwitch)) continue;
+                if (intents != null &&
+                    intents.getAvailableBandwidth(link) < bandwidth) {
+                    continue;
+                }
+                switchQueue.add(reachedSwitch);
+                switchSearched.add(reachedSwitch);
+                upstreamLinks.put(reachedSwitch.getDpid(), new LinkEvent(link));
+            }
+        }
+    }
 
-	public Path getPath(Switch leafSwitch) {
-		Path path = paths.get(leafSwitch);
-		Long rootSwitchDpid = rootSwitch.getDpid();
-		if (path == null && switchSearched.contains(leafSwitch)) {
-			path = new Path();
-			Long sw = leafSwitch.getDpid();
-			while (!sw.equals(rootSwitchDpid)) {
-				LinkEvent upstreamLink = upstreamLinks.get(sw);
-				path.add(0, upstreamLink);
-				sw = upstreamLink.getSrc().getDpid();
-			}
-			paths.put(leafSwitch, path);
-		}
-		return path;
-	}
+    public Path getPath(Switch leafSwitch) {
+        Path path = paths.get(leafSwitch);
+        Long rootSwitchDpid = rootSwitch.getDpid();
+        if (path == null && switchSearched.contains(leafSwitch)) {
+            path = new Path();
+            Long sw = leafSwitch.getDpid();
+            while (!sw.equals(rootSwitchDpid)) {
+                LinkEvent upstreamLink = upstreamLinks.get(sw);
+                path.add(0, upstreamLink);
+                sw = upstreamLink.getSrc().getDpid();
+            }
+            paths.put(leafSwitch, path);
+        }
+        return path;
+    }
 }
diff --git a/src/main/java/net/onrc/onos/core/intent/ConstrainedShortestPathIntent.java b/src/main/java/net/onrc/onos/core/intent/ConstrainedShortestPathIntent.java
index ca4f753..7f3de9b 100644
--- a/src/main/java/net/onrc/onos/core/intent/ConstrainedShortestPathIntent.java
+++ b/src/main/java/net/onrc/onos/core/intent/ConstrainedShortestPathIntent.java
@@ -4,23 +4,23 @@
  * @author Toshio Koide (t-koide@onlab.us)
  */
 public class ConstrainedShortestPathIntent extends ShortestPathIntent {
-	protected double bandwidth;
+    protected double bandwidth;
 
-	/**
-	 * Default constructor for Kryo deserialization
-	 */
-	protected ConstrainedShortestPathIntent() {
-	}
+    /**
+     * Default constructor for Kryo deserialization
+     */
+    protected ConstrainedShortestPathIntent() {
+    }
 
-	public ConstrainedShortestPathIntent(String id,
-			long srcSwitch, long srcPort, long srcMac,
-			long dstSwitch, long dstPort, long dstMac,
-			double bandwidth) {
-		super(id, srcSwitch, srcPort, srcMac, dstSwitch, dstPort, dstMac);
-		this.bandwidth = bandwidth;
-	}
+    public ConstrainedShortestPathIntent(String id,
+                                         long srcSwitch, long srcPort, long srcMac,
+                                         long dstSwitch, long dstPort, long dstMac,
+                                         double bandwidth) {
+        super(id, srcSwitch, srcPort, srcMac, dstSwitch, dstPort, dstMac);
+        this.bandwidth = bandwidth;
+    }
 
-	public double getBandwidth() {
-		return bandwidth;
-	}
+    public double getBandwidth() {
+        return bandwidth;
+    }
 }
diff --git a/src/main/java/net/onrc/onos/core/intent/ErrorIntent.java b/src/main/java/net/onrc/onos/core/intent/ErrorIntent.java
index a5046e8..31715a8 100644
--- a/src/main/java/net/onrc/onos/core/intent/ErrorIntent.java
+++ b/src/main/java/net/onrc/onos/core/intent/ErrorIntent.java
@@ -2,29 +2,30 @@
 
 /**
  * This class is instantiated by Run-times to express intent calculation error
+ *
  * @author Toshio Koide (t-koide@onlab.us)
  */
 public class ErrorIntent extends Intent {
-	public enum ErrorType {
-		UNSUPPORTED_INTENT,
-		SWITCH_NOT_FOUND,
-		PATH_NOT_FOUND,
-	}
+    public enum ErrorType {
+        UNSUPPORTED_INTENT,
+        SWITCH_NOT_FOUND,
+        PATH_NOT_FOUND,
+    }
 
-	public ErrorType errorType;
-	public String message;
-	public Intent parentIntent;
+    public ErrorType errorType;
+    public String message;
+    public Intent parentIntent;
 
-	/**
-	 * Default constructor for Kryo deserialization
-	 */
-	protected ErrorIntent() {
-	}
+    /**
+     * Default constructor for Kryo deserialization
+     */
+    protected ErrorIntent() {
+    }
 
-	public ErrorIntent(ErrorType errorType, String message, Intent parentIntent) {
-		super(parentIntent.getId());
-		this.errorType = errorType;
-		this.message = message;
-		this.parentIntent = parentIntent;
-	}
+    public ErrorIntent(ErrorType errorType, String message, Intent parentIntent) {
+        super(parentIntent.getId());
+        this.errorType = errorType;
+        this.message = message;
+        this.parentIntent = parentIntent;
+    }
 }
diff --git a/src/main/java/net/onrc/onos/core/intent/FlowEntry.java b/src/main/java/net/onrc/onos/core/intent/FlowEntry.java
index 570f4ef..526fe5f 100644
--- a/src/main/java/net/onrc/onos/core/intent/FlowEntry.java
+++ b/src/main/java/net/onrc/onos/core/intent/FlowEntry.java
@@ -11,79 +11,77 @@
 import net.onrc.onos.core.util.FlowEntryUserState;
 
 /**
- * 
  * @author Brian O'Connor <bocon@onlab.us>
- *
  */
 
 public class FlowEntry {
-	protected long sw;
-	protected Match match;
-	protected Set<Action> actions;
-	protected Operator operator;
-	
-	public FlowEntry(long sw, long srcPort, long dstPort, 
-			 MACAddress srcMac, MACAddress dstMac,
-			 Operator operator) {
-		this.sw = sw;
-		this.match = new Match(sw, srcPort, srcMac, dstMac);
-		this.actions = new HashSet<Action>();
-		this.actions.add(new ForwardAction(dstPort));
-		this.operator = operator;
-	}
-	
-	public String toString() {
-		return match + "->" + actions;
-	}
-	
-	public long getSwitch() {
-	    return sw;
-	}
-	
-	public Operator getOperator() {
-	    return operator;
-	}
-	
-	public void setOperator(Operator op) {
-	    operator = op;
-	}
-	
-	public net.onrc.onos.core.util.FlowEntry getFlowEntry() {
-		net.onrc.onos.core.util.FlowEntry entry = new net.onrc.onos.core.util.FlowEntry();
-		entry.setDpid(new Dpid(sw));
-		entry.setFlowEntryId(new FlowEntryId(hashCode())); // naive, but useful for now
-		entry.setFlowEntryMatch(match.getFlowEntryMatch());
-		FlowEntryActions flowEntryActions = new FlowEntryActions();
-		for(Action action : actions) {
-		    flowEntryActions.addAction(action.getFlowEntryAction());
-		}
-		entry.setFlowEntryActions(flowEntryActions);
-		switch(operator) {
-		case ADD:
-		    entry.setFlowEntryUserState(FlowEntryUserState.FE_USER_MODIFY);
-		    break;
-		case REMOVE:
-		    entry.setFlowEntryUserState(FlowEntryUserState.FE_USER_DELETE);
-		    break;
-		default:
-		    break;
-		}
-		return entry;
-	}
-	
-	
-	public int hashCode() {
-	    return match.hashCode();
-	}
-	
-	public boolean equals(Object o) {
-	    if(!(o instanceof FlowEntry)) {
-		return false;
-	    }
-	    FlowEntry other = (FlowEntry) o;
-	    // Note: we should not consider the operator for this comparison
-	    return this.match.equals(other.match) 
-		&& this.actions.containsAll(other.actions)
-		&& other.actions.containsAll(this.actions);
-	}
+    protected long sw;
+    protected Match match;
+    protected Set<Action> actions;
+    protected Operator operator;
+
+    public FlowEntry(long sw, long srcPort, long dstPort,
+                     MACAddress srcMac, MACAddress dstMac,
+                     Operator operator) {
+        this.sw = sw;
+        this.match = new Match(sw, srcPort, srcMac, dstMac);
+        this.actions = new HashSet<Action>();
+        this.actions.add(new ForwardAction(dstPort));
+        this.operator = operator;
+    }
+
+    public String toString() {
+        return match + "->" + actions;
+    }
+
+    public long getSwitch() {
+        return sw;
+    }
+
+    public Operator getOperator() {
+        return operator;
+    }
+
+    public void setOperator(Operator op) {
+        operator = op;
+    }
+
+    public net.onrc.onos.core.util.FlowEntry getFlowEntry() {
+        net.onrc.onos.core.util.FlowEntry entry = new net.onrc.onos.core.util.FlowEntry();
+        entry.setDpid(new Dpid(sw));
+        entry.setFlowEntryId(new FlowEntryId(hashCode())); // naive, but useful for now
+        entry.setFlowEntryMatch(match.getFlowEntryMatch());
+        FlowEntryActions flowEntryActions = new FlowEntryActions();
+        for (Action action : actions) {
+            flowEntryActions.addAction(action.getFlowEntryAction());
+        }
+        entry.setFlowEntryActions(flowEntryActions);
+        switch (operator) {
+            case ADD:
+                entry.setFlowEntryUserState(FlowEntryUserState.FE_USER_MODIFY);
+                break;
+            case REMOVE:
+                entry.setFlowEntryUserState(FlowEntryUserState.FE_USER_DELETE);
+                break;
+            default:
+                break;
+        }
+        return entry;
+    }
+
+
+    public int hashCode() {
+        return match.hashCode();
+    }
+
+    public boolean equals(Object o) {
+        if (!(o instanceof FlowEntry)) {
+            return false;
+        }
+        FlowEntry other = (FlowEntry) o;
+        // Note: we should not consider the operator for this comparison
+        return this.match.equals(other.match)
+                && this.actions.containsAll(other.actions)
+                && other.actions.containsAll(this.actions);
+    }
 }
diff --git a/src/main/java/net/onrc/onos/core/intent/ForwardAction.java b/src/main/java/net/onrc/onos/core/intent/ForwardAction.java
index 482d3f1..4e4088f 100644
--- a/src/main/java/net/onrc/onos/core/intent/ForwardAction.java
+++ b/src/main/java/net/onrc/onos/core/intent/ForwardAction.java
@@ -3,38 +3,36 @@
 import net.onrc.onos.core.util.FlowEntryAction;
 
 /**
- * 
  * @author Brian O'Connor <bocon@onlab.us>
- *
  */
 
 class ForwardAction extends Action {
-	protected long dstPort;
-	
-	public ForwardAction(long dstPort) {
-		this.dstPort = dstPort;
-	}
-	
-	public String toString() {
-		return Long.toString(dstPort);
-	}
+    protected long dstPort;
 
-	@Override
-	public FlowEntryAction getFlowEntryAction() {
-	    FlowEntryAction action = new FlowEntryAction();
-	    action.setActionOutput(new net.onrc.onos.core.util.Port((short) dstPort));
-	    return action;
-	}
+    public ForwardAction(long dstPort) {
+        this.dstPort = dstPort;
+    }
 
-	public int hashCode() {
-	    return (int) dstPort;
-	}
-	
-	public boolean equals(Object o) {
-	    if(!(o instanceof ForwardAction)) {
-		return false;
-	    }
-  	    ForwardAction action = (ForwardAction) o;
-	    return this.dstPort == action.dstPort;
-	}
+    public String toString() {
+        return Long.toString(dstPort);
+    }
+
+    @Override
+    public FlowEntryAction getFlowEntryAction() {
+        FlowEntryAction action = new FlowEntryAction();
+        action.setActionOutput(new net.onrc.onos.core.util.Port((short) dstPort));
+        return action;
+    }
+
+    public int hashCode() {
+        return (int) dstPort;
+    }
+
+    public boolean equals(Object o) {
+        if (!(o instanceof ForwardAction)) {
+            return false;
+        }
+        ForwardAction action = (ForwardAction) o;
+        return this.dstPort == action.dstPort;
+    }
 }
diff --git a/src/main/java/net/onrc/onos/core/intent/Intent.java b/src/main/java/net/onrc/onos/core/intent/Intent.java
index 3c4dbea..a8a06b0 100644
--- a/src/main/java/net/onrc/onos/core/intent/Intent.java
+++ b/src/main/java/net/onrc/onos/core/intent/Intent.java
@@ -8,95 +8,95 @@
  * @author Toshio Koide (t-koide@onlab.us)
  */
 public class Intent {
-	public enum IntentState {
-		CREATED,
-		INST_REQ,
-		INST_NACK,
-		INST_ACK,
-		DEL_REQ,
-		DEL_PENDING,
-		DEL_ACK,
-		REROUTE_REQ,
-	}
+    public enum IntentState {
+        CREATED,
+        INST_REQ,
+        INST_NACK,
+        INST_ACK,
+        DEL_REQ,
+        DEL_PENDING,
+        DEL_ACK,
+        REROUTE_REQ,
+    }
 
-	private String id;
-	private IntentState state = IntentState.CREATED;
-	private boolean pathFrozen = false;
+    private String id;
+    private IntentState state = IntentState.CREATED;
+    private boolean pathFrozen = false;
 
-	@Optional(value="logs")
-	private LinkedList<String> logs = new LinkedList<>();
+    @Optional(value = "logs")
+    private LinkedList<String> logs = new LinkedList<>();
 
-	/**
-	 * Default constructor for Kryo deserialization
-	 */
-	protected Intent() {
-		logs.add(String.format("created, time:%d", System.nanoTime())); // for measurement
-	}
+    /**
+     * Default constructor for Kryo deserialization
+     */
+    protected Intent() {
+        logs.add(String.format("created, time:%d", System.nanoTime())); // for measurement
+    }
 
-	public Intent(String id) {
-		logs.add(String.format("created, time:%d", System.nanoTime())); // for measurement
-		this.id = id;
-	}
+    public Intent(String id) {
+        logs.add(String.format("created, time:%d", System.nanoTime())); // for measurement
+        this.id = id;
+    }
 
-	public Intent(String id, IntentState state) {
-		logs.add(String.format("created, time:%d", System.nanoTime())); // for measurement
-		setState(state);
-		this.id = id;
-	}
+    public Intent(String id, IntentState state) {
+        logs.add(String.format("created, time:%d", System.nanoTime())); // for measurement
+        setState(state);
+        this.id = id;
+    }
 
-	public String getId() {
-		return id;
-	}
+    public String getId() {
+        return id;
+    }
 
-	public IntentState getState() {
-		return state;
-	}
+    public IntentState getState() {
+        return state;
+    }
 
-	public IntentState setState(IntentState newState) {
-		logs.add(String.format("setState, oldState:%s, newState:%s, time:%d",
-				state, newState, System.nanoTime())); // for measurement
-		if (logs.size() > 20) { // TODO this size should be configurable
-			logs.removeFirst();
-		}
-		IntentState oldState = state;
-		state = newState;
-		return oldState;
-	}
+    public IntentState setState(IntentState newState) {
+        logs.add(String.format("setState, oldState:%s, newState:%s, time:%d",
+                state, newState, System.nanoTime())); // for measurement
+        if (logs.size() > 20) { // TODO this size should be configurable
+            logs.removeFirst();
+        }
+        IntentState oldState = state;
+        state = newState;
+        return oldState;
+    }
 
-	public boolean isPathFrozen() {
-		return pathFrozen;
-	}
+    public boolean isPathFrozen() {
+        return pathFrozen;
+    }
 
-	public void setPathFrozen(boolean isFrozen) {
-		pathFrozen = isFrozen;
-	}
+    public void setPathFrozen(boolean isFrozen) {
+        pathFrozen = isFrozen;
+    }
 
-	public LinkedList<String> getLogs() {
-		return logs;
-	}
+    public LinkedList<String> getLogs() {
+        return logs;
+    }
 
-	@Override
-	public int hashCode() {
-		return (id == null) ? 0 : id.hashCode();
-	}
+    @Override
+    public int hashCode() {
+        return (id == null) ? 0 : id.hashCode();
+    }
 
-	@Override
-	public boolean equals(Object obj) {
-		if (this == obj)
-			return true;
-		if ((obj == null) || (getClass() != obj.getClass()))
-			return false;
-		Intent other = (Intent) obj;
-		if (id == null) {
-			if (other.id != null)
-				return false;
-		} else if (!id.equals(other.id))
-			return false;
-		return true;
-	}
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if ((obj == null) || (getClass() != obj.getClass()))
+            return false;
+        Intent other = (Intent) obj;
+        if (id == null) {
+            if (other.id != null)
+                return false;
+        } else if (!id.equals(other.id))
+            return false;
+        return true;
+    }
 
-	@Override
-	public String toString() {
-		return id.toString() + ", " + state.toString();
-	}
+    @Override
+    public String toString() {
+        return id.toString() + ", " + state.toString();
+    }
 }
diff --git a/src/main/java/net/onrc/onos/core/intent/IntentMap.java b/src/main/java/net/onrc/onos/core/intent/IntentMap.java
index ae314a7..e5cae77 100644
--- a/src/main/java/net/onrc/onos/core/intent/IntentMap.java
+++ b/src/main/java/net/onrc/onos/core/intent/IntentMap.java
@@ -14,177 +14,177 @@
  * @author Toshio Koide (t-koide@onlab.us)
  */
 public class IntentMap {
-	private HashSet<ChangedListener> listeners = new HashSet<>();
-	private HashMap<String, Intent> intents = new HashMap<>();
-	private	LinkedList<ChangedEvent> events = new LinkedList<>();
+    private HashSet<ChangedListener> listeners = new HashSet<>();
+    private HashMap<String, Intent> intents = new HashMap<>();
+    private LinkedList<ChangedEvent> events = new LinkedList<>();
 
-	public enum ChangedEventType {
-		/**
-		 * Added new intent.
-		 */
-		ADDED,
+    public enum ChangedEventType {
+        /**
+         * Added new intent.
+         */
+        ADDED,
 
-		/**
-		 * Removed existing intent.
-		 * The specified intent is an instance of Intent class (not a child class)
-		 * Only id and state are valid.
-		 */
-		REMOVED,
+        /**
+         * Removed existing intent.
+         * The specified intent is an instance of Intent class (not a child class)
+         * Only id and state are valid.
+         */
+        REMOVED,
 
-		/**
-		 * Changed state of existing intent.
-		 * The specified intent is an instance of Intent class (not a child class)
-		 * Only id and state are valid.
-		 */
-		STATE_CHANGED,
-	}
+        /**
+         * Changed state of existing intent.
+         * The specified intent is an instance of Intent class (not a child class)
+         * Only id and state are valid.
+         */
+        STATE_CHANGED,
+    }
 
-	public class ChangedEvent {
-		public ChangedEvent(ChangedEventType eventType, Intent intent) {
-			this.eventType = eventType;
-			this.intent = intent;
-		}
-		public ChangedEventType eventType;
-		public Intent intent;
-	}
+    public class ChangedEvent {
+        public ChangedEvent(ChangedEventType eventType, Intent intent) {
+            this.eventType = eventType;
+            this.intent = intent;
+        }
 
-	public interface ChangedListener extends EventListener {
-		void intentsChange(LinkedList<ChangedEvent> events);
-	}
+        public ChangedEventType eventType;
+        public Intent intent;
+    }
 
-	//================================================================================
-	// public methods
-	//================================================================================
+    public interface ChangedListener extends EventListener {
+        void intentsChange(LinkedList<ChangedEvent> events);
+    }
 
-	public void executeOperations(IntentOperationList operations) {
-		for (IntentOperation operation: operations) {
-			switch (operation.operator) {
-			case ADD:
-				handleAddOperation(operation);
-				break;
-			case REMOVE:
-				handleRemoveOperation(operation);
-				break;
-			case ERROR:
-				handleErrorOperation(operation);
-				break;
-			}
-		}
-		notifyEvents();
-	}
+    //================================================================================
+    // public methods
+    //================================================================================
 
-	public void purge() {
-		LinkedList<String> removeIds = new LinkedList<>();
-		for (Entry<String, Intent> entry: intents.entrySet()) {
-			Intent intent = entry.getValue();
-			if (intent.getState() == IntentState.DEL_ACK
-					|| intent.getState() == IntentState.INST_NACK) {
-				removeIds.add(intent.getId());
-			}
-		}
-		for (String intentId: removeIds) {
-			removeIntent(intentId);
-		}
-		notifyEvents();
-	}
+    public void executeOperations(IntentOperationList operations) {
+        for (IntentOperation operation : operations) {
+            switch (operation.operator) {
+                case ADD:
+                    handleAddOperation(operation);
+                    break;
+                case REMOVE:
+                    handleRemoveOperation(operation);
+                    break;
+                case ERROR:
+                    handleErrorOperation(operation);
+                    break;
+            }
+        }
+        notifyEvents();
+    }
 
-	public void changeStates(IntentStateList states) {
-		for (Entry<String, IntentState> state: states.entrySet()) {
-			setState(state.getKey(), state.getValue());
-		}
-		notifyEvents();
-	}
+    public void purge() {
+        LinkedList<String> removeIds = new LinkedList<>();
+        for (Entry<String, Intent> entry : intents.entrySet()) {
+            Intent intent = entry.getValue();
+            if (intent.getState() == IntentState.DEL_ACK
+                    || intent.getState() == IntentState.INST_NACK) {
+                removeIds.add(intent.getId());
+            }
+        }
+        for (String intentId : removeIds) {
+            removeIntent(intentId);
+        }
+        notifyEvents();
+    }
 
-	public Intent getIntent(String intentId) {
-		return intents.get(intentId);
-	}
+    public void changeStates(IntentStateList states) {
+        for (Entry<String, IntentState> state : states.entrySet()) {
+            setState(state.getKey(), state.getValue());
+        }
+        notifyEvents();
+    }
 
-	public Collection<Intent> getAllIntents() {
-		return intents.values();
-	}
+    public Intent getIntent(String intentId) {
+        return intents.get(intentId);
+    }
 
-	public void addChangeListener(ChangedListener listener) {
-		listeners.add(listener);
-	}
+    public Collection<Intent> getAllIntents() {
+        return intents.values();
+    }
 
-	public void removeChangedListener(ChangedListener listener) {
-		listeners.remove(listener);
-	}
+    public void addChangeListener(ChangedListener listener) {
+        listeners.add(listener);
+    }
 
-	//================================================================================
-	// methods that affect intents map (protected)
-	//================================================================================
+    public void removeChangedListener(ChangedListener listener) {
+        listeners.remove(listener);
+    }
 
-	protected void putIntent(Intent intent) {
-		if (intents.containsKey(intent.getId()))
-			removeIntent(intent.getId());
-		intents.put(intent.getId(), intent);
-		events.add(new ChangedEvent(ChangedEventType.ADDED, intent));
-	}
+    //================================================================================
+    // methods that affect intents map (protected)
+    //================================================================================
 
-	protected void removeIntent(String intentId) {
-		Intent intent = intents.remove(intentId);
-		if (intent == null) return;
-		events.add(new ChangedEvent(ChangedEventType.REMOVED, intent));
-	}
+    protected void putIntent(Intent intent) {
+        if (intents.containsKey(intent.getId()))
+            removeIntent(intent.getId());
+        intents.put(intent.getId(), intent);
+        events.add(new ChangedEvent(ChangedEventType.ADDED, intent));
+    }
 
-	protected void setState(String intentId, IntentState state) {
-		Intent intent = intents.get(intentId);
-		if (intent == null) return;
-		intent.setState(state);
-		events.add(new ChangedEvent(ChangedEventType.STATE_CHANGED, intent));
-	}
+    protected void removeIntent(String intentId) {
+        Intent intent = intents.remove(intentId);
+        if (intent == null) return;
+        events.add(new ChangedEvent(ChangedEventType.REMOVED, intent));
+    }
 
-	//================================================================================
-	// helper methods (protected)
-	//================================================================================
+    protected void setState(String intentId, IntentState state) {
+        Intent intent = intents.get(intentId);
+        if (intent == null) return;
+        intent.setState(state);
+        events.add(new ChangedEvent(ChangedEventType.STATE_CHANGED, intent));
+    }
 
-	protected void handleAddOperation(IntentOperation operation) {
-		putIntent(operation.intent);
-	}
+    //================================================================================
+    // helper methods (protected)
+    //================================================================================
 
-	protected void handleRemoveOperation(IntentOperation operation) {
-		Intent intent = getIntent(operation.intent.getId());
-		if (intent == null) {
-			// TODO error handling
-		}
-		else {
-			setState(intent.getId(), IntentState.DEL_REQ);
-		}
-	}
+    protected void handleAddOperation(IntentOperation operation) {
+        putIntent(operation.intent);
+    }
 
-	protected void handleErrorOperation(IntentOperation operation) {
-		//TODO put error message into the intent
+    protected void handleRemoveOperation(IntentOperation operation) {
+        Intent intent = getIntent(operation.intent.getId());
+        if (intent == null) {
+            // TODO error handling
+        } else {
+            setState(intent.getId(), IntentState.DEL_REQ);
+        }
+    }
 
-		ErrorIntent errorIntent = (ErrorIntent) operation.intent;
-		Intent targetIntent = intents.get(errorIntent.getId());
-		if (targetIntent == null) {
-			// TODO error handling
-			return;
-		}
+    protected void handleErrorOperation(IntentOperation operation) {
+        //TODO put error message into the intent
 
-		switch (targetIntent.getState()) {
-		case CREATED:
-		case INST_REQ:
-		case INST_ACK:
-		case REROUTE_REQ:
-			setState(targetIntent.getId(), IntentState.INST_NACK);
-			break;
-		case DEL_REQ:
-			setState(targetIntent.getId(), IntentState.DEL_PENDING);
-			break;
-		case INST_NACK:
-		case DEL_PENDING:
-		case DEL_ACK:
-			// do nothing
-			break;
-		}
-	}
+        ErrorIntent errorIntent = (ErrorIntent) operation.intent;
+        Intent targetIntent = intents.get(errorIntent.getId());
+        if (targetIntent == null) {
+            // TODO error handling
+            return;
+        }
 
-	protected void notifyEvents() {
-		for (ChangedListener listener: listeners) {
-			listener.intentsChange(events);
-		}
-		events.clear();
-	}
+        switch (targetIntent.getState()) {
+            case CREATED:
+            case INST_REQ:
+            case INST_ACK:
+            case REROUTE_REQ:
+                setState(targetIntent.getId(), IntentState.INST_NACK);
+                break;
+            case DEL_REQ:
+                setState(targetIntent.getId(), IntentState.DEL_PENDING);
+                break;
+            case INST_NACK:
+            case DEL_PENDING:
+            case DEL_ACK:
+                // do nothing
+                break;
+        }
+    }
+
+    protected void notifyEvents() {
+        for (ChangedListener listener : listeners) {
+            listener.intentsChange(events);
+        }
+        events.clear();
+    }
 }
diff --git a/src/main/java/net/onrc/onos/core/intent/IntentOperation.java b/src/main/java/net/onrc/onos/core/intent/IntentOperation.java
index 006c159..0cb42ff 100644
--- a/src/main/java/net/onrc/onos/core/intent/IntentOperation.java
+++ b/src/main/java/net/onrc/onos/core/intent/IntentOperation.java
@@ -4,37 +4,38 @@
  * @author Toshio Koide (t-koide@onlab.us)
  */
 public class IntentOperation {
-	public enum Operator {
-		/**
-		 * Add new intent specified by intent field.
-		 */
-		ADD,
+    public enum Operator {
+        /**
+         * Add new intent specified by intent field.
+         */
+        ADD,
 
-		/**
-		 * Remove existing intent specified by intent field.
-		 * The instance of intent field should be an instance of Intent class (not a child class)
-		 */
-		REMOVE,
+        /**
+         * Remove existing intent specified by intent field.
+         * The instance of intent field should be an instance of Intent class (not a child class)
+         */
+        REMOVE,
 
-		/**
-		 * Do error handling.
-		 * The instance of intent field should be an instance of ErrorIntent
-		 */
-		ERROR,
-	}
+        /**
+         * Do error handling.
+         * The instance of intent field should be an instance of ErrorIntent
+         */
+        ERROR,
+    }
 
-	public Operator operator;
-	public Intent intent;
+    public Operator operator;
+    public Intent intent;
 
-	protected IntentOperation() {}
+    protected IntentOperation() {
+    }
 
-	public IntentOperation(Operator operator, Intent intent) {
-		this.operator = operator;
-		this.intent = intent;
-	}
+    public IntentOperation(Operator operator, Intent intent) {
+        this.operator = operator;
+        this.intent = intent;
+    }
 
-	@Override
-	public String toString() {
-		return operator.toString() + ", (" + intent.toString() + ")";
-	}
+    @Override
+    public String toString() {
+        return operator.toString() + ", (" + intent.toString() + ")";
+    }
 }
diff --git a/src/main/java/net/onrc/onos/core/intent/IntentOperationList.java b/src/main/java/net/onrc/onos/core/intent/IntentOperationList.java
index a3981fa..7691c68 100644
--- a/src/main/java/net/onrc/onos/core/intent/IntentOperationList.java
+++ b/src/main/java/net/onrc/onos/core/intent/IntentOperationList.java
@@ -6,9 +6,9 @@
  * @author Toshio Koide (t-koide@onlab.us)
  */
 public class IntentOperationList extends LinkedList<IntentOperation> {
-	private static final long serialVersionUID = -3894081461861052610L;
+    private static final long serialVersionUID = -3894081461861052610L;
 
-	public boolean add(IntentOperation.Operator op, Intent intent) {
-		return add(new IntentOperation(op, intent));
-	}
+    public boolean add(IntentOperation.Operator op, Intent intent) {
+        return add(new IntentOperation(op, intent));
+    }
 }
diff --git a/src/main/java/net/onrc/onos/core/intent/Match.java b/src/main/java/net/onrc/onos/core/intent/Match.java
index 5f92254..f7a2167 100644
--- a/src/main/java/net/onrc/onos/core/intent/Match.java
+++ b/src/main/java/net/onrc/onos/core/intent/Match.java
@@ -8,59 +8,56 @@
 import net.onrc.onos.core.util.FlowEntryMatch;
 
 /**
- *
  * @author Brian O'Connor <bocon@onlab.us>
- *
  */
 
 public class Match {
-	protected long sw;
-	protected MACAddress srcMac;
-	protected MACAddress dstMac;
-	protected long srcPort;
-	
-	public Match(long sw, long srcPort, 
-		     MACAddress srcMac, MACAddress dstMac) {
-		this.sw = sw;
-		this.srcPort = srcPort;
-		this.srcMac = srcMac;
-		this.dstMac = dstMac;
-	}
+    protected long sw;
+    protected MACAddress srcMac;
+    protected MACAddress dstMac;
+    protected long srcPort;
 
-	@Override
-	public boolean equals(Object obj) {
-		if(obj instanceof Match) {
-			Match other = (Match) obj;
-			return this.sw == other.sw &&
-			       this.srcMac.equals(other.srcMac) &&
-			       this.dstMac.equals(other.dstMac) &&
-			       this.srcPort == other.srcPort;
-		}
-		else {
-			return false;
-		}
-	}
+    public Match(long sw, long srcPort,
+                 MACAddress srcMac, MACAddress dstMac) {
+        this.sw = sw;
+        this.srcPort = srcPort;
+        this.srcMac = srcMac;
+        this.dstMac = dstMac;
+    }
 
-	public FlowEntryMatch getFlowEntryMatch(){
-	    FlowEntryMatch match = new FlowEntryMatch();
-	    match.enableSrcMac(srcMac);
-	    match.enableDstMac(dstMac);
-	    match.enableInPort(new net.onrc.onos.core.util.Port((short) srcPort));
-	    return match;
-	}
+    @Override
+    public boolean equals(Object obj) {
+        if (obj instanceof Match) {
+            Match other = (Match) obj;
+            return this.sw == other.sw &&
+                    this.srcMac.equals(other.srcMac) &&
+                    this.dstMac.equals(other.dstMac) &&
+                    this.srcPort == other.srcPort;
+        } else {
+            return false;
+        }
+    }
 
-	@Override
-	public String toString() {
-		return "Sw:" + sw + " (" + srcPort + "," + srcMac + "," + dstMac + ")";
-	}
-	
-	@Override
-	public int hashCode() {
-	    long[] nums = new long[4];
-	    nums[0] = sw;
-	    nums[1] = srcPort;
-	    nums[2] = srcMac.toLong();
-	    nums[3] = dstMac.toLong();
-	    return Arrays.hashCode(nums);
-	}
+    public FlowEntryMatch getFlowEntryMatch() {
+        FlowEntryMatch match = new FlowEntryMatch();
+        match.enableSrcMac(srcMac);
+        match.enableDstMac(dstMac);
+        match.enableInPort(new net.onrc.onos.core.util.Port((short) srcPort));
+        return match;
+    }
+
+    @Override
+    public String toString() {
+        return "Sw:" + sw + " (" + srcPort + "," + srcMac + "," + dstMac + ")";
+    }
+
+    @Override
+    public int hashCode() {
+        long[] nums = new long[4];
+        nums[0] = sw;
+        nums[1] = srcPort;
+        nums[2] = srcMac.toLong();
+        nums[3] = dstMac.toLong();
+        return Arrays.hashCode(nums);
+    }
 }
diff --git a/src/main/java/net/onrc/onos/core/intent/PathIntent.java b/src/main/java/net/onrc/onos/core/intent/PathIntent.java
index b06fb81..e541454 100644
--- a/src/main/java/net/onrc/onos/core/intent/PathIntent.java
+++ b/src/main/java/net/onrc/onos/core/intent/PathIntent.java
@@ -6,55 +6,54 @@
  * @author Toshio Koide (t-koide@onlab.us)
  */
 public class PathIntent extends Intent {
-	protected Path path;
-	protected double bandwidth;
-	protected Intent parentIntent;
+    protected Path path;
+    protected double bandwidth;
+    protected Intent parentIntent;
 
-	public static String createFirstId(String parentId) {
-		return String.format("%s___0", parentId);
-	}
+    public static String createFirstId(String parentId) {
+        return String.format("%s___0", parentId);
+    }
 
-	public static String createNextId(String currentId) {
-		String parts[] = currentId.split("___");
-		return String.format("%s___%d", parts[0], Long.valueOf(parts[1])+1);
-	}
+    public static String createNextId(String currentId) {
+        String parts[] = currentId.split("___");
+        return String.format("%s___%d", parts[0], Long.valueOf(parts[1]) + 1);
+    }
 
-	/**
-	 * Default constructor for Kryo deserialization
-	 */
-	protected PathIntent() {
-	}
+    /**
+     * Default constructor for Kryo deserialization
+     */
+    protected PathIntent() {
+    }
 
-	/**
-	 *
-	 * @param graph
-	 * @param path
-	 * @param bandwidth bandwidth which should be allocated for the path.
-	 * If 0, no intent for bandwidth allocation (best effort).
-	 * @param parentIntent parent intent. If null, this is root intent.
-	 * @param id
-	 */
-	public PathIntent(String id, Path path, double bandwidth, Intent parentIntent) {
-		super(id);
-		this.path = path;
-		this.bandwidth = bandwidth;
-		this.parentIntent = parentIntent;
-	}
+    /**
+     * @param graph
+     * @param path
+     * @param bandwidth    bandwidth which should be allocated for the path.
+     *                     If 0, no intent for bandwidth allocation (best effort).
+     * @param parentIntent parent intent. If null, this is root intent.
+     * @param id
+     */
+    public PathIntent(String id, Path path, double bandwidth, Intent parentIntent) {
+        super(id);
+        this.path = path;
+        this.bandwidth = bandwidth;
+        this.parentIntent = parentIntent;
+    }
 
-	public double getBandwidth() {
-		return bandwidth;
-	}
+    public double getBandwidth() {
+        return bandwidth;
+    }
 
-	public Path getPath() {
-		return path;
-	}
+    public Path getPath() {
+        return path;
+    }
 
-	public Intent getParentIntent() {
-		return parentIntent;
-	}
+    public Intent getParentIntent() {
+        return parentIntent;
+    }
 
-	@Override
-	public String toString() {
-		return String.format("%s, %s, %s", getId(), getState(), getPath());
-	}
+    @Override
+    public String toString() {
+        return String.format("%s, %s, %s", getId(), getState(), getPath());
+    }
 }
diff --git a/src/main/java/net/onrc/onos/core/intent/PathIntentMap.java b/src/main/java/net/onrc/onos/core/intent/PathIntentMap.java
index 6f66cb7..ad6b1a5 100644
--- a/src/main/java/net/onrc/onos/core/intent/PathIntentMap.java
+++ b/src/main/java/net/onrc/onos/core/intent/PathIntentMap.java
@@ -13,99 +13,100 @@
  * @author Toshio Koide (t-koide@onlab.us)
  */
 public class PathIntentMap extends IntentMap {
-	private HashMap<Long, HashMap<Long, HashSet<PathIntent>>> intents;
+    private HashMap<Long, HashMap<Long, HashSet<PathIntent>>> intents;
 
-	public PathIntentMap() {
-		intents = new HashMap<>();
-	}
+    public PathIntentMap() {
+        intents = new HashMap<>();
+    }
 
-	private HashSet<PathIntent> get(SwitchPort swPort) {
-		Long dpid = swPort.getDpid();
-		Long port = swPort.getNumber();
-		HashMap<Long, HashSet<PathIntent>> portToIntents = intents.get(dpid);
-		if (portToIntents == null) {
-			portToIntents = new HashMap<>();
-			intents.put(dpid, portToIntents);
-		}
-		HashSet<PathIntent> targetIntents = portToIntents.get(port);
-		if (targetIntents == null) {
-			targetIntents = new HashSet<>();
-			portToIntents.put(port, targetIntents);
-		}
-		return targetIntents;
-	}
+    private HashSet<PathIntent> get(SwitchPort swPort) {
+        Long dpid = swPort.getDpid();
+        Long port = swPort.getNumber();
+        HashMap<Long, HashSet<PathIntent>> portToIntents = intents.get(dpid);
+        if (portToIntents == null) {
+            portToIntents = new HashMap<>();
+            intents.put(dpid, portToIntents);
+        }
+        HashSet<PathIntent> targetIntents = portToIntents.get(port);
+        if (targetIntents == null) {
+            targetIntents = new HashSet<>();
+            portToIntents.put(port, targetIntents);
+        }
+        return targetIntents;
+    }
 
-	private void put(SwitchPort swPort, PathIntent intent) {
-		get(swPort).add(intent);
-	}
+    private void put(SwitchPort swPort, PathIntent intent) {
+        get(swPort).add(intent);
+    }
 
-	@Override
-	protected void putIntent(Intent intent) {
-		if (!(intent instanceof PathIntent)) return; // TODO throw exception
-		super.putIntent(intent);
+    @Override
+    protected void putIntent(Intent intent) {
+        if (!(intent instanceof PathIntent)) return; // TODO throw exception
+        super.putIntent(intent);
 
-		PathIntent pathIntent = (PathIntent) intent;
-		for (LinkEvent linkEvent: pathIntent.getPath()) {
-			put(linkEvent.getSrc(), (PathIntent) intent);
-			put(linkEvent.getDst(), (PathIntent) intent);
-		}
-	}
+        PathIntent pathIntent = (PathIntent) intent;
+        for (LinkEvent linkEvent : pathIntent.getPath()) {
+            put(linkEvent.getSrc(), (PathIntent) intent);
+            put(linkEvent.getDst(), (PathIntent) intent);
+        }
+    }
 
-	@Override
-	protected void removeIntent(String intentId) {
-		PathIntent intent = (PathIntent) getIntent(intentId);
-		for (LinkEvent linkEvent: intent.getPath()) {
-			get(linkEvent.getSrc()).remove(intent);
-			get(linkEvent.getDst()).remove(intent);
-		}
-		super.removeIntent(intentId);
-	}
+    @Override
+    protected void removeIntent(String intentId) {
+        PathIntent intent = (PathIntent) getIntent(intentId);
+        for (LinkEvent linkEvent : intent.getPath()) {
+            get(linkEvent.getSrc()).remove(intent);
+            get(linkEvent.getDst()).remove(intent);
+        }
+        super.removeIntent(intentId);
+    }
 
-	public Collection<PathIntent> getIntentsByLink(LinkEvent linkEvent) {
-		return getIntentsByPort(
-				linkEvent.getSrc().getDpid(),
-				linkEvent.getSrc().getNumber());
-	}
+    public Collection<PathIntent> getIntentsByLink(LinkEvent linkEvent) {
+        return getIntentsByPort(
+                linkEvent.getSrc().getDpid(),
+                linkEvent.getSrc().getNumber());
+    }
 
-	public Collection<PathIntent> getIntentsByPort(Long dpid, Long port) {
-		HashMap<Long, HashSet<PathIntent>> portToIntents = intents.get(dpid);
-		if (portToIntents != null) {
-			HashSet<PathIntent> targetIntents = portToIntents.get(port);
-			if (targetIntents != null) {
-				return Collections.unmodifiableCollection(targetIntents);
-			}
-		}
-		return new HashSet<>();
-	}
+    public Collection<PathIntent> getIntentsByPort(Long dpid, Long port) {
+        HashMap<Long, HashSet<PathIntent>> portToIntents = intents.get(dpid);
+        if (portToIntents != null) {
+            HashSet<PathIntent> targetIntents = portToIntents.get(port);
+            if (targetIntents != null) {
+                return Collections.unmodifiableCollection(targetIntents);
+            }
+        }
+        return new HashSet<>();
+    }
 
-	public Collection<PathIntent> getIntentsByDpid(Long dpid) {
-		HashSet<PathIntent> result = new HashSet<>();
-		HashMap<Long, HashSet<PathIntent>> portToIntents = intents.get(dpid);
-		if (portToIntents != null) {
-			for (HashSet<PathIntent> targetIntents: portToIntents.values()) {
-				result.addAll(targetIntents);
-			}
-		}
-		return result;
-	}
+    public Collection<PathIntent> getIntentsByDpid(Long dpid) {
+        HashSet<PathIntent> result = new HashSet<>();
+        HashMap<Long, HashSet<PathIntent>> portToIntents = intents.get(dpid);
+        if (portToIntents != null) {
+            for (HashSet<PathIntent> targetIntents : portToIntents.values()) {
+                result.addAll(targetIntents);
+            }
+        }
+        return result;
+    }
 
-	/**
-	 * calculate available bandwidth of specified link
-	 * @param link
-	 * @return
-	 */
-	public Double getAvailableBandwidth(Link link) {
-		if (link == null) return null;
-		Double bandwidth = link.getCapacity();
-		LinkEvent linkEvent = new LinkEvent(link);
-		if (!bandwidth.isInfinite()) {
-			for (PathIntent intent: getIntentsByLink(linkEvent)) {
-				Double intentBandwidth = intent.getBandwidth();
-				if (intentBandwidth == null || intentBandwidth.isInfinite() || intentBandwidth.isNaN())
-					continue;
-				bandwidth -= intentBandwidth;
-			}
-		}
-		return bandwidth;
-	}
+    /**
+     * calculate available bandwidth of specified link
+     *
+     * @param link
+     * @return
+     */
+    public Double getAvailableBandwidth(Link link) {
+        if (link == null) return null;
+        Double bandwidth = link.getCapacity();
+        LinkEvent linkEvent = new LinkEvent(link);
+        if (!bandwidth.isInfinite()) {
+            for (PathIntent intent : getIntentsByLink(linkEvent)) {
+                Double intentBandwidth = intent.getBandwidth();
+                if (intentBandwidth == null || intentBandwidth.isInfinite() || intentBandwidth.isNaN())
+                    continue;
+                bandwidth -= intentBandwidth;
+            }
+        }
+        return bandwidth;
+    }
 }
diff --git a/src/main/java/net/onrc/onos/core/intent/ShortestPathIntent.java b/src/main/java/net/onrc/onos/core/intent/ShortestPathIntent.java
index f4bb18c..3adc756 100644
--- a/src/main/java/net/onrc/onos/core/intent/ShortestPathIntent.java
+++ b/src/main/java/net/onrc/onos/core/intent/ShortestPathIntent.java
@@ -7,69 +7,69 @@
  * @author Toshio Koide (t-koide@onlab.us)
  */
 public class ShortestPathIntent extends Intent {
-	protected long srcSwitchDpid;
-	protected long srcPortNumber;
-	protected long srcMacAddress;
-	protected long dstSwitchDpid;
-	protected long dstPortNumber;
-	protected long dstMacAddress;
-	protected String pathIntentId = null;
+    protected long srcSwitchDpid;
+    protected long srcPortNumber;
+    protected long srcMacAddress;
+    protected long dstSwitchDpid;
+    protected long dstPortNumber;
+    protected long dstMacAddress;
+    protected String pathIntentId = null;
 
-	/**
-	 * Default constructor for Kryo deserialization
-	 */
-	protected ShortestPathIntent() {
-	}
+    /**
+     * Default constructor for Kryo deserialization
+     */
+    protected ShortestPathIntent() {
+    }
 
-	public ShortestPathIntent(String id,
-			long srcSwitch, long srcPort, long srcMac,
-			long dstSwitch, long dstPort, long dstMac) {
-		super(id);
-		srcSwitchDpid = srcSwitch;
-		srcPortNumber = srcPort;
-		srcMacAddress = srcMac;
-		dstSwitchDpid = dstSwitch;
-		dstPortNumber = dstPort;
-		dstMacAddress = dstMac;
-	}
+    public ShortestPathIntent(String id,
+                              long srcSwitch, long srcPort, long srcMac,
+                              long dstSwitch, long dstPort, long dstMac) {
+        super(id);
+        srcSwitchDpid = srcSwitch;
+        srcPortNumber = srcPort;
+        srcMacAddress = srcMac;
+        dstSwitchDpid = dstSwitch;
+        dstPortNumber = dstPort;
+        dstMacAddress = dstMac;
+    }
 
-	public long getSrcSwitchDpid() {
-		return srcSwitchDpid;
-	}
+    public long getSrcSwitchDpid() {
+        return srcSwitchDpid;
+    }
 
-	public long getSrcPortNumber() {
-		return srcPortNumber;
-	}
+    public long getSrcPortNumber() {
+        return srcPortNumber;
+    }
 
-	public long getSrcMac() {
-		return srcMacAddress;
-	}
+    public long getSrcMac() {
+        return srcMacAddress;
+    }
 
-	public long getDstSwitchDpid() {
-		return dstSwitchDpid;
-	}
+    public long getDstSwitchDpid() {
+        return dstSwitchDpid;
+    }
 
-	public long getDstPortNumber() {
-		return dstPortNumber;
-	}
+    public long getDstPortNumber() {
+        return dstPortNumber;
+    }
 
-	public long getDstMac() {
-		return dstMacAddress;
-	}
+    public long getDstMac() {
+        return dstMacAddress;
+    }
 
-	public void setPathIntent(PathIntent pathIntent) {
-		pathIntentId = pathIntent.getId();
-	}
+    public void setPathIntent(PathIntent pathIntent) {
+        pathIntentId = pathIntent.getId();
+    }
 
-	public String getPathIntentId() {
-		return pathIntentId;
-	}
+    public String getPathIntentId() {
+        return pathIntentId;
+    }
 
-	@Override
-	public String toString() {
-		return String.format("id:%s, state:%s, srcDpid:%s, srcPort:%d, srcMac:%s, dstDpid:%s, dstPort:%d, dstMac:%s",
-				getId(), getState(),
-				new Dpid(srcSwitchDpid), srcPortNumber, MACAddress.valueOf(srcMacAddress),
-				new Dpid(dstSwitchDpid), dstPortNumber, MACAddress.valueOf(dstMacAddress));
-	}
+    @Override
+    public String toString() {
+        return String.format("id:%s, state:%s, srcDpid:%s, srcPort:%d, srcMac:%s, dstDpid:%s, dstPort:%d, dstMac:%s",
+                getId(), getState(),
+                new Dpid(srcSwitchDpid), srcPortNumber, MACAddress.valueOf(srcMacAddress),
+                new Dpid(dstSwitchDpid), dstPortNumber, MACAddress.valueOf(dstMacAddress));
+    }
 }
diff --git a/src/main/java/net/onrc/onos/core/intent/runtime/IPathCalcRuntimeService.java b/src/main/java/net/onrc/onos/core/intent/runtime/IPathCalcRuntimeService.java
index c6aad89..dd7bfd0 100644
--- a/src/main/java/net/onrc/onos/core/intent/runtime/IPathCalcRuntimeService.java
+++ b/src/main/java/net/onrc/onos/core/intent/runtime/IPathCalcRuntimeService.java
@@ -8,8 +8,11 @@
  * @author Toshio Koide (t-koide@onlab.us)
  */
 public interface IPathCalcRuntimeService extends IFloodlightService {
-	public IntentOperationList executeIntentOperations(IntentOperationList list);
-	public IntentMap getHighLevelIntents();
-	public IntentMap getPathIntents();
-	public void purgeIntents();
+    public IntentOperationList executeIntentOperations(IntentOperationList list);
+
+    public IntentMap getHighLevelIntents();
+
+    public IntentMap getPathIntents();
+
+    public void purgeIntents();
 }
diff --git a/src/main/java/net/onrc/onos/core/intent/runtime/IntentStateList.java b/src/main/java/net/onrc/onos/core/intent/runtime/IntentStateList.java
index e6f1180..e354811 100644
--- a/src/main/java/net/onrc/onos/core/intent/runtime/IntentStateList.java
+++ b/src/main/java/net/onrc/onos/core/intent/runtime/IntentStateList.java
@@ -8,5 +8,5 @@
  * @author Toshio Koide (t-koide@onlab.us)
  */
 public class IntentStateList extends HashMap<String, IntentState> {
-	private static final long serialVersionUID = -3674903999581438936L;
+    private static final long serialVersionUID = -3674903999581438936L;
 }
diff --git a/src/main/java/net/onrc/onos/core/intent/runtime/PathCalcRuntime.java b/src/main/java/net/onrc/onos/core/intent/runtime/PathCalcRuntime.java
index 9314959..c582fe1 100644
--- a/src/main/java/net/onrc/onos/core/intent/runtime/PathCalcRuntime.java
+++ b/src/main/java/net/onrc/onos/core/intent/runtime/PathCalcRuntime.java
@@ -27,115 +27,116 @@
  * @author Toshio Koide (t-koide@onlab.us)
  */
 public class PathCalcRuntime implements IFloodlightService {
-	private NetworkGraph graph;
-	private final static Logger log = LoggerFactory.getLogger(PathCalcRuntime.class);
-	public PathCalcRuntime(NetworkGraph g) {
-		this.graph = g;
-	}
+    private NetworkGraph graph;
+    private final static Logger log = LoggerFactory.getLogger(PathCalcRuntime.class);
 
-	/**
-	 * calculate shortest-path and constrained-shortest-path intents into low-level path intents
-	 * @param intentOpList IntentOperationList having instances of ShortestPathIntent/ConstrainedShortestPathIntent
-	 * @param pathIntents a set of current low-level intents
-	 * @return IntentOperationList. PathIntent and/or ErrorIntent instances.
-	 */
-	public IntentOperationList calcPathIntents(final IntentOperationList intentOpList, final IntentMap appIntents, final PathIntentMap pathIntents) {
-		IntentOperationList pathIntentOpList = new IntentOperationList();
-		HashMap<Switch, ConstrainedBFSTree> spfTrees = new HashMap<>();
+    public PathCalcRuntime(NetworkGraph g) {
+        this.graph = g;
+    }
 
-		// TODO optimize locking of NetworkGraph
-		graph.acquireReadLock();
-		log.debug("NetworkGraph: {}", graph.getLinks());
+    /**
+     * calculate shortest-path and constrained-shortest-path intents into low-level path intents
+     *
+     * @param intentOpList IntentOperationList having instances of ShortestPathIntent/ConstrainedShortestPathIntent
+     * @param pathIntents  a set of current low-level intents
+     * @return IntentOperationList. PathIntent and/or ErrorIntent instances.
+     */
+    public IntentOperationList calcPathIntents(final IntentOperationList intentOpList, final IntentMap appIntents, final PathIntentMap pathIntents) {
+        IntentOperationList pathIntentOpList = new IntentOperationList();
+        HashMap<Switch, ConstrainedBFSTree> spfTrees = new HashMap<>();
 
-		for (IntentOperation intentOp: intentOpList) {
-			switch (intentOp.operator) {
-			case ADD:
-				if (!(intentOp.intent instanceof ShortestPathIntent)) {
-					log.error("Unsupported intent type: {}", intentOp.intent.getClass().getName());
-					pathIntentOpList.add(Operator.ERROR, new ErrorIntent(
-							ErrorType.UNSUPPORTED_INTENT,
-							"Unsupported intent type.",
-							intentOp.intent));
-					continue;
-				}
+        // TODO optimize locking of NetworkGraph
+        graph.acquireReadLock();
+        log.debug("NetworkGraph: {}", graph.getLinks());
 
-				ShortestPathIntent spIntent = (ShortestPathIntent) intentOp.intent;
-				Switch srcSwitch = graph.getSwitch(spIntent.getSrcSwitchDpid());
-				Switch dstSwitch = graph.getSwitch(spIntent.getDstSwitchDpid());
-				if (srcSwitch == null || dstSwitch == null) {
-					log.error("Switch not found. src:{}, dst:{}, NetworkGraph:{}",
-							spIntent.getSrcSwitchDpid(),
-							spIntent.getDstSwitchDpid(),
-							graph.getLinks());
-					pathIntentOpList.add(Operator.ERROR, new ErrorIntent(
-							ErrorType.SWITCH_NOT_FOUND,
-							"Switch not found.",
-							spIntent));
-					continue;
-				}
+        for (IntentOperation intentOp : intentOpList) {
+            switch (intentOp.operator) {
+                case ADD:
+                    if (!(intentOp.intent instanceof ShortestPathIntent)) {
+                        log.error("Unsupported intent type: {}", intentOp.intent.getClass().getName());
+                        pathIntentOpList.add(Operator.ERROR, new ErrorIntent(
+                                ErrorType.UNSUPPORTED_INTENT,
+                                "Unsupported intent type.",
+                                intentOp.intent));
+                        continue;
+                    }
 
-				double bandwidth = 0.0;
-				ConstrainedBFSTree tree = null;
-				if (spIntent instanceof ConstrainedShortestPathIntent) {
-					bandwidth = ((ConstrainedShortestPathIntent) intentOp.intent).getBandwidth();
-					tree = new ConstrainedBFSTree(srcSwitch, pathIntents, bandwidth);
-				}
-				else {
-					tree = spfTrees.get(srcSwitch);
-					if (tree == null) {
-						tree = new ConstrainedBFSTree(srcSwitch);
-						spfTrees.put(srcSwitch, tree);
-					}
-				}
-				Path path = tree.getPath(dstSwitch);
-				if (path == null) {
-					log.error("Path not found. Intent: {}, NetworkGraph:{}", spIntent.toString(), graph.getLinks());
-					pathIntentOpList.add(Operator.ERROR, new ErrorIntent(
-							ErrorType.PATH_NOT_FOUND,
-							"Path not found.",
-							spIntent));
-					continue;
-				}
+                    ShortestPathIntent spIntent = (ShortestPathIntent) intentOp.intent;
+                    Switch srcSwitch = graph.getSwitch(spIntent.getSrcSwitchDpid());
+                    Switch dstSwitch = graph.getSwitch(spIntent.getDstSwitchDpid());
+                    if (srcSwitch == null || dstSwitch == null) {
+                        log.error("Switch not found. src:{}, dst:{}, NetworkGraph:{}",
+                                spIntent.getSrcSwitchDpid(),
+                                spIntent.getDstSwitchDpid(),
+                                graph.getLinks());
+                        pathIntentOpList.add(Operator.ERROR, new ErrorIntent(
+                                ErrorType.SWITCH_NOT_FOUND,
+                                "Switch not found.",
+                                spIntent));
+                        continue;
+                    }
 
-				// generate new path-intent ID
-				String oldPathIntentId = spIntent.getPathIntentId();
-				String newPathIntentId;
-				if (oldPathIntentId == null)
-					newPathIntentId = PathIntent.createFirstId(spIntent.getId());
-				else {
-					newPathIntentId = PathIntent.createNextId(oldPathIntentId);
+                    double bandwidth = 0.0;
+                    ConstrainedBFSTree tree = null;
+                    if (spIntent instanceof ConstrainedShortestPathIntent) {
+                        bandwidth = ((ConstrainedShortestPathIntent) intentOp.intent).getBandwidth();
+                        tree = new ConstrainedBFSTree(srcSwitch, pathIntents, bandwidth);
+                    } else {
+                        tree = spfTrees.get(srcSwitch);
+                        if (tree == null) {
+                            tree = new ConstrainedBFSTree(srcSwitch);
+                            spfTrees.put(srcSwitch, tree);
+                        }
+                    }
+                    Path path = tree.getPath(dstSwitch);
+                    if (path == null) {
+                        log.error("Path not found. Intent: {}, NetworkGraph:{}", spIntent.toString(), graph.getLinks());
+                        pathIntentOpList.add(Operator.ERROR, new ErrorIntent(
+                                ErrorType.PATH_NOT_FOUND,
+                                "Path not found.",
+                                spIntent));
+                        continue;
+                    }
 
-					// Request removal of low-level intent if it exists.
-					pathIntentOpList.add(Operator.REMOVE, new Intent(oldPathIntentId));
-				}
+                    // generate new path-intent ID
+                    String oldPathIntentId = spIntent.getPathIntentId();
+                    String newPathIntentId;
+                    if (oldPathIntentId == null)
+                        newPathIntentId = PathIntent.createFirstId(spIntent.getId());
+                    else {
+                        newPathIntentId = PathIntent.createNextId(oldPathIntentId);
 
-				// create new path-intent
-				PathIntent pathIntent = new PathIntent(newPathIntentId, path, bandwidth, spIntent);
-				pathIntent.setState(IntentState.INST_REQ);
-				spIntent.setPathIntent(pathIntent);
-				pathIntentOpList.add(Operator.ADD, pathIntent);
+                        // Request removal of low-level intent if it exists.
+                        pathIntentOpList.add(Operator.REMOVE, new Intent(oldPathIntentId));
+                    }
 
-				break;
-			case REMOVE:
-				ShortestPathIntent targetAppIntent = (ShortestPathIntent) appIntents.getIntent(intentOp.intent.getId());
-				if (targetAppIntent != null) {
-					String pathIntentId = targetAppIntent.getPathIntentId();
-					if (pathIntentId != null) {
-						Intent targetPathIntent = pathIntents.getIntent(pathIntentId);
-						if (targetPathIntent != null) {
-							pathIntentOpList.add(Operator.REMOVE, targetPathIntent);
-						}
-					}
-				}
-				break;
-			case ERROR:
-				// just ignore
-				break;
-			}
-		}
-		// TODO optimize locking of NetworkGraph
-		graph.releaseReadLock();
+                    // create new path-intent
+                    PathIntent pathIntent = new PathIntent(newPathIntentId, path, bandwidth, spIntent);
+                    pathIntent.setState(IntentState.INST_REQ);
+                    spIntent.setPathIntent(pathIntent);
+                    pathIntentOpList.add(Operator.ADD, pathIntent);
 
-		return pathIntentOpList;
-	}
+                    break;
+                case REMOVE:
+                    ShortestPathIntent targetAppIntent = (ShortestPathIntent) appIntents.getIntent(intentOp.intent.getId());
+                    if (targetAppIntent != null) {
+                        String pathIntentId = targetAppIntent.getPathIntentId();
+                        if (pathIntentId != null) {
+                            Intent targetPathIntent = pathIntents.getIntent(pathIntentId);
+                            if (targetPathIntent != null) {
+                                pathIntentOpList.add(Operator.REMOVE, targetPathIntent);
+                            }
+                        }
+                    }
+                    break;
+                case ERROR:
+                    // just ignore
+                    break;
+            }
+        }
+        // TODO optimize locking of NetworkGraph
+        graph.releaseReadLock();
+
+        return pathIntentOpList;
+    }
 }
\ No newline at end of file
diff --git a/src/main/java/net/onrc/onos/core/intent/runtime/PathCalcRuntimeModule.java b/src/main/java/net/onrc/onos/core/intent/runtime/PathCalcRuntimeModule.java
index 8c219c2..bacb5a3 100755
--- a/src/main/java/net/onrc/onos/core/intent/runtime/PathCalcRuntimeModule.java
+++ b/src/main/java/net/onrc/onos/core/intent/runtime/PathCalcRuntimeModule.java
@@ -41,367 +41,365 @@
  * @author Toshio Koide (t-koide@onlab.us)
  */
 public class PathCalcRuntimeModule implements IFloodlightModule, IPathCalcRuntimeService, INetworkGraphListener, IEventChannelListener<Long, IntentStateList> {
-	class PerfLog {
-		private String step;
-		private long time;
+    class PerfLog {
+        private String step;
+        private long time;
 
-		public PerfLog(String step) {
-			this.step = step;
-			this.time = System.nanoTime();
-		}
+        public PerfLog(String step) {
+            this.step = step;
+            this.time = System.nanoTime();
+        }
 
-		public void logThis() {
-			log.error("Time:{}, Step:{}", time, step);
-		}
-	}
-	class PerfLogger {
-		private LinkedList<PerfLog> logData = new LinkedList<>();
+        public void logThis() {
+            log.error("Time:{}, Step:{}", time, step);
+        }
+    }
 
-		public PerfLogger(String logPhase) {
-			log("start_" + logPhase);
-		}
+    class PerfLogger {
+        private LinkedList<PerfLog> logData = new LinkedList<>();
 
-		public void log(String step) {
-			logData.add(new PerfLog(step));
-		}
+        public PerfLogger(String logPhase) {
+            log("start_" + logPhase);
+        }
 
-		public void flushLog() {
-			log("finish");
-			for (PerfLog log: logData) {
-				log.logThis();
-			}
-			logData.clear();
-		}
-	}
-	private PathCalcRuntime runtime;
-	private IDatagridService datagridService;
-	private INetworkGraphService networkGraphService;
-	private IntentMap highLevelIntents;
-	private PathIntentMap pathIntents;
-	private IControllerRegistryService controllerRegistry;
-	private PersistIntent persistIntent;
+        public void log(String step) {
+            logData.add(new PerfLog(step));
+        }
 
-	private IEventChannel<Long, IntentOperationList> opEventChannel;
-	private final ReentrantLock lock = new ReentrantLock();
-	private HashSet<LinkEvent> unmatchedLinkEvents = new HashSet<>();
-	private static final String INTENT_OP_EVENT_CHANNEL_NAME = "onos.pathintent";
-	private static final String INTENT_STATE_EVENT_CHANNEL_NAME = "onos.pathintent_state";
-	private static final Logger log = LoggerFactory.getLogger(PathCalcRuntimeModule.class);
+        public void flushLog() {
+            log("finish");
+            for (PerfLog log : logData) {
+                log.logThis();
+            }
+            logData.clear();
+        }
+    }
 
-	// ================================================================================
-	// private methods
-	// ================================================================================
+    private PathCalcRuntime runtime;
+    private IDatagridService datagridService;
+    private INetworkGraphService networkGraphService;
+    private IntentMap highLevelIntents;
+    private PathIntentMap pathIntents;
+    private IControllerRegistryService controllerRegistry;
+    private PersistIntent persistIntent;
 
-	private void reroutePaths(Collection<Intent> oldPaths) {
-		if (oldPaths == null || oldPaths.isEmpty())
-			return;
+    private IEventChannel<Long, IntentOperationList> opEventChannel;
+    private final ReentrantLock lock = new ReentrantLock();
+    private HashSet<LinkEvent> unmatchedLinkEvents = new HashSet<>();
+    private static final String INTENT_OP_EVENT_CHANNEL_NAME = "onos.pathintent";
+    private static final String INTENT_STATE_EVENT_CHANNEL_NAME = "onos.pathintent_state";
+    private static final Logger log = LoggerFactory.getLogger(PathCalcRuntimeModule.class);
 
-		IntentOperationList reroutingOperation = new IntentOperationList();
-		for (Intent intent : oldPaths) {
-			PathIntent pathIntent = (PathIntent) intent;
-			if (pathIntent.isPathFrozen())
-				continue;
-			if (pathIntent.getState().equals(IntentState.INST_ACK) && // XXX: path intents in flight
-					!reroutingOperation.contains(pathIntent.getParentIntent())) {
-				reroutingOperation.add(Operator.ADD, pathIntent.getParentIntent());
-			}
-		}
-		executeIntentOperations(reroutingOperation);
-	}
+    // ================================================================================
+    // private methods
+    // ================================================================================
+
+    private void reroutePaths(Collection<Intent> oldPaths) {
+        if (oldPaths == null || oldPaths.isEmpty())
+            return;
+
+        IntentOperationList reroutingOperation = new IntentOperationList();
+        for (Intent intent : oldPaths) {
+            PathIntent pathIntent = (PathIntent) intent;
+            if (pathIntent.isPathFrozen())
+                continue;
+            if (pathIntent.getState().equals(IntentState.INST_ACK) && // XXX: path intents in flight
+                    !reroutingOperation.contains(pathIntent.getParentIntent())) {
+                reroutingOperation.add(Operator.ADD, pathIntent.getParentIntent());
+            }
+        }
+        executeIntentOperations(reroutingOperation);
+    }
 
 
-	// ================================================================================
-	// IFloodlightModule implementations
-	// ================================================================================
+    // ================================================================================
+    // IFloodlightModule implementations
+    // ================================================================================
 
-	@Override
-	public Collection<Class<? extends IFloodlightService>> getModuleServices() {
-		Collection<Class<? extends IFloodlightService>> l = new ArrayList<>(1);
-		l.add(IPathCalcRuntimeService.class);
-		return l;
-	}
+    @Override
+    public Collection<Class<? extends IFloodlightService>> getModuleServices() {
+        Collection<Class<? extends IFloodlightService>> l = new ArrayList<>(1);
+        l.add(IPathCalcRuntimeService.class);
+        return l;
+    }
 
-	@Override
-	public Map<Class<? extends IFloodlightService>, IFloodlightService> getServiceImpls() {
-		Map<Class<? extends IFloodlightService>, IFloodlightService> m = new HashMap<>();
-		m.put(IPathCalcRuntimeService.class, this);
-		return m;
-	}
+    @Override
+    public Map<Class<? extends IFloodlightService>, IFloodlightService> getServiceImpls() {
+        Map<Class<? extends IFloodlightService>, IFloodlightService> m = new HashMap<>();
+        m.put(IPathCalcRuntimeService.class, this);
+        return m;
+    }
 
-	@Override
-	public Collection<Class<? extends IFloodlightService>> getModuleDependencies() {
-		Collection<Class<? extends IFloodlightService>> l = new ArrayList<>(2);
-		l.add(IDatagridService.class);
-		l.add(INetworkGraphService.class);
-		return l;
-	}
+    @Override
+    public Collection<Class<? extends IFloodlightService>> getModuleDependencies() {
+        Collection<Class<? extends IFloodlightService>> l = new ArrayList<>(2);
+        l.add(IDatagridService.class);
+        l.add(INetworkGraphService.class);
+        return l;
+    }
 
-	@Override
-	public void init(FloodlightModuleContext context) throws FloodlightModuleException {
-		datagridService = context.getServiceImpl(IDatagridService.class);
-		networkGraphService = context.getServiceImpl(INetworkGraphService.class);
-		controllerRegistry = context.getServiceImpl(IControllerRegistryService.class);
-	}
+    @Override
+    public void init(FloodlightModuleContext context) throws FloodlightModuleException {
+        datagridService = context.getServiceImpl(IDatagridService.class);
+        networkGraphService = context.getServiceImpl(INetworkGraphService.class);
+        controllerRegistry = context.getServiceImpl(IControllerRegistryService.class);
+    }
 
-	@Override
-	public void startUp(FloodlightModuleContext context) {
-		highLevelIntents = new IntentMap();
-		runtime = new PathCalcRuntime(networkGraphService.getNetworkGraph());
-		pathIntents = new PathIntentMap();
-		opEventChannel = datagridService.createChannel(INTENT_OP_EVENT_CHANNEL_NAME, Long.class, IntentOperationList.class);
-		datagridService.addListener(INTENT_STATE_EVENT_CHANNEL_NAME, this, Long.class, IntentStateList.class);
-		networkGraphService.registerNetworkGraphListener(this);
-		persistIntent = new PersistIntent(controllerRegistry, networkGraphService);
-	}
+    @Override
+    public void startUp(FloodlightModuleContext context) {
+        highLevelIntents = new IntentMap();
+        runtime = new PathCalcRuntime(networkGraphService.getNetworkGraph());
+        pathIntents = new PathIntentMap();
+        opEventChannel = datagridService.createChannel(INTENT_OP_EVENT_CHANNEL_NAME, Long.class, IntentOperationList.class);
+        datagridService.addListener(INTENT_STATE_EVENT_CHANNEL_NAME, this, Long.class, IntentStateList.class);
+        networkGraphService.registerNetworkGraphListener(this);
+        persistIntent = new PersistIntent(controllerRegistry, networkGraphService);
+    }
 
-	// ================================================================================
-	// IPathCalcRuntimeService implementations
-	// ================================================================================
+    // ================================================================================
+    // IPathCalcRuntimeService implementations
+    // ================================================================================
 
-	@Override
-	public IntentOperationList executeIntentOperations(IntentOperationList list) {
-		if (list == null || list.size() == 0)
-			return null;
-		PerfLogger p = new PerfLogger("executeIntentOperations_" + list.get(0).operator);
+    @Override
+    public IntentOperationList executeIntentOperations(IntentOperationList list) {
+        if (list == null || list.size() == 0)
+            return null;
+        PerfLogger p = new PerfLogger("executeIntentOperations_" + list.get(0).operator);
 
-		lock.lock(); // TODO optimize locking using smaller steps
-		try {
-			// update the map of high-level intents
-			p.log("begin_updateInMemoryIntents");
-			highLevelIntents.executeOperations(list);
+        lock.lock(); // TODO optimize locking using smaller steps
+        try {
+            // update the map of high-level intents
+            p.log("begin_updateInMemoryIntents");
+            highLevelIntents.executeOperations(list);
 
-			// change states of high-level intents
-			IntentStateList states = new IntentStateList();
-			for (IntentOperation op : list) {
-				switch (op.operator) {
-				case ADD:
-					switch (op.intent.getState()) {
-					case CREATED:
-						states.put(op.intent.getId(), IntentState.INST_REQ);
-						break;
-					case INST_ACK:
-						states.put(op.intent.getId(), IntentState.REROUTE_REQ);
-						break;
-					default:
-						break;
-					}
-					break;
-				case REMOVE:
-					switch (op.intent.getState()) {
-					case CREATED:
-						states.put(op.intent.getId(), IntentState.DEL_REQ);
-						break;
-					default:
-						break;
-					}
-					break;
-				default:
-					break;
-				}
-			}
-			highLevelIntents.changeStates(states);
-			p.log("end_updateInMemoryIntents");
+            // change states of high-level intents
+            IntentStateList states = new IntentStateList();
+            for (IntentOperation op : list) {
+                switch (op.operator) {
+                    case ADD:
+                        switch (op.intent.getState()) {
+                            case CREATED:
+                                states.put(op.intent.getId(), IntentState.INST_REQ);
+                                break;
+                            case INST_ACK:
+                                states.put(op.intent.getId(), IntentState.REROUTE_REQ);
+                                break;
+                            default:
+                                break;
+                        }
+                        break;
+                    case REMOVE:
+                        switch (op.intent.getState()) {
+                            case CREATED:
+                                states.put(op.intent.getId(), IntentState.DEL_REQ);
+                                break;
+                            default:
+                                break;
+                        }
+                        break;
+                    default:
+                        break;
+                }
+            }
+            highLevelIntents.changeStates(states);
+            p.log("end_updateInMemoryIntents");
 
-			// calculate path-intents (low-level operations)
-			p.log("begin_calcPathIntents");
-			IntentOperationList pathIntentOperations = runtime.calcPathIntents(list, highLevelIntents, pathIntents);
-			p.log("end_calcPathIntents");
+            // calculate path-intents (low-level operations)
+            p.log("begin_calcPathIntents");
+            IntentOperationList pathIntentOperations = runtime.calcPathIntents(list, highLevelIntents, pathIntents);
+            p.log("end_calcPathIntents");
 
-			// persist calculated low-level operations into data store
-			p.log("begin_persistPathIntents");
-			long key = persistIntent.getKey();
-			persistIntent.persistIfLeader(key, pathIntentOperations);
-			p.log("end_persistPathIntents");
+            // persist calculated low-level operations into data store
+            p.log("begin_persistPathIntents");
+            long key = persistIntent.getKey();
+            persistIntent.persistIfLeader(key, pathIntentOperations);
+            p.log("end_persistPathIntents");
 
-			// remove error-intents and reflect them to high-level intents
-			p.log("begin_removeErrorIntents");
-			states.clear();
-			Iterator<IntentOperation> i = pathIntentOperations.iterator();
-			while (i.hasNext()) {
-				IntentOperation op = i.next();
-				if (op.operator.equals(Operator.ERROR)) {
-					states.put(op.intent.getId(), IntentState.INST_NACK);
-					i.remove();
-				}
-			}
-			highLevelIntents.changeStates(states);
-			p.log("end_removeErrorIntents");
+            // remove error-intents and reflect them to high-level intents
+            p.log("begin_removeErrorIntents");
+            states.clear();
+            Iterator<IntentOperation> i = pathIntentOperations.iterator();
+            while (i.hasNext()) {
+                IntentOperation op = i.next();
+                if (op.operator.equals(Operator.ERROR)) {
+                    states.put(op.intent.getId(), IntentState.INST_NACK);
+                    i.remove();
+                }
+            }
+            highLevelIntents.changeStates(states);
+            p.log("end_removeErrorIntents");
 
-			// update the map of path intents and publish the path operations
-			p.log("begin_updateInMemoryPathIntents");
-			pathIntents.executeOperations(pathIntentOperations);
-			p.log("end_updateInMemoryPathIntents");
+            // update the map of path intents and publish the path operations
+            p.log("begin_updateInMemoryPathIntents");
+            pathIntents.executeOperations(pathIntentOperations);
+            p.log("end_updateInMemoryPathIntents");
 
-			// XXX Demo special: add a complete path to remove operation
-			p.log("begin_addPathToRemoveOperation");
-			for (IntentOperation op: pathIntentOperations) {
-				if(op.operator.equals(Operator.REMOVE)) {
-					op.intent = pathIntents.getIntent(op.intent.getId());
-				}
-				if (op.intent instanceof PathIntent) {
-					log.debug("operation: {}, intent:{}", op.operator, op.intent);
-				}
-			}
-			p.log("end_addPathToRemoveOperation");
+            // XXX Demo special: add a complete path to remove operation
+            p.log("begin_addPathToRemoveOperation");
+            for (IntentOperation op : pathIntentOperations) {
+                if (op.operator.equals(Operator.REMOVE)) {
+                    op.intent = pathIntents.getIntent(op.intent.getId());
+                }
+                if (op.intent instanceof PathIntent) {
+                    log.debug("operation: {}, intent:{}", op.operator, op.intent);
+                }
+            }
+            p.log("end_addPathToRemoveOperation");
 
-			// send notification
-			p.log("begin_sendNotification");
-			// XXX: Send notifications using the same key every time
-			// and receive them by entryAdded() and entryUpdated()
-			opEventChannel.addEntry(0L, pathIntentOperations);
-			p.log("end_sendNotification");
-			//opEventChannel.removeEntry(key);
-			return pathIntentOperations;
-		}
-		finally {
-			p.flushLog();
-			lock.unlock();
-		}
-	}
+            // send notification
+            p.log("begin_sendNotification");
+            // XXX: Send notifications using the same key every time
+            // and receive them by entryAdded() and entryUpdated()
+            opEventChannel.addEntry(0L, pathIntentOperations);
+            p.log("end_sendNotification");
+            //opEventChannel.removeEntry(key);
+            return pathIntentOperations;
+        } finally {
+            p.flushLog();
+            lock.unlock();
+        }
+    }
 
-	@Override
-	public IntentMap getHighLevelIntents() {
-		return highLevelIntents;
-	}
+    @Override
+    public IntentMap getHighLevelIntents() {
+        return highLevelIntents;
+    }
 
-	@Override
-	public IntentMap getPathIntents() {
-		return pathIntents;
-	}
+    @Override
+    public IntentMap getPathIntents() {
+        return pathIntents;
+    }
 
-	@Override
-	public void purgeIntents() {
-		highLevelIntents.purge();
-		pathIntents.purge();
-	}
+    @Override
+    public void purgeIntents() {
+        highLevelIntents.purge();
+        pathIntents.purge();
+    }
 
-	// ================================================================================
-	// INetworkGraphListener implementations
-	// ================================================================================
+    // ================================================================================
+    // INetworkGraphListener implementations
+    // ================================================================================
 
-	@Override
-	public void networkGraphEvents(Collection<SwitchEvent> addedSwitchEvents,
-			Collection<SwitchEvent> removedSwitchEvents,
-			Collection<PortEvent> addedPortEvents,
-			Collection<PortEvent> removedPortEvents,
-			Collection<LinkEvent> addedLinkEvents,
-			Collection<LinkEvent> removedLinkEvents,
-			Collection<DeviceEvent> addedDeviceEvents,
-			Collection<DeviceEvent> removedDeviceEvents) {
+    @Override
+    public void networkGraphEvents(Collection<SwitchEvent> addedSwitchEvents,
+                                   Collection<SwitchEvent> removedSwitchEvents,
+                                   Collection<PortEvent> addedPortEvents,
+                                   Collection<PortEvent> removedPortEvents,
+                                   Collection<LinkEvent> addedLinkEvents,
+                                   Collection<LinkEvent> removedLinkEvents,
+                                   Collection<DeviceEvent> addedDeviceEvents,
+                                   Collection<DeviceEvent> removedDeviceEvents) {
 
-		PerfLogger p = new PerfLogger("networkGraphEvents");
-		HashSet<Intent> affectedPaths = new HashSet<>();
+        PerfLogger p = new PerfLogger("networkGraphEvents");
+        HashSet<Intent> affectedPaths = new HashSet<>();
 
-		boolean rerouteAll = false;
-		for(LinkEvent le : addedLinkEvents) {
-		    LinkEvent rev = new LinkEvent(le.getDst().getDpid(), le.getDst().getNumber(), le.getSrc().getDpid(), le.getSrc().getNumber());
-		    if(unmatchedLinkEvents.contains(rev)) {
-			rerouteAll = true;
-			unmatchedLinkEvents.remove(rev);
-			log.debug("Found matched LinkEvent: {} {}", rev, le);
-		    }
-		    else {
-			unmatchedLinkEvents.add(le);
-			log.debug("Adding unmatched LinkEvent: {}", le);
-		    }
-		}
-		for(LinkEvent le : removedLinkEvents) {
-		    if (unmatchedLinkEvents.contains(le)) {
-			unmatchedLinkEvents.remove(le);
-			log.debug("Removing LinkEvent: {}", le);
-		    }
-		}
-		if(unmatchedLinkEvents.size() > 0) {
-		    log.debug("Unmatched link events: {} events", unmatchedLinkEvents.size());
-		}
+        boolean rerouteAll = false;
+        for (LinkEvent le : addedLinkEvents) {
+            LinkEvent rev = new LinkEvent(le.getDst().getDpid(), le.getDst().getNumber(), le.getSrc().getDpid(), le.getSrc().getNumber());
+            if (unmatchedLinkEvents.contains(rev)) {
+                rerouteAll = true;
+                unmatchedLinkEvents.remove(rev);
+                log.debug("Found matched LinkEvent: {} {}", rev, le);
+            } else {
+                unmatchedLinkEvents.add(le);
+                log.debug("Adding unmatched LinkEvent: {}", le);
+            }
+        }
+        for (LinkEvent le : removedLinkEvents) {
+            if (unmatchedLinkEvents.contains(le)) {
+                unmatchedLinkEvents.remove(le);
+                log.debug("Removing LinkEvent: {}", le);
+            }
+        }
+        if (unmatchedLinkEvents.size() > 0) {
+            log.debug("Unmatched link events: {} events", unmatchedLinkEvents.size());
+        }
 
-		if ( rerouteAll ) {//addedLinkEvents.size() > 0) { // ||
-//				addedPortEvents.size() > 0 ||
-//				addedSwitchEvents.size() > 0) {
-			p.log("begin_getAllIntents");
-			affectedPaths.addAll(getPathIntents().getAllIntents());
-			p.log("end_getAllIntents");
-		}
-		else if (removedSwitchEvents.size() > 0 ||
-			 removedLinkEvents.size() > 0 ||
-			 removedPortEvents.size() > 0) {
-			p.log("begin_getIntentsByLink");
-			for (LinkEvent linkEvent: removedLinkEvents)
-				affectedPaths.addAll(pathIntents.getIntentsByLink(linkEvent));
-			p.log("end_getIntentsByLink");
+        if (rerouteAll) {//addedLinkEvents.size() > 0) { // ||
+//                              addedPortEvents.size() > 0 ||
+//                              addedSwitchEvents.size() > 0) {
+            p.log("begin_getAllIntents");
+            affectedPaths.addAll(getPathIntents().getAllIntents());
+            p.log("end_getAllIntents");
+        } else if (removedSwitchEvents.size() > 0 ||
+                removedLinkEvents.size() > 0 ||
+                removedPortEvents.size() > 0) {
+            p.log("begin_getIntentsByLink");
+            for (LinkEvent linkEvent : removedLinkEvents)
+                affectedPaths.addAll(pathIntents.getIntentsByLink(linkEvent));
+            p.log("end_getIntentsByLink");
 
-			p.log("begin_getIntentsByPort");
-			for (PortEvent portEvent: removedPortEvents)
-				affectedPaths.addAll(pathIntents.getIntentsByPort(portEvent.getDpid(), portEvent.getNumber()));
-			p.log("end_getIntentsByPort");
+            p.log("begin_getIntentsByPort");
+            for (PortEvent portEvent : removedPortEvents)
+                affectedPaths.addAll(pathIntents.getIntentsByPort(portEvent.getDpid(), portEvent.getNumber()));
+            p.log("end_getIntentsByPort");
 
-			p.log("begin_getIntentsByDpid");
-			for (SwitchEvent switchEvent: removedSwitchEvents)
-				affectedPaths.addAll(pathIntents.getIntentsByDpid(switchEvent.getDpid()));
-			p.log("end_getIntentsByDpid");
-		}
-		p.log("begin_reroutePaths");
-		reroutePaths(affectedPaths);
-		p.log("end_reroutePaths");
-		p.flushLog();
-	}
+            p.log("begin_getIntentsByDpid");
+            for (SwitchEvent switchEvent : removedSwitchEvents)
+                affectedPaths.addAll(pathIntents.getIntentsByDpid(switchEvent.getDpid()));
+            p.log("end_getIntentsByDpid");
+        }
+        p.log("begin_reroutePaths");
+        reroutePaths(affectedPaths);
+        p.log("end_reroutePaths");
+        p.flushLog();
+    }
 
-	// ================================================================================
-	// IEventChannelListener implementations
-	// ================================================================================
+    // ================================================================================
+    // IEventChannelListener implementations
+    // ================================================================================
 
-	@Override
-	public void entryAdded(IntentStateList value) {
-		entryUpdated(value);
-	}
+    @Override
+    public void entryAdded(IntentStateList value) {
+        entryUpdated(value);
+    }
 
-	@Override
-	public void entryRemoved(IntentStateList value) {
-		// do nothing
-	}
+    @Override
+    public void entryRemoved(IntentStateList value) {
+        // do nothing
+    }
 
-	@Override
-	public void entryUpdated(IntentStateList value) {
-		// TODO draw state transition diagram in multiple ONOS instances and update this method
-		PerfLogger p = new PerfLogger("entryUpdated");
-		lock.lock(); // TODO optimize locking using smaller steps
-		try {
-			// reflect state changes of path-level intent into application-level intents
-			p.log("begin_changeStateByNotification");
-			IntentStateList highLevelIntentStates = new IntentStateList();
-			IntentStateList pathIntentStates = new IntentStateList();
-			for (Entry<String, IntentState> entry: value.entrySet()) {
-				PathIntent pathIntent = (PathIntent) pathIntents.getIntent(entry.getKey());
-				if (pathIntent == null) continue;
+    @Override
+    public void entryUpdated(IntentStateList value) {
+        // TODO draw state transition diagram in multiple ONOS instances and update this method
+        PerfLogger p = new PerfLogger("entryUpdated");
+        lock.lock(); // TODO optimize locking using smaller steps
+        try {
+            // reflect state changes of path-level intent into application-level intents
+            p.log("begin_changeStateByNotification");
+            IntentStateList highLevelIntentStates = new IntentStateList();
+            IntentStateList pathIntentStates = new IntentStateList();
+            for (Entry<String, IntentState> entry : value.entrySet()) {
+                PathIntent pathIntent = (PathIntent) pathIntents.getIntent(entry.getKey());
+                if (pathIntent == null) continue;
 
-				Intent parentIntent = pathIntent.getParentIntent();
-				if (parentIntent == null ||
-						!(parentIntent instanceof ShortestPathIntent) ||
-						!((ShortestPathIntent) parentIntent).getPathIntentId().equals(pathIntent.getId()))
-					continue;
+                Intent parentIntent = pathIntent.getParentIntent();
+                if (parentIntent == null ||
+                        !(parentIntent instanceof ShortestPathIntent) ||
+                        !((ShortestPathIntent) parentIntent).getPathIntentId().equals(pathIntent.getId()))
+                    continue;
 
-				IntentState state = entry.getValue();
-				switch (state) {
-				//case INST_REQ:
-				case INST_ACK:
-				case INST_NACK:
-				//case DEL_REQ:
-				case DEL_ACK:
-				case DEL_PENDING:
-					highLevelIntentStates.put(parentIntent.getId(), state);
-					pathIntentStates.put(entry.getKey(), entry.getValue());
-					break;
-				default:
-					break;
-				}
-			}
-			highLevelIntents.changeStates(highLevelIntentStates);
-			pathIntents.changeStates(pathIntentStates);
-			p.log("end_changeStateByNotification");
-		}
-		finally {
-			p.flushLog();
-			lock.unlock();
-		}
-	}
+                IntentState state = entry.getValue();
+                switch (state) {
+                    //case INST_REQ:
+                    case INST_ACK:
+                    case INST_NACK:
+                        //case DEL_REQ:
+                    case DEL_ACK:
+                    case DEL_PENDING:
+                        highLevelIntentStates.put(parentIntent.getId(), state);
+                        pathIntentStates.put(entry.getKey(), entry.getValue());
+                        break;
+                    default:
+                        break;
+                }
+            }
+            highLevelIntents.changeStates(highLevelIntentStates);
+            pathIntents.changeStates(pathIntentStates);
+            p.log("end_changeStateByNotification");
+        } finally {
+            p.flushLog();
+            lock.unlock();
+        }
+    }
 }
diff --git a/src/main/java/net/onrc/onos/core/intent/runtime/PersistIntent.java b/src/main/java/net/onrc/onos/core/intent/runtime/PersistIntent.java
index 53be91c..e8c5dfc 100755
--- a/src/main/java/net/onrc/onos/core/intent/runtime/PersistIntent.java
+++ b/src/main/java/net/onrc/onos/core/intent/runtime/PersistIntent.java
@@ -28,7 +28,6 @@
 import com.esotericsoftware.kryo.io.Output;
 
 /**
- *
  * @author nickkaranatsios
  */
 public class PersistIntent {
@@ -90,7 +89,7 @@
                 ByteBuffer keyBytes = ByteBuffer.allocate(8).putLong(key);
                 byte[] buffer = stream.toByteArray();
                 int total = buffer.length;
-                if ((total >= valueStoreLimit )) {
+                if ((total >= valueStoreLimit)) {
                     int writeCount = total / valueStoreLimit;
                     int remainder = total % valueStoreLimit;
                     int upperIndex = 0;
@@ -99,14 +98,14 @@
                         keyBytes.putLong(key);
                         keyBytes.flip();
                         upperIndex = (i * valueStoreLimit + valueStoreLimit) - 1;
-                        log.debug("writing using indexes {}:{}", (i*valueStoreLimit) ,upperIndex);
+                        log.debug("writing using indexes {}:{}", (i * valueStoreLimit), upperIndex);
                         table.create(keyBytes.array(), Arrays.copyOfRange(buffer, i * valueStoreLimit, upperIndex));
                     }
                     if (remainder > 0) {
                         keyBytes.clear();
                         keyBytes.putLong(key);
                         keyBytes.flip();
-                        log.debug("writing using indexes {}:{}" ,upperIndex ,total);
+                        log.debug("writing using indexes {}:{}", upperIndex, total);
                         table.create(keyBytes.array(), Arrays.copyOfRange(buffer, upperIndex + 1, total - 1));
                     }
                 } else {
diff --git a/src/main/java/net/onrc/onos/core/intent/runtime/PlanCalcRuntime.java b/src/main/java/net/onrc/onos/core/intent/runtime/PlanCalcRuntime.java
index 09e50f6..7ea3bab 100644
--- a/src/main/java/net/onrc/onos/core/intent/runtime/PlanCalcRuntime.java
+++ b/src/main/java/net/onrc/onos/core/intent/runtime/PlanCalcRuntime.java
@@ -25,130 +25,125 @@
 import org.slf4j.LoggerFactory;
 
 /**
- *
  * @author Brian O'Connor <bocon@onlab.us>
- *
  */
 
 public class PlanCalcRuntime {
 
-//    NetworkGraph graph;
+    //    NetworkGraph graph;
     private final static Logger log = LoggerFactory.getLogger(PlanCalcRuntime.class);
 
     public PlanCalcRuntime(/*NetworkGraph graph*/) {
-//	this.graph = graph;
+//      this.graph = graph;
     }
 
     public List<Set<FlowEntry>> computePlan(IntentOperationList intentOps) {
-	long start = System.nanoTime();
-	List<Collection<FlowEntry>> flowEntries = computeFlowEntries(intentOps);
-	long step1 = System.nanoTime();
-	List<Set<FlowEntry>> plan = buildPhases(flowEntries);
-	long step2 = System.nanoTime();
-	log.error("MEASUREMENT: Compute flow entries: {} ns, Build phases: {} ns", 
-		  (step1 - start), (step2 - step1));
-	return plan;
+        long start = System.nanoTime();
+        List<Collection<FlowEntry>> flowEntries = computeFlowEntries(intentOps);
+        long step1 = System.nanoTime();
+        List<Set<FlowEntry>> plan = buildPhases(flowEntries);
+        long step2 = System.nanoTime();
+        log.error("MEASUREMENT: Compute flow entries: {} ns, Build phases: {} ns",
+                (step1 - start), (step2 - step1));
+        return plan;
     }
 
     private List<Collection<FlowEntry>> computeFlowEntries(IntentOperationList intentOps) {
-	List<Collection<FlowEntry>> flowEntries = new LinkedList<>();
-	for(IntentOperation i : intentOps) {
-	    if(!(i.intent instanceof PathIntent)) {
-		log.warn("Not a path intent: {}", i);
-		continue;
-	    }
-	    PathIntent intent = (PathIntent) i.intent;
-	    Intent parent = intent.getParentIntent();
-	    long srcPort, dstPort;
-	    long lastDstSw = -1, lastDstPort = -1;
-	    MACAddress srcMac, dstMac;
-	    if(parent instanceof ShortestPathIntent) {
-		ShortestPathIntent pathIntent = (ShortestPathIntent) parent;
-//		Switch srcSwitch = graph.getSwitch(pathIntent.getSrcSwitchDpid());
-//		srcPort = srcSwitch.getPort(pathIntent.getSrcPortNumber());
-		srcPort = pathIntent.getSrcPortNumber();
-		srcMac = MACAddress.valueOf(pathIntent.getSrcMac());
-		dstMac = MACAddress.valueOf(pathIntent.getDstMac());
-//		Switch dstSwitch = graph.getSwitch(pathIntent.getDstSwitchDpid());
-		lastDstSw = pathIntent.getDstSwitchDpid();
-//		lastDstPort = dstSwitch.getPort(pathIntent.getDstPortNumber());
-		lastDstPort = pathIntent.getDstPortNumber();
-	    }
-	    else {
-		log.warn("Unsupported Intent: {}", parent);
-		continue;
-	    }
-	    List<FlowEntry> entries = new ArrayList<>();
-	    for(LinkEvent linkEvent : intent.getPath()) {
-//		Link link = graph.getLink(linkEvent.getSrc().getDpid(),
-//			  linkEvent.getSrc().getNumber(),
-//			  linkEvent.getDst().getDpid(),
-//			  linkEvent.getDst().getNumber());
-//		Switch sw = link.getSrcSwitch();
-		long sw = linkEvent.getSrc().getDpid();
-//		dstPort = link.getSrcPort();
-		dstPort = linkEvent.getSrc().getNumber();
-		FlowEntry fe = new FlowEntry(sw, srcPort, dstPort, srcMac, dstMac, i.operator);
-		entries.add(fe);
-//		srcPort = link.getDstPort();
-		srcPort = linkEvent.getDst().getNumber();
-	    }
-	    if(lastDstSw >= 0 && lastDstPort >= 0) {
-		//Switch sw = lastDstPort.getSwitch();
-		long sw = lastDstSw;
-		dstPort = lastDstPort;
-		FlowEntry fe = new FlowEntry(sw, srcPort, dstPort, srcMac, dstMac, i.operator);
-		entries.add(fe);
-	    }
-	    // install flow entries in reverse order
-	    Collections.reverse(entries);
-	    flowEntries.add(entries);
-	}
-	return flowEntries;
+        List<Collection<FlowEntry>> flowEntries = new LinkedList<>();
+        for (IntentOperation i : intentOps) {
+            if (!(i.intent instanceof PathIntent)) {
+                log.warn("Not a path intent: {}", i);
+                continue;
+            }
+            PathIntent intent = (PathIntent) i.intent;
+            Intent parent = intent.getParentIntent();
+            long srcPort, dstPort;
+            long lastDstSw = -1, lastDstPort = -1;
+            MACAddress srcMac, dstMac;
+            if (parent instanceof ShortestPathIntent) {
+                ShortestPathIntent pathIntent = (ShortestPathIntent) parent;
+//              Switch srcSwitch = graph.getSwitch(pathIntent.getSrcSwitchDpid());
+//              srcPort = srcSwitch.getPort(pathIntent.getSrcPortNumber());
+                srcPort = pathIntent.getSrcPortNumber();
+                srcMac = MACAddress.valueOf(pathIntent.getSrcMac());
+                dstMac = MACAddress.valueOf(pathIntent.getDstMac());
+//              Switch dstSwitch = graph.getSwitch(pathIntent.getDstSwitchDpid());
+                lastDstSw = pathIntent.getDstSwitchDpid();
+//              lastDstPort = dstSwitch.getPort(pathIntent.getDstPortNumber());
+                lastDstPort = pathIntent.getDstPortNumber();
+            } else {
+                log.warn("Unsupported Intent: {}", parent);
+                continue;
+            }
+            List<FlowEntry> entries = new ArrayList<>();
+            for (LinkEvent linkEvent : intent.getPath()) {
+//              Link link = graph.getLink(linkEvent.getSrc().getDpid(),
+//                        linkEvent.getSrc().getNumber(),
+//                        linkEvent.getDst().getDpid(),
+//                        linkEvent.getDst().getNumber());
+//              Switch sw = link.getSrcSwitch();
+                long sw = linkEvent.getSrc().getDpid();
+//              dstPort = link.getSrcPort();
+                dstPort = linkEvent.getSrc().getNumber();
+                FlowEntry fe = new FlowEntry(sw, srcPort, dstPort, srcMac, dstMac, i.operator);
+                entries.add(fe);
+//              srcPort = link.getDstPort();
+                srcPort = linkEvent.getDst().getNumber();
+            }
+            if (lastDstSw >= 0 && lastDstPort >= 0) {
+                //Switch sw = lastDstPort.getSwitch();
+                long sw = lastDstSw;
+                dstPort = lastDstPort;
+                FlowEntry fe = new FlowEntry(sw, srcPort, dstPort, srcMac, dstMac, i.operator);
+                entries.add(fe);
+            }
+            // install flow entries in reverse order
+            Collections.reverse(entries);
+            flowEntries.add(entries);
+        }
+        return flowEntries;
     }
 
     private List<Set<FlowEntry>> buildPhases(List<Collection<FlowEntry>> flowEntries) {
-	Map<FlowEntry, Integer> map = new HashMap<>();
-	List<Set<FlowEntry>> plan = new ArrayList<>();
-	for(Collection<FlowEntry> c : flowEntries) {
-	    for(FlowEntry e : c) {
-		Integer i = map.get(e);
-		if(i == null) {
-		    i = Integer.valueOf(0);
-		}
-		switch(e.getOperator()) {
-		case ADD:
-		    i += 1;
-		    break;
-		case REMOVE:
-		    i -= 1;
-		    break;
-		default:
-		    break;
-		}
-		map.put(e, i);
-		// System.out.println(e + " " + e.getOperator());
-	    }
-	}
+        Map<FlowEntry, Integer> map = new HashMap<>();
+        List<Set<FlowEntry>> plan = new ArrayList<>();
+        for (Collection<FlowEntry> c : flowEntries) {
+            for (FlowEntry e : c) {
+                Integer i = map.get(e);
+                if (i == null) {
+                    i = Integer.valueOf(0);
+                }
+                switch (e.getOperator()) {
+                    case ADD:
+                        i += 1;
+                        break;
+                    case REMOVE:
+                        i -= 1;
+                        break;
+                    default:
+                        break;
+                }
+                map.put(e, i);
+                // System.out.println(e + " " + e.getOperator());
+            }
+        }
 
-	// really simple first iteration of plan
-	//TODO: optimize the map in phases
-	Set<FlowEntry> phase = new HashSet<>();
-	for(FlowEntry e : map.keySet()) {
-	    Integer i = map.get(e);
-	    if(i == 0) {
-		continue;
-	    }
-	    else if(i > 0) {
-		e.setOperator(Operator.ADD);
-	    }
-	    else if(i < 0) {
-		e.setOperator(Operator.REMOVE);
-	    }
-	    phase.add(e);
-	}
-	plan.add(phase);
+        // really simple first iteration of plan
+        //TODO: optimize the map in phases
+        Set<FlowEntry> phase = new HashSet<>();
+        for (FlowEntry e : map.keySet()) {
+            Integer i = map.get(e);
+            if (i == 0) {
+                continue;
+            } else if (i > 0) {
+                e.setOperator(Operator.ADD);
+            } else if (i < 0) {
+                e.setOperator(Operator.REMOVE);
+            }
+            phase.add(e);
+        }
+        plan.add(phase);
 
-	return plan;
+        return plan;
     }
 }
diff --git a/src/main/java/net/onrc/onos/core/intent/runtime/PlanInstallModule.java b/src/main/java/net/onrc/onos/core/intent/runtime/PlanInstallModule.java
index 102a754..b4904c1 100644
--- a/src/main/java/net/onrc/onos/core/intent/runtime/PlanInstallModule.java
+++ b/src/main/java/net/onrc/onos/core/intent/runtime/PlanInstallModule.java
@@ -45,154 +45,152 @@
 
     @Override
     public void init(FloodlightModuleContext context)
-	    throws FloodlightModuleException {
-	floodlightProvider = context.getServiceImpl(IFloodlightProviderService.class);
-	networkGraph = context.getServiceImpl(INetworkGraphService.class);
-	datagridService = context.getServiceImpl(IDatagridService.class);
-	flowPusher = context.getServiceImpl(IFlowPusherService.class);
-//	NetworkGraph graph = networkGraph.getNetworkGraph();
-	planCalc = new PlanCalcRuntime();
-	planInstall = new PlanInstallRuntime(floodlightProvider, flowPusher);
-	eventListener = new EventListener();
+            throws FloodlightModuleException {
+        floodlightProvider = context.getServiceImpl(IFloodlightProviderService.class);
+        networkGraph = context.getServiceImpl(INetworkGraphService.class);
+        datagridService = context.getServiceImpl(IDatagridService.class);
+        flowPusher = context.getServiceImpl(IFlowPusherService.class);
+//      NetworkGraph graph = networkGraph.getNetworkGraph();
+        planCalc = new PlanCalcRuntime();
+        planInstall = new PlanInstallRuntime(floodlightProvider, flowPusher);
+        eventListener = new EventListener();
     }
 
     class EventListener extends Thread
-    	implements IEventChannelListener<Long, IntentOperationList> {
+            implements IEventChannelListener<Long, IntentOperationList> {
 
-	private BlockingQueue<IntentOperationList> intentQueue = new LinkedBlockingQueue<>();
-	private Long key = Long.valueOf(0);
+        private BlockingQueue<IntentOperationList> intentQueue = new LinkedBlockingQueue<>();
+        private Long key = Long.valueOf(0);
 
-	@Override
-	public void run() {
-	    while(true) {
-		try {
-		    IntentOperationList intents = intentQueue.take();
-		    //TODO: consider draining the remaining intent lists
-		    //      and processing in one big batch
-//		    List<IntentOperationList> remaining = new LinkedList<>();
-//		    intentQueue.drainTo(remaining);
+        @Override
+        public void run() {
+            while (true) {
+                try {
+                    IntentOperationList intents = intentQueue.take();
+                    //TODO: consider draining the remaining intent lists
+                    //      and processing in one big batch
+//                  List<IntentOperationList> remaining = new LinkedList<>();
+//                  intentQueue.drainTo(remaining);
 
-		    processIntents(intents);
-		} catch (InterruptedException e) {
-		    log.warn("Error taking from intent queue: {}", e.getMessage());
-		}
-	    }
-	}
+                    processIntents(intents);
+                } catch (InterruptedException e) {
+                    log.warn("Error taking from intent queue: {}", e.getMessage());
+                }
+            }
+        }
 
-	private void processIntents(IntentOperationList intents) {
-	    log("start_processIntents");
-	    log.debug("Processing OperationList {}", intents);
-	    log("begin_computePlan");
-	    List<Set<FlowEntry>> plan = planCalc.computePlan(intents);
-	    log("end_computePlan");
-	    log.debug("Plan: {}", plan);
-	    log("begin_installPlan");
-	    boolean success = planInstall.installPlan(plan);
-	    log("end_installPlan");
+        private void processIntents(IntentOperationList intents) {
+            log("start_processIntents");
+            log.debug("Processing OperationList {}", intents);
+            log("begin_computePlan");
+            List<Set<FlowEntry>> plan = planCalc.computePlan(intents);
+            log("end_computePlan");
+            log.debug("Plan: {}", plan);
+            log("begin_installPlan");
+            boolean success = planInstall.installPlan(plan);
+            log("end_installPlan");
 
-	    log("begin_sendInstallNotif");
-	    sendNotifications(intents, true, success);
-	    log("end_sendInstallNotif");
-	    log("finish");
-	}
+            log("begin_sendInstallNotif");
+            sendNotifications(intents, true, success);
+            log("end_sendInstallNotif");
+            log("finish");
+        }
 
-	private void sendNotifications(IntentOperationList intents, boolean installed, boolean success) {
-	    IntentStateList states = new IntentStateList();
-	    for(IntentOperation i : intents) {
-		IntentState newState;
-		switch(i.operator) {
-		case REMOVE:
-		    if(installed) {
-			newState = success ? IntentState.DEL_ACK : IntentState.DEL_PENDING;
-		    }
-		    else {
-			newState = IntentState.DEL_REQ;
-		    }
-		    break;
-		case ADD:
-		default:
-		    if(installed) {
-			newState = success ? IntentState.INST_ACK : IntentState.INST_NACK;
-		    }
-		    else {
-			newState = IntentState.INST_REQ;
-		    }
-		    break;
-		}
-		states.put(i.intent.getId(), newState);
-	    }
-	    intentStateChannel.addEntry(key, states);
-	    // XXX: Send notifications using the same key every time
-	    // and receive them by entryAdded() and entryUpdated()
-	    // key += 1;
-	}
+        private void sendNotifications(IntentOperationList intents, boolean installed, boolean success) {
+            IntentStateList states = new IntentStateList();
+            for (IntentOperation i : intents) {
+                IntentState newState;
+                switch (i.operator) {
+                    case REMOVE:
+                        if (installed) {
+                            newState = success ? IntentState.DEL_ACK : IntentState.DEL_PENDING;
+                        } else {
+                            newState = IntentState.DEL_REQ;
+                        }
+                        break;
+                    case ADD:
+                    default:
+                        if (installed) {
+                            newState = success ? IntentState.INST_ACK : IntentState.INST_NACK;
+                        } else {
+                            newState = IntentState.INST_REQ;
+                        }
+                        break;
+                }
+                states.put(i.intent.getId(), newState);
+            }
+            intentStateChannel.addEntry(key, states);
+            // XXX: Send notifications using the same key every time
+            // and receive them by entryAdded() and entryUpdated()
+            // key += 1;
+        }
 
-	@Override
-	public void entryAdded(IntentOperationList value) {
-	    entryUpdated(value);
-	}
+        @Override
+        public void entryAdded(IntentOperationList value) {
+            entryUpdated(value);
+        }
 
-	@Override
-	public void entryRemoved(IntentOperationList value) {
-	    // This channel is a queue, so this method is not needed
-	}
+        @Override
+        public void entryRemoved(IntentOperationList value) {
+            // This channel is a queue, so this method is not needed
+        }
 
-	@Override
-	public void entryUpdated(IntentOperationList value) {
-	    log("start_intentNotifRecv");
-	    log("begin_sendReceivedNotif");
-	    sendNotifications(value, false, false);
-	    log("end_sendReceivedNotif");
-	    log("finish");
+        @Override
+        public void entryUpdated(IntentOperationList value) {
+            log("start_intentNotifRecv");
+            log("begin_sendReceivedNotif");
+            sendNotifications(value, false, false);
+            log("end_sendReceivedNotif");
+            log("finish");
 
-	    log.debug("Added OperationList {}", value);
-	    try {
-		intentQueue.put(value);
-	    } catch (InterruptedException e) {
-		log.warn("Error putting to intent queue: {}", e.getMessage());
-	    }
-	}
+            log.debug("Added OperationList {}", value);
+            try {
+                intentQueue.put(value);
+            } catch (InterruptedException e) {
+                log.warn("Error putting to intent queue: {}", e.getMessage());
+            }
+        }
     }
 
     public static void log(String step) {
-	log.error("Time:{}, Step:{}", System.nanoTime(), step);
+        log.error("Time:{}, Step:{}", System.nanoTime(), step);
     }
 
     @Override
     public void startUp(FloodlightModuleContext context) {
-	// start subscriber
-	datagridService.addListener(PATH_INTENT_CHANNEL_NAME,
-				    	      eventListener,
-				              Long.class,
-				              IntentOperationList.class);
-	eventListener.start();
-	// start publisher
-	intentStateChannel = datagridService.createChannel(INTENT_STATE_EVENT_CHANNEL_NAME,
-						Long.class,
-						IntentStateList.class);
+        // start subscriber
+        datagridService.addListener(PATH_INTENT_CHANNEL_NAME,
+                eventListener,
+                Long.class,
+                IntentOperationList.class);
+        eventListener.start();
+        // start publisher
+        intentStateChannel = datagridService.createChannel(INTENT_STATE_EVENT_CHANNEL_NAME,
+                Long.class,
+                IntentStateList.class);
     }
 
     @Override
     public Collection<Class<? extends IFloodlightService>> getModuleDependencies() {
-	Collection<Class<? extends IFloodlightService>> l =
-		new ArrayList<Class<? extends IFloodlightService>>();
-	l.add(IFloodlightProviderService.class);
-	l.add(INetworkGraphService.class);
-	l.add(IDatagridService.class);
-	l.add(IFlowPusherService.class);
-	return l;
+        Collection<Class<? extends IFloodlightService>> l =
+                new ArrayList<Class<? extends IFloodlightService>>();
+        l.add(IFloodlightProviderService.class);
+        l.add(INetworkGraphService.class);
+        l.add(IDatagridService.class);
+        l.add(IFlowPusherService.class);
+        return l;
     }
 
     @Override
     public Collection<Class<? extends IFloodlightService>> getModuleServices() {
-	// no services, for now
-	return null;
+        // no services, for now
+        return null;
     }
 
     @Override
     public Map<Class<? extends IFloodlightService>, IFloodlightService> getServiceImpls() {
-	// no services, for now
-	return null;
+        // no services, for now
+        return null;
     }
 
 }
diff --git a/src/main/java/net/onrc/onos/core/intent/runtime/PlanInstallRuntime.java b/src/main/java/net/onrc/onos/core/intent/runtime/PlanInstallRuntime.java
index 6d5c985..114e718 100644
--- a/src/main/java/net/onrc/onos/core/intent/runtime/PlanInstallRuntime.java
+++ b/src/main/java/net/onrc/onos/core/intent/runtime/PlanInstallRuntime.java
@@ -21,136 +21,137 @@
 import org.slf4j.LoggerFactory;
 
 /**
- * 
  * @author Brian O'Connor <bocon@onlab.us>
- *
  */
 
 public class PlanInstallRuntime {
-//    NetworkGraph graph;
+    //    NetworkGraph graph;
     IFlowPusherService pusher;
     IFloodlightProviderService provider;
     private final static Logger log = LoggerFactory.getLogger(PlanInstallRuntime.class);
 
     public PlanInstallRuntime(//NetworkGraph graph, 
-	    		      IFloodlightProviderService provider,
-	                      IFlowPusherService pusher) {
-//	this.graph = graph;
-	this.provider = provider;
-	this.pusher = pusher;
+                              IFloodlightProviderService provider,
+                              IFlowPusherService pusher) {
+//      this.graph = graph;
+        this.provider = provider;
+        this.pusher = pusher;
     }
-    
+
     private static class FlowModCount {
-	IOFSwitch sw;
-	long modFlows = 0;
-	long delFlows = 0;
-	long errors = 0;
-	
-	FlowModCount(IOFSwitch sw) {
-	    this.sw = sw;
-	}
-	
-	void addFlowEntry(FlowEntry entry) {
-	    switch(entry.getOperator()){
-	    case ADD:
-		modFlows++;
-		break;
-	    case ERROR:
-		errors++;
-		break;
-	    case REMOVE:
-		delFlows++;
-		break;
-	    default:
-		break;
-	    }
-	}
-	
-	public String toString() {
-	    return "sw:" + sw.getStringId() + ": modify " + modFlows + " delete " + delFlows + " error " + errors;
-	}
-	
-	static Map<IOFSwitch, FlowModCount> map = new HashMap<>();
-	static void countFlowEntry(IOFSwitch sw, FlowEntry entry) {
-	    FlowModCount count = map.get(sw);
-	    if(count == null) {
-		count = new FlowModCount(sw);
-		map.put(sw, count);
-	    }
-	    count.addFlowEntry(entry);
-	}
-	static void startCount() {
-	    map.clear();
-	}
-	static void printCount() {
-	    String result = "FLOWMOD COUNT:\n";
-	    for(FlowModCount count : map.values()) {
-		result += count.toString() + '\n';
-	    }
-	    if(map.values().isEmpty()) {
-		result += "No flow mods installed\n";
-	    }
-	    log.error(result);
-	}
+        IOFSwitch sw;
+        long modFlows = 0;
+        long delFlows = 0;
+        long errors = 0;
+
+        FlowModCount(IOFSwitch sw) {
+            this.sw = sw;
+        }
+
+        void addFlowEntry(FlowEntry entry) {
+            switch (entry.getOperator()) {
+                case ADD:
+                    modFlows++;
+                    break;
+                case ERROR:
+                    errors++;
+                    break;
+                case REMOVE:
+                    delFlows++;
+                    break;
+                default:
+                    break;
+            }
+        }
+
+        public String toString() {
+            return "sw:" + sw.getStringId() + ": modify " + modFlows + " delete " + delFlows + " error " + errors;
+        }
+
+        static Map<IOFSwitch, FlowModCount> map = new HashMap<>();
+
+        static void countFlowEntry(IOFSwitch sw, FlowEntry entry) {
+            FlowModCount count = map.get(sw);
+            if (count == null) {
+                count = new FlowModCount(sw);
+                map.put(sw, count);
+            }
+            count.addFlowEntry(entry);
+        }
+
+        static void startCount() {
+            map.clear();
+        }
+
+        static void printCount() {
+            String result = "FLOWMOD COUNT:\n";
+            for (FlowModCount count : map.values()) {
+                result += count.toString() + '\n';
+            }
+            if (map.values().isEmpty()) {
+                result += "No flow mods installed\n";
+            }
+            log.error(result);
+        }
     }
 
     public boolean installPlan(List<Set<FlowEntry>> plan) {
-	long start = System.nanoTime();
-	Map<Long,IOFSwitch> switches = provider.getSwitches();
-	
-	log.debug("IOFSwitches: {}", switches);
-	
-	FlowModCount.startCount();
-	for(Set<FlowEntry> phase : plan) {
-	    Set<Pair<IOFSwitch, net.onrc.onos.core.util.FlowEntry>> entries = new HashSet<>();
-	    Set<IOFSwitch> modifiedSwitches = new HashSet<>();
-	    
-	    long step1 = System.nanoTime();
-	    // convert flow entries and create pairs
-	    for(FlowEntry entry : phase) {
-		IOFSwitch sw = switches.get(entry.getSwitch());
-		if(sw == null) {
-		    // no active switch, skip this flow entry
-		    log.debug("Skipping flow entry: {}", entry);
-		    continue;
-		}
-		entries.add(new Pair<>(sw, entry.getFlowEntry()));		
-		modifiedSwitches.add(sw);
-		FlowModCount.countFlowEntry(sw, entry);
-	    }
-	    long step2 = System.nanoTime();
-	    
-	    // push flow entries to switches
-	    log.debug("Pushing flow entries: {}", entries);
-	    pusher.pushFlowEntries(entries);
-	    long step3 = System.nanoTime();
-	    
-	    // TODO: insert a barrier after each phase on each modifiedSwitch
-	    // TODO: wait for confirmation messages before proceeding
-	    List<Pair<IOFSwitch,OFMessageFuture<OFBarrierReply>>> barriers = new ArrayList<>();
-	    for(IOFSwitch sw : modifiedSwitches) {
-		barriers.add(new Pair<>(sw, pusher.barrierAsync(sw)));
-	    }
-	    for(Pair<IOFSwitch,OFMessageFuture<OFBarrierReply>> pair : barriers) {
-		IOFSwitch sw = pair.first;
-		OFMessageFuture<OFBarrierReply> future = pair.second;
-		try {
-		    future.get();
-		} catch (InterruptedException | ExecutionException e) {
-		    log.error("Barrier message not received for sw: {}", sw);
-		}
-	    }
-	    long step4 = System.nanoTime();
-	    log.error("MEASUREMENT: convert: {} ns, push: {} ns, barrierWait: {} ns",
-		    step2 - step1, step3 - step2, step4 - step3);
+        long start = System.nanoTime();
+        Map<Long, IOFSwitch> switches = provider.getSwitches();
 
-	}
-	long end = System.nanoTime();
-	log.error("MEASUREMENT: Install plan: {} ns", (end-start));
-	FlowModCount.printCount();
-	
-	// TODO: we assume that the plan installation succeeds for now
-	return true;
+        log.debug("IOFSwitches: {}", switches);
+
+        FlowModCount.startCount();
+        for (Set<FlowEntry> phase : plan) {
+            Set<Pair<IOFSwitch, net.onrc.onos.core.util.FlowEntry>> entries = new HashSet<>();
+            Set<IOFSwitch> modifiedSwitches = new HashSet<>();
+
+            long step1 = System.nanoTime();
+            // convert flow entries and create pairs
+            for (FlowEntry entry : phase) {
+                IOFSwitch sw = switches.get(entry.getSwitch());
+                if (sw == null) {
+                    // no active switch, skip this flow entry
+                    log.debug("Skipping flow entry: {}", entry);
+                    continue;
+                }
+                entries.add(new Pair<>(sw, entry.getFlowEntry()));
+                modifiedSwitches.add(sw);
+                FlowModCount.countFlowEntry(sw, entry);
+            }
+            long step2 = System.nanoTime();
+
+            // push flow entries to switches
+            log.debug("Pushing flow entries: {}", entries);
+            pusher.pushFlowEntries(entries);
+            long step3 = System.nanoTime();
+
+            // TODO: insert a barrier after each phase on each modifiedSwitch
+            // TODO: wait for confirmation messages before proceeding
+            List<Pair<IOFSwitch, OFMessageFuture<OFBarrierReply>>> barriers = new ArrayList<>();
+            for (IOFSwitch sw : modifiedSwitches) {
+                barriers.add(new Pair<>(sw, pusher.barrierAsync(sw)));
+            }
+            for (Pair<IOFSwitch, OFMessageFuture<OFBarrierReply>> pair : barriers) {
+                IOFSwitch sw = pair.first;
+                OFMessageFuture<OFBarrierReply> future = pair.second;
+                try {
+                    future.get();
+                } catch (InterruptedException | ExecutionException e) {
+                    log.error("Barrier message not received for sw: {}", sw);
+                }
+            }
+            long step4 = System.nanoTime();
+            log.error("MEASUREMENT: convert: {} ns, push: {} ns, barrierWait: {} ns",
+                    step2 - step1, step3 - step2, step4 - step3);
+
+        }
+        long end = System.nanoTime();
+        log.error("MEASUREMENT: Install plan: {} ns", (end - start));
+        FlowModCount.printCount();
+
+        // TODO: we assume that the plan installation succeeds for now
+        return true;
     }
 
 }