/******************************************************************************* * 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.api.project.shared.dto; import org.eclipse.che.dto.shared.DTO; import org.eclipse.che.dto.shared.DelegateRule; import org.eclipse.che.dto.shared.DelegateTo; import javax.annotation.Nonnull; import java.util.List; /** * Represents RunnerEnvironment as tree. * * @author andrew00x */ @DTO public interface RunnerEnvironmentTree { enum Util { INSTANCE; public static RunnerEnvironmentTree getNode(RunnerEnvironmentTree tree, String name) { for (RunnerEnvironmentTree node : tree.getNodes()) { if (node.getDisplayName().equals(name)) { return node; } } return null; } public static void addNode(RunnerEnvironmentTree tree, RunnerEnvironmentTree node) { tree.getNodes().add(node); } public static RunnerEnvironmentLeaf getLeaf(RunnerEnvironmentTree tree, String name) { for (RunnerEnvironmentLeaf leaf : tree.getLeaves()) { if (leaf.getDisplayName().equals(name)) { return leaf; } } return null; } public static void addLeaf(RunnerEnvironmentTree tree, RunnerEnvironmentLeaf leaf) { tree.getLeaves().add(leaf); } } /** * Gets runner environments on current tree level. If this method returns empty {@code List} that means there is no any runner * environments on current level. Always need check {@link #getNodes()} for child environments. * <pre> * + Java * |- Web * |- Spring * |- Tomcat7 * |- JBoss7 * |- Jetty9 * |- Struts * |- ... * + Python * |- Web * |- ... * + Ruby * |- Web * |- Rails * |- ... * </pre> * In example above there is no any environment on level Java, Java/Web. */ List<RunnerEnvironmentLeaf> getLeaves(); /** * Gets runner environments on current tree level. * * @see #getLeaves() */ void setLeaves(List<RunnerEnvironmentLeaf> leaves); RunnerEnvironmentTree withLeaves(List<RunnerEnvironmentLeaf> leaves); /** Gets node name. Need this for display tree on client side. */ @Nonnull String getDisplayName(); /** * Sets display name. * * @see #getDisplayName() */ void setDisplayName(@Nonnull String name); RunnerEnvironmentTree withDisplayName(@Nonnull String name); /** * Gets child environments. Empty list means that current tree level is last in hierarchy. */ @Nonnull List<RunnerEnvironmentTree> getNodes(); /** * Sets child environments. * * @see #getNodes() */ void setNodes(List<RunnerEnvironmentTree> nodes); RunnerEnvironmentTree withNodes(List<RunnerEnvironmentTree> nodes); @DelegateTo(client = @DelegateRule(type = Util.class, method = "getNode"), server = @DelegateRule(type = Util.class, method = "getNode")) RunnerEnvironmentTree getNode(String name); @DelegateTo(client = @DelegateRule(type = Util.class, method = "addNode"), server = @DelegateRule(type = Util.class, method = "addNode")) void addNode(RunnerEnvironmentTree node); @DelegateTo(client = @DelegateRule(type = Util.class, method = "getLeaf"), server = @DelegateRule(type = Util.class, method = "getLeaf")) RunnerEnvironmentLeaf getEnvironment(String name); @DelegateTo(client = @DelegateRule(type = Util.class, method = "addLeaf"), server = @DelegateRule(type = Util.class, method = "addLeaf")) void addLeaf(RunnerEnvironmentLeaf leaf); }