Remove code repetitions from GenericListWriter
[honeycomb.git] / infra / translate-impl / src / main / java / io / fd / honeycomb / translate / impl / write / GenericListWriter.java
index 4e05ce0..92467a8 100644 (file)
@@ -16,6 +16,8 @@
 
 package io.fd.honeycomb.translate.impl.write;
 
+import static io.fd.honeycomb.translate.impl.write.GenericWriter.isUpdateSupported;
+
 import io.fd.honeycomb.translate.spi.write.ListWriterCustomizer;
 import io.fd.honeycomb.translate.util.RWUtils;
 import io.fd.honeycomb.translate.util.write.AbstractGenericWriter;
@@ -39,7 +41,7 @@ public final class GenericListWriter<D extends DataObject & Identifiable<K>, K e
 
     public GenericListWriter(@Nonnull final InstanceIdentifier<D> type,
                              @Nonnull final ListWriterCustomizer<D, K> customizer) {
-        super(type);
+        super(type, isUpdateSupported(customizer));
         this.customizer = customizer;
     }
 
@@ -77,33 +79,27 @@ public final class GenericListWriter<D extends DataObject & Identifiable<K>, K e
     @Override
     protected void writeCurrent(final InstanceIdentifier<D> id, final D data, final WriteContext ctx)
         throws WriteFailedException {
-        // Make sure the key is present
-        if (isWildcarded(id)) {
-            super.writeCurrent(getSpecificId(id, data), data, ctx);
-        } else {
-            super.writeCurrent(id, data, ctx);
-        }
+        super.writeCurrent(getId(id, data), data, ctx);
     }
 
     @Override
     protected void updateCurrent(final InstanceIdentifier<D> id, final D dataBefore, final D dataAfter,
                                  final WriteContext ctx) throws WriteFailedException {
-        // Make sure the key is present
-        if (isWildcarded(id)) {
-            super.updateCurrent(getSpecificId(id, dataBefore), dataBefore, dataAfter, ctx);
-        } else {
-            super.updateCurrent(id, dataBefore, dataAfter, ctx);
-        }
+        super.updateCurrent(getId(id, dataBefore), dataBefore, dataAfter, ctx);
     }
 
     @Override
     protected void deleteCurrent(final InstanceIdentifier<D> id, final D dataBefore, final WriteContext ctx)
         throws WriteFailedException {
+        super.deleteCurrent(getId(id, dataBefore), dataBefore, ctx);
+    }
+
+    private InstanceIdentifier<D> getId(final InstanceIdentifier<D> id, final D current) {
         // Make sure the key is present
         if (isWildcarded(id)) {
-            super.deleteCurrent(getSpecificId(id, dataBefore), dataBefore, ctx);
+            return getSpecificId(id, current);
         } else {
-            super.deleteCurrent(id, dataBefore, ctx);
+            return id;
         }
     }