blob: e340a7a946214d8a671e5a59986c8a5c25c3a1a9 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2014 Bosch Software Innovations GmbH and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and Eclipse Distribution License v1.0 which accompany this distribution.
*
* The Eclipse Public License is available at
* http://www.eclipse.org/legal/epl-v10.html
* The Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* Bosch Software Innovations GmbH - Please refer to git log
*
*******************************************************************************/
package org.eclipse.vorto.fbeditor.ui.internal;
import java.io.File;
import java.net.URL;
import org.eclipse.core.filesystem.EFS;
import org.eclipse.core.resources.IResourceChangeEvent;
import org.eclipse.core.resources.IResourceChangeListener;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.ColumnViewerToolTipSupport;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.ide.IDE;
import org.eclipse.ui.part.ViewPart;
import org.eclipse.vorto.api.common.project.IoTModelProject;
import org.eclipse.vorto.api.ui.changeevent.ProjectChangeEvent;
import org.eclipse.vorto.api.ui.changeevent.ProjectEventListenerRegistry;
import org.eclipse.vorto.fbeditor.ui.internal.treeview.FBContentProvider;
import org.eclipse.vorto.fbeditor.ui.internal.treeview.FBLabelProvider;
public class VortoTreeViewPart extends ViewPart {
protected TreeViewer treeViewer;
protected FBContentProvider fbContentProvider;
protected FBLabelProvider labelProvider;
public VortoTreeViewPart() {
}
public void createPartControl(Composite parent) {
// Create the tree viewer as a child of the composite parent
treeViewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL
| SWT.V_SCROLL);
this.fbContentProvider = new FBContentProvider();
ProjectEventListenerRegistry.getInstance().add(fbContentProvider);
treeViewer.setContentProvider(fbContentProvider);
labelProvider = new FBLabelProvider();
treeViewer.setLabelProvider(labelProvider);
treeViewer.setUseHashlookup(true);
hookListeners();
treeViewer.setInput("Root");
ColumnViewerToolTipSupport.enableFor(treeViewer);
getSite().setSelectionProvider(treeViewer);
initContextMenu();
}
private void initContextMenu() {
// initalize the context menu
MenuManager menuMgr = new MenuManager("#PopupMenu"); //$NON-NLS-1$
Menu menu = menuMgr.createContextMenu(this.treeViewer.getTree());
this.treeViewer.getTree().setMenu(menu);
getSite().registerContextMenu(menuMgr, this.treeViewer);
}
protected void hookListeners() {
addSelectionChangedEventListener();
addWorkspaceChangeEventListenr();
}
public ImageDescriptor getImage(String imageFileName) {
URL url;
try {
url = new URL(
"platform:/plugin/org.eclipse.vorto.fbeditor.ui/icons/"
+ imageFileName);
return ImageDescriptor.createFromURL(url);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
protected void addWorkspaceChangeEventListenr() {
IWorkspace workspace = ResourcesPlugin.getWorkspace();
/**
* @@TODo Here it seems to fire event for every resource changed, thus
* creation of one project fire the event multiple times we
* should filter it to improve performance
*/
IResourceChangeListener rcl = new IResourceChangeListener() {
public void resourceChanged(IResourceChangeEvent event) {
try {
if (event.getDelta() == null
|| event.getDelta().getResource() == null) {
return;
}
ProjectEventListenerRegistry.getInstance().fire(
new ProjectChangeEvent());
} catch (Exception e) {
e.printStackTrace();
}
}
};
workspace.addResourceChangeListener(rcl);
}
protected void addSelectionChangedEventListener() {
treeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
// if the selection is empty clear the label
if (event.getSelection().isEmpty()) {
// text.setText("");
return;
}
if (event.getSelection() instanceof IStructuredSelection) {
IStructuredSelection selection = (IStructuredSelection) event
.getSelection();
if (selection.size() > 0) {
if (!(selection.getFirstElement() instanceof IoTModelProject)) {
return;
}
IoTModelProject fbDesignProject = (IoTModelProject) selection
.getFirstElement();
openFileInEditor(fbDesignProject);
}
}
}
});
}
private void openFileInEditor(IoTModelProject project) {
File fileToOpen = project.getFbModelFile();
if (fileToOpen.exists() && fileToOpen.isFile()) {
org.eclipse.core.filesystem.IFileStore fileStore = EFS
.getLocalFileSystem().getStore(fileToOpen.toURI());
org.eclipse.ui.IWorkbenchPage page = PlatformUI.getWorkbench()
.getActiveWorkbenchWindow().getActivePage();
try {
IDE.openEditorOnFileStore(page, fileStore);
} catch (org.eclipse.ui.PartInitException e) {
e.printStackTrace();
}
} else {
System.out.println("File not found for: "
+ project.getFbModelFile());
}
}
@Override
public void setFocus() {
}
}