1 package org
.argeo
.eclipse
.ui
.fs
;
3 import java
.nio
.file
.Files
;
4 import java
.nio
.file
.Path
;
5 import java
.util
.ArrayList
;
8 import org
.apache
.commons
.logging
.Log
;
9 import org
.apache
.commons
.logging
.LogFactory
;
10 import org
.argeo
.eclipse
.ui
.ColumnDefinition
;
11 import org
.argeo
.eclipse
.ui
.EclipseUiUtils
;
12 import org
.eclipse
.jface
.viewers
.DoubleClickEvent
;
13 import org
.eclipse
.jface
.viewers
.IDoubleClickListener
;
14 import org
.eclipse
.jface
.viewers
.ISelectionChangedListener
;
15 import org
.eclipse
.jface
.viewers
.IStructuredSelection
;
16 import org
.eclipse
.jface
.viewers
.SelectionChangedEvent
;
17 import org
.eclipse
.jface
.viewers
.Viewer
;
18 import org
.eclipse
.swt
.SWT
;
19 import org
.eclipse
.swt
.custom
.SashForm
;
20 import org
.eclipse
.swt
.events
.KeyEvent
;
21 import org
.eclipse
.swt
.events
.KeyListener
;
22 import org
.eclipse
.swt
.layout
.GridData
;
23 import org
.eclipse
.swt
.layout
.GridLayout
;
24 import org
.eclipse
.swt
.widgets
.Composite
;
25 import org
.eclipse
.swt
.widgets
.Label
;
26 import org
.eclipse
.swt
.widgets
.Table
;
29 * Experimental UI upon Java 7 nio files api: SashForm layout with bookmarks on
30 * the left hand side and a simple table on the right hand side.
32 public class SimpleFsBrowser
extends Composite
{
33 private final static Log log
= LogFactory
.getLog(SimpleFsBrowser
.class);
34 private static final long serialVersionUID
= -40347919096946585L;
36 private Path currSelected
;
37 private FsTableViewer bookmarksViewer
;
38 private FsTableViewer directoryDisplayViewer
;
40 public SimpleFsBrowser(Composite parent
, int style
) {
43 // parent.layout(true, true);
46 public Viewer
getViewer() {
47 return directoryDisplayViewer
;
50 private void createContent(Composite parent
) {
51 parent
.setLayout(EclipseUiUtils
.noSpaceGridLayout());
53 SashForm form
= new SashForm(parent
, SWT
.HORIZONTAL
);
54 Composite leftCmp
= new Composite(form
, SWT
.NONE
);
55 populateBookmarks(leftCmp
);
57 Composite rightCmp
= new Composite(form
, SWT
.BORDER
);
58 populateDisplay(rightCmp
);
59 form
.setLayoutData(EclipseUiUtils
.fillAll());
60 form
.setWeights(new int[] { 1, 3 });
63 public void setInput(Path
... paths
) {
64 bookmarksViewer
.setPathsInput(paths
);
65 bookmarksViewer
.getTable().getParent().layout(true, true);
68 private void populateBookmarks(final Composite parent
) {
69 // GridLayout layout = EclipseUiUtils.noSpaceGridLayout();
70 // layout.verticalSpacing = 5;
71 parent
.setLayout(new GridLayout());
73 ISelectionChangedListener selList
= new MySelectionChangedListener();
75 appendTitle(parent
, "My bookmarks");
76 bookmarksViewer
= new FsTableViewer(parent
, SWT
.MULTI
| SWT
.NO_SCROLL
);
77 Table table
= bookmarksViewer
.configureDefaultSingleColumnTable(500);
78 GridData gd
= EclipseUiUtils
.fillWidth();
79 gd
.horizontalIndent
= 10;
80 table
.setLayoutData(gd
);
81 bookmarksViewer
.addSelectionChangedListener(selList
);
83 appendTitle(parent
, "Jcr + File");
85 FsTableViewer jcrFilesViewers
= new FsTableViewer(parent
, SWT
.MULTI
| SWT
.NO_SCROLL
);
86 table
= jcrFilesViewers
.configureDefaultSingleColumnTable(500);
87 gd
= EclipseUiUtils
.fillWidth();
88 gd
.horizontalIndent
= 10;
89 table
.setLayoutData(gd
);
90 jcrFilesViewers
.addSelectionChangedListener(selList
);
92 // FileSystemProvider fsProvider = new JackrabbitMemoryFsProvider();
94 // Path testPath = fsProvider.getPath(new URI("jcr+memory:/"));
95 // jcrFilesViewers.setPathsInput(testPath);
96 // } catch (URISyntaxException e) {
97 // // TODO Auto-generated catch block
98 // e.printStackTrace();
102 private Label
appendTitle(Composite parent
, String value
) {
103 Label titleLbl
= new Label(parent
, SWT
.NONE
);
104 titleLbl
.setText(value
);
105 titleLbl
.setFont(EclipseUiUtils
.getBoldFont(parent
));
106 GridData gd
= EclipseUiUtils
.fillWidth();
107 gd
.horizontalIndent
= 5;
108 gd
.verticalIndent
= 5;
109 titleLbl
.setLayoutData(gd
);
113 private class MySelectionChangedListener
implements ISelectionChangedListener
{
115 public void selectionChanged(SelectionChangedEvent event
) {
116 IStructuredSelection selection
= (IStructuredSelection
) bookmarksViewer
.getSelection();
117 if (selection
.isEmpty())
120 Path newSelected
= (Path
) selection
.getFirstElement();
121 if (newSelected
.equals(currSelected
))
123 currSelected
= newSelected
;
124 directoryDisplayViewer
.setInput(currSelected
, "*");
129 private void populateDisplay(final Composite parent
) {
130 parent
.setLayout(EclipseUiUtils
.noSpaceGridLayout());
131 directoryDisplayViewer
= new FsTableViewer(parent
, SWT
.MULTI
);
132 List
<ColumnDefinition
> colDefs
= new ArrayList
<>();
133 colDefs
.add(new ColumnDefinition(new FileIconNameLabelProvider(), "Name", 200));
134 colDefs
.add(new ColumnDefinition(new NioFileLabelProvider(FsUiConstants
.PROPERTY_SIZE
), "Size", 100));
135 colDefs
.add(new ColumnDefinition(new NioFileLabelProvider(FsUiConstants
.PROPERTY_TYPE
), "Type", 250));
136 colDefs
.add(new ColumnDefinition(new NioFileLabelProvider(FsUiConstants
.PROPERTY_LAST_MODIFIED
),
137 "Last modified", 200));
138 Table table
= directoryDisplayViewer
.configureDefaultTable(colDefs
);
139 table
.setLayoutData(EclipseUiUtils
.fillAll());
141 table
.addKeyListener(new KeyListener() {
142 private static final long serialVersionUID
= -8083424284436715709L;
145 public void keyReleased(KeyEvent e
) {
149 public void keyPressed(KeyEvent e
) {
150 log
.debug("Key event received: " + e
.keyCode
);
151 IStructuredSelection selection
= (IStructuredSelection
) directoryDisplayViewer
.getSelection();
152 Path selected
= null;
153 if (!selection
.isEmpty())
154 selected
= ((Path
) selection
.getFirstElement());
155 if (e
.keyCode
== SWT
.CR
) {
156 if (!Files
.isDirectory(selected
))
158 if (selected
!= null) {
159 currSelected
= selected
;
160 directoryDisplayViewer
.setInput(currSelected
, "*");
162 } else if (e
.keyCode
== SWT
.BS
) {
163 currSelected
= currSelected
.getParent();
164 directoryDisplayViewer
.setInput(currSelected
, "*");
165 directoryDisplayViewer
.getTable().setFocus();
170 // directoryDisplayViewer.addDoubleClickListener(new IDoubleClickListener() {
172 // public void doubleClick(DoubleClickEvent event) {
173 // IStructuredSelection selection = (IStructuredSelection) directoryDisplayViewer.getSelection();
174 // Path selected = null;
175 // if (!selection.isEmpty()) {
176 // Object obj = selection.getFirstElement();
177 // if (obj instanceof Path)
178 // selected = (Path) obj;
179 // else if (obj instanceof ParentDir)
180 // selected = ((ParentDir) obj).getPath();
182 // if (selected != null) {
183 // if (!Files.isDirectory(selected))
185 // currSelected = selected;
186 // directoryDisplayViewer.setInput(currSelected, "*");
191 directoryDisplayViewer
.addDoubleClickListener(new IDoubleClickListener() {
193 public void doubleClick(DoubleClickEvent event
) {
194 IStructuredSelection selection
= (IStructuredSelection
) directoryDisplayViewer
.getSelection();
195 Path selected
= null;
196 if (!selection
.isEmpty()) {
197 Object obj
= selection
.getFirstElement();
198 if (obj
instanceof Path
)
199 selected
= (Path
) obj
;
200 else if (obj
instanceof ParentDir
)
201 selected
= ((ParentDir
) obj
).getPath();
203 if (selected
!= null) {
204 if (!Files
.isDirectory(selected
))
206 currSelected
= selected
;
207 directoryDisplayViewer
.setInput(currSelected
, "*");