X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-binding-broker%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Fbinding%2Fimpl%2FDataBrokerImpl.java;h=16d5a24cb5b7c80364edd8dd5dbe4f8b59e6aa97;hp=0069de98026dfa2f710e77fc3b60b3a026e6f37d;hb=082d7ba433b85d5810c50f624d2691088336e66a;hpb=3b0f2c65bfb0f0b07e27529734561a7ae9ee5ad9 diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/DataBrokerImpl.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/DataBrokerImpl.java index 0069de9802..16d5a24cb5 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/DataBrokerImpl.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/DataBrokerImpl.java @@ -1,27 +1,68 @@ +/* + * 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.sal.binding.impl; -import java.util.Set; -import java.util.concurrent.Future; -import java.util.concurrent.atomic.AtomicLong; - -import org.opendaylight.controller.md.sal.common.impl.service.AbstractDataBroker; -import org.opendaylight.controller.sal.binding.api.data.DataChangeListener; -import org.opendaylight.controller.sal.binding.api.data.DataProviderService; -import org.opendaylight.controller.sal.binding.impl.util.BindingAwareDataReaderRouter; -import org.opendaylight.controller.sal.common.DataStoreIdentifier; -import org.opendaylight.yangtools.yang.binding.DataObject; -import org.opendaylight.yangtools.yang.binding.DataRoot; -import org.opendaylight.yangtools.yang.binding.Identifiable; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -import org.opendaylight.yangtools.yang.common.RpcResult; +import java.util.Map; +import java.util.Map.Entry; +import java.util.concurrent.Future; +import java.util.concurrent.atomic.AtomicLong; + +import org.opendaylight.controller.md.sal.common.impl.service.AbstractDataBroker; +import org.opendaylight.controller.sal.binding.api.data.DataChangeListener; +import org.opendaylight.controller.sal.binding.api.data.DataProviderService; +import org.opendaylight.controller.sal.binding.impl.util.BindingAwareDataReaderRouter; +import org.opendaylight.controller.sal.common.DataStoreIdentifier; +import org.opendaylight.yangtools.yang.binding.DataObject; +import org.opendaylight.yangtools.yang.binding.DataRoot; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yangtools.yang.binding.util.DataObjectReadingUtil; +import org.opendaylight.yangtools.yang.common.RpcResult; + +import com.google.common.base.Predicate; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableMap.Builder; +import com.google.common.collect.Maps; public class DataBrokerImpl extends AbstractDataBroker, DataObject, DataChangeListener> // implements DataProviderService, AutoCloseable { + private final static class ContainsWildcarded implements Predicate> { + + private final InstanceIdentifier key; + + public ContainsWildcarded(InstanceIdentifier key) { + this.key = key; + } + + @Override + public boolean apply(InstanceIdentifier input) { + return key.containsWildcarded(input); + } + } + + private final static class IsContainedWildcarded implements Predicate> { + + private final InstanceIdentifier key; + + public IsContainedWildcarded(InstanceIdentifier key) { + this.key = key; + } + + @Override + public boolean apply(InstanceIdentifier input) { + return input.containsWildcarded(key); + } + } + private final AtomicLong nextTransaction = new AtomicLong(); private final AtomicLong createdTransactionsCount = new AtomicLong(); - + public AtomicLong getCreatedTransactionsCount() { return createdTransactionsCount; } @@ -97,24 +138,40 @@ public class DataBrokerImpl extends AbstractDataBroker key, - Set> paths) { - if (paths.contains(key)) { - return true; - } - for (InstanceIdentifier path : paths) { - if (key.containsWildcarded(path)) { - return true; + protected Predicate> createContainsPredicate(final + InstanceIdentifier key) { + return new ContainsWildcarded(key); + } + + @Override + protected Predicate> createIsContainedPredicate(final + InstanceIdentifier key) { + return new IsContainedWildcarded(key); + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + @Override + protected Map, DataObject> deepGetBySubpath( + Map, DataObject> dataSet, + InstanceIdentifier path) { + Builder, DataObject> builder = ImmutableMap.builder(); + Map, DataObject> potential = Maps.filterKeys(dataSet, createIsContainedPredicate(path)); + for(Entry, DataObject> entry : potential.entrySet()) { + try { + builder.putAll(DataObjectReadingUtil.readData(entry.getValue(),(InstanceIdentifier)entry.getKey(),path)); + } catch (Exception e) { + // FIXME : Log exception; } } - return false; - } -} \ No newline at end of file + return builder.build(); + + } + +}