refactor: Reduce redundancy in client attribute hierarchy

Change-Id: I4cf673efcec4fb498646da1e794b3423a5fb799d
diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/artifact/Attribute.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/artifact/Attribute.java
index 5ea9d26..2ef85cb 100644
--- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/artifact/Attribute.java
+++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/artifact/Attribute.java
@@ -26,6 +26,7 @@
 import org.eclipse.osee.framework.core.model.type.AttributeType;
 import org.eclipse.osee.framework.jdk.core.type.OseeCoreException;
 import org.eclipse.osee.framework.jdk.core.type.OseeStateException;
+import org.eclipse.osee.framework.jdk.core.util.Conditions;
 import org.eclipse.osee.framework.jdk.core.util.Lib;
 import org.eclipse.osee.framework.logging.OseeLog;
 import org.eclipse.osee.framework.messaging.event.res.AttributeEventModificationType;
@@ -113,6 +114,7 @@
    }
 
    public boolean setValue(T value) {
+      Conditions.checkNotNull(value, "Attribute value", "attribute id [%s]", getId());
       checkIsRenameable(value);
       boolean response = subClassSetValue(value);
       if (response) {
@@ -122,10 +124,12 @@
    }
 
    protected boolean setFromStringNoDirty(String value) {
+      Conditions.checkNotNull(value, "Attribute value", "attribute id [%s]", getId());
       return subClassSetValue(convertStringToValue(value));
    }
 
    public boolean setFromString(String value) throws OseeCoreException {
+      Conditions.checkNotNull(value, "Attribute value", "attribute id [%s]", getId());
       return setValue(convertStringToValue(value));
    }
 
@@ -141,6 +145,9 @@
       }
    }
 
+   /**
+    * @param value will be non-null
+    */
    public abstract T convertStringToValue(String value);
 
    public final void resetToDefaultValue() throws OseeCoreException {
@@ -168,7 +175,7 @@
 
    /**
     * Subclasses must provide an implementation of this method and in general should not override the other set value
-    * methods
+    * methods. The value parameter will be non-null
     */
    protected abstract boolean subClassSetValue(T value) throws OseeCoreException;
 
diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/ArtifactReferenceAttribute.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/ArtifactReferenceAttribute.java
index 5f0fac2..f66abb1 100644
--- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/ArtifactReferenceAttribute.java
+++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/ArtifactReferenceAttribute.java
@@ -10,23 +10,10 @@
  *******************************************************************************/
 package org.eclipse.osee.framework.skynet.core.attribute;
 
-import org.eclipse.osee.framework.jdk.core.type.OseeCoreException;
 import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
 
 /**
  * @author Roberto E. Escobar
  */
 public class ArtifactReferenceAttribute extends IdentityReferenceAttribute<Artifact> {
-
-   Long rawValue;
-
-   @Override
-   protected boolean subClassSetValue(Artifact artifact) throws OseeCoreException {
-      rawValue = artifact == null ? null : artifact.getUuid();
-      return getAttributeDataProvider().setValue(artifact == null ? "" : artifact.getIdString());
-   }
-
-   public Long getRawValue() {
-      return rawValue;
-   }
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/BooleanAttribute.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/BooleanAttribute.java
index a463d93..7263f5b 100644
--- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/BooleanAttribute.java
+++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/BooleanAttribute.java
@@ -24,13 +24,7 @@
    }
 
    @Override
-   public boolean subClassSetValue(Boolean value) throws OseeCoreException {
-      return getAttributeDataProvider().setValue(value);
-   }
-
-   @Override
    public Boolean convertStringToValue(String value) {
       return Boolean.valueOf(value);
    }
-
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/BranchReferenceAttribute.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/BranchReferenceAttribute.java
index 5f4a558..41e64d9 100644
--- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/BranchReferenceAttribute.java
+++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/BranchReferenceAttribute.java
@@ -11,13 +11,6 @@
 package org.eclipse.osee.framework.skynet.core.attribute;
 
 import org.eclipse.osee.framework.core.data.IOseeBranch;
-import org.eclipse.osee.framework.jdk.core.type.OseeCoreException;
 
 public class BranchReferenceAttribute extends IdentityReferenceAttribute<IOseeBranch> {
-
-   @Override
-   protected boolean subClassSetValue(IOseeBranch value) throws OseeCoreException {
-      return getAttributeDataProvider().setValue(value == null ? "" : value.getIdString());
-   }
-
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/CharacterBackedAttribute.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/CharacterBackedAttribute.java
index cb15abb..4f067f4 100644
--- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/CharacterBackedAttribute.java
+++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/CharacterBackedAttribute.java
@@ -10,6 +10,8 @@
  *******************************************************************************/
 package org.eclipse.osee.framework.skynet.core.attribute;
 
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
 import org.eclipse.osee.framework.skynet.core.artifact.Attribute;
 import org.eclipse.osee.framework.skynet.core.attribute.providers.ICharacterAttributeDataProvider;
 
@@ -23,4 +25,21 @@
       // the super class is of type  ICharacterAttributeDataProvider
       return (ICharacterAttributeDataProvider) super.getAttributeDataProvider();
    }
+
+   @Override
+   protected boolean subClassSetValue(T value) {
+      Class<?> clazz = getClass();
+      String superclassName = clazz.getSuperclass().getSimpleName();
+      while (!superclassName.equals("CharacterBackedAttribute") && !superclassName.equals("BinaryBackedAttribute")) {
+         clazz = clazz.getSuperclass();
+         superclassName = clazz.getSuperclass().getSimpleName();
+      }
+      Type persistentClass = ((ParameterizedType) clazz.getGenericSuperclass()).getActualTypeArguments()[0];
+      if (!persistentClass.getTypeName().equals(value.getClass().getName())) {
+         throw new ClassCastException(
+            persistentClass + " attribute subClassSetValue called with type " + value.getClass());
+      }
+
+      return getAttributeDataProvider().setValue(value);
+   }
 }
diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/CompressedContentAttribute.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/CompressedContentAttribute.java
index 72add22..c3d207c 100644
--- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/CompressedContentAttribute.java
+++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/CompressedContentAttribute.java
@@ -24,7 +24,7 @@
    }
 
    @Override
-   public boolean subClassSetValue(InputStream value) throws OseeCoreException {
+   protected boolean subClassSetValue(InputStream value) {
       return setValueFromInputStream(value);
    }
 
@@ -32,12 +32,8 @@
    public boolean setValueFromInputStream(InputStream value) throws OseeCoreException {
       boolean response = false;
       try {
-         if (value == null) {
-            response = getAttributeDataProvider().setValue(null);
-         } else {
-            byte[] data = Lib.inputStreamToBytes(value);
-            response = getAttributeDataProvider().setValue(ByteBuffer.wrap(data));
-         }
+         byte[] data = Lib.inputStreamToBytes(value);
+         response = getAttributeDataProvider().setValue(ByteBuffer.wrap(data));
       } catch (IOException ex) {
          OseeCoreException.wrapAndThrow(ex);
       }
diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/DateAttribute.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/DateAttribute.java
index c15feda..d96f14c 100644
--- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/DateAttribute.java
+++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/DateAttribute.java
@@ -13,10 +13,7 @@
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.util.Date;
-import java.util.logging.Level;
 import org.eclipse.osee.framework.jdk.core.type.OseeCoreException;
-import org.eclipse.osee.framework.jdk.core.util.Strings;
-import org.eclipse.osee.framework.logging.OseeLog;
 
 /**
  * @author Robert A. Fisher
@@ -38,21 +35,15 @@
    @Override
    protected void setToDefaultValue() throws OseeCoreException {
       String defaultValue = getAttributeType().getDefaultValue();
-      if (Strings.isValid(defaultValue)) {
-         setFromStringNoDirty(defaultValue);
-      } else {
+      if (defaultValue == null) {
          subClassSetValue(new Date());
+      } else {
+         setFromStringNoDirty(defaultValue);
       }
    }
 
    @Override
-   public boolean subClassSetValue(Date value) throws OseeCoreException {
-      if (value == null) {
-         OseeLog.log(this.getClass(), Level.SEVERE,
-            String.format("AttributeType [%s] GammId [%s] - DateAttribute.subClassSetValue had a null value",
-               getAttributeType(), getGammaId()));
-         return false;
-      }
+   protected boolean subClassSetValue(Date value) {
       return getAttributeDataProvider().setValue(value.getTime());
    }
 
@@ -63,9 +54,6 @@
 
    @Override
    public Date convertStringToValue(String value) {
-      if (!Strings.isValid(value)) {
-         return null;
-      }
       return new Date(Long.parseLong(value));
    }
 
@@ -78,5 +66,4 @@
    public String getAsFormattedString(DateFormat dateFormat) throws OseeCoreException {
       return dateFormat.format(getValue());
    }
-
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/EnumeratedAttribute.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/EnumeratedAttribute.java
index 8f63c81..abc9101 100644
--- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/EnumeratedAttribute.java
+++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/EnumeratedAttribute.java
@@ -23,9 +23,4 @@
       String toDisplay = getAttributeDataProvider().getDisplayableString();
       return Strings.isValid(toDisplay) ? toDisplay : "<Select>";
    }
-
-   @Override
-   public boolean subClassSetValue(String value) throws OseeCoreException {
-      return super.subClassSetValue(value);
-   }
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/FloatingPointAttribute.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/FloatingPointAttribute.java
index 286d74a..bcbeab3 100644
--- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/FloatingPointAttribute.java
+++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/FloatingPointAttribute.java
@@ -10,7 +10,6 @@
  *******************************************************************************/
 package org.eclipse.osee.framework.skynet.core.attribute;
 
-import org.eclipse.osee.framework.jdk.core.type.OseeArgumentException;
 import org.eclipse.osee.framework.jdk.core.type.OseeCoreException;
 import org.eclipse.osee.framework.jdk.core.util.Strings;
 
@@ -27,14 +26,6 @@
    }
 
    @Override
-   public boolean subClassSetValue(Double value) throws OseeCoreException {
-      if (value == null) {
-         throw new OseeArgumentException("Attribute value was null");
-      }
-      return getAttributeDataProvider().setValue(value);
-   }
-
-   @Override
    public Double convertStringToValue(String value) {
       Double toReturn = null;
       if (isValidDouble(value)) {
diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/IdentityReferenceAttribute.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/IdentityReferenceAttribute.java
index da19e88..ff3a466 100644
--- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/IdentityReferenceAttribute.java
+++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/IdentityReferenceAttribute.java
@@ -13,7 +13,6 @@
 import org.eclipse.osee.framework.jdk.core.type.BaseId;
 import org.eclipse.osee.framework.jdk.core.type.Id;
 import org.eclipse.osee.framework.jdk.core.type.OseeCoreException;
-import org.eclipse.osee.framework.skynet.core.attribute.service.AttributeAdapterService;
 import org.eclipse.osee.framework.skynet.core.internal.ServiceUtil;
 
 public abstract class IdentityReferenceAttribute<T extends Id> extends CharacterBackedAttribute<T> {
@@ -25,13 +24,11 @@
 
    @Override
    public T convertStringToValue(String value) {
-      AttributeAdapterService service = getAttributeAdapter();
-      T identity = service.adapt(this, new BaseId(Long.valueOf(value)));
-      return identity;
+      return ServiceUtil.getAttributeAdapterService().adapt(this, new BaseId(Long.valueOf(value)));
    }
 
-   private AttributeAdapterService getAttributeAdapter() throws OseeCoreException {
-      return ServiceUtil.getAttributeAdapterService();
+   @Override
+   protected boolean subClassSetValue(Id value) {
+      return getAttributeDataProvider().setValue(value.getIdString());
    }
-
-}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/IntegerAttribute.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/IntegerAttribute.java
index e03b0d1..ff0e2b8 100644
--- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/IntegerAttribute.java
+++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/IntegerAttribute.java
@@ -10,7 +10,6 @@
  *******************************************************************************/
 package org.eclipse.osee.framework.skynet.core.attribute;
 
-import org.eclipse.osee.framework.jdk.core.type.OseeArgumentException;
 import org.eclipse.osee.framework.jdk.core.type.OseeCoreException;
 import org.eclipse.osee.framework.jdk.core.util.Strings;
 
@@ -27,14 +26,6 @@
    }
 
    @Override
-   public boolean subClassSetValue(Integer value) throws OseeCoreException {
-      if (value == null) {
-         throw new OseeArgumentException("Attribute value was null");
-      }
-      return getAttributeDataProvider().setValue(value);
-   }
-
-   @Override
    public Integer convertStringToValue(String value) {
       Integer toReturn = null;
       if (isValidInteger(value)) {
diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/JavaObjectAttribute.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/JavaObjectAttribute.java
index b64c08f..4d478cb 100644
--- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/JavaObjectAttribute.java
+++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/JavaObjectAttribute.java
@@ -60,7 +60,7 @@
    }
 
    @Override
-   public boolean subClassSetValue(Object value) {
+   protected boolean subClassSetValue(Object value) {
       try {
          ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
          ObjectOutputStream objectStream = new ObjectOutputStream(byteStream);
@@ -68,7 +68,7 @@
          objectStream.flush();
          objectStream.close();
          getAttributeDataProvider().setValue(ByteBuffer.wrap(byteStream.toByteArray()));
-         getAttributeDataProvider().setDisplayableString(value != null ? value.getClass().getName() : "null");
+         getAttributeDataProvider().setDisplayableString(value.getClass().getName());
       } catch (Exception ex) {
          OseeLog.log(Activator.class, Level.SEVERE, ex);
       }
@@ -77,9 +77,6 @@
 
    @Override
    public Object convertStringToValue(String value) {
-      if (value == null) {
-         return null;
-      }
       return getObjectFromBytes(ByteBuffer.wrap(value.getBytes()));
    }
-}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/LongAttribute.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/LongAttribute.java
index 6986375..8607977 100644
--- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/LongAttribute.java
+++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/LongAttribute.java
@@ -10,7 +10,6 @@
  *******************************************************************************/
 package org.eclipse.osee.framework.skynet.core.attribute;
 
-import org.eclipse.osee.framework.jdk.core.type.OseeArgumentException;
 import org.eclipse.osee.framework.jdk.core.type.OseeCoreException;
 import org.eclipse.osee.framework.jdk.core.util.Strings;
 
@@ -27,14 +26,6 @@
    }
 
    @Override
-   public boolean subClassSetValue(Long value) throws OseeCoreException {
-      if (value == null) {
-         throw new OseeArgumentException("Attribute value was null");
-      }
-      return getAttributeDataProvider().setValue(value);
-   }
-
-   @Override
    public Long convertStringToValue(String value) {
       Long toReturn = null;
       if (isValidLong(value)) {
diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/OutlineNumberAttribute.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/OutlineNumberAttribute.java
index 4cc4764..d44de08 100644
--- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/OutlineNumberAttribute.java
+++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/OutlineNumberAttribute.java
@@ -10,21 +10,5 @@
  *******************************************************************************/
 package org.eclipse.osee.framework.skynet.core.attribute;
 
-import org.eclipse.osee.framework.jdk.core.type.OseeCoreException;
-
-public class OutlineNumberAttribute extends CharacterBackedAttribute<String> {
-   @Override
-   public String getValue() throws OseeCoreException {
-      return getAttributeDataProvider().getValueAsString();
-   }
-
-   @Override
-   public boolean subClassSetValue(String value) throws OseeCoreException {
-      return getAttributeDataProvider().setValue(value);
-   }
-
-   @Override
-   public String convertStringToValue(String value) {
-      return value;
-   }
-}
+public class OutlineNumberAttribute extends StringAttribute {
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/StringAttribute.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/StringAttribute.java
index a976935..dd87af7 100644
--- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/StringAttribute.java
+++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/StringAttribute.java
@@ -22,11 +22,6 @@
    }
 
    @Override
-   public boolean subClassSetValue(String value) throws OseeCoreException {
-      return getAttributeDataProvider().setValue(value);
-   }
-
-   @Override
    public String convertStringToValue(String value) {
       return value;
    }
@@ -35,4 +30,4 @@
    public String getDisplayableString() throws OseeCoreException {
       return getValue();
    }
-}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/WordAttribute.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/WordAttribute.java
index 2a44ff1..71b3cdb 100644
--- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/WordAttribute.java
+++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/WordAttribute.java
@@ -37,7 +37,7 @@
    private static final IStatus promptStatus = new Status(IStatus.WARNING, Activator.PLUGIN_ID, 256, "", null);
 
    @Override
-   public boolean subClassSetValue(String value) throws OseeCoreException {
+   protected boolean subClassSetValue(String value) {
       value = checkForTrackedChanges(value);
       value = WordUtil.removeWordMarkupSmartTags(value);
       return super.subClassSetValue(value);
diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/providers/IAttributeDataProvider.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/providers/IAttributeDataProvider.java
index 5e38ab6..41bffd2 100644
--- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/providers/IAttributeDataProvider.java
+++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/providers/IAttributeDataProvider.java
@@ -24,6 +24,8 @@
 
    public void loadData(Object... objects) throws OseeCoreException;
 
+   public Object getValue();
+
    public Object[] getData() throws OseeDataStoreException;
 
    public void persist(int storageId) throws OseeCoreException;
diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/providers/ICharacterAttributeDataProvider.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/providers/ICharacterAttributeDataProvider.java
index 6660485..42c6d6d 100644
--- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/providers/ICharacterAttributeDataProvider.java
+++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/providers/ICharacterAttributeDataProvider.java
@@ -19,8 +19,5 @@
 
    public String getValueAsString() throws OseeCoreException;
 
-   public Object getValue();
-
    public boolean setValue(Object value) throws OseeCoreException;
-
-}
+}
\ No newline at end of file