/******************************************************************************* * Copyright (c) 2012 BundleMaker Project Team * 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: * Nils Hartmann - initial API and implementation ******************************************************************************/ package org.bundlemaker.core.ui.projecteditor.filebased; import java.util.LinkedList; import java.util.List; import java.util.Set; import org.bundlemaker.core.project.AnalyzeMode; import org.bundlemaker.core.project.IProjectContentEntry; import org.bundlemaker.core.project.IProjectDescriptionAwareBundleMakerProject; import org.bundlemaker.core.project.VariablePath; import org.bundlemaker.core.project.filecontent.FileBasedProjectContentProvider; import org.bundlemaker.core.ui.BundleMakerImages; import org.eclipse.core.runtime.CoreException; import org.eclipse.swt.graphics.Image; /** * @author Nils Hartmann (nils@nilshartmann.net) * */ public class FileBasedContentRenderer { private final static FileBasedContentRenderer _instance = new FileBasedContentRenderer(); public static FileBasedContentRenderer getInstance() { return _instance; } private FileBasedContentRenderer() { } public boolean canRender(Object object) { return (object instanceof IProjectContentEntry || object instanceof ProjectPath); } /** * @param project * @param rootElement * @return */ public List<? extends Object> getChildren(IProjectDescriptionAwareBundleMakerProject project, Object object) { if (object instanceof FileBasedProjectContentProvider) { FileBasedProjectContentProvider fileBasedContentProvider = (FileBasedProjectContentProvider) object; return getChildren(fileBasedContentProvider.getFileBasedContent()); } if (object instanceof IProjectContentEntry) { IProjectContentEntry fileBasedContent = (IProjectContentEntry) object; return getChildren(fileBasedContent); } return null; } protected List<? extends Object> getChildren(IProjectContentEntry fileBasedContent) { List<Object> result = new LinkedList<Object>(); addAsProjectPaths(result, fileBasedContent.getBinaryRootPaths(), false); addAsProjectPaths(result, fileBasedContent.getSourceRootPaths(), true); return result; } private void addAsProjectPaths(List<Object> target, Set<VariablePath> paths, boolean source) { for (VariablePath variablePath : paths) { target.add(new ProjectPath(variablePath, source)); } } /** * @param element * @return */ public AnalyzeMode getAnalyzeMode(Object element) { if (element instanceof FileBasedProjectContentProvider) { return ((FileBasedProjectContentProvider) element).getAnalyzeMode(); } if (element instanceof IProjectContentEntry) { return ((IProjectContentEntry) element).getAnalyzeMode(); } return null; } /** * @param element * @return */ public Image getImage(Object element) { if (element instanceof FileBasedProjectContentProvider || element instanceof IProjectContentEntry) { return BundleMakerImages.RESOURCE_CONTENT.getImage(); } if (element instanceof ProjectPath) { ProjectPath projectPath = (ProjectPath) element; return getImageForPath(projectPath); } return null; } /** * @param element * @return */ public String getLabel(Object element) { if (element instanceof FileBasedProjectContentProvider) { FileBasedProjectContentProvider fileBasedContentProvider = (FileBasedProjectContentProvider) element; return getFileBasedContentLabel(fileBasedContentProvider.getFileBasedContent()); } if (element instanceof IProjectContentEntry) { return getFileBasedContentLabel((IProjectContentEntry) element); } if (element instanceof ProjectPath) { ProjectPath projectPath = (ProjectPath) element; return projectPath.asString(); } return String.valueOf(element); } protected String getFileBasedContentLabel(IProjectContentEntry fileBasedContent) { return String.format("%s [%s]", fileBasedContent.getName(), fileBasedContent.getVersion()); } /** * @param element * @return */ private Image getImageForPath(ProjectPath projectPath) { boolean isFolder; VariablePath path = projectPath.getPath(); try { isFolder = path.getAsFile().isDirectory(); } catch (CoreException ex) { return BundleMakerImages.UNKNOWN_OBJECT.getImage(); } if (isFolder) { if (projectPath.isBinary()) { return BundleMakerImages.BINARY_FOLDER.getImage(); } return BundleMakerImages.SOURCE_FOLDER.getImage(); } if (projectPath.isBinary()) { return BundleMakerImages.BINARY_ARCHIVE.getImage(); } return BundleMakerImages.SOURCE_ARCHIVE.getImage(); } }