2 * ============LICENSE_START==========================================
4 * ===================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ===================================================================
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
13 * http://www.apache.org/licenses/LICENSE-2.0
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.
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
26 * https://creativecommons.org/licenses/by/4.0/
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.
34 * ============LICENSE_END============================================
38 package org.onap.portalapp.portal.utils;
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;
47 import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
49 public abstract class ParallelExecutor<T> {
51 private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(ParallelExecutor.class);
53 protected static abstract class ThreadOperation<T> {
54 public abstract T execute(List<Object> parms);
57 protected abstract ThreadOperation<T> getThreadOperation();
59 private static class CallableOperationThread<T> implements Callable<T> {
63 private ThreadOperation<T> operation;
65 public CallableOperationThread(ThreadOperation<T> operation, List<Object> parms) {
67 this.operation = operation;
71 public T call() throws Exception {
72 return this.operation.execute(this.parms);
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);
87 for (Future<T> future : list) {
90 result.add(future.get());
92 } catch (Exception e) {
93 logger.error(EELFLoggerDelegate.errorLogger, "performAllOperations failed", e);