From 40b85df6007cebbc5586f936c4fd693009e15dcd Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Mon, 9 Apr 2018 09:04:44 +0200 Subject: [PATCH] Improve E4 support --- demo/cms-e4-rap.properties | 4 +- org.argeo.cms.e4.rap/.project | 5 ++ .../OSGI-INF/cms-admin-rap.xml | 2 +- .../org/argeo/cms/e4/rap/CmsE4AdminApp.java | 4 +- .../cms-devops.e4xmi} | 10 ++- .../argeo/cms/e4/files/NodeFsBrowserView.java | 64 +++++++++++++++++++ .../ui/fs/FileIconNameLabelProvider.java | 20 ++++++ .../argeo/eclipse/ui/fs/FsTableViewer.java | 26 ++++++-- 8 files changed, 125 insertions(+), 10 deletions(-) rename org.argeo.cms.e4/{cms-admin.e4xmi => e4xmi/cms-devops.e4xmi} (89%) create mode 100644 org.argeo.cms.e4/src/org/argeo/cms/e4/files/NodeFsBrowserView.java diff --git a/demo/cms-e4-rap.properties b/demo/cms-e4-rap.properties index e910b7a70..f9158f0a3 100644 --- a/demo/cms-e4-rap.properties +++ b/demo/cms-e4-rap.properties @@ -18,8 +18,8 @@ org.osgi.service.http.port=7070 #org.osgi.service.http.port.secure=7073 # Logging -#log4j.configuration=file:../../log4j.properties -log4j.configuration=file:log4j.properties +log4j.configuration=file:../../log4j.properties +#log4j.configuration=file:log4j.properties # DON'T CHANGE BELOW org.eclipse.equinox.http.jetty.autostart=false diff --git a/org.argeo.cms.e4.rap/.project b/org.argeo.cms.e4.rap/.project index 94d2f42b9..40c9e013f 100644 --- a/org.argeo.cms.e4.rap/.project +++ b/org.argeo.cms.e4.rap/.project @@ -20,6 +20,11 @@ + + org.eclipse.pde.ds.core.builder + + + org.eclipse.pde.PluginNature diff --git a/org.argeo.cms.e4.rap/OSGI-INF/cms-admin-rap.xml b/org.argeo.cms.e4.rap/OSGI-INF/cms-admin-rap.xml index e54d613dc..1f688baa6 100644 --- a/org.argeo.cms.e4.rap/OSGI-INF/cms-admin-rap.xml +++ b/org.argeo.cms.e4.rap/OSGI-INF/cms-admin-rap.xml @@ -3,6 +3,6 @@ - + diff --git a/org.argeo.cms.e4.rap/src/org/argeo/cms/e4/rap/CmsE4AdminApp.java b/org.argeo.cms.e4.rap/src/org/argeo/cms/e4/rap/CmsE4AdminApp.java index 4f1b20a3d..4921680d7 100644 --- a/org.argeo.cms.e4.rap/src/org/argeo/cms/e4/rap/CmsE4AdminApp.java +++ b/org.argeo.cms.e4.rap/src/org/argeo/cms/e4/rap/CmsE4AdminApp.java @@ -3,8 +3,8 @@ package org.argeo.cms.e4.rap; public class CmsE4AdminApp extends AbstractRapE4App { public CmsE4AdminApp() { setPageTitle("CMS Admin"); - setE4Xmi("org.argeo.cms.e4/cms-admin.e4xmi"); - setPath("/admin"); + setE4Xmi("org.argeo.cms.e4/e4xmi/cms-devops.e4xmi"); + setPath("/devops"); } } diff --git a/org.argeo.cms.e4/cms-admin.e4xmi b/org.argeo.cms.e4/e4xmi/cms-devops.e4xmi similarity index 89% rename from org.argeo.cms.e4/cms-admin.e4xmi rename to org.argeo.cms.e4/e4xmi/cms-devops.e4xmi index 90e9e8bbc..adb82b64d 100644 --- a/org.argeo.cms.e4/cms-admin.e4xmi +++ b/org.argeo.cms.e4/e4xmi/cms-devops.e4xmi @@ -3,7 +3,7 @@ shellMaximized - + @@ -28,6 +28,14 @@ + + + + + + + + diff --git a/org.argeo.cms.e4/src/org/argeo/cms/e4/files/NodeFsBrowserView.java b/org.argeo.cms.e4/src/org/argeo/cms/e4/files/NodeFsBrowserView.java new file mode 100644 index 000000000..378e4b510 --- /dev/null +++ b/org.argeo.cms.e4/src/org/argeo/cms/e4/files/NodeFsBrowserView.java @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2007-2012 Argeo GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.argeo.cms.e4.files; + +import java.net.URI; +import java.nio.file.FileSystem; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.spi.FileSystemProvider; + +import javax.annotation.PostConstruct; +import javax.inject.Inject; + +import org.argeo.cms.CmsException; +import org.argeo.eclipse.ui.fs.AdvancedFsBrowser; +import org.argeo.eclipse.ui.fs.SimpleFsBrowser; +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.Composite; + +/** Browse the node file system. */ +public class NodeFsBrowserView { + // public final static String ID = WorkbenchUiPlugin.PLUGIN_ID + + // ".nodeFsBrowserView"; + + @Inject + FileSystemProvider nodeFileSystemProvider; + + @PostConstruct + public void createPartControl(Composite parent) { + try { + //URI uri = new URI("node://root:demo@localhost:7070/"); + URI uri = new URI("node:///"); + FileSystem fileSystem = nodeFileSystemProvider.getFileSystem(uri); + if (fileSystem == null) + fileSystem = nodeFileSystemProvider.newFileSystem(uri, null); + Path nodePath = fileSystem.getPath("/"); + + Path localPath = Paths.get(System.getProperty("user.home")); + + SimpleFsBrowser browser = new SimpleFsBrowser(parent, SWT.NO_FOCUS); + browser.setInput(nodePath, localPath); +// AdvancedFsBrowser browser = new AdvancedFsBrowser(); +// browser.createUi(parent, localPath); + } catch (Exception e) { + throw new CmsException("Cannot open file system browser", e); + } + } + + public void setFocus() { + } +} diff --git a/org.argeo.eclipse.ui/src/org/argeo/eclipse/ui/fs/FileIconNameLabelProvider.java b/org.argeo.eclipse.ui/src/org/argeo/eclipse/ui/fs/FileIconNameLabelProvider.java index cdf3bbc68..d3fc1c903 100644 --- a/org.argeo.eclipse.ui/src/org/argeo/eclipse/ui/fs/FileIconNameLabelProvider.java +++ b/org.argeo.eclipse.ui/src/org/argeo/eclipse/ui/fs/FileIconNameLabelProvider.java @@ -39,6 +39,8 @@ public class FileIconNameLabelProvider extends ColumnLabelProvider { return "[No name]"; else return name.toString(); + } else if (element instanceof ParentDir) { + return ".."; } return null; } @@ -58,7 +60,25 @@ public class FileIconNameLabelProvider extends ColumnLabelProvider { // else // return // PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_FILE); + } else if (element instanceof ParentDir) { + return folderIcon; } return null; } + + @Override + public String getToolTipText(Object element) { + if (element instanceof Path) { + Path curr = ((Path) element); + Path name = curr.getFileName(); + if (name == null) + return "[No name]"; + else + return name.toAbsolutePath().toString(); + } else if (element instanceof ParentDir) { + return ((ParentDir) element).getPath().toAbsolutePath().toString(); + } + return null; + } + } \ No newline at end of file diff --git a/org.argeo.eclipse.ui/src/org/argeo/eclipse/ui/fs/FsTableViewer.java b/org.argeo.eclipse.ui/src/org/argeo/eclipse/ui/fs/FsTableViewer.java index 79de1b343..47258f718 100644 --- a/org.argeo.eclipse.ui/src/org/argeo/eclipse/ui/fs/FsTableViewer.java +++ b/org.argeo.eclipse.ui/src/org/argeo/eclipse/ui/fs/FsTableViewer.java @@ -1,5 +1,6 @@ package org.argeo.eclipse.ui.fs; +import java.nio.file.Files; import java.nio.file.Path; import java.util.List; @@ -71,9 +72,25 @@ public class FsTableViewer extends TableViewer { } public void setInput(Path dir, String filter) { - Object[] rows = FsUiUtils.getChildren(dir, filter, showHiddenItems, folderFirst, orderProperty, reverseOrder); - this.setInput(rows); - int length = rows == null ? 0 : rows.length; + Path[] rows = FsUiUtils.getChildren(dir, filter, showHiddenItems, folderFirst, orderProperty, reverseOrder); + if (rows == null) { + this.setInput(null); + this.setItemCount(0); + return; + } + boolean isRoot = dir.getRoot().equals(dir); + final Object[] res; + if (isRoot) + res = rows; + else { + res = new Object[rows.length + 1]; + res[0] = new ParentDir(dir.getParent()); + for (int i = 1; i < res.length; i++) { + res[i] = rows[i - 1]; + } + } + this.setInput(res); + int length = res.length; this.setItemCount(length); this.refresh(); } @@ -100,7 +117,8 @@ public class FsTableViewer extends TableViewer { } public void updateElement(int index) { - FsTableViewer.this.replace(elements[index], index); + if (index < elements.length) + FsTableViewer.this.replace(elements[index], index); } } } -- 2.30.2