/*- * ================================================================================ * ECOMP Portal * ================================================================================ * Copyright (C) 2017 AT&T Intellectual Property * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ================================================================================ */ package org.openecomp.portalapp.portal.utils; import java.util.ArrayList; import java.util.List; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate; public abstract class ParallelExecutor { EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(ParallelExecutor.class); protected static abstract class ThreadOperation { public abstract T execute(List parms); } protected abstract ThreadOperation getThreadOperation(); private static class CallableOperationThread implements Callable { List parms; private ThreadOperation operation; public CallableOperationThread(ThreadOperation operation, List parms) { this.parms = parms; this.operation = operation; } @Override public T call() throws Exception { return this.operation.execute(this.parms); } } public List performAllOperations(int ThreadPoolSize, List> listOfParms) { List result = new ArrayList(); if (ThreadPoolSize > 0 && listOfParms != null) { ExecutorService executor = Executors.newFixedThreadPool(ThreadPoolSize); List> list = new ArrayList>(); for (List parms : listOfParms) { CallableOperationThread getter = new CallableOperationThread(this.getThreadOperation(), parms); Future submit = executor.submit(getter); list.add(submit); } for (Future future : list) { try { if (future != null) { result.add(future.get()); } } catch (Exception e) { logger.error(EELFLoggerDelegate.errorLogger, EcompPortalUtils.getStackTrace(e)); } } executor.shutdown(); } return result; } }