Add string attributes to self-containd objects.

- Add common super class to *Event classes, which handles attributes.
- Add string attributes to *Event classes (ONOS-1564)
- Populate string attributes.
  Picked random attribute obtained from OF, just to initially populate attrs.
  Attributes to be used for each elements should be revisited later.
- *Impl class to use/reference self-contained objects
   prep-work for snapshot in mind.
- unified equals implementations
- Add unfrozen Copy constructor.
- Add freeze check to fixed attributes.
- Remove get*Impl which was not really adding value.

Change-Id: I10f9538f87d133a22237bd8ab97b8de421d3930b
diff --git a/src/main/java/net/onrc/onos/core/topology/UpdateStringAttributes.java b/src/main/java/net/onrc/onos/core/topology/UpdateStringAttributes.java
new file mode 100644
index 0000000..6443b14
--- /dev/null
+++ b/src/main/java/net/onrc/onos/core/topology/UpdateStringAttributes.java
@@ -0,0 +1,47 @@
+package net.onrc.onos.core.topology;
+
+// TODO Need better name
+/**
+ * Update String Attributes.
+ */
+public interface UpdateStringAttributes extends StringAttributes {
+
+    /**
+     * Creates the string attribute.
+     *
+     * @param attr attribute name
+     * @param value new value to replace with
+     * @return true if success, false if the attribute already exist
+     */
+    public boolean createStringAttribute(final String attr,
+                                         final String value);
+
+    /**
+     * Replaces the existing string attribute.
+     *
+     * @param attr attribute name
+     * @param oldValue old value to replace
+     * @param value new value to replace with
+     * @return true if success
+     */
+    public boolean replaceStringAttribute(final String attr,
+                                     final String oldValue, final String value);
+
+    /**
+     * Deletes existing string attribute.
+     *
+     * @param attr attribute name
+     * @param expectedValue value expected to be deleted
+     * @return true if success, false if an attribute already exist
+     */
+    public boolean deleteStringAttribute(final String attr,
+                                         final String expectedValue);
+
+    /**
+     * Deletes string attribute.
+     *
+     * @param attr attribute name
+     */
+    public void deleteStringAttribute(final String attr);
+
+}