Clean up Datastore addressing
[mdsal.git] / binding / mdsal-binding-util / src / main / java / org / opendaylight / mdsal / binding / util / TypedTransaction.java
1 /*
2  * Copyright © 2018 Red Hat, Inc. and others.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.mdsal.binding.util;
9
10 import com.google.common.util.concurrent.FluentFuture;
11 import org.opendaylight.mdsal.binding.api.QueryOperations;
12 import org.opendaylight.mdsal.binding.api.Transaction;
13 import org.opendaylight.mdsal.binding.api.query.QueryExpression;
14 import org.opendaylight.mdsal.binding.api.query.QueryResult;
15 import org.opendaylight.mdsal.binding.spi.ForwardingTransaction;
16 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
17 import org.opendaylight.yangtools.yang.binding.DataObject;
18
19 abstract class TypedTransaction<D extends Datastore, X extends Transaction> extends ForwardingTransaction {
20     private final LogicalDatastoreType datastoreType;
21     private final X delegate;
22
23     TypedTransaction(final D datastore, final X delegate) {
24         this.datastoreType = datastore.type();
25         this.delegate = delegate;
26     }
27
28     @Override
29     protected final X delegate() {
30         return delegate;
31     }
32
33     final LogicalDatastoreType getDatastoreType() {
34         return datastoreType;
35     }
36
37     final <T extends DataObject> FluentFuture<QueryResult<T>> doExecute(final QueryExpression<T> query) {
38         if (delegate instanceof QueryOperations queryOps) {
39             return queryOps.execute(datastoreType, query);
40         }
41         throw new UnsupportedOperationException("Query execution requires backend support");
42     }
43 }