initial quantum version
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.quantum.sql / src / com / quantum / wizards / ExportBookmarkWizardPage.java
diff --git a/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/wizards/ExportBookmarkWizardPage.java b/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/wizards/ExportBookmarkWizardPage.java
new file mode 100644 (file)
index 0000000..3feed8f
--- /dev/null
@@ -0,0 +1,283 @@
+package com.quantum.wizards;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+
+import javax.xml.parsers.ParserConfigurationException;
+
+import com.quantum.Messages;
+import com.quantum.QuantumPlugin;
+import com.quantum.model.Bookmark;
+import com.quantum.model.BookmarkCollection;
+import com.quantum.model.xml.ModelToXMLConverter;
+import com.quantum.ui.dialog.ExceptionDisplayDialog;
+import com.quantum.util.xml.XMLHelper;
+
+import org.eclipse.jface.viewers.CheckStateChangedEvent;
+import org.eclipse.jface.viewers.CheckboxTreeViewer;
+import org.eclipse.jface.viewers.ICheckStateListener;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+import org.w3c.dom.Document;
+
+/**
+ * @author BC
+ */
+public class ExportBookmarkWizardPage extends WizardPage {
+    
+    public class ContentProvider implements ITreeContentProvider {
+
+        public Object[] getChildren(Object parentElement) {
+            if (parentElement instanceof BookmarkCollection) {
+                return ((BookmarkCollection) parentElement).getBookmarks();
+            } else {
+                return new Object[0];
+            }
+        }
+        public Object getParent(Object element) {
+            if (element instanceof Bookmark) {
+                return BookmarkCollection.getInstance();
+            } else {
+                return null;
+            }
+        }
+        public boolean hasChildren(Object element) {
+            if (element instanceof BookmarkCollection) {
+                return ((BookmarkCollection) element).getBookmarks().length > 0;
+            } else {
+                return false;
+            }
+        }
+        public Object[] getElements(Object inputElement) {
+            return getChildren(inputElement);
+        }
+        public void dispose() {
+        }
+        public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+        }
+    }
+    
+    public class LabelProvider implements ILabelProvider {
+
+        public Image getImage(Object element) {
+            if (element instanceof Bookmark) {
+                return QuantumPlugin.getImage("bookmarks.gif");
+            } else {
+                return null;
+            }
+        }
+
+        public String getText(Object element) {
+            
+            if (element instanceof Bookmark) {
+                return ((Bookmark) element).getName();
+            } else {
+                return element.toString();
+            }
+        }
+
+        public void addListener(ILabelProviderListener listener) {
+        }
+
+        public void dispose() {
+        }
+
+        public boolean isLabelProperty(Object element, String property) {
+            return false;
+        }
+
+        public void removeListener(ILabelProviderListener listener) {
+        }
+    }
+    
+    private CheckboxTreeViewer treeViewer;
+    private Text fileNameText;
+    
+    private boolean sourceIsSelected = false;
+    private boolean destinationIsSelected = false;
+
+    /**
+     * @param pageName
+     */
+    protected ExportBookmarkWizardPage() {
+        super("page1");
+        setTitle(Messages.getString(getClass(), "title"));
+    }
+
+    public void createControl(Composite pageContainer) {
+        this.sourceIsSelected = false;
+        this.destinationIsSelected = false;
+        
+        Composite composite = new Composite(pageContainer, SWT.NULL);
+        composite.setLayout(new GridLayout());
+        composite.setLayoutData(
+            new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL));
+
+        this.treeViewer = new CheckboxTreeViewer(composite, 
+            SWT.CHECK | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
+        this.treeViewer.setContentProvider(new ContentProvider());
+        this.treeViewer.setLabelProvider(new LabelProvider());
+        this.treeViewer.setInput(BookmarkCollection.getInstance());
+        selectAll();
+        
+        this.treeViewer.addCheckStateListener(new ICheckStateListener() {
+            public void checkStateChanged(CheckStateChangedEvent event) {
+                setSourceIsSelected(
+                    ExportBookmarkWizardPage.this.treeViewer.getCheckedElements().length > 0);
+            }
+        });
+
+        GridData data = new GridData();
+        data.horizontalAlignment = GridData.HORIZONTAL_ALIGN_FILL;
+        data.verticalAlignment = GridData.VERTICAL_ALIGN_BEGINNING;
+        data.grabExcessHorizontalSpace = true;
+        data.heightHint = 200;
+        data.widthHint = 400;
+        this.treeViewer.getControl().setLayoutData(data);
+
+        Composite buttons = new Composite(composite, SWT.NULL);
+        buttons.setLayout(new GridLayout(2, false));
+        buttons.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING));
+        
+        Button selectAll = new Button(buttons, SWT.NONE);
+        selectAll.setText(Messages.getString(getClass(), "selectAll"));
+        selectAll.addSelectionListener(new SelectionAdapter() {
+            public void widgetSelected(SelectionEvent event) {
+                selectAll();
+            }
+        });
+
+        Button deselectAll = new Button(buttons, SWT.NONE);
+        deselectAll.setText(Messages.getString(getClass(), "deselectAll"));
+        deselectAll.addSelectionListener(new SelectionAdapter() {
+            public void widgetSelected(SelectionEvent event) {
+                deselectAll();
+            }
+        });
+        
+        createDestinationArea(composite);
+
+        setControl(composite);
+    }
+
+    private void createDestinationArea(Composite composite) {
+        GridData data;
+        Composite fileArea = new Composite(composite, SWT.NULL);
+        fileArea.setLayout(new GridLayout(3, false));
+        fileArea.setLayoutData(
+            new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL));
+        Label label = new Label(fileArea, SWT.NONE);
+        label.setText("File name:");
+        
+        this.fileNameText = new Text(fileArea, SWT.BORDER);
+        data = new GridData();
+        data.horizontalAlignment = GridData.HORIZONTAL_ALIGN_FILL;
+        data.widthHint = 300;
+        this.fileNameText.setLayoutData(data);
+        this.fileNameText.addModifyListener(new ModifyListener() {
+            public void modifyText(ModifyEvent event) {
+                String text = ((Text) event.getSource()).getText();
+                setDestinationIsSelected(text != null && text.trim().length() > 0);
+            }
+        });
+        
+        Button button = new Button(fileArea, SWT.NONE);
+        button.setText("Browse");
+        button.addSelectionListener(new SelectionAdapter() {
+            public void widgetSelected(SelectionEvent event) {
+                promptForFile();
+            }
+        });
+    }
+    
+    private void setSourceIsSelected(boolean selected) {
+        this.sourceIsSelected = selected;
+        setPageComplete(selected & this.destinationIsSelected);
+    }
+    
+    private void setDestinationIsSelected(boolean selected) {
+        this.destinationIsSelected = selected;
+        setPageComplete(selected & this.sourceIsSelected);
+    }
+    
+    protected void promptForFile() {
+    
+        FileDialog dialog = new FileDialog(getShell(), SWT.SAVE);
+        dialog.setFilterExtensions(new String[] { "xml" });
+        dialog.setFilterNames(new String[] { "XML Files (*.xml)"});
+        String filename = dialog.open();
+        if (filename != null) {
+            this.fileNameText.setText(filename);
+        }
+    }
+    protected void deselectAll() {
+        this.treeViewer.setCheckedElements(new Object[0]);
+        setSourceIsSelected(false);
+    }
+
+    protected void selectAll() {
+        Bookmark[] bookmarks = BookmarkCollection.getInstance().getBookmarks();
+        this.treeViewer.setCheckedElements(bookmarks);
+        setSourceIsSelected(bookmarks.length > 0);
+    }
+    
+    public boolean finish() {
+        
+        String fileName = this.fileNameText.getText();
+        File file = new File(fileName);
+        if (file.exists()) {
+            // prompt for overwrite
+        } else if (!file.getParentFile().exists()) {
+            // do what?
+        }
+        
+        try {
+            Object[] bookmarks = this.treeViewer.getCheckedElements();
+            Document document = XMLHelper.createEmptyDocument();
+            ModelToXMLConverter.getInstance().createRoot(document);
+                
+            for (int i = 0, length = (bookmarks == null) ? 0 : bookmarks.length;
+                i < length;
+                i++) {
+                ModelToXMLConverter.getInstance().convert(
+                    document.getDocumentElement(), (Bookmark) bookmarks[i]);
+            }
+
+            FileWriter writer = new FileWriter(file);
+            try {
+                XMLHelper.write(writer, document);
+            } finally {
+                writer.close();
+            }
+        } catch (IOException e) {
+            ExceptionDisplayDialog.openError(getShell(), 
+                Messages.getString(getClass(), "error.IOException.title"), 
+                Messages.getString(getClass(), "error.IOException.message", 
+                    new Object[] { fileName }), e);
+        } catch (ParserConfigurationException e) {
+            ExceptionDisplayDialog.openError(getShell(), 
+                Messages.getString(getClass(), "error.IOException.title"), 
+                Messages.getString(getClass(), "error.IOException.message", 
+                    new Object[] { fileName }), e);
+        }
+        
+        return true;
+    }
+}