/******************************************************************************* * Copyright (c) 2012-2017 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.plugin.svn.ide.common; import com.google.gwt.user.client.ui.AcceptsOneWidget; import com.google.inject.Inject; import com.google.inject.assistedinject.Assisted; import org.eclipse.che.ide.api.app.AppContext; import org.eclipse.che.ide.api.resources.Project; import org.eclipse.che.ide.api.theme.Style; import org.eclipse.che.plugin.svn.ide.SubversionExtensionLocalizationConstants; import org.eclipse.che.plugin.svn.ide.SubversionExtensionResources; import org.vectomatic.dom.svg.ui.SVGResource; import javax.validation.constraints.NotNull; import java.util.ArrayList; import java.util.List; /** * Presenter for the {@link SubversionOutputConsoleView}. */ public class SubversionOutputConsolePresenter implements SubversionOutputConsoleView.ActionDelegate, SubversionOutputConsole { private final SubversionExtensionResources resources; private final SubversionOutputConsoleView view; private final String title; private final List<ActionDelegate> actionDelegates = new ArrayList<>(); @Inject public SubversionOutputConsolePresenter(final SubversionExtensionLocalizationConstants constants, final SubversionExtensionResources resources, final SubversionOutputConsoleView view, final AppContext appContext, @Assisted String title) { this.view = view; this.view.setDelegate(this); this.title = title; this.resources = resources; final Project project = appContext.getRootProject(); if (project != null) { view.print(constants.consoleProjectName(project.getName()) + "\n"); } } @Override public void go(final AcceptsOneWidget container) { container.setWidget(this.view); } public void print(@NotNull final String text) { final String[] lines = text.split("\n"); for (String line : lines) { view.print(line.isEmpty() ? " " : line); } view.scrollBottom(); for (ActionDelegate actionDelegate : actionDelegates) { actionDelegate.onConsoleOutput(this); } } /** * Print colored text in console. * * @param text * text that need to be shown * @param color */ @Override public void print(@NotNull String text, @NotNull String color) { view.print(text, color); view.scrollBottom(); for (ActionDelegate actionDelegate : actionDelegates) { actionDelegate.onConsoleOutput(this); } } /** * Print executed command in console. * * @param text * command text */ @Override public void printCommand(@NotNull String text) { view.printPredefinedStyle(text, "font-weight: bold; font-style: italic;"); for (ActionDelegate actionDelegate : actionDelegates) { actionDelegate.onConsoleOutput(this); } } /** * Print error in console. * * @param text * text that need to be shown as error */ @Override public void printError(@NotNull String text) { print(text, Style.getVcsConsoleErrorColor()); } public void clear() { view.clear(); } @Override public void onClearClicked() { clear(); } @Override public void onScrollClicked() { view.scrollBottom(); } @Override public String getTitle() { return title; } /** * Returns the title SVG image resource of this console. * * @return the title SVG image resource */ @Override public SVGResource getTitleIcon() { return resources.outputIcon(); } /** * Checks whether the console is finished outputting or not. */ @Override public boolean isFinished() { return true; } /** * Stop process. */ @Override public void stop() { } /** * Called when console is closed. */ @Override public void close() { actionDelegates.clear(); } @Override public void addActionDelegate(ActionDelegate actionDelegate) { actionDelegates.add(actionDelegate); } }