/******************************************************************************* * Copyright (c) 2012-2015 Codenvy, S.A. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ package org.eclipse.che.ide.extension.maven.client.build; import org.eclipse.che.api.builder.dto.BuildOptions; import org.eclipse.che.ide.dto.DtoFactory; import org.eclipse.che.ide.extension.builder.client.build.BuildController; import com.google.gwt.event.logical.shared.ValueChangeEvent; import com.google.inject.Inject; import com.google.inject.Singleton; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * Presenter for customizing building of Maven project. * * @author Artem Zatsarynnyy * @author Oleksii Orel */ @Singleton public class MavenBuildPresenter implements MavenBuildView.ActionDelegate { private final BuildController buildController; private MavenBuildView view; private DtoFactory dtoFactory; /** Create presenter. */ @Inject protected MavenBuildPresenter(BuildController buildController, DtoFactory dtoFactory, MavenBuildView view) { this.view = view; this.view.setDelegate(this); this.view.setBuildCommand("clean install"); this.dtoFactory = dtoFactory; this.buildController = buildController; } public void showDialog() { view.showDialog(); } @Override public void onStartBuildClicked() { buildController.buildActiveProject(getBuildOptions(), true); view.close(); } private BuildOptions getBuildOptions() {//TODO : need create smarter parser for command line BuildOptions buildOptions = dtoFactory.createDto(BuildOptions.class); buildOptions.setSkipTest(view.isSkipTestSelected()); String buildCommand = view.getBuildCommand(); if (buildCommand != null && !buildCommand.isEmpty()) { Map<String, String> options = new HashMap<>(); List<String> targets = new ArrayList<>(); String[] splited = buildCommand.split("\\s+"); for (int i = 0; i < splited.length; i++) { String str = splited[i]; if (str.startsWith("-")) { if (str.contains("=")) { String[] split = str.split("="); options.put(split[0], split[1]); } else options.put(str, null); } else { targets.add(str); } } buildOptions.setOptions(options); buildOptions.setTargets(targets); } return buildOptions; } @Override public void onCancelClicked() { view.close(); } @Override public void onSkipTestValueChange(ValueChangeEvent<Boolean> event) { if (event.getValue()) { String command = view.getBuildCommand().concat(" -Dmaven.test.skip"); view.setBuildCommand(command.replaceAll("\\s+", " ")); } else { String buildCommand = view.getBuildCommand(); view.setBuildCommand(buildCommand.replaceAll("-Dmaven.test.skip", "").replaceAll("\\s+", " ")); //TODO: need improve it } } @Override public void onUpdateSnapshotValueChange(ValueChangeEvent<Boolean> event) { if (event.getValue()) { String command = view.getBuildCommand().concat(" -U"); view.setBuildCommand(command.replaceAll("\\s+", " ")); } else { String buildCommand = view.getBuildCommand(); view.setBuildCommand( buildCommand.replaceAll("-U", "").replaceAll("--update-snapshots", "").replaceAll("\\s+", " ")); //TODO: need improve it } } @Override public void onOfflineValueChange(ValueChangeEvent<Boolean> event) { if (event.getValue()) { String command = view.getBuildCommand().concat(" -o"); view.setBuildCommand(command.replaceAll("\\s+", " ")); } else { String buildCommand = view.getBuildCommand(); view.setBuildCommand( buildCommand.replaceAll("-o", "").replaceAll("--offline", "").replaceAll("\\s+", " ")); //TODO: need improve it } } }