Added oparent to sdc main
[sdc.git] / catalog-be / src / main / java / org / openecomp / sdc / be / components / impl / lock / ComponentLockAspect.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
4  * ================================================================================
5  * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.openecomp.sdc.be.components.impl.lock;
22
23 import org.aspectj.lang.ProceedingJoinPoint;
24 import org.openecomp.sdc.be.components.impl.ComponentLocker;
25 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
26 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
27 import org.openecomp.sdc.common.log.wrappers.Logger;
28
29 public class ComponentLockAspect {
30
31     private static final Logger log = Logger.getLogger(ComponentLockAspect.class);
32     private final ComponentLocker componentLocker;
33
34     public ComponentLockAspect(ComponentLocker componentLocker) {
35         this.componentLocker = componentLocker;
36     }
37
38     public Object lock(ProceedingJoinPoint proceedingJoinPoint, String componentId, ComponentTypeEnum componentType) throws Throwable {
39         return surroundWithLockUnlock(proceedingJoinPoint, componentId, componentType.getNodeType());
40     }
41
42     private Object surroundWithLockUnlock(ProceedingJoinPoint proceedingJoinPoint, String componentId, NodeTypeEnum componentType) throws Throwable {
43         String methodName = proceedingJoinPoint.getSignature().toShortString();
44         try {
45             log.trace("#{} - before locking component {} of type {}", methodName, componentId, componentType);
46             componentLocker.lock(componentId, componentType);
47             log.trace("#{} - after locking component {} of type {}", methodName, componentId, componentType);
48             return proceedingJoinPoint.proceed();
49         }
50         finally {
51             log.trace("#{} - before unlocking component {} of type {}", methodName, componentId, componentType);
52             componentLocker.unlock(componentId, componentType);
53             log.trace("#{} - after unlocking component {} of type {}", methodName, componentId, componentType);
54         }
55     }
56
57
58 }