/*******************************************************************************
* 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.List;
import org.bundlemaker.core.project.AnalyzeMode;
import org.bundlemaker.core.project.IProjectContentProvider;
import org.bundlemaker.core.project.IProjectDescriptionAwareBundleMakerProject;
import org.bundlemaker.core.project.VariablePath;
import org.bundlemaker.core.project.filecontent.FileBasedProjectContentProvider;
import org.bundlemaker.core.ui.projecteditor.filebased.edit.EditFileBasedContentProviderDialog;
import org.bundlemaker.core.ui.projecteditor.filebased.edit.EditProjectPathDialog;
import org.bundlemaker.core.ui.projecteditor.provider.IProjectContentProviderEditor;
import org.bundlemaker.core.ui.projecteditor.provider.IProjectContentProviderEditorElement;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Shell;
/**
* @author Nils Hartmann (nils@nilshartmann.net)
*/
public class FileBasedContentProviderEditor implements IProjectContentProviderEditor {
private final FileBasedContentRenderer _fileBasedContentRenderer = FileBasedContentRenderer.getInstance();
@Override
public boolean canHandle(IProjectContentProvider provider) {
return (provider instanceof FileBasedProjectContentProvider);
}
@Override
public Object getRootElement(IProjectDescriptionAwareBundleMakerProject project, IProjectContentProvider provider) {
return provider;
// FileBasedContentProvider fileBasedContentProvider = (FileBasedContentProvider) provider;
//
// return fileBasedContentProvider.getFileBasedContent();
}
@Override
public List<? extends Object> getChildren(IProjectDescriptionAwareBundleMakerProject project, IProjectContentProvider provider,
Object rootElement) {
return _fileBasedContentRenderer.getChildren(project, rootElement);
}
@Override
public AnalyzeMode getAnalyzeMode(Object element) {
return _fileBasedContentRenderer.getAnalyzeMode(element);
}
/*
* (non-Javadoc)
*
* @see
* org.bundlemaker.core.ui.projecteditor.provider.IProjectContentProviderEditor#canChangeAnalyzeMode(org.bundlemaker
* .core.projectdescription.IProjectContentProvider, java.lang.Object)
*/
@Override
public boolean canChangeAnalyzeMode(IProjectContentProvider projectContentProvider, Object element) {
return (element instanceof FileBasedProjectContentProvider);
}
/*
* (non-Javadoc)
*
* @see
* org.bundlemaker.core.ui.projecteditor.provider.IProjectContentProviderEditor#setAnalyzeMode(org.bundlemaker.core
* .projectdescription.IProjectContentProvider, java.lang.Object)
*/
@Override
public void setAnalyzeMode(IProjectContentProvider projectContentProvider, Object element, AnalyzeMode analyzeMode) {
((FileBasedProjectContentProvider) projectContentProvider).setAnalyzeMode(analyzeMode);
}
@Override
public Image getImage(Object element) {
return _fileBasedContentRenderer.getImage(element);
}
@Override
public String getLabel(Object element) {
return _fileBasedContentRenderer.getLabel(element);
}
/*
* (non-Javadoc)
*
* @see org.bundlemaker.core.ui.projecteditor.provider.IProjectContentProviderEditor#canEdit(java.lang.Object)
*/
@Override
public boolean canEdit(Object selectedObject) {
return selectedObject instanceof FileBasedProjectContentProvider || selectedObject instanceof ProjectPath;
}
/*
* (non-Javadoc)
*
* @see org.bundlemaker.core.ui.projecteditor.provider.IProjectContentProviderEditor#edit(org.bundlemaker.core.
* IBundleMakerProject, org.bundlemaker.core.projectdescription.IProjectContentProvider, java.lang.Object)
*/
@Override
public boolean edit(Shell shell, IProjectDescriptionAwareBundleMakerProject project, IProjectContentProvider provider, Object selectedObject) {
FileBasedProjectContentProvider fileBasedContentProvider = (FileBasedProjectContentProvider) provider;
if (selectedObject instanceof FileBasedProjectContentProvider) {
return editFileBasedContentProvider(shell, project, fileBasedContentProvider);
}
if (selectedObject instanceof ProjectPath) {
ProjectPath projectPath = (ProjectPath) selectedObject;
VariablePath path = projectPath.getPath();
EditProjectPathDialog editDialog = new EditProjectPathDialog(shell, projectPath);
if (editDialog.open() == Window.OK) {
// remove old path
fileBasedContentProvider.removeRootPath(path, projectPath.getContentType());
// add modified path
ProjectPath modifiedPath = editDialog.getEntry();
fileBasedContentProvider.addRootPath(modifiedPath.getPath(),
modifiedPath.getContentType());
return true;
}
}
return false;
}
/*
* (non-Javadoc)
*
* @see org.bundlemaker.core.ui.projecteditor.provider.IProjectContentProviderEditor#canRemove(java.lang.Object)
*/
@Override
public boolean canRemove(Object selectedObject) {
return selectedObject instanceof ProjectPath;
}
/*
* (non-Javadoc)
*
* @see
* org.bundlemaker.core.ui.projecteditor.provider.IProjectContentProviderEditor#remove(org.eclipse.swt.widgets.Shell,
* org.bundlemaker.core.IBundleMakerProject, org.bundlemaker.core.projectdescription.IProjectContentProvider,
* java.lang.Object)
*/
@Override
public void remove(Shell shell, IProjectDescriptionAwareBundleMakerProject project, IProjectContentProvider provider, Object selectedObject) {
FileBasedProjectContentProvider fileBasedContentProvider = (FileBasedProjectContentProvider) provider;
ProjectPath pathToRemove = (ProjectPath) selectedObject;
fileBasedContentProvider.removeRootPath(pathToRemove.getPath(), pathToRemove.getContentType());
}
/*
* (non-Javadoc)
*
* @see org.bundlemaker.core.ui.projecteditor.provider.IProjectContentProviderEditor#getContextMenuActions()
*/
@Override
public List<IAction> getContextMenuActions(IProjectDescriptionAwareBundleMakerProject project,
List<IProjectContentProviderEditorElement> selectedElements) {
// no entries for context menu
return null;
}
protected boolean editFileBasedContentProvider(Shell shell, IProjectDescriptionAwareBundleMakerProject project,
FileBasedProjectContentProvider fileBasedContentProvider) {
EditFileBasedContentProviderDialog page = new EditFileBasedContentProviderDialog(shell, fileBasedContentProvider);
if (page.open() != Window.OK) {
return false;
}
fileBasedContentProvider.setName(page.getName());
fileBasedContentProvider.setVersion(page.getVersion());
fileBasedContentProvider.setBinaryPaths(page.getBinaryPaths().toArray(new String[0]));
fileBasedContentProvider.setSourcePaths(page.getSourcePaths().toArray(new String[0]));
fileBasedContentProvider.setAnalyzeMode(getAnalyzeMode(page.isAnalyze(), page.isAnalyzeSources()));
return true;
}
public static AnalyzeMode getAnalyzeMode(boolean analyze, boolean analyzeSources) {
if (analyzeSources) {
return AnalyzeMode.BINARIES_AND_SOURCES;
}
if (analyze) {
return AnalyzeMode.BINARIES_ONLY;
}
return AnalyzeMode.DO_NOT_ANALYZE;
}
}