diff --git a/edexOsgi/com.raytheon.uf.common.serialization/src/com/raytheon/uf/common/serialization/adapters/EnumSetAdapter.java b/edexOsgi/com.raytheon.uf.common.serialization/src/com/raytheon/uf/common/serialization/adapters/EnumSetAdapter.java
index a7f5b20fee..42487cdc35 100644
--- a/edexOsgi/com.raytheon.uf.common.serialization/src/com/raytheon/uf/common/serialization/adapters/EnumSetAdapter.java
+++ b/edexOsgi/com.raytheon.uf.common.serialization/src/com/raytheon/uf/common/serialization/adapters/EnumSetAdapter.java
@@ -28,15 +28,16 @@ import com.raytheon.uf.common.serialization.ISerializationTypeAdapter;
import com.raytheon.uf.common.serialization.SerializationException;
/**
- * Dynamic serialize adapter for EnumSet. Due to the restrictions on EnumSet, an
- * empty EnumSet will be deserialized as null.
+ * Dynamic serialize adapter for EnumSet.
*
*
*
* SOFTWARE HISTORY
- * Date Ticket# Engineer Description
- * ------------ ---------- ----------- --------------------------
- * Dec 16, 2009 rjpeter Initial creation
+ * Date Ticket# Engineer Description
+ * ------------- -------- ----------- --------------------------
+ * Dec 16, 2009 rjpeter Initial creation
+ * Dec 02, 2013 2537 bsteffen Serialize empty enum sets.
+ *
*
*
*
@@ -53,28 +54,22 @@ public class EnumSetAdapter implements ISerializationTypeAdapter {
int setSize = deserializer.readI32();
EnumSet rval = null;
- if (setSize > 0) {
- String enumClassName = deserializer.readString();
-
- try {
- Class baseClass = Class.forName(enumClassName);
- if (baseClass.isEnum()) {
- Enum firstEnum = Enum.valueOf(baseClass, deserializer
- .readString());
- rval = EnumSet.of(firstEnum);
- for (int i = 1; i < setSize; i++) {
- rval.add(Enum.valueOf(baseClass, deserializer
- .readString()));
- }
- } else {
- throw new SerializationException(
- "Cannot deserialize EnumSet. Class ["
- + enumClassName + "] is not an enum");
+ String enumClassName = deserializer.readString();
+ try {
+ Class baseClass = Class.forName(enumClassName);
+ if (baseClass.isEnum()) {
+ rval = EnumSet.noneOf(baseClass);
+ for (int i = 0; i < setSize; i++) {
+ rval.add(Enum.valueOf(baseClass, deserializer.readString()));
}
- } catch (ClassNotFoundException e) {
- throw new SerializationException("Unable to find enum class ["
- + enumClassName + "]", e);
+ } else {
+ throw new SerializationException(
+ "Cannot deserialize EnumSet. Class [" + enumClassName
+ + "] is not an enum");
}
+ } catch (ClassNotFoundException e) {
+ throw new SerializationException("Unable to find enum class ["
+ + enumClassName + "]", e);
}
return rval;
@@ -94,6 +89,15 @@ public class EnumSetAdapter implements ISerializationTypeAdapter {
while (iter.hasNext()) {
serializer.writeString(((Enum) iter.next()).name());
}
+ } else {
+ /*
+ * Due to generic type erasure there is no simple way to access the
+ * enum type from the enum set. To work around this limitation get
+ * the complement of the empty set which will contain all the values
+ * and use an arbitrary example Object to access the enum class.
+ */
+ Object example = EnumSet.complementOf(set).iterator().next();
+ serializer.writeString(example.getClass().getName());
}
}
}
diff --git a/pythonPackages/dynamicserialize/adapters/EnumSetAdapter.py b/pythonPackages/dynamicserialize/adapters/EnumSetAdapter.py
index 3f8c07701f..158bfe92d3 100644
--- a/pythonPackages/dynamicserialize/adapters/EnumSetAdapter.py
+++ b/pythonPackages/dynamicserialize/adapters/EnumSetAdapter.py
@@ -28,6 +28,7 @@
# Date Ticket# Engineer Description
# ------------ ---------- ----------- --------------------------
# 07/28/11 dgilling Initial Creation.
+# 12/02/13 2537 bsteffen Serialize empty enum sets.
#
#
#
@@ -42,20 +43,15 @@ ClassAdapter = ['java.util.EnumSet', 'java.util.RegularEnumSet']
def serialize(context, set):
setSize = len(set)
context.writeI32(setSize)
- if setSize > 0:
- context.writeString(set.getEnumClass())
- for val in set:
- context.writeString(val)
+ context.writeString(set.getEnumClass())
+ for val in set:
+ context.writeString(val)
+
def deserialize(context):
setSize = context.readI32()
- retVal = None
-
- if setSize > 0:
- enumClassName = context.readString()
- valList = []
- for i in xrange(setSize):
- valList.append(context.readString())
- retVal = EnumSet(enumClassName, valList)
-
- return retVal
+ enumClassName = context.readString()
+ valList = []
+ for i in xrange(setSize):
+ valList.append(context.readString())
+ return EnumSet(enumClassName, valList)