fix intent issues yuta observed

Change-Id: I7dc4a19d49a1b3fc18ecce02a4018cbc9a3043fc
diff --git a/core/store/dist/src/main/java/org/onlab/onos/store/intent/impl/HazelcastIntentStore.java b/core/store/dist/src/main/java/org/onlab/onos/store/intent/impl/HazelcastIntentStore.java
index 9b9e2d1..f09a968 100644
--- a/core/store/dist/src/main/java/org/onlab/onos/store/intent/impl/HazelcastIntentStore.java
+++ b/core/store/dist/src/main/java/org/onlab/onos/store/intent/impl/HazelcastIntentStore.java
@@ -20,6 +20,7 @@
 import com.google.common.base.Verify;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Lists;
 import com.hazelcast.core.EntryAdapter;
 import com.hazelcast.core.EntryEvent;
 import com.hazelcast.core.EntryListener;
@@ -171,15 +172,16 @@
     }
 
     @Override
-    public IntentEvent createIntent(Intent intent) {
+    public void createIntent(Intent intent) {
         Context timer = startTimer(createIntentTimer);
         try {
             Intent existing = intents.putIfAbsent(intent.id(), intent);
             if (existing != null) {
                 // duplicate, ignore
-                return null;
+                return;
             } else {
-                return this.setState(intent, IntentState.SUBMITTED);
+                this.setState(intent, IntentState.SUBMITTED);
+                return;
             }
         } finally {
             stopTimer(timer);
@@ -256,7 +258,7 @@
     }
 
     @Override
-    public IntentEvent setState(Intent intent, IntentState state) {
+    public void setState(Intent intent, IntentState state) {
         Context timer = startTimer(setStateTimer);
         try {
 
@@ -311,10 +313,10 @@
             final IntentState prevTransient = transientStates.put(id, state);
             log.debug("Transient State change: {} {}=>{}", id, prevTransient, state);
 
-            if (type == null) {
-                return null;
+            if (type != null) {
+                notifyDelegate(new IntentEvent(type, intent));
             }
-            return new IntentEvent(type, intent);
+            return;
         } finally {
             stopTimer(timer);
         }
@@ -358,6 +360,7 @@
         List<Operation> failed = new ArrayList<>();
 
         List<Pair<Operation, List<Future<?>>>> futures = new ArrayList<>(batch.operations().size());
+        List<IntentEvent> events = Lists.newArrayList();
 
         for (Operation op : batch.operations()) {
             switch (op.type()) {
@@ -434,6 +437,7 @@
                                  prevIntent, prevIntentState,
                                  intent, newIntentState);
                     }
+                    events.add(IntentEvent.getEvent(SUBMITTED, intent));
                 } catch (InterruptedException e) {
                     log.error("Batch write was interrupted while processing {}", op,  e);
                     failed.add(op);
@@ -487,6 +491,8 @@
                     if (PARKING.contains(newState)) {
                         transientStates.remove(intentId);
                     }
+                    events.add(IntentEvent.getEvent(newState, intent));
+
                     log.trace("{} - {} -> {}", intentId, prevIntentState, newState);
                     // TODO sanity check and log?
                 } catch (InterruptedException e) {
@@ -554,6 +560,9 @@
                 break;
             }
         }
+
+        notifyDelegate(events);
+
         return failed;
     }
 
@@ -571,6 +580,8 @@
                     log.debug("{} state updated remotely, removing transient state {}",
                               intentId, oldState);
                 }
+
+                notifyDelegate(IntentEvent.getEvent(event.getValue(), getIntent(intentId)));
             }
         }
     }