blob: 808f89698a6a70286d9737f41730874b1cc6a621 [file] [log] [blame]
/**
********************************************************************************
* Copyright (c) 2019 Robert Bosch GmbH and others.
*
* 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
*
* Contributors:
* Robert Bosch GmbH - initial API and implementation
********************************************************************************
*/
package org.eclipse.app4mc.transformation.application.base;
import java.util.Arrays;
import org.eclipse.osgi.service.environment.EnvironmentInfo;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
/**
* Immediate component that gets activated once the Equinox
* {@link EnvironmentInfo} is available. Triggers the Transformation process based on
* the command line arguments. Via -console parameter it is also possible to
* simply start the application in an interactive mode by keeping the OSGi
* console open. Otherwise the application will immediately closed after
* execution.
* <p>
* <b>Note:</b><br>
* Even when starting the app with the Equinox OSGi framework via bnd launcher,
* the {@link EnvironmentInfo} will be available. But it will not contain the
* necessary information that typically gets set the the Equinox launcher.
* Therefore the Transformation start will not be processed if the
* {@link EnvironmentInfo} is not initialized properly.
* </p>
*/
@Component(immediate = true)
public class EquinoxTransformationStarter {
/**
* Launcher arguments provided by the Equinox launcher.
*/
@Reference
EnvironmentInfo environmentInfo;
protected StartTransformationCommand startTransformationcommand;
@Reference
void setModelTransformationCommand(StartTransformationCommand command) {
this.startTransformationcommand = command;
}
@Activate
void activate() {
// only process model Transformation activation if the EnvironmentInfo is initialized
// properly
if (this.environmentInfo.getNonFrameworkArgs() != null) {
// check if a product or an application was started
// if yes this starter should do nothing
boolean isProduct =
Arrays.stream(environmentInfo.getNonFrameworkArgs()).anyMatch(arg -> "-product".equals(arg))
|| this.environmentInfo.getProperty("eclipse.product") != null;
boolean isApplication =
Arrays.stream(environmentInfo.getNonFrameworkArgs()).anyMatch(arg -> "-application".equals(arg))
|| this.environmentInfo.getProperty("eclipse.application") != null;
// if (!isProduct && !isApplication) {
// check if -console or -consoleLog was provided as launch argument
// boolean isInteractive = Arrays.stream(environmentInfo.getFrameworkArgs())
// .anyMatch(arg -> "-console".equals(arg));
// boolean showConsoleLog = Arrays.stream(environmentInfo.getFrameworkArgs())
// .anyMatch(arg -> "-consoleLog".equals(arg));
startTransformationcommand.startTransformation(this.environmentInfo.getNonFrameworkArgs());
// }
}
}
}