blob: af8646cf6e6c91df5d392e8c546a549214184ca4 [file] [log] [blame]
package org.eclipse.graphiti.bot.pageobjects;
import static org.eclipse.swtbot.swt.finder.finders.UIThreadRunnable.syncExec;
import static org.junit.Assert.assertNotNull;
import org.eclipse.draw2d.IFigure;
import org.eclipse.emf.transaction.TransactionalEditingDomain;
import org.eclipse.gef.GraphicalEditPart;
import org.eclipse.gef.GraphicalViewer;
import org.eclipse.graphiti.bot.tests.AbstractGFTests;
import org.eclipse.graphiti.mm.algorithms.RoundedRectangle;
import org.eclipse.graphiti.mm.pictograms.ContainerShape;
import org.eclipse.graphiti.services.Graphiti;
import org.eclipse.graphiti.ui.editor.IDiagramContainerUI;
import org.eclipse.graphiti.ui.internal.editor.GFFigureCanvas;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Widget;
import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotEditor;
import org.eclipse.swtbot.eclipse.gef.finder.widgets.SWTBotGefEditPart;
import org.eclipse.swtbot.eclipse.gef.finder.widgets.SWTBotGefEditor;
import org.eclipse.swtbot.swt.finder.results.Result;
import org.eclipse.swtbot.swt.finder.results.VoidResult;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IEditorReference;
/**
* Encapsulates SWTBot for operations on a diagram editor.
*
*/
public class PoDiagramEditor extends PageObject{
PoWorkbenchPage page = new PoWorkbenchPage();
TransactionalEditingDomain domain = null;
public boolean isDirty() {
return getGefEditor().isDirty();
}
public boolean isVisible() {
return syncExec(new Result<Boolean>() {
public Boolean run() {
Widget widget = getGefEditor().getWidget();
if (widget == null)
return false;
return ((Control) widget).isVisible();
}
});
}
public void dirtify() {
final IDiagramContainerUI diagramEditor = getActiveDiagramEditor();
AbstractGFTests.executeInRecordingCommandInUIThread(diagramEditor.getDiagramBehavior(), new Runnable() {
public void run() {
ContainerShape cs1 = Graphiti.getPeService()
.createContainerShape(diagramEditor.getDiagramTypeProvider().getDiagram(), true);
{
RoundedRectangle roundedRectangle = Graphiti.getGaService().createRoundedRectangle(cs1, 5, 5);
roundedRectangle.setPictogramElement(cs1);
Graphiti.getGaService().setLocationAndSize(roundedRectangle, 0, 0, 5, 5);
}
}
});
}
public IDiagramContainerUI getActiveDiagramEditor(){
return (IDiagramContainerUI) getGefEditor().getReference().getEditor(false);
}
/**
* @return
*/
public SWTBotGefEditor getGefEditor() {
SWTBotEditor activeEditor = bot.activeEditor();
String title = activeEditor.getTitle();
SWTBotGefEditor ed = bot.gefEditor(title);
return ed;
}
public GFFigureCanvas getGFCanvas() {
IEditorReference reference = getGefEditor().getReference();
final IEditorPart editor = reference.getEditor(true);
GraphicalViewer graphicalViewer = (GraphicalViewer) editor.getAdapter(GraphicalViewer.class);
final Control control = graphicalViewer.getControl();
if (control instanceof GFFigureCanvas) {
GFFigureCanvas c = (GFFigureCanvas) control;
return c;
}
return null;
}
/**
* @param ed
* @return
*/
protected GFFigureCanvas getGFCanvas(final SWTBotGefEditor ed) {
// get instance of GFFigureCanvas
GFFigureCanvas gfFigureCanvas = getGFCanvas();
return gfFigureCanvas;
}
public IFigure getFigureWithLabel(String label) {
SWTBotGefEditor ed = getGefEditor();
SWTBotGefEditPart editPart = ed.getEditPart(label);
IFigure figure = ((GraphicalEditPart) editPart.part()).getFigure();
return figure;
}
/**
* @param ed
* @return
*/
public Point getOrigin() {
Canvas c = getGFCanvas();
Point p = c.toDisplay(0, 0);
return p;
}
public void shutdownEditor(){
page.shutdownEditor(getGefEditor());
}
public void closeEditor(final SWTBotGefEditor diagramEditor) {
if (diagramEditor == null) {
return;
}
diagramEditor.close();
}
public void closeEditor(){
closeEditor(getGefEditor());
}
public String getTitle() {
return bot.activeEditor().getTitle();
}
public void drag(final int fromXPosition, final int fromYPosition, final int toXPosition, final int toYPosition){
syncExec(new VoidResult() {
public void run() {
getGefEditor().drag(fromXPosition, fromYPosition, toXPosition, toYPosition);
}
});
}
public void drag(final String label, final int toXPosition, final int toYPosition){
syncExec(new VoidResult() {
public void run() {
getGefEditor().drag(label, toXPosition, toYPosition);
}
});
}
public TransactionalEditingDomain getTransactionalEditingDomain() {
assertNotNull(domain);
return domain;
}
public void setEditingDomain(TransactionalEditingDomain editingDomain) {
this.domain = editingDomain;
}
public void cleanupEditingDomain() {
// TODO manage disposal
this.domain = null;
}
}