/* * Created on Jul 27, 2004 */ package com.realpersist.gef.editor.wizard; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.io.ObjectOutputStream; import org.eclipse.core.resources.IFile; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; 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.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PartInitException; import org.eclipse.ui.dialogs.WizardNewFileCreationPage; import org.eclipse.ui.ide.IDE; import com.realpersist.gef.editor.ContentCreator; import com.realpersist.gef.model.Schema; /** * Page implementated to create new schema editor diagram * @author Phil Zoio */ public class SchemaDiagramWizardPage extends WizardNewFileCreationPage implements SelectionListener { private IWorkbench workbench; private Button emptyDiagramButton = null; private Button preCreatedButtonDiagram = null; private boolean emptyModel = true; public SchemaDiagramWizardPage(IWorkbench aWorkbench, IStructuredSelection selection) { super("schemaWizardPage", selection); this.setTitle("Create Database Schema Diagram"); this.setDescription("Create the schema database diagram GEF demo"); this.workbench = aWorkbench; } public void createControl(Composite parent) { super.createControl(parent); setFileName("change_me.schema"); Composite composite = (Composite) getControl(); // initial model selection group Group group = new Group(composite, SWT.NONE); group.setLayout(new GridLayout()); group.setText("Select Schema Model"); group.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); // initial model selection checkboxes emptyDiagramButton = new Button(group, SWT.RADIO); emptyDiagramButton.setText("Empty Schema Model"); emptyDiagramButton.addSelectionListener(this); emptyDiagramButton.setSelection(true); preCreatedButtonDiagram = new Button(group, SWT.RADIO); preCreatedButtonDiagram.setText("Pre-created Sample Schema Model"); preCreatedButtonDiagram.addSelectionListener(this); new Label(composite, SWT.NONE); setPageComplete(validatePage()); } protected InputStream getInitialContents() { Schema ld = new Schema(getFileName()); if (!emptyModel) ld = new ContentCreator().getContent(); ByteArrayInputStream bais = null; try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos); oos.writeObject(ld); oos.flush(); oos.close(); baos.close(); bais = new ByteArrayInputStream(baos.toByteArray()); bais.close(); } catch (Exception e) { e.printStackTrace(); } return bais; } protected boolean validatePage() { boolean result = super.validatePage(); if (result) { String fileName = getFileName(); if (!fileName.endsWith(".schema")) { result = false; setErrorMessage("File name must end in .schema"); } } return result; } public boolean finish() { IFile newFile = createNewFile(); if (newFile == null) return false; // Since the file resource was created fine, open it for editing // iff requested by the user try { IWorkbenchWindow dwindow = workbench.getActiveWorkbenchWindow(); IWorkbenchPage page = dwindow.getActivePage(); if (page != null) IDE.openEditor(page, newFile, true); } catch (PartInitException e) { e.printStackTrace(); return false; } return true; } /** * Modify the flag indicating whether to use the pre-populated or empty schema based on the user selection */ public void widgetSelected(SelectionEvent e) { if (e.getSource() == emptyDiagramButton) { emptyModel = true; } else if (e.getSource() == preCreatedButtonDiagram) { emptyModel = false; } } /** * No implementation */ public void widgetDefaultSelected(SelectionEvent e) { } }