/*
* Copyright (c) 2013 Data Harmonisation Panel
*
* All rights reserved. This program and the accompanying materials are made
* available under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this distribution. If not, see <http://www.gnu.org/licenses/>.
*
* Contributors:
* Data Harmonisation Panel <http://www.dhpanel.eu>
*/
package eu.esdihumboldt.hale.ui.views.resources;
import java.util.Collections;
import java.util.List;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.PlatformUI;
import eu.esdihumboldt.hale.common.core.io.project.ProjectInfo;
import eu.esdihumboldt.hale.common.core.io.project.model.Resource;
import eu.esdihumboldt.hale.ui.service.project.ProjectService;
import eu.esdihumboldt.hale.ui.service.project.ProjectServiceAdapter;
import eu.esdihumboldt.hale.ui.util.viewer.ViewerMenu;
import eu.esdihumboldt.hale.ui.views.properties.PropertiesViewPart;
import eu.esdihumboldt.hale.ui.views.resources.internal.ProjectToken;
import eu.esdihumboldt.hale.ui.views.resources.internal.ResourcesContentProvider;
import eu.esdihumboldt.hale.ui.views.resources.internal.ResourcesLabelProvider;
/**
* View displaying project resources.
*
* @author Simon Templer
*/
public class ResourcesView extends PropertiesViewPart {
private TreeViewer viewer;
private ProjectServiceAdapter projectServiceListener;
@Override
protected void createViewControl(Composite parent) {
viewer = new TreeViewer(parent);
viewer.setContentProvider(new ResourcesContentProvider());
viewer.setLabelProvider(new ResourcesLabelProvider());
ProjectService ps = PlatformUI.getWorkbench().getService(ProjectService.class);
ps.addListener(projectServiceListener = new ProjectServiceAdapter() {
@Override
public void resourceAdded(String actionId, Resource resource) {
updateInDisplayThread();
}
@Override
public void resourcesRemoved(String actionId, List<Resource> resources) {
updateInDisplayThread();
}
@Override
public void afterLoad(ProjectService projectService) {
updateInDisplayThread();
}
@Override
public void projectInfoChanged(ProjectInfo info) {
PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() {
@Override
public void run() {
viewer.update(ProjectToken.TOKEN, null);
}
});
}
});
viewer.setUseHashlookup(true);
viewer.setAutoExpandLevel(3);
update();
new ViewerMenu(getSite(), viewer);
getSite().setSelectionProvider(viewer);
}
/**
* Update the resource viewer input in the display thread.
*/
protected void updateInDisplayThread() {
Display display = PlatformUI.getWorkbench().getDisplay();
display.syncExec(new Runnable() {
@Override
public void run() {
update();
}
});
}
/**
* Update the resource viewer input.
*/
protected void update() {
ProjectService ps = PlatformUI.getWorkbench().getService(ProjectService.class);
if (ps != null) {
viewer.setInput(ps.getResources());
}
else {
viewer.setInput(Collections.EMPTY_LIST);
}
}
@Override
public void setFocus() {
viewer.getTree().setFocus();
}
@Override
public void dispose() {
ProjectService ps = PlatformUI.getWorkbench().getService(ProjectService.class);
if (projectServiceListener != null) {
ps.removeListener(projectServiceListener);
}
super.dispose();
}
}