[ONOS-4287] Persistent and distributed alarm store

Change-Id: I2fb0f5d84e563a53f036be012a8190d7df5869dc
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/faultmanagement/alarm/DefaultAlarm.java b/incubator/api/src/main/java/org/onosproject/incubator/net/faultmanagement/alarm/DefaultAlarm.java
index 8de205c..162b3df 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/faultmanagement/alarm/DefaultAlarm.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/faultmanagement/alarm/DefaultAlarm.java
@@ -25,6 +25,7 @@
 /**
  * Default implementation of an alarm.
  */
+//TODO simpler creation and updating.
 public final class DefaultAlarm implements Alarm {
 
     private final AlarmId id;
@@ -41,34 +42,50 @@
     private final boolean isManuallyClearable;
     private final String assignedUser;
 
+    //Only for Kryo
+    DefaultAlarm() {
+        id = null;
+        deviceId = null;
+        description = null;
+        source = null;
+        timeRaised = -1;
+        timeUpdated = -1;
+        timeCleared = null;
+        severity = null;
+        isServiceAffecting = false;
+        isAcknowledged = false;
+        isManuallyClearable = false;
+        assignedUser = null;
+    }
+
     /**
      * Instantiates a new Default alarm.
      *
-     * @param id the id
-     * @param deviceId the device id
-     * @param description the description
-     * @param source the source, null indicates none.
-     * @param timeRaised the time raised.
-     * @param timeUpdated the time last updated.
-     * @param timeCleared the time cleared, null indicates uncleared.
-     * @param severity the severity
-     * @param isServiceAffecting the service affecting
-     * @param isAcknowledged the acknowledged
+     * @param id                  the id
+     * @param deviceId            the device id
+     * @param description         the description
+     * @param source              the source, null indicates none.
+     * @param timeRaised          the time raised.
+     * @param timeUpdated         the time last updated.
+     * @param timeCleared         the time cleared, null indicates uncleared.
+     * @param severity            the severity
+     * @param isServiceAffecting  the service affecting
+     * @param isAcknowledged      the acknowledged
      * @param isManuallyClearable the manually clearable
-     * @param assignedUser the assigned user, `null` indicates none.
+     * @param assignedUser        the assigned user, `null` indicates none.
      */
     private DefaultAlarm(final AlarmId id,
-            final DeviceId deviceId,
-            final String description,
-            final AlarmEntityId source,
-            final long timeRaised,
-            final long timeUpdated,
-            final Long timeCleared,
-            final SeverityLevel severity,
-            final boolean isServiceAffecting,
-            final boolean isAcknowledged,
-            final boolean isManuallyClearable,
-            final String assignedUser) {
+                         final DeviceId deviceId,
+                         final String description,
+                         final AlarmEntityId source,
+                         final long timeRaised,
+                         final long timeUpdated,
+                         final Long timeCleared,
+                         final SeverityLevel severity,
+                         final boolean isServiceAffecting,
+                         final boolean isAcknowledged,
+                         final boolean isManuallyClearable,
+                         final String assignedUser) {
         this.id = id;
         this.deviceId = deviceId;
         this.description = description;
@@ -147,9 +164,9 @@
     public int hashCode() {
         // id or timeRaised or timeUpdated may differ
         return Objects.hash(deviceId, description,
-                source, timeCleared, severity,
-                isServiceAffecting, isAcknowledged,
-                isManuallyClearable, assignedUser);
+                            source, timeCleared, severity,
+                            isServiceAffecting, isAcknowledged,
+                            isManuallyClearable, assignedUser);
     }
 
     @Override
@@ -244,7 +261,7 @@
         }
 
         public Builder(final DeviceId deviceId,
-                final String description, final SeverityLevel severity, final long timeRaised) {
+                       final String description, final SeverityLevel severity, final long timeRaised) {
             super();
             this.id = AlarmId.NONE;
             this.deviceId = deviceId;
@@ -310,7 +327,7 @@
             checkNotNull(severity, "Must specify a severity");
 
             return new DefaultAlarm(id, deviceId, description, source, timeRaised, timeUpdated, timeCleared,
-                    severity, isServiceAffecting, isAcknowledged, isManuallyClearable, assignedUser);
+                                    severity, isServiceAffecting, isAcknowledged, isManuallyClearable, assignedUser);
         }
     }
 }