/*******************************************************************************
* Copyright (c) 2003, 2005 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.gef.examples.flow.ui;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.ObjectOutputStream;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.core.resources.IFile;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.dialogs.WizardNewFileCreationPage;
import org.eclipse.ui.ide.IDE;
import org.eclipse.gef.examples.flow.FlowPlugin;
import org.eclipse.gef.examples.flow.model.Activity;
import org.eclipse.gef.examples.flow.model.ActivityDiagram;
import org.eclipse.gef.examples.flow.model.ParallelActivity;
import org.eclipse.gef.examples.flow.model.SequentialActivity;
import org.eclipse.gef.examples.flow.model.Transition;
/**
* FlowWizardPage1
* @author Daniel Lee
*/
public class FlowWizardPage1 extends WizardNewFileCreationPage {
private IWorkbench workbench;
private static int exampleCount = 1;
public FlowWizardPage1(IWorkbench aWorkbench, IStructuredSelection selection) {
super("sampleFlowPage1", selection);
this.setTitle("Create Flow Example File");
this.setDescription("Create a new flow file resource");
this.setImageDescriptor(ImageDescriptor.createFromFile(FlowPlugin.class,"images/flowbanner.gif"));
this.workbench = aWorkbench;
}
/**
* @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
*/
public void createControl(Composite parent) {
super.createControl(parent);
this.setFileName("flowExample" + exampleCount + ".flow");
Composite composite = (Composite)getControl();
setPageComplete(validatePage());
}
private ActivityDiagram createWakeupModel() {
ActivityDiagram diagram = new ActivityDiagram();
SequentialActivity wakeup = new SequentialActivity();
Activity backToSleep = new Activity("Go back to sleep");
Activity turnOff = new Activity("Turn off alarm");
wakeup.setName("Wake up");
wakeup.addChild(new Activity("Hit snooze button"));
wakeup.addChild(backToSleep);
wakeup.addChild(turnOff);
wakeup.addChild(new Activity("Get out of bed"));
diagram.addChild(wakeup);
SequentialActivity bathroom = new SequentialActivity();
bathroom.addChild(new Activity("Brush teeth"));
bathroom.addChild(new Activity("Take shower"));
bathroom.addChild(new Activity("Comb hair"));
bathroom.setName("Bathroom activities");
diagram.addChild(bathroom);
ParallelActivity relaxation = new ParallelActivity();
relaxation.addChild(new Activity("Watch cartoons"));
relaxation.addChild(new Activity("Power Yoga"));
relaxation.setName("Morning relaxation ritual");
diagram.addChild(relaxation);
Activity sleep, alarm, alarm2, clothes, spare, no, yes, drive;
diagram.addChild(sleep = new Activity("Sleep....."));
diagram.addChild(alarm = new Activity("Alarm!!!"));
diagram.addChild(alarm2 = new Activity("Alarm!!!"));
diagram.addChild(clothes = new Activity("Put on clothes"));
diagram.addChild(spare = new Activity("Is there time to spare?"));
diagram.addChild(yes = new Activity("YES"));
diagram.addChild(no = new Activity("NO"));
diagram.addChild(drive = new Activity("Drive to work"));
new Transition(sleep, alarm);
new Transition(alarm, wakeup);
new Transition(backToSleep,alarm2);
new Transition(alarm2,turnOff);
new Transition(wakeup, bathroom);
new Transition(bathroom, clothes);
new Transition(clothes, spare);
new Transition(spare, yes);
new Transition(spare, no);
new Transition(yes, relaxation);
new Transition(no, drive);
new Transition(relaxation, drive);
return diagram;
}
protected InputStream getInitialContents() {
ActivityDiagram diag = createWakeupModel();
ByteArrayInputStream bais = null;
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(diag);
oos.flush();
oos.close();
baos.close();
bais = new ByteArrayInputStream(baos.toByteArray());
bais.close();
}
catch(Exception e) {
e.printStackTrace();
}
return bais;
}
public boolean finish() {
IFile newFile = createNewFile();
if (newFile == null)
return false; // ie.- creation was unsuccessful
// 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 (org.eclipse.ui.PartInitException e) {
e.printStackTrace();
return false;
}
exampleCount++;
return true;
}
}