/******************************************************************************* * 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.ide.ext.git.client.outputconsole; import com.google.gwt.dom.client.Node; import com.google.gwt.dom.client.PreElement; import com.google.gwt.user.client.DOM; 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.eclipse.che.ide.util.loging.Log; 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 ActionDelegate delegate; @UiField FlowPanel buttons; @UiField ScrollPanel scrollPanel; @UiField FlowPanel consoleLines; @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) { PreElement pre = DOM.createElement("pre").cast(); pre.setInnerText(text.isEmpty() ? " " : text); consoleLines.getElement().appendChild(pre); } @Override public void print(String text, String color) { PreElement pre = DOM.createElement("pre").cast(); pre.setInnerText(text.isEmpty() ? " " : text); try { pre.getStyle().setColor(SimpleHtmlSanitizer.sanitizeHtml(color).asString()); } catch (Exception e) { Log.error(getClass(), "Unable to set color [" + color + "]", e); } consoleLines.getElement().appendChild(pre); } /** {@inheritDoc} */ @Override public void clear() { consoleLines.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); } }