/**
* Copyright 2010 The University of North Carolina at Chapel Hill
*
* 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 unc.lib.cdr.workbench.capture;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.regex.Pattern;
import org.eclipse.core.filesystem.EFS;
import org.eclipse.core.filesystem.IFileStore;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import unc.lib.cdr.workbench.originals.OriginalFileStore;
public class SelectFileExtensionsDialog extends TitleAreaDialog {
public SelectFileExtensionsDialog(Shell parentShell,
List<OriginalFileStore> tocapture) {
super(parentShell);
this.tocapture = tocapture;
}
@Override
public void create() {
super.create();
// Set the title
setTitle("Select File Extensions");
// Set the message
setMessage("Looking for file extensions..",
IMessageProvider.INFORMATION);
}
Set<String> fileExtensions = new HashSet<String>();
Set<String> selectedExtensions = new HashSet<String>();
List<OriginalFileStore> tocapture = null;
public Set<String> getSelectedFileExtensions() {
return this.selectedExtensions;
}
@Override
protected void okPressed() {
Object[] checked = this.extCheckBox.getCheckedElements();
for (Object o : checked) {
this.selectedExtensions.add((String) o);
}
super.okPressed();
}
CheckboxTableViewer extCheckBox = null;
@Override
protected Control createDialogArea(Composite parent) {
GridLayout layout = new GridLayout();
layout.numColumns = 1;
// layout.horizontalAlignment = GridData.FILL;
parent.setLayout(layout);
// The text fields will grow with the size of the dialog
GridData gridData = new GridData();
gridData.grabExcessHorizontalSpace = true;
gridData.horizontalAlignment = GridData.FILL;
Label label1 = new Label(parent, SWT.NONE);
label1.setText("Select file extensions to capture");
extCheckBox = CheckboxTableViewer.newCheckList(parent, SWT.BORDER);
extCheckBox.getTable().setLayoutData(new GridData(GridData.FILL_BOTH));
extCheckBox.setContentProvider(new ExtContentProvider());
extCheckBox.setSorter(new ViewerSorter());
Job findExtensions = new Job("Finding file extensions") {
IProgressMonitor mon = new NullProgressMonitor();
@Override
protected IStatus run(IProgressMonitor monitor) {
visit(tocapture.toArray(new IFileStore[] {}));
return Status.OK_STATUS;
}
private void visit(IFileStore[] ofs) {
for (final IFileStore s : ofs) {
boolean isdir = s.fetchInfo().isDirectory();
if (isdir) {
IFileStore[] children = null;
try {
children = s.childStores(EFS.NONE, mon);
} catch (CoreException e) {
}
if (children != null && children.length > 0) {
visit(children);
}
} else {
getShell().getDisplay().asyncExec(new Runnable() {
@Override
public void run() {
String ext = null;
String[] parts = s.getName().split(
Pattern.quote("."));
if (parts.length > 1) {
ext = parts[parts.length - 1];
final boolean added = fileExtensions
.add(ext);
if (added)
extCheckBox.add(ext);
}
}
});
}
}
}
};
findExtensions.setPriority(Job.INTERACTIVE);
findExtensions.schedule();
return parent;
}
public void addExtensionToTable(String ext) {
this.extCheckBox.add(ext);
}
class ExtContentProvider implements IStructuredContentProvider {
public Object[] getElements(Object arg0) {
return fileExtensions.toArray();
}
@Override
public void dispose() {
}
@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
}
}