package org.jboss.tools.switchyard.reddeer.requirement; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import java.util.List; import org.jboss.reddeer.common.logging.Logger; import org.jboss.reddeer.direct.preferences.Preferences; import org.jboss.reddeer.eclipse.core.resources.Project; import org.jboss.reddeer.eclipse.jdt.ui.ProjectExplorer; import org.jboss.reddeer.eclipse.utils.DeleteUtils; import org.jboss.reddeer.junit.requirement.CustomConfiguration; import org.jboss.reddeer.junit.requirement.Requirement; import org.jboss.reddeer.requirements.server.ServerReqState; import org.jboss.reddeer.workbench.handler.EditorHandler; import org.jboss.reddeer.workbench.impl.shell.WorkbenchShell; import org.jboss.tools.runtime.reddeer.ServerBase; import org.jboss.tools.runtime.reddeer.impl.ServerAS; import org.jboss.tools.runtime.reddeer.impl.ServerKaraf; import org.jboss.tools.runtime.reddeer.requirement.ServerReqType; import org.jboss.tools.runtime.reddeer.requirement.ServerRequirement.Server; import org.jboss.tools.switchyard.reddeer.requirement.SwitchYardRequirement.SwitchYard; import org.jboss.tools.switchyard.reddeer.wizard.SwitchYardProjectWizard; /** * * @author apodhrad * */ public class SwitchYardRequirement implements Requirement<SwitchYard>, CustomConfiguration<SwitchYardConfig> { private static final Logger LOGGER = Logger.getLogger(SwitchYardRequirement.class); private SwitchYardConfig config; private SwitchYard switchyard; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) public @interface SwitchYard { String configurationVersion() default SwitchYardProjectWizard.DEFAULT_CONFIGURATION_VERSION; String libraryVersion() default SwitchYardProjectWizard.DEFAULT_LIBRARY_VERSION; Server server() default @Server(type = {}, state = ServerReqState.PRESENT); } @Override public Class<SwitchYardConfig> getConfigurationClass() { return SwitchYardConfig.class; } @Override public void setConfiguration(SwitchYardConfig config) { this.config = config; } @Override public boolean canFulfill() { ServerReqType[] type = switchyard.server().type(); if (type.length == 0) { return true; } for (int i = 0; i < type.length; i++) { if (type[i].matches(config.getServerBase())) { return true; } } return false; } @Override public void fulfill() { deleteAllProjects(); ServerBase serverBase = config.getServerBase(); if (serverBase == null) { return; } List<String> preferences = serverBase.getProperties("preference"); for (String preference : preferences) { // Example: org.eclipse.m2e.core/eclipse.m2.userSettingsFile=settings.xml if (preference.matches("([^/=]+)/([^/=]+)=.+")) { String[] parts = preference.split("="); String key = parts[0]; String value = parts[1]; parts = key.split("/"); String plugin = parts[0]; String pluginKey = parts[1]; Preferences.set(plugin, pluginKey, value); } else { LOGGER.warn("Preference '" + preference + "' doesn't match the patterm. SKIPPED"); } } if (!serverBase.exists()) { serverBase.create(); } serverBase.setState(switchyard.server().state()); } public void deleteAllProjects() { new WorkbenchShell().maximize(); EditorHandler.getInstance().closeAll(true); ProjectExplorer pe = new ProjectExplorer(); pe.open(); pe.activate(); pe.deleteAllProjects(); } @Override public void setDeclaration(SwitchYard switchyard) { this.switchyard = switchyard; } public SwitchYardConfig getConfig() { return this.config; } public String getTargetRuntimeLabel() { String targetRuntime = getConfig().getTargetRuntime(); ServerBase server = getConfig().getServerBase(); if (targetRuntime != null) { if (server != null && !targetRuntime.matches(".* \\[.*\\]")) { targetRuntime += " [" + server.getRuntimeName() + "]"; } return targetRuntime; } if (server == null) { return "<None>"; } else if (server instanceof ServerAS) { targetRuntime = "SwitchYard: AS7 Extension " + getConfig().getSwitchyardVersion(); } else if (server instanceof ServerKaraf) { targetRuntime = "SwitchYard: Karaf Extension " + getConfig().getSwitchyardVersion(); } return targetRuntime + " [" + server.getRuntimeName() + "]"; } public String getLibraryVersionLabel() { String libraryVersion = getConfig().getLibraryVersion(); if (libraryVersion != null) { return libraryVersion; } return getConfig().getSwitchyardVersion(); } public SwitchYardProjectWizard project(String name) { SwitchYardProjectWizard project = new SwitchYardProjectWizard(name); project.config(config.getConfigurationVersion()); project.library(getLibraryVersionLabel()); project.runtime(getTargetRuntimeLabel()); IntegrationPack integrationPack = config.getIntegrationPack(); if (integrationPack != null) { project.intpkg(integrationPack.getIntegrationPackVersion()); project.intpkgKie(integrationPack.getKieVersion()); } return project; } @Override public void cleanUp() { // TODO cleanUp() } }