/******************************************************************************* * 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.java.client.project.interceptor; import com.google.inject.Singleton; import org.eclipse.che.api.promises.client.Promise; import org.eclipse.che.api.promises.client.js.Promises; import org.eclipse.che.ide.api.project.node.HasAttributes; import org.eclipse.che.ide.api.project.node.Node; import org.eclipse.che.ide.api.project.node.interceptor.NodeInterceptor; import org.eclipse.che.ide.api.theme.Style; import org.eclipse.che.ide.ext.java.client.project.node.SourceFolderNode; import java.util.List; import static java.util.Collections.singletonList; import static org.eclipse.che.ide.ext.java.shared.ContentRoot.TEST_SOURCE; import static org.eclipse.che.ide.project.node.AbstractProjectBasedNode.CUSTOM_BACKGROUND_FILL; /** * Decorates child of test content root with custom background color. * * @author Vlad Zhukovskiy */ @Singleton public class TestContentRootDecorator implements NodeInterceptor { /** {@inheritDoc} */ @Override public Promise<List<Node>> intercept(Node parent, List<Node> children) { if (parent instanceof SourceFolderNode && ((SourceFolderNode)parent).getContentRootType() == TEST_SOURCE) { addBackgroundAttribute(children); } else { SourceFolderNode sourceFolderNode = getSourceFolder(parent); if (sourceFolderNode != null && sourceFolderNode.getContentRootType() == TEST_SOURCE) { addBackgroundAttribute(children); } } return Promises.resolve(children); } /** {@inheritDoc} */ @Override public int getPriority() { return MAX_PRIORITY; } private SourceFolderNode getSourceFolder(Node node) { Node parent = node.getParent(); while (parent != null) { if (parent instanceof SourceFolderNode) { return (SourceFolderNode)parent; } parent = parent.getParent(); } return null; } private void addBackgroundAttribute(List<Node> nodes) { for (Node node : nodes) { if (node instanceof HasAttributes) { ((HasAttributes)node).getAttributes().put(CUSTOM_BACKGROUND_FILL, singletonList(Style.theme.projectExplorerTestItemBackground())); } } } }