Roll master version for Istanbul
[ccsdk/features.git] / lib / rlock / src / main / java / org / onap / ccsdk / features / lib / rlock / SynchronizedFunction.java
1 package org.onap.ccsdk.features.lib.rlock;
2
3 import java.util.Collection;
4 import java.util.HashSet;
5 import java.util.Set;
6
7 public abstract class SynchronizedFunction {
8
9         private Set<String> synchset;
10         private String lockRequester;
11         private int lockTimeout; // Seconds
12         private LockHelper lockHelper;
13
14         protected SynchronizedFunction(LockHelper lockHelper, Collection<String> synchset, int lockTimeout) {
15                 this.lockHelper = lockHelper;
16                 this.synchset = new HashSet<String>(synchset);
17                 this.lockRequester = generateLockRequester();
18                 this.lockTimeout = lockTimeout;
19         }
20
21         protected abstract void _exec();
22
23         public void exec() {
24                 lockHelper.lock(synchset, lockRequester, lockTimeout);
25                 try {
26                         _exec();
27                 } finally {
28                         lockHelper.unlock(synchset, true);
29                 }
30         }
31
32         private static String generateLockRequester() {
33                 return "SynchronizedFunction-" + (int) (Math.random() * 1000000);
34         }
35 }