1123b928dc59eca47fe79196157d2f2ab081981f
[moon.git] /
1 /*
2  * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
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
9 package org.opendaylight.aaa.authz.srv;
10
11 import com.google.common.util.concurrent.CheckedFuture;
12 import com.google.common.util.concurrent.Futures;
13 import com.google.common.util.concurrent.ListenableFuture;
14
15 import org.opendaylight.controller.md.sal.common.api.TransactionStatus;
16 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
17 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
18 import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction;
19 import org.opendaylight.yang.gen.v1.urn.aaa.yang.authz.ds.rev140722.ActionType;
20 import org.opendaylight.yangtools.yang.common.RpcResult;
21 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
22 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
23
24 /**
25  * Created by wdec on 02/09/2014.
26  */
27 public class AuthzWriteOnlyTransaction implements DOMDataWriteTransaction {
28
29     private final DOMDataWriteTransaction domDataWriteTransaction;
30
31     public AuthzWriteOnlyTransaction(DOMDataWriteTransaction wo) {
32         this.domDataWriteTransaction = wo;
33     }
34
35     @Override
36     public void put(LogicalDatastoreType logicalDatastoreType,
37             YangInstanceIdentifier yangInstanceIdentifier, NormalizedNode<?, ?> normalizedNode) {
38
39         if (AuthzServiceImpl.isAuthorized(logicalDatastoreType, yangInstanceIdentifier,
40                 ActionType.Put)) {
41             domDataWriteTransaction.put(logicalDatastoreType, yangInstanceIdentifier,
42                     normalizedNode);
43         }
44     }
45
46     @Override
47     public void merge(LogicalDatastoreType logicalDatastoreType,
48             YangInstanceIdentifier yangInstanceIdentifier, NormalizedNode<?, ?> normalizedNode) {
49
50         if (AuthzServiceImpl.isAuthorized(logicalDatastoreType, yangInstanceIdentifier,
51                 ActionType.Merge)) {
52             domDataWriteTransaction.merge(logicalDatastoreType, yangInstanceIdentifier,
53                     normalizedNode);
54         }
55     }
56
57     @Override
58     public boolean cancel() {
59         if (AuthzServiceImpl.isAuthorized(ActionType.Cancel)) {
60             return domDataWriteTransaction.cancel();
61         }
62         return false;
63     }
64
65     @Override
66     public void delete(LogicalDatastoreType logicalDatastoreType,
67             YangInstanceIdentifier yangInstanceIdentifier) {
68
69         if (AuthzServiceImpl.isAuthorized(logicalDatastoreType, yangInstanceIdentifier,
70                 ActionType.Delete)) {
71             domDataWriteTransaction.delete(logicalDatastoreType, yangInstanceIdentifier);
72         }
73     }
74
75     @Override
76     public CheckedFuture<Void, TransactionCommitFailedException> submit() {
77         if (AuthzServiceImpl.isAuthorized(ActionType.Submit)) {
78             return domDataWriteTransaction.submit();
79         }
80         TransactionCommitFailedException e = new TransactionCommitFailedException(
81                 "Unauthorized User");
82         return Futures.immediateFailedCheckedFuture(e);
83     }
84
85     @Deprecated
86     @Override
87     public ListenableFuture<RpcResult<TransactionStatus>> commit() {
88         if (AuthzServiceImpl.isAuthorized(ActionType.Commit)) {
89             return domDataWriteTransaction.commit();
90         }
91         TransactionCommitFailedException e = new TransactionCommitFailedException(
92                 "Unauthorized User");
93         return Futures.immediateFailedCheckedFuture(e);
94     }
95
96     @Override
97     public Object getIdentifier() {
98         if (AuthzServiceImpl.isAuthorized(ActionType.GetIdentifier)) {
99             return domDataWriteTransaction.getIdentifier();
100         }
101         return null;
102     }
103 }