/******************************************************************************* * 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.processes; import elemental.dom.Element; import elemental.html.SpanElement; import com.google.inject.Inject; import com.google.inject.Singleton; import org.eclipse.che.ide.machine.MachineResources; import org.eclipse.che.ide.terminal.AddTerminalClickHandler; import org.eclipse.che.ide.terminal.HasAddTerminalClickHandler; import org.eclipse.che.ide.ui.tree.BaseNodeRenderer; import java.util.Map; import static com.google.common.base.Preconditions.checkNotNull; import static org.eclipse.che.ide.util.dom.Elements.addClassName; /** * Renderer for {@link ProcessTreeNode} UI presentation. * * @author Anna Shumilova * @author Roman Nikitenko * @author Vlad Zhukovskyi */ @Singleton public class ProcessTreeRenderer extends BaseNodeRenderer<ProcessTreeNode> implements HasAddTerminalClickHandler, HasPreviewSshClickHandler, HasStopProcessHandler { private final MachineResources resources; private final Map<String, ProcessTreeNodeRenderStrategy> renderStrategyMap; @Inject public ProcessTreeRenderer(MachineResources resources, Map<String, ProcessTreeNodeRenderStrategy> renderStrategyMap) { this.resources = resources; this.renderStrategyMap = renderStrategyMap; } @Override public Element getNodeKeyTextContainer(SpanElement treeNodeLabel) { return (Element)treeNodeLabel.getChildNodes().item(1); } @Override public SpanElement renderNodeContents(ProcessTreeNode node) { final ProcessTreeNodeRenderStrategy renderStrategy = renderStrategyMap.get(node.getType().getStringValue()); checkNotNull(renderStrategy, "Unknown node type"); final SpanElement spanElement = renderStrategy.renderSpanElementFor(node); addClassName(resources.getCss().processTreeNode(), spanElement); return spanElement; } @Override public void addStopProcessHandler(StopProcessHandler handler) { renderStrategyMap.values().forEach(strategy -> { if (strategy instanceof HasStopProcessHandler) { ((HasStopProcessHandler)strategy).addStopProcessHandler(handler); } }); } @Override public void addAddTerminalClickHandler(AddTerminalClickHandler handler) { renderStrategyMap.values().forEach(strategy -> { if (strategy instanceof HasAddTerminalClickHandler) { ((HasAddTerminalClickHandler)strategy).addAddTerminalClickHandler(handler); } }); } @Override public void addPreviewSshClickHandler(PreviewSshClickHandler handler) { renderStrategyMap.values().forEach(strategy -> { if (strategy instanceof HasPreviewSshClickHandler) { ((HasPreviewSshClickHandler)strategy).addPreviewSshClickHandler(handler); } }); } }