diff -r 000000000000 -r 522a326673b6 sysmodelmgr/com.symbian.smt.gui/src/com/symbian/smt/gui/exportwizards/ExportSelectionPage.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sysmodelmgr/com.symbian.smt.gui/src/com/symbian/smt/gui/exportwizards/ExportSelectionPage.java Thu Mar 11 19:08:43 2010 +0200 @@ -0,0 +1,217 @@ +// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + +package com.symbian.smt.gui.exportwizards; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.nio.channels.FileChannel; + +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IWorkspace; +import org.eclipse.core.resources.IWorkspaceRoot; +import org.eclipse.core.resources.ProjectScope; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.preferences.IScopeContext; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.viewers.IStructuredSelection; +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.events.SelectionListener; +import org.eclipse.swt.layout.FillLayout; +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.List; +import org.eclipse.swt.widgets.Text; + +import com.symbian.smt.gui.Activator; +import com.symbian.smt.gui.Logger; +import com.symbian.smt.gui.PersistentDataStore; +import com.symbian.smt.gui.nature.Nature; + +public class ExportSelectionPage extends WizardPage { + private Text text; + private List list; + + /** + * @param pageName + */ + protected ExportSelectionPage(IStructuredSelection selection) { + super("wizardPage"); + setTitle("System Model Manager Export Wizard"); + setDescription("Select the project you wish to export the diagram from, select the location to export to and then click finish"); + setPageComplete(false); + } + + private void canFinish() { + if (text.getText().trim().length() > 0 + && list.getSelectionIndex() != -1) { + setPageComplete(true); + } else { + setPageComplete(false); + } + } + + public boolean copyFile() { + IWorkspace workspace = ResourcesPlugin.getWorkspace(); + IWorkspaceRoot workspaceRoot = workspace.getRoot(); + + IProject project = workspaceRoot.getProject(list.getItem(list + .getSelectionIndex())); + + IScopeContext projectScope = new ProjectScope(project); + PersistentDataStore store = new PersistentDataStore(projectScope + .getNode(Activator.PLUGIN_ID)); + + IFile projectFile = project.getFile(store.getOutputFilename()); + + File toFile = new File(text.getText()); + + if (toFile.isDirectory()) { + MessageDialog.openError(getShell(), "Error", toFile.toString() + + " is a directory"); + Logger.log(toFile.toString() + " is a directory"); + return false; + } + + if (!projectFile.exists()) { + MessageDialog.openError(getShell(), "Error", "The project " + + list.getItem(list.getSelectionIndex()) + + " does not contain a System Model Diagram"); + return false; + } + + if (toFile.exists()) { + if (!MessageDialog.openConfirm(getShell(), "Overwrite?", + "Do you wish to overwrite the file " + toFile.toString() + + "?")) { + return false; + } + } + + try { + FileChannel in = new FileInputStream(projectFile.getRawLocation() + .toOSString()).getChannel(); + FileChannel out = new FileOutputStream(text.getText()).getChannel(); + + try { + in.transferTo(0, in.size(), out); + in.close(); + out.close(); + } catch (IOException e) { + MessageDialog.openError(getShell(), "Error", e.getMessage()); + Logger.log(e.getMessage(), e); + return false; + } + + } catch (FileNotFoundException e) { + MessageDialog.openError(getShell(), "Error", e.getMessage()); + Logger.log(e.getMessage(), e); + return false; + } + + return true; + } + + /* + * (non-Javadoc) + * + * @see + * org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets + * .Composite) + */ + public void createControl(Composite parent) { + Composite container = new Composite(parent, SWT.NULL); + container.setLayout(new FillLayout(SWT.VERTICAL)); + + setControl(container); + + final Composite composite = new Composite(container, SWT.NONE); + final GridLayout gridLayout = new GridLayout(); + gridLayout.numColumns = 2; + composite.setLayout(gridLayout); + + list = new List(composite, SWT.BORDER); + final GridData gd_list = new GridData(SWT.FILL, SWT.FILL, true, true, + 2, 1); + list.setLayoutData(gd_list); + list.addSelectionListener(new SelectionListener() { + public void widgetDefaultSelected(SelectionEvent e) { + } + + public void widgetSelected(SelectionEvent e) { + canFinish(); + } + }); + + IWorkspace workspace = ResourcesPlugin.getWorkspace(); + IWorkspaceRoot workspaceRoot = workspace.getRoot(); + + for (IProject project : workspaceRoot.getProjects()) { + if (project.isOpen()) { + try { + if (project.hasNature(Nature.ID)) { + list.add(project.getName()); + } + } catch (CoreException e) { + Logger.log(e.getMessage(), e); + MessageDialog + .openError(getShell(), "Error", e.getMessage()); + } + } + } + + final Button browseButton = new Button(composite, SWT.NONE); + browseButton.setText("Browse"); + browseButton.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + // Create and open a file window + FileDialog dialog = new FileDialog(getShell(), SWT.SAVE); + + String[] filterNames = new String[1]; + + filterNames[0] = "*.svg"; + + dialog.setFilterExtensions(filterNames); + + String filename = dialog.open(); + + if (filename != null) { + text.setText(filename); + } + } + }); + + text = new Text(composite, SWT.BORDER); + text.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); + text.addModifyListener(new ModifyListener() { + public void modifyText(ModifyEvent e) { + canFinish(); + } + }); + } +} \ No newline at end of file