From: Tony Tkacik Date: Wed, 23 Jul 2014 05:41:39 +0000 (+0000) Subject: Merge "NormalizedNode Mount APIs." X-Git-Tag: release/helium~454 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=2f1946537e63cc66950d4359b77fd49dbe1bdea3;hp=7152d7675a13da768d03f11e3d1526f03de9781c Merge "NormalizedNode Mount APIs." --- diff --git a/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/md/sal/binding/api/MountPoint.java b/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/md/sal/binding/api/MountPoint.java new file mode 100644 index 0000000000..ee0a113712 --- /dev/null +++ b/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/md/sal/binding/api/MountPoint.java @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2014 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.md.sal.binding.api; + +import org.opendaylight.controller.sal.binding.api.BindingAwareService; +import org.opendaylight.yangtools.concepts.Identifiable; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; + +import com.google.common.base.Optional; + +public interface MountPoint extends Identifiable>{ + + Optional getService(Class service); + +} diff --git a/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/md/sal/binding/api/MountPointService.java b/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/md/sal/binding/api/MountPointService.java new file mode 100644 index 0000000000..dd3a37e316 --- /dev/null +++ b/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/md/sal/binding/api/MountPointService.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2014 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.md.sal.binding.api; + +import java.util.EventListener; + +import org.opendaylight.yangtools.concepts.ListenerRegistration; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; + +import com.google.common.base.Optional; + +public interface MountPointService { + + Optional getMountPoint(InstanceIdentifier mountPoint); + + ListenerRegistration registerListener(InstanceIdentifier path, T listener); + + + public interface MountPointListener extends EventListener { + + void onMountPointCreated(InstanceIdentifier path); + + void onMountPointRemoved(InstanceIdentifier path); + + } + +} diff --git a/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/md/sal/dom/api/DOMDataBroker.java b/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/md/sal/dom/api/DOMDataBroker.java index 613cf1bfe2..e85534cdd3 100644 --- a/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/md/sal/dom/api/DOMDataBroker.java +++ b/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/md/sal/dom/api/DOMDataBroker.java @@ -23,7 +23,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; */ public interface DOMDataBroker extends AsyncDataBroker, DOMDataChangeListener>, - TransactionChainFactory>, BrokerService { + TransactionChainFactory>, BrokerService, DOMService { /** * {@inheritDoc} diff --git a/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/md/sal/dom/api/DOMMountPoint.java b/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/md/sal/dom/api/DOMMountPoint.java new file mode 100644 index 0000000000..c0baf19c66 --- /dev/null +++ b/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/md/sal/dom/api/DOMMountPoint.java @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2014 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.md.sal.dom.api; + +import org.opendaylight.yangtools.concepts.Identifiable; +import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier; + +import com.google.common.base.Optional; +import org.opendaylight.yangtools.yang.model.api.SchemaContext; + +public interface DOMMountPoint extends Identifiable { + + Optional getService(Class cls); + + SchemaContext getSchemaContext(); +} diff --git a/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/md/sal/dom/api/DOMMountPointService.java b/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/md/sal/dom/api/DOMMountPointService.java new file mode 100644 index 0000000000..96020c6d97 --- /dev/null +++ b/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/md/sal/dom/api/DOMMountPointService.java @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2014 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.md.sal.dom.api; + +import org.opendaylight.controller.sal.core.api.BrokerService; +import org.opendaylight.yangtools.concepts.ObjectRegistration; +import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier; +import org.opendaylight.yangtools.yang.model.api.SchemaContext; + +import com.google.common.base.Optional; + + +public interface DOMMountPointService extends BrokerService { + + Optional getMountPoint(InstanceIdentifier path); + + DOMMountPointBuilder createMountPoint(InstanceIdentifier path); + + + public interface DOMMountPointBuilder { + + DOMMountPointBuilder addService(Class type,T impl); + + DOMMountPointBuilder addInitialSchemaContext(SchemaContext ctx); + + ObjectRegistration register(); + } +} diff --git a/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/md/sal/dom/api/DOMService.java b/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/md/sal/dom/api/DOMService.java new file mode 100644 index 0000000000..357cb8bfe6 --- /dev/null +++ b/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/md/sal/dom/api/DOMService.java @@ -0,0 +1,13 @@ +/* + * Copyright (c) 2014 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.md.sal.dom.api; + +public interface DOMService { + +} diff --git a/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/RpcProvisionRegistry.java b/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/RpcProvisionRegistry.java index a22a6ef75e..13a50090c0 100644 --- a/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/RpcProvisionRegistry.java +++ b/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/RpcProvisionRegistry.java @@ -8,13 +8,14 @@ package org.opendaylight.controller.sal.core.api; import org.opendaylight.controller.md.sal.common.api.routing.RouteChangePublisher; +import org.opendaylight.controller.md.sal.dom.api.DOMService; import org.opendaylight.controller.sal.core.api.Broker.RoutedRpcRegistration; import org.opendaylight.controller.sal.core.api.Broker.RpcRegistration; import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier; -public interface RpcProvisionRegistry extends RpcImplementation, BrokerService, RouteChangePublisher { +public interface RpcProvisionRegistry extends RpcImplementation, BrokerService, RouteChangePublisher, DOMService { /** * Registers an implementation of the rpc. diff --git a/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/mount/MountInstance.java b/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/mount/MountInstance.java index 5698b96977..a4343ba5cf 100644 --- a/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/mount/MountInstance.java +++ b/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/mount/MountInstance.java @@ -21,6 +21,7 @@ import com.google.common.util.concurrent.ListenableFuture; * Interface representing a single mount instance and represents a way for * clients to access underlying data, RPCs and notifications. */ +@Deprecated public interface MountInstance extends // NotificationService, // DataBrokerService { diff --git a/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/mount/MountProvisionInstance.java b/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/mount/MountProvisionInstance.java index 29e3b911c1..a5c3b5d0f6 100644 --- a/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/mount/MountProvisionInstance.java +++ b/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/mount/MountProvisionInstance.java @@ -12,6 +12,7 @@ import org.opendaylight.controller.sal.core.api.data.DataProviderService; import org.opendaylight.controller.sal.core.api.notify.NotificationPublishService; import org.opendaylight.yangtools.yang.model.api.SchemaContext; +@Deprecated public interface MountProvisionInstance extends // MountInstance,// NotificationPublishService, // diff --git a/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/mount/MountProvisionService.java b/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/mount/MountProvisionService.java index 1185c4528c..cb32603048 100644 --- a/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/mount/MountProvisionService.java +++ b/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/mount/MountProvisionService.java @@ -12,6 +12,10 @@ import java.util.EventListener; import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier; +/** + * @deprecated Use org.opendaylight.controller.md.sal.dom.api.DOMMountPointService instead + */ +@Deprecated public interface MountProvisionService extends MountService { @Override diff --git a/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/mount/MountService.java b/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/mount/MountService.java index 6d1f17255c..a730203f47 100644 --- a/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/mount/MountService.java +++ b/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/mount/MountService.java @@ -13,7 +13,10 @@ import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier; /** * Client-level interface for interacting with mount points. It provides access * to {@link MountInstance} instances based on their path. + * + * @deprecated Use org.opendaylight.controller.md.sal.dom.api.DOMMountPointService instead */ +@Deprecated public interface MountService extends BrokerService { /** * Obtain access to a mount instance registered at the specified path. diff --git a/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/notify/NotificationPublishService.java b/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/notify/NotificationPublishService.java index f1156c3964..4f5c7abf5f 100644 --- a/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/notify/NotificationPublishService.java +++ b/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/notify/NotificationPublishService.java @@ -7,6 +7,7 @@ */ package org.opendaylight.controller.sal.core.api.notify; +import org.opendaylight.controller.md.sal.dom.api.DOMService; import org.opendaylight.yangtools.yang.data.api.CompositeNode; /** @@ -23,7 +24,7 @@ import org.opendaylight.yangtools.yang.data.api.CompositeNode; * {@link NotificationListener#onNotification(CompositeNode)} * */ -public interface NotificationPublishService extends NotificationService { +public interface NotificationPublishService extends NotificationService, DOMService { /** * Publishes a notification. * diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/mount/DOMMountPointServiceImpl.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/mount/DOMMountPointServiceImpl.java new file mode 100644 index 0000000000..49a499709e --- /dev/null +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/mount/DOMMountPointServiceImpl.java @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2014 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.md.sal.dom.broker.impl.mount; + +import java.util.HashMap; +import java.util.Map; + +import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint; +import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService; +import org.opendaylight.controller.md.sal.dom.api.DOMService; +import org.opendaylight.controller.md.sal.dom.broker.spi.mount.SimpleDOMMountPoint; +import org.opendaylight.yangtools.concepts.ObjectRegistration; +import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier; +import org.opendaylight.yangtools.yang.model.api.SchemaContext; + +import com.google.common.base.Optional; +import com.google.common.base.Preconditions; +import com.google.common.collect.ClassToInstanceMap; +import com.google.common.collect.MutableClassToInstanceMap; + +public class DOMMountPointServiceImpl implements DOMMountPointService { + + private final Map mountPoints = new HashMap<>(); + + @Override + public Optional getMountPoint(final InstanceIdentifier path) { + return Optional.fromNullable(mountPoints.get(path)); + } + + @Override + public DOMMountPointBuilder createMountPoint(final InstanceIdentifier path) { + Preconditions.checkState(!mountPoints.containsKey(path), "Mount point already exists"); + return new DOMMountPointBuilderImpl(path); + } + + public ObjectRegistration registerMountPoint(final SimpleDOMMountPoint mountPoint) { + synchronized (mountPoints) { + Preconditions.checkState(!mountPoints.containsKey(mountPoint.getIdentifier()), "Mount point already exists"); + mountPoints.put(mountPoint.getIdentifier(), mountPoint); + } + return null; + } + + public class DOMMountPointBuilderImpl implements DOMMountPointBuilder { + + ClassToInstanceMap services = MutableClassToInstanceMap.create(); + private SimpleDOMMountPoint mountPoint; + private final InstanceIdentifier path; + private SchemaContext schemaContext; + + public DOMMountPointBuilderImpl(final InstanceIdentifier path) { + this.path = path; + } + + @Override + public DOMMountPointBuilder addService(final Class type, final T impl) { + services.putInstance(type, impl); + return this; + } + + @Override + public DOMMountPointBuilder addInitialSchemaContext(final SchemaContext ctx) { + schemaContext = ctx; + return this; + } + + @Override + public ObjectRegistration register() { + Preconditions.checkState(mountPoint == null, "Mount point is already built."); + mountPoint = SimpleDOMMountPoint.create(path, services,schemaContext); + return registerMountPoint(mountPoint); + } + } +} diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/MountPointImpl.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/MountPointImpl.java index e69343d4fe..bc77f1d69c 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/MountPointImpl.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/MountPointImpl.java @@ -42,6 +42,7 @@ import org.opendaylight.yangtools.yang.model.api.SchemaContext; import com.google.common.util.concurrent.ListenableFuture; +@Deprecated public class MountPointImpl implements MountProvisionInstance, SchemaContextProvider { private final SchemaAwareRpcBroker rpcs; diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/MountPointManagerImpl.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/MountPointManagerImpl.java index 55a6ee77b4..20f79eea71 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/MountPointManagerImpl.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/MountPointManagerImpl.java @@ -19,6 +19,7 @@ import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.concepts.util.ListenerRegistry; import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier; +@Deprecated public class MountPointManagerImpl implements MountProvisionService { private final ListenerRegistry listeners = diff --git a/opendaylight/md-sal/sal-dom-broker/src/test/java/org/opendaylight/controller/md/sal/dom/broker/impl/MountPointServiceTest.java b/opendaylight/md-sal/sal-dom-broker/src/test/java/org/opendaylight/controller/md/sal/dom/broker/impl/MountPointServiceTest.java new file mode 100644 index 0000000000..917976b4b4 --- /dev/null +++ b/opendaylight/md-sal/sal-dom-broker/src/test/java/org/opendaylight/controller/md/sal/dom/broker/impl/MountPointServiceTest.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2014 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.md.sal.dom.broker.impl; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import com.google.common.base.Optional; +import org.junit.Before; +import org.junit.Test; +import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint; +import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService; +import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService.DOMMountPointBuilder; +import org.opendaylight.controller.md.sal.dom.broker.impl.mount.DOMMountPointServiceImpl; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier; + +public class MountPointServiceTest { + + private DOMMountPointService mountService; + private static final InstanceIdentifier PATH = InstanceIdentifier.of(QName.create("namespace", "12-12-2012", "top")); + + @Before + public void setup() { + mountService = new DOMMountPointServiceImpl(); + } + + @Test + public void createSimpleMountPoint() { + Optional mountNotPresent = mountService.getMountPoint(PATH); + assertFalse(mountNotPresent.isPresent()); + DOMMountPointBuilder mountBuilder = mountService.createMountPoint(PATH); + mountBuilder.register(); + + Optional mountPresent = mountService.getMountPoint(PATH); + assertTrue(mountPresent.isPresent()); + } +} diff --git a/opendaylight/md-sal/sal-dom-spi/src/main/java/org/opendaylight/controller/md/sal/dom/broker/spi/mount/SimpleDOMMountPoint.java b/opendaylight/md-sal/sal-dom-spi/src/main/java/org/opendaylight/controller/md/sal/dom/broker/spi/mount/SimpleDOMMountPoint.java new file mode 100644 index 0000000000..48a6878327 --- /dev/null +++ b/opendaylight/md-sal/sal-dom-spi/src/main/java/org/opendaylight/controller/md/sal/dom/broker/spi/mount/SimpleDOMMountPoint.java @@ -0,0 +1,41 @@ +package org.opendaylight.controller.md.sal.dom.broker.spi.mount; + +import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint; +import org.opendaylight.controller.md.sal.dom.api.DOMService; +import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier; +import org.opendaylight.yangtools.yang.model.api.SchemaContext; + +import com.google.common.base.Optional; +import com.google.common.collect.ClassToInstanceMap; +import com.google.common.collect.ImmutableClassToInstanceMap; + +public class SimpleDOMMountPoint implements DOMMountPoint { + + private final InstanceIdentifier identifier; + private final ClassToInstanceMap services; + private final SchemaContext schemaContext; + + public static final SimpleDOMMountPoint create(final InstanceIdentifier identifier, final ClassToInstanceMap services, final SchemaContext ctx) { + return new SimpleDOMMountPoint(identifier, services, ctx); + } + private SimpleDOMMountPoint(final InstanceIdentifier identifier, final ClassToInstanceMap services, final SchemaContext ctx) { + this.identifier = identifier; + this.services = ImmutableClassToInstanceMap.copyOf(services); + this.schemaContext = ctx; + } + + @Override + public InstanceIdentifier getIdentifier() { + return identifier; + } + + @Override + public SchemaContext getSchemaContext() { + return schemaContext; + } + + @Override + public Optional getService(final Class cls) { + return Optional.fromNullable(services.getInstance(cls)); + } +}