diff options
author | Jan Srnicek <jsrnicek@cisco.com> | 2017-08-16 09:21:24 +0200 |
---|---|---|
committer | Marek Gradzki <mgradzki@cisco.com> | 2017-08-16 07:56:39 +0000 |
commit | 130c716105017c7b20b4779973b915968b3dc322 (patch) | |
tree | 50b28ac5691928dcff03fcf8cb57bec651a270c1 /infra/translate-impl/src/main/java/io/fd/honeycomb/translate/impl/write/GenericWriter.java | |
parent | c643983450d5fd56db40ad2718877ec2289e6e6f (diff) |
HONEYCOMB-386 - Make update optional
If customizer does not support update directly,
updates for its handled nodes are broken up to delete + create pairs.
Change-Id: I2929109e8c9a1db0bef108367cf7d839135ce173
Signed-off-by: Jan Srnicek <jsrnicek@cisco.com>
Diffstat (limited to 'infra/translate-impl/src/main/java/io/fd/honeycomb/translate/impl/write/GenericWriter.java')
-rw-r--r-- | infra/translate-impl/src/main/java/io/fd/honeycomb/translate/impl/write/GenericWriter.java | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/infra/translate-impl/src/main/java/io/fd/honeycomb/translate/impl/write/GenericWriter.java b/infra/translate-impl/src/main/java/io/fd/honeycomb/translate/impl/write/GenericWriter.java index 30d15e370..086936e38 100644 --- a/infra/translate-impl/src/main/java/io/fd/honeycomb/translate/impl/write/GenericWriter.java +++ b/infra/translate-impl/src/main/java/io/fd/honeycomb/translate/impl/write/GenericWriter.java @@ -23,18 +23,40 @@ import io.fd.honeycomb.translate.write.WriteFailedException; import javax.annotation.Nonnull; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Generic writer with customizable behavior thanks to injected customizer. */ public final class GenericWriter<D extends DataObject> extends AbstractGenericWriter<D> { + private static final Logger LOG = LoggerFactory.getLogger(GenericWriter.class); + private static final String UPDATE_M = "updateCurrentAttributes"; private final WriterCustomizer<D> customizer; public GenericWriter(@Nonnull final InstanceIdentifier<D> type, @Nonnull final WriterCustomizer<D> customizer) { - super(type); + super(type, isUpdateSupported(customizer)); this.customizer = customizer; + + } + + static boolean isUpdateSupported(final @Nonnull WriterCustomizer<?> customizer) { + try { + // if customizer overrides updateCurrentAttributes method, it will be used, otherwise updates will be broken into individual + // delete + create pairs + final Class<? extends WriterCustomizer> customizerClass = customizer.getClass(); + final Class<?> updateDeclaringClass = customizerClass + .getMethod(UPDATE_M, InstanceIdentifier.class, DataObject.class, DataObject.class, WriteContext.class) + .getDeclaringClass(); + final boolean supportsUpdate = !WriterCustomizer.class.equals(updateDeclaringClass); + LOG.debug("Customizer {} update support : {}|Update declaring class {}", customizerClass, supportsUpdate, + updateDeclaringClass); + return supportsUpdate; + } catch (NoSuchMethodException e) { + throw new IllegalStateException("Unable to detect if customizer supports update", e); + } } @Override |