From: Robert Varga Date: Thu, 5 Jun 2014 11:54:08 +0000 (+0200) Subject: BUG-614: migrate RuntimeGeneratedInvoker X-Git-Tag: release/helium~671^2 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=62a55c174776a51409c185d3eb9f0a5c2d59ab63 BUG-614: migrate RuntimeGeneratedInvoker RuntimeGeneratedInvoker is another DTO, so let's migrate it to java-land. Change-Id: If8e654c38de1be5f8e263f81eb7550d745913906 Signed-off-by: Robert Varga --- diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/RuntimeCodeGenerator.xtend b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/RuntimeCodeGenerator.xtend index 63a1b211a3..ac782051a8 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/RuntimeCodeGenerator.xtend +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/RuntimeCodeGenerator.xtend @@ -13,9 +13,7 @@ import javassist.ClassPool import javassist.CtClass import javassist.CtMethod import javassist.LoaderClassPath -import org.opendaylight.controller.sal.binding.codegen.RuntimeCodeHelper import org.opendaylight.controller.sal.binding.spi.NotificationInvokerFactory -import org.opendaylight.controller.sal.binding.spi.NotificationInvokerFactory.NotificationInvoker import org.opendaylight.yangtools.sal.binding.generator.util.JavassistUtils import org.opendaylight.yangtools.yang.binding.DataContainer import org.opendaylight.yangtools.yang.binding.InstanceIdentifier @@ -189,7 +187,7 @@ class RuntimeCodeGenerator implements org.opendaylight.controller.sal.binding.co val cls = instance.class val prototype = resolveInvokerClass(cls); - return new RuntimeGeneratedInvoker(instance, prototype) + return RuntimeGeneratedInvoker.create(instance, prototype) } protected def generateListenerInvoker(Class iface) { @@ -219,10 +217,6 @@ class RuntimeCodeGenerator implements org.opendaylight.controller.sal.binding.co finalClass as Class>); } - - - - protected def resolveInvokerClass(Class class1) { return ClassLoaderUtils.withClassLoaderAndLock(class1.classLoader,lock) [| val invoker = invokerClasses.get(class1); @@ -232,34 +226,6 @@ class RuntimeCodeGenerator implements org.opendaylight.controller.sal.binding.co val newInvoker = generateListenerInvoker(class1); invokerClasses.put(class1, newInvoker); return newInvoker - ] } } - -@Data -package class RuntimeGeneratedInvoker implements NotificationInvoker { - - @Property - val NotificationListener delegate; - - @Property - var org.opendaylight.controller.sal.binding.api.NotificationListener invocationProxy; - - @Property - var RuntimeGeneratedInvokerPrototype prototype; - - new(NotificationListener delegate, RuntimeGeneratedInvokerPrototype prototype) { - _delegate = delegate; - _prototype = prototype; - _invocationProxy = prototype.protoClass.newInstance as org.opendaylight.controller.sal.binding.api.NotificationListener; - RuntimeCodeHelper.setDelegate(_invocationProxy, delegate); - } - - override getSupportedNotifications() { - prototype.supportedNotifications; - } - - override close() { - } -} diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/RuntimeGeneratedInvoker.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/RuntimeGeneratedInvoker.java new file mode 100644 index 0000000000..8762562ad1 --- /dev/null +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/RuntimeGeneratedInvoker.java @@ -0,0 +1,91 @@ +/** + * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.controller.sal.binding.codegen.impl; + +import java.util.Set; + +import org.eclipse.xtext.xbase.lib.util.ToStringHelper; +import org.opendaylight.controller.sal.binding.codegen.RuntimeCodeHelper; +import org.opendaylight.controller.sal.binding.spi.NotificationInvokerFactory.NotificationInvoker; +import org.opendaylight.yangtools.yang.binding.Notification; +import org.opendaylight.yangtools.yang.binding.NotificationListener; + +import com.google.common.base.Preconditions; + +final class RuntimeGeneratedInvoker implements NotificationInvoker { + private final org.opendaylight.controller.sal.binding.api.NotificationListener invocationProxy; + private final RuntimeGeneratedInvokerPrototype prototype; + private final NotificationListener delegate; + + @SuppressWarnings("unchecked") + private RuntimeGeneratedInvoker(final NotificationListener delegate, final RuntimeGeneratedInvokerPrototype prototype, final org.opendaylight.controller.sal.binding.api.NotificationListener proxy) { + this.invocationProxy = (org.opendaylight.controller.sal.binding.api.NotificationListener) proxy; + this.delegate = Preconditions.checkNotNull(delegate); + this.prototype = prototype; + } + + public static RuntimeGeneratedInvoker create(final NotificationListener delegate, final RuntimeGeneratedInvokerPrototype prototype) throws InstantiationException, IllegalAccessException { + final org.opendaylight.controller.sal.binding.api.NotificationListener proxy = Preconditions.checkNotNull(prototype.getProtoClass().newInstance()); + RuntimeCodeHelper.setDelegate(proxy, delegate); + return new RuntimeGeneratedInvoker(delegate, prototype, proxy); + } + + @Override + public NotificationListener getDelegate() { + return delegate; + } + + @Override + public org.opendaylight.controller.sal.binding.api.NotificationListener getInvocationProxy() { + return invocationProxy; + } + + @Override + public Set> getSupportedNotifications() { + return prototype.getSupportedNotifications(); + } + + @Override + public void close() { + // Nothing to do + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + delegate.hashCode(); + result = prime * result + invocationProxy.hashCode(); + result = prime * result + prototype.hashCode(); + return result; + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) { + return true; + } + if (!(obj instanceof RuntimeGeneratedInvoker)) { + return false; + } + final RuntimeGeneratedInvoker other = (RuntimeGeneratedInvoker) obj; + if (!delegate.equals(other.delegate)) { + return false; + } + if (!invocationProxy.equals(other.invocationProxy)) { + return false; + } + return prototype.equals(other.prototype); + } + + @Override + public String toString() { + String result = new ToStringHelper().toString(this); + return result; + } +} diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/RuntimeGeneratedInvokerPrototype.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/RuntimeGeneratedInvokerPrototype.java index f16074845d..317268420f 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/RuntimeGeneratedInvokerPrototype.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/RuntimeGeneratedInvokerPrototype.java @@ -28,7 +28,7 @@ final class RuntimeGeneratedInvokerPrototype { return supportedNotifications; } - public Class> getProtoClass() { + public Class> getProtoClass() { return protoClass; }