| /******************************************************************************* |
| * Copyright (C) 2021 the Eclipse BaSyx Authors |
| * |
| * This program and the accompanying materials are made |
| * available under the terms of the Eclipse Public License 2.0 |
| * which is available at https://www.eclipse.org/legal/epl-2.0/ |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| ******************************************************************************/ |
| package org.eclipse.basyx.examples.deployment; |
| |
| import java.util.HashMap; |
| import java.util.Map; |
| |
| import org.eclipse.basyx.vab.protocol.http.server.AASHTTPServer; |
| import org.eclipse.basyx.vab.protocol.http.server.BaSyxContext; |
| import org.eclipse.basyx.vab.service.api.BaSyxService; |
| import org.junit.rules.ExternalResource; |
| import org.slf4j.Logger; |
| import org.slf4j.LoggerFactory; |
| |
| |
| |
| |
| /** |
| * This class represents a BaSyx deployment with servers / servlets and assets for running BaSyx examples |
| * |
| * @author kuhn |
| * |
| */ |
| public class BaSyxDeployment extends ExternalResource { |
| |
| /** |
| * Initiates a logger using the current class |
| */ |
| private static final Logger logger = LoggerFactory.getLogger(BaSyxDeployment.class); |
| |
| |
| /** |
| * Store context objects |
| */ |
| protected Object[] contextComponents = null; |
| |
| /** |
| * Map runnable names to runnables |
| */ |
| protected Map<String, BaSyxService> contectRunnablesByName = new HashMap<>(); |
| |
| /** |
| * Deployment on HTTP server |
| */ |
| private AASHTTPServer server; |
| |
| |
| |
| /** |
| * Constructor - accept parameter of type BaSyxContext or Runnable |
| */ |
| public BaSyxDeployment(Object... components) { |
| // Store context objects |
| contextComponents = components; |
| |
| // Store runnable objects by name |
| for (Object obj: contextComponents) { |
| // Check component type |
| if (!(obj instanceof BaSyxService)) continue; |
| |
| // Add BaSyxContextRunnable to context |
| // - Cast object |
| BaSyxService contextRunnable = (BaSyxService) obj; |
| // - Add context runnable to map if it is named |
| if (contextRunnable.getName() == null) continue; |
| // - Add context runnable to map |
| contectRunnablesByName.put(contextRunnable.getName(), contextRunnable); |
| } |
| } |
| |
| |
| |
| /** |
| * Execute before a test case starts |
| */ |
| @Override |
| protected void before() { |
| // Iterate context components |
| for (Object contextComponent: contextComponents) { |
| // Process BaSyx context objects that run in a tomcat server |
| if (contextComponent instanceof BaSyxContext) { |
| // Get HTTP server resource |
| server = new AASHTTPServer((BaSyxContext) contextComponent); |
| // - Start the server |
| server.start(); |
| // - Continue loop |
| continue; |
| } |
| |
| // Process runnables |
| if (contextComponent instanceof BaSyxService) { |
| // Execute runnable |
| ((BaSyxService) contextComponent).start(); |
| // - Continue loop |
| continue; |
| } |
| |
| logger.error("Error:"+contextComponent); |
| |
| // Unknown deployment context |
| throw new UnknownContextComponentTypeException(); |
| } |
| } |
| |
| |
| /** |
| * Execute after test case ends |
| */ |
| @Override |
| protected void after() { |
| // Iterate context components |
| for (Object contextComponent: contextComponents) { |
| // Process BaSyx context objects that run in a tomcat server |
| if (contextComponent instanceof BaSyxContext) { |
| // - Shutdown the server |
| server.shutdown(); |
| // - Continue loop |
| continue; |
| } |
| |
| // Process runnables |
| if (contextComponent instanceof BaSyxService) { |
| // Execute runnable |
| ((BaSyxService) contextComponent).stop(); |
| // - Continue loop |
| continue; |
| } |
| |
| // Unknown deployment context |
| throw new UnknownContextComponentTypeException(); |
| } |
| } |
| |
| |
| /** |
| * Get context runnable by name |
| */ |
| public BaSyxService getRunnable(String name) { |
| return contectRunnablesByName.get(name); |
| } |
| } |
| |