NPE protection for purge requests (ONOS-1463)

Change-Id: I02732ed83aaaf5c760fdb96899696177415ebd23
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/phase/IntentProcessPhase.java b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/IntentProcessPhase.java
index 1ed42fd..399a307 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/phase/IntentProcessPhase.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/IntentProcessPhase.java
@@ -50,7 +50,7 @@
             case WITHDRAW_REQ:
                 return new WithdrawRequest(processor, data, Optional.ofNullable(current));
             case PURGE_REQ:
-                return new PurgeRequest(data, current);
+                return new PurgeRequest(data, Optional.ofNullable(current));
             default:
                 // illegal state
                 return new Failed(data);
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/phase/PurgeRequest.java b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/PurgeRequest.java
index b04e05e..69126df 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/phase/PurgeRequest.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/PurgeRequest.java
@@ -19,6 +19,8 @@
 import org.onosproject.net.intent.IntentState;
 import org.slf4j.Logger;
 
+import java.util.Optional;
+
 import static com.google.common.base.Preconditions.checkNotNull;
 import static org.slf4j.LoggerFactory.getLogger;
 
@@ -32,29 +34,37 @@
 
     private static final Logger log = getLogger(PurgeRequest.class);
 
-    private final IntentData pending;
-    private final IntentData current;
+    private final IntentData data;
+    private final Optional<IntentData> stored;
 
-    PurgeRequest(IntentData intentData, IntentData current) {
-        this.pending = checkNotNull(intentData);
-        this.current = checkNotNull(current);
+    PurgeRequest(IntentData intentData, Optional<IntentData> stored) {
+        this.data = checkNotNull(intentData);
+        this.stored = checkNotNull(stored);
     }
 
     private boolean shouldAcceptPurge() {
-        if (current.state() == IntentState.WITHDRAWN
-                || current.state() == IntentState.FAILED) {
+        if (!stored.isPresent()) {
+            log.info("Purge for intent {}, but intent is not present",
+                     data.key());
             return true;
         }
-        log.info("Purge for intent {} is rejected", pending.key());
+
+        IntentData storedData = stored.get();
+        if (storedData.state() == IntentState.WITHDRAWN
+                || storedData.state() == IntentState.FAILED) {
+            return true;
+        }
+        log.info("Purge for intent {} is rejected because intent state is {}",
+                 data.key(), storedData.state());
         return false;
     }
 
     @Override
     public IntentData data() {
         if (shouldAcceptPurge()) {
-            return pending;
+            return data;
         } else {
-            return current;
+            return stored.get();
         }
     }
 }