Adding SimpleIntentStore to distributed bundle

Also deactivating GossipIntentStore for now.

Change-Id: I9af7352c64adcf252ed01f7c32c84358146aee93
diff --git a/core/store/dist/src/main/java/org/onosproject/store/intent/impl/GossipIntentStore.java b/core/store/dist/src/main/java/org/onosproject/store/intent/impl/GossipIntentStore.java
index a40d3a5..ba348d4 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/intent/impl/GossipIntentStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/intent/impl/GossipIntentStore.java
@@ -52,7 +52,7 @@
  * Manages inventory of Intents in a distributed data store that uses optimistic
  * replication and gossip based techniques.
  */
-@Component(immediate = true, enabled = true)
+@Component(immediate = false, enabled = false)
 @Service
 public class GossipIntentStore
         extends AbstractStore<IntentEvent, IntentStoreDelegate>
diff --git a/core/store/dist/src/main/java/org/onosproject/store/intent/impl/SimpleIntentStore.java b/core/store/dist/src/main/java/org/onosproject/store/intent/impl/SimpleIntentStore.java
new file mode 100644
index 0000000..f3ecb48
--- /dev/null
+++ b/core/store/dist/src/main/java/org/onosproject/store/intent/impl/SimpleIntentStore.java
@@ -0,0 +1,222 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.store.intent.impl;
+
+import com.google.common.collect.Maps;
+import org.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Deactivate;
+import org.apache.felix.scr.annotations.Service;
+import org.onosproject.net.intent.BatchWrite;
+import org.onosproject.net.intent.BatchWrite.Operation;
+import org.onosproject.net.intent.Intent;
+import org.onosproject.net.intent.IntentData;
+import org.onosproject.net.intent.IntentEvent;
+import org.onosproject.net.intent.IntentId;
+import org.onosproject.net.intent.IntentState;
+import org.onosproject.net.intent.IntentStore;
+import org.onosproject.net.intent.IntentStoreDelegate;
+import org.onosproject.net.intent.Key;
+import org.onosproject.store.AbstractStore;
+import org.slf4j.Logger;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static org.slf4j.LoggerFactory.getLogger;
+
+@Component(immediate = true)
+@Service
+//FIXME remove this
+public class SimpleIntentStore
+        extends AbstractStore<IntentEvent, IntentStoreDelegate>
+        implements IntentStore {
+
+    private final Logger log = getLogger(getClass());
+
+    // current state maps FIXME.. make this a IntentData map
+    private final Map<Key, IntentData> current = Maps.newConcurrentMap();
+    private final Map<Key, IntentData> pending = Maps.newConcurrentMap(); //String is "key"
+
+    @Activate
+    public void activate() {
+        log.info("Started");
+    }
+
+    @Deactivate
+    public void deactivate() {
+        log.info("Stopped");
+    }
+
+    @Override
+    public long getIntentCount() {
+        return current.size();
+    }
+
+    @Override
+    public Iterable<Intent> getIntents() {
+        return current.values().stream()
+                .map(IntentData::intent)
+                .collect(Collectors.toList());
+    }
+
+    @Override
+    public Intent getIntent(IntentId intentId) {
+        for (IntentData data : current.values()) {
+            if (Objects.equals(data.intent().id(), intentId)) {
+                return data.intent();
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public IntentState getIntentState(IntentId intentId) {
+        for (IntentData data : current.values()) {
+            if (Objects.equals(data.intent().id(), intentId)) {
+                return data.state();
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public List<Intent> getInstallableIntents(IntentId intentId) {
+        for (IntentData data : current.values()) {
+            if (Objects.equals(data.intent().id(), intentId)) {
+                return data.installables();
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public IntentData getIntentData(Key key) {
+        return current.get(key);
+    }
+
+    /*
+     * Execute writes in a batch.
+     *
+     * @param batch BatchWrite to execute
+     * @return failed operations
+     */
+    @Override
+    public List<Operation> batchWrite(BatchWrite batch) {
+        throw new UnsupportedOperationException("deprecated");
+        /*
+        if (batch.isEmpty()) {
+            return Collections.emptyList();
+        }
+
+        List<Operation> failed = Lists.newArrayList();
+        for (Operation op : batch.operations()) {
+            switch (op.type()) {
+            case CREATE_INTENT:
+                checkArgument(op.args().size() == 1,
+                              "CREATE_INTENT takes 1 argument. %s", op);
+                Intent intent = (Intent) op.args().get(0);
+                // TODO: what if it failed?
+//                createIntent(intent); FIXME
+                break;
+
+            case REMOVE_INTENT:
+                checkArgument(op.args().size() == 1,
+                              "REMOVE_INTENT takes 1 argument. %s", op);
+                IntentId intentId = (IntentId) op.args().get(0);
+//                removeIntent(intentId); FIXME
+                break;
+
+            case REMOVE_INSTALLED:
+                checkArgument(op.args().size() == 1,
+                              "REMOVE_INSTALLED takes 1 argument. %s", op);
+                intentId = (IntentId) op.args().get(0);
+                removeInstalledIntents(intentId);
+                break;
+
+            case SET_INSTALLABLE:
+                checkArgument(op.args().size() == 2,
+                              "SET_INSTALLABLE takes 2 arguments. %s", op);
+                intentId = (IntentId) op.args().get(0);
+                @SuppressWarnings("unchecked")
+                List<Intent> installableIntents = (List<Intent>) op.args().get(1);
+                setInstallableIntents(intentId, installableIntents);
+                break;
+
+            case SET_STATE:
+                checkArgument(op.args().size() == 2,
+                              "SET_STATE takes 2 arguments. %s", op);
+                intent = (Intent) op.args().get(0);
+                IntentState newState = (IntentState) op.args().get(1);
+                setState(intent, newState);
+                break;
+
+            default:
+                break;
+            }
+        }
+        return failed;
+        */
+    }
+
+    @Override
+    public void write(IntentData newData) {
+        //FIXME need to compare the versions
+        current.put(newData.key(), newData);
+        try {
+            notifyDelegate(IntentEvent.getEvent(newData));
+        } catch (IllegalArgumentException e) {
+            //no-op
+            log.trace("ignore this exception: {}", e);
+        }
+        IntentData old = pending.get(newData.key());
+        if (old != null /* && FIXME version check */) {
+            pending.remove(newData.key());
+        }
+    }
+
+    @Override
+    public void batchWrite(Iterable<IntentData> updates) {
+        for (IntentData data : updates) {
+            write(data);
+        }
+    }
+
+    @Override
+    public Intent getIntent(Key key) {
+        IntentData data = current.get(key);
+        return (data != null) ? data.intent() : null;
+    }
+
+
+    @Override
+    public void addPending(IntentData data) {
+        //FIXME need to compare versions
+        pending.put(data.key(), data);
+        checkNotNull(delegate, "Store delegate is not set")
+                .process(data);
+        notifyDelegate(IntentEvent.getEvent(data));
+    }
+
+
+    @Override
+    public boolean isMaster(Intent intent) {
+        return true;
+    }
+}