bug[ats_ATS103637]: Initialize Activity Log Types on server side

Change-Id: Ibaa1bf5aa8e3613bb3ab7635fe4dd4fac68df2e4
diff --git a/plugins/org.eclipse.osee.activity/src/org/eclipse/osee/activity/ActivityStorage.java b/plugins/org.eclipse.osee.activity/src/org/eclipse/osee/activity/ActivityStorage.java
index 26da8cc..495c255 100644
--- a/plugins/org.eclipse.osee.activity/src/org/eclipse/osee/activity/ActivityStorage.java
+++ b/plugins/org.eclipse.osee.activity/src/org/eclipse/osee/activity/ActivityStorage.java
@@ -27,6 +27,8 @@
 
    void addActivityTypes(ActivityType... types);
 
+   void addActivityTypes(Iterable<ActivityType> types);
+
    void selectTypes(ActivityTypeDataHandler handler);
 
    void selectType(Long typeId, ActivityTypeDataHandler handler);
diff --git a/plugins/org.eclipse.osee.activity/src/org/eclipse/osee/activity/internal/ActivityLogImpl.java b/plugins/org.eclipse.osee.activity/src/org/eclipse/osee/activity/internal/ActivityLogImpl.java
index 696702c..a7a77a7 100644
--- a/plugins/org.eclipse.osee.activity/src/org/eclipse/osee/activity/internal/ActivityLogImpl.java
+++ b/plugins/org.eclipse.osee.activity/src/org/eclipse/osee/activity/internal/ActivityLogImpl.java
@@ -20,9 +20,11 @@
 import static org.eclipse.osee.activity.internal.ActivityUtil.captureStackTrace;
 import static org.eclipse.osee.activity.internal.ActivityUtil.get;
 import static org.eclipse.osee.framework.database.IOseeDatabaseService.MAX_VARCHAR_LENGTH;
+import java.util.HashMap;
 import java.util.Map;
 import java.util.concurrent.Callable;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.atomic.AtomicBoolean;
 import org.eclipse.osee.activity.ActivityStorage;
 import org.eclipse.osee.activity.api.Activity;
 import org.eclipse.osee.activity.api.ActivityLog;
@@ -67,6 +69,7 @@
    private ExecutorAdmin executorAdmin;
    private ActivityStorage storage;
 
+   private final AtomicBoolean initialized = new AtomicBoolean(false);
    private ActivityMonitorImpl activityMonitor;
    private volatile long freshnessMillis;
    private volatile int exceptionLineCount;
@@ -253,6 +256,9 @@
 
    @Override
    public Void call() {
+      if (!initialized.getAndSet(true)) {
+         initialize();
+      }
       if (!newEntities.isEmpty()) {
          try {
             storage.addEntries(new DrainingIterator<Object[]>(newEntities.values().iterator()));
@@ -283,6 +289,23 @@
       }
    }
 
+   private void initialize() {
+      final Map<Long, ActivityType> types = new HashMap<Long, ActivityType>(4);
+      for (Activity type : Activity.values()) {
+         types.put(type.getTypeId(), type);
+      }
+      storage.selectTypes(new ActivityTypeDataHandler() {
+
+         @Override
+         public void onData(Long typeId, Long logLevel, String module, String messageFormat) {
+            types.remove(typeId);
+         }
+      });
+      if (!types.isEmpty()) {
+         storage.addActivityTypes(types.values());
+      }
+   }
+
    @Override
    public void completeEntry(Long entryId) {
       updateEntry(entryId, COMPLETE_STATUS);
diff --git a/plugins/org.eclipse.osee.activity/src/org/eclipse/osee/activity/internal/DatabaseActivityStorage.java b/plugins/org.eclipse.osee.activity/src/org/eclipse/osee/activity/internal/DatabaseActivityStorage.java
index 5057e7c..0b40d59 100644
--- a/plugins/org.eclipse.osee.activity/src/org/eclipse/osee/activity/internal/DatabaseActivityStorage.java
+++ b/plugins/org.eclipse.osee.activity/src/org/eclipse/osee/activity/internal/DatabaseActivityStorage.java
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.osee.activity.internal;
 
+import java.util.Arrays;
 import org.eclipse.osee.activity.ActivityStorage;
 import org.eclipse.osee.activity.api.ActivityLog.ActivityDataHandler;
 import org.eclipse.osee.activity.api.ActivityLog.ActivityTypeDataHandler;
@@ -116,6 +117,11 @@
 
    @Override
    public void addActivityTypes(ActivityType... types) {
+      addActivityTypes(Arrays.asList(types));
+   }
+
+   @Override
+   public void addActivityTypes(Iterable<ActivityType> types) {
       for (ActivityType type : types) {
          addLogType(type);
       }