/******************************************************************************* * 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.java.client.tree; import com.google.common.annotations.Beta; import com.google.inject.Inject; import com.google.inject.assistedinject.Assisted; import com.google.web.bindery.event.shared.EventBus; import org.eclipse.che.ide.api.data.tree.Node; import org.eclipse.che.ide.api.data.tree.settings.NodeSettings; import org.eclipse.che.ide.api.resources.Container; import org.eclipse.che.ide.api.resources.File; import org.eclipse.che.ide.api.resources.Resource; import org.eclipse.che.ide.ext.java.client.JavaResources; import org.eclipse.che.ide.project.node.icon.NodeIconProvider; import org.eclipse.che.ide.project.shared.NodesResources; import org.eclipse.che.ide.resource.Path; import org.eclipse.che.ide.resources.tree.ContainerNode; import org.eclipse.che.ide.resources.tree.ResourceNode; import org.eclipse.che.ide.ui.smartTree.presentation.NodePresentation; import javax.validation.constraints.NotNull; import java.util.Set; import static com.google.common.base.Preconditions.checkArgument; import static org.eclipse.che.ide.api.resources.Resource.FILE; import static org.eclipse.che.ide.api.resources.Resource.FOLDER; import static org.eclipse.che.ide.api.resources.Resource.PROJECT; /** * @author Vlad Zhukovskiy */ @Beta public class PackageNode extends ContainerNode { private final JavaNodeFactory nodeFactory; private final JavaResources javaResources; @Inject public PackageNode(@Assisted Container resource, @Assisted NodeSettings nodeSettings, JavaNodeFactory nodeFactory, NodesResources nodesResources, JavaResources javaResources, EventBus eventBus, Set<NodeIconProvider> nodeIconProviders) { super(resource, nodeSettings, nodeFactory, nodesResources, eventBus, nodeIconProviders); this.nodeFactory = nodeFactory; this.javaResources = javaResources; } /** {@inheritDoc} */ @Override public void updatePresentation(@NotNull NodePresentation presentation) { super.updatePresentation(presentation); presentation.setPresentableText(getDisplayPackage()); presentation.setPresentableIcon(javaResources.packageItem()); } protected Node createNode(Resource resource) { checkArgument(resource != null, "Not a resource"); switch (resource.getResourceType()) { case PROJECT: case FOLDER: return nodeFactory.newPackage((Container)resource, getSettings()); case FILE: return nodeFactory.newFileNode((File)resource, getSettings()); default: throw new IllegalArgumentException("Resource type was not recognized"); } } /** * Return display FQN for the package according to the parent. E.g. from package a.b.c.d will displayed only c.d * * @return partially displayed FQN name. */ protected String getDisplayPackage() { final Node parent = getParent(); if (parent instanceof ResourceNode) { final Path parentLocation = ((ResourceNode)parent).getData().getLocation(); return getData().getLocation().removeFirstSegments(parentLocation.segmentCount()).toString().replace('/', '.'); } else { return getName(); } } @Override public int compareTo(ResourceNode o) { if (o instanceof PackageNode) { return getDisplayPackage().compareTo(((PackageNode)o).getDisplayPackage()); } return super.compareTo(o); } }