/*- * ============LICENSE_START========================================== * ONAP Portal * =================================================================== * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. * =================================================================== * * Unless otherwise specified, all software contained herein is licensed * under the Apache License, Version 2.0 (the "License"); * you may not use this software 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. * * Unless otherwise specified, all documentation contained herein is licensed * under the Creative Commons License, Attribution 4.0 Intl. (the "License"); * you may not use this documentation except in compliance with the License. * You may obtain a copy of the License at * * https://creativecommons.org/licenses/by/4.0/ * * Unless required by applicable law or agreed to in writing, documentation * 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. * * ============LICENSE_END============================================ * * */ package org.onap.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.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; public abstract class ParallelExecutor { private 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, "performAllOperations failed", e); } } executor.shutdown(); } return result; } }