3a0a5d6c70ac98f47211f29f00374a5529656fab
[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 Class<D> datastoreType, final X delegate) {
24         this.datastoreType = Datastore.toType(datastoreType);
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) {
39             return ((QueryOperations) delegate).execute(datastoreType, query);
40         }
41         throw new UnsupportedOperationException("Query execution requires backend support");
42     }
43 }