/******************************************************************************* * Copyright (c) 2012-2016 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.ext.git.client.outputconsole; import org.eclipse.che.ide.api.parts.PartStackUIResources; import com.google.gwt.safehtml.shared.SimpleHtmlSanitizer; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.ScrollPanel; import com.google.gwt.user.client.ui.Widget; import com.google.inject.Inject; import org.eclipse.che.ide.ext.git.client.GitLocalizationConstant; import org.eclipse.che.ide.ui.button.ConsoleButton; import org.eclipse.che.ide.ui.button.ConsoleButtonFactory; import org.vectomatic.dom.svg.ui.SVGResource; import javax.validation.constraints.NotNull; /** * Implements {@link GitOutputPartView}. * * @author Andrey Plotnikov */ public class GitOutputPartViewImpl extends Composite implements GitOutputPartView { private final ConsoleButtonFactory consoleButtonFactory; interface GitOutputPartViewImplUiBinder extends UiBinder<Widget, GitOutputPartViewImpl> { } private static final String INFO_COLOR = "lightgreen"; private static final String WARNING_COLOR = "cyan"; private static final String ERROR_COLOR = "#F62217"; private ActionDelegate delegate; @UiField FlowPanel buttons; @UiField FlowPanel consoleArea; @UiField ScrollPanel scrollPanel; @Inject public GitOutputPartViewImpl(GitLocalizationConstant constant, PartStackUIResources resources, GitOutputPartViewImplUiBinder uiBinder, ConsoleButtonFactory consoleButtonFactory) { this.consoleButtonFactory = consoleButtonFactory; initWidget(uiBinder.createAndBindUi(this)); ConsoleButton.ActionDelegate scrollBottomDelegate = new ConsoleButton.ActionDelegate() { @Override public void onButtonClicked() { delegate.onScrollClicked(); } }; createButton(resources.arrowBottom(), constant.buttonScroll(), scrollBottomDelegate); ConsoleButton.ActionDelegate cleanDelegate = new ConsoleButton.ActionDelegate() { @Override public void onButtonClicked() { delegate.onClearClicked(); } }; createButton(resources.erase(), constant.buttonClear(), cleanDelegate); } /** {@inheritDoc} */ @Override public void print(String text) { String preStyle = " style='margin:0px; font-size: 12px;' "; HTML html = new HTML(); String TEXT = text.toUpperCase(); if (TEXT.startsWith("[INFO]")) { html.setHTML("<pre" + preStyle + ">[<span style='color:" + INFO_COLOR + ";'><b>INFO</b></span>] " + SimpleHtmlSanitizer.sanitizeHtml(text.substring(6)).asString() + "</pre>"); } else if (TEXT.startsWith("[ERROR]")) { html.setHTML("<pre" + preStyle + ">[<span style='color:" + ERROR_COLOR + ";'><b>ERROR</b></span>] " + SimpleHtmlSanitizer.sanitizeHtml(text.substring(7)).asString() + "</pre>"); } else if (TEXT.startsWith("[WARNING]")) { html.setHTML("<pre" + preStyle + ">[<span style='color:" + WARNING_COLOR + ";'><b>WARNING</b></span>] " + SimpleHtmlSanitizer.sanitizeHtml(text.substring(9)).asString() + "</pre>"); } else { html.setHTML("<pre" + preStyle + ">" + SimpleHtmlSanitizer.sanitizeHtml(text).asString() + "</pre>"); } html.getElement().setAttribute("style", "padding-left: 2px;"); consoleArea.add(html); } @Override public void print(String text, String color) { String preStyle = " style='margin:0px; font-size: 12px;' "; HTML html = new HTML(); html.setHTML("<pre" + preStyle + "><span style='color:" + SimpleHtmlSanitizer.sanitizeHtml(color).asString() + ";'>" + SimpleHtmlSanitizer.sanitizeHtml(text).asString() + "</span></pre>"); html.getElement().setAttribute("style", "padding-left: 2px;"); consoleArea.add(html); } @Override public void printInfo(String text) { print(text, INFO_COLOR); } @Override public void printWarn(String text) { print(text, WARNING_COLOR); } @Override public void printError(String text) { print(text, ERROR_COLOR); } /** {@inheritDoc} */ @Override public void clear() { consoleArea.clear(); } /** {@inheritDoc} */ @Override public void scrollBottom() { scrollPanel.getElement().setScrollTop(scrollPanel.getElement().getScrollHeight()); } @Override public void setDelegate(ActionDelegate delegate) { this.delegate = delegate; } @NotNull private void createButton(@NotNull SVGResource icon, @NotNull String prompt, @NotNull ConsoleButton.ActionDelegate delegate) { ConsoleButton button = consoleButtonFactory.createConsoleButton(prompt, icon); button.setDelegate(delegate); buttons.add(button); } }