Replace ecomp references
[portal.git] / ecomp-portal-BE-common / src / main / java / org / onap / portalapp / portal / utils / ParallelExecutor.java
1 /*-
2  * ============LICENSE_START==========================================
3  * ONAP Portal
4  * ===================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ===================================================================
7  *
8  * Unless otherwise specified, all software contained herein is licensed
9  * under the Apache License, Version 2.0 (the "License");
10  * you may not use this software except in compliance with the License.
11  * You may obtain a copy of the License at
12  *
13  *             http://www.apache.org/licenses/LICENSE-2.0
14  *
15  * Unless required by applicable law or agreed to in writing, software
16  * distributed under the License is distributed on an "AS IS" BASIS,
17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18  * See the License for the specific language governing permissions and
19  * limitations under the License.
20  *
21  * Unless otherwise specified, all documentation contained herein is licensed
22  * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
23  * you may not use this documentation except in compliance with the License.
24  * You may obtain a copy of the License at
25  *
26  *             https://creativecommons.org/licenses/by/4.0/
27  *
28  * Unless required by applicable law or agreed to in writing, documentation
29  * distributed under the License is distributed on an "AS IS" BASIS,
30  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
31  * See the License for the specific language governing permissions and
32  * limitations under the License.
33  *
34  * ============LICENSE_END============================================
35  *
36  * 
37  */
38 package org.onap.portalapp.portal.utils;
39
40 import java.util.ArrayList;
41 import java.util.List;
42 import java.util.concurrent.Callable;
43 import java.util.concurrent.ExecutorService;
44 import java.util.concurrent.Executors;
45 import java.util.concurrent.Future;
46
47 import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
48
49 public abstract class ParallelExecutor<T> {
50
51         private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(ParallelExecutor.class);
52
53         protected static abstract class ThreadOperation<T> {
54                 public abstract T execute(List<Object> parms);
55         }
56
57         protected abstract ThreadOperation<T> getThreadOperation();
58
59         private static class CallableOperationThread<T> implements Callable<T> {
60
61                 List<Object> parms;
62
63                 private ThreadOperation<T> operation;
64
65                 public CallableOperationThread(ThreadOperation<T> operation, List<Object> parms) {
66                         this.parms = parms;
67                         this.operation = operation;
68                 }
69
70                 @Override
71                 public T call() throws Exception {
72                         return this.operation.execute(this.parms);
73                 }
74
75         }
76
77         public List<T> performAllOperations(int ThreadPoolSize, List<List<Object>> listOfParms) {
78                 List<T> result = new ArrayList<T>();
79                 if (ThreadPoolSize > 0 && listOfParms != null) {
80                         ExecutorService executor = Executors.newFixedThreadPool(ThreadPoolSize);
81                         List<Future<T>> list = new ArrayList<Future<T>>();
82                         for (List<Object> parms : listOfParms) {
83                                 CallableOperationThread<T> getter = new CallableOperationThread<T>(this.getThreadOperation(), parms);
84                                 Future<T> submit = executor.submit(getter);
85                                 list.add(submit);
86                         }
87                         for (Future<T> future : list) {
88                                 try {
89                                         if (future != null) {
90                                                 result.add(future.get());
91                                         }
92                                 } catch (Exception e) {
93                                         logger.error(EELFLoggerDelegate.errorLogger, "performAllOperations failed", e);
94                                 }
95                         }
96                         executor.shutdown();
97                 }
98                 return result;
99         }
100
101 }