84e98aac0afbb98ecdf35a7b0a4dc9dd084b810a
[appc.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  * APPC
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * Copyright (C) 2017 Amdocs
7  * ================================================================================
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  * 
12  *      http://www.apache.org/licenses/LICENSE-2.0
13  * 
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  * ============LICENSE_END=========================================================
20  * ECOMP is a trademark and service mark of AT&T Intellectual Property.
21  */
22
23 package org.openecomp.appc.lockmanager.impl.sql;
24
25 public class Synchronizer {
26
27     private int participantNo;
28     private int participantCount;
29
30     public Synchronizer(int participantNo) {
31         this.participantNo = participantNo;
32     }
33
34     public int getParticipantCount() {
35         return participantCount;
36     }
37
38     public void postLoadLockRecord(String resource, String owner) {
39         synchronized(this) {
40             waitForAllParticipants(this, participantNo, ++participantCount);
41         }
42     }
43
44     public void preAddLockRecord(String resource, String owner) {
45     }
46
47     public void postAddLockRecord(String resource, String owner) {
48     }
49
50     public void preUpdateLockRecord(String resource, String owner) {
51     }
52
53     public void postUpdateLockRecord(String resource, String owner) {
54     }
55
56     public void releaseWait() {
57         synchronized(this) {
58             this.notifyAll();
59         }
60     }
61
62     protected void waitOn(Object obj, long timeout) {
63         try {
64             obj.wait(timeout);
65         } catch(InterruptedException e) {
66             throw new RuntimeException(e);
67         }
68     }
69
70     protected void waitOn(Object obj) {
71         waitOn(obj, 0);
72     }
73
74     protected void waitForAllParticipants(Object waitObj, int totalParticipantsNo, int currentParticipantsNo) {
75         if(totalParticipantsNo > currentParticipantsNo) {
76             waitOn(waitObj);
77         } else {
78             waitObj.notifyAll();
79         }
80     }
81 }