/**
* Copyright 2004-2016 Riccardo Solmi. All rights reserved.
* This file is part of the Whole Platform.
*
* The Whole Platform is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* The Whole Platform is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with the Whole Platform. If not, see <http://www.gnu.org/licenses/>.
*/
package org.whole.lang.workflows.ui.editparts;
import org.eclipse.draw2d.IFigure;
import org.eclipse.gef.EditPart;
import org.whole.lang.model.IEntity;
import org.whole.lang.ui.editparts.AbstractCompositePart;
import org.whole.lang.ui.editparts.CommaSeparatedCompositeFlowPart;
import org.whole.lang.ui.editparts.CompositeColumnPart;
import org.whole.lang.ui.editparts.CompositeRowWithPlaceholderPart;
import org.whole.lang.ui.editparts.ContentDataEntityPart;
import org.whole.lang.ui.editparts.ContentTextualEntityPart;
import org.whole.lang.ui.editparts.IEditPartFactory;
import org.whole.lang.ui.editparts.VariableDataEntityPart;
import org.whole.lang.ui.figures.CompositeFigure;
import org.whole.lang.ui.layout.Alignment;
import org.whole.lang.ui.notations.editparts.QuotedStringTextualEntityPart;
import org.whole.lang.ui.notations.text.editparts.DefaultTextualPartFactory;
import org.whole.lang.util.EntityUtils;
import org.whole.lang.workflows.model.Assign;
import org.whole.lang.workflows.model.AssignActivity;
import org.whole.lang.workflows.model.Assignments;
import org.whole.lang.workflows.model.BooleanLiteral;
import org.whole.lang.workflows.model.Breakpoint;
import org.whole.lang.workflows.model.ConditionalCase;
import org.whole.lang.workflows.model.ConditionalCases;
import org.whole.lang.workflows.model.CreateEntity;
import org.whole.lang.workflows.model.CreateJavaClassInstance;
import org.whole.lang.workflows.model.CreateModel;
import org.whole.lang.workflows.model.Declarations;
import org.whole.lang.workflows.model.DefaultCase;
import org.whole.lang.workflows.model.DeleteArtifacts;
import org.whole.lang.workflows.model.EmptyActivity;
import org.whole.lang.workflows.model.EventHandler;
import org.whole.lang.workflows.model.EventHandlers;
import org.whole.lang.workflows.model.Expressions;
import org.whole.lang.workflows.model.FaultEvent;
import org.whole.lang.workflows.model.FaultHandler;
import org.whole.lang.workflows.model.FaultHandlers;
import org.whole.lang.workflows.model.FlowObjects;
import org.whole.lang.workflows.model.ForeachLoop;
import org.whole.lang.workflows.model.IWorkflowsEntity;
import org.whole.lang.workflows.model.IntLiteral;
import org.whole.lang.workflows.model.InvokeJavaClassMethod;
import org.whole.lang.workflows.model.InvokeJavaInstanceMethod;
import org.whole.lang.workflows.model.InvokeOperation;
import org.whole.lang.workflows.model.InvokeQuery;
import org.whole.lang.workflows.model.LoadArtifacts;
import org.whole.lang.workflows.model.LoadJavaModel;
import org.whole.lang.workflows.model.LoadModel;
import org.whole.lang.workflows.model.OnCallEvent;
import org.whole.lang.workflows.model.OnMessageEvent;
import org.whole.lang.workflows.model.OnTimerEvent;
import org.whole.lang.workflows.model.Operation;
import org.whole.lang.workflows.model.Parallel;
import org.whole.lang.workflows.model.Parse;
import org.whole.lang.workflows.model.PickControl;
import org.whole.lang.workflows.model.ReturnEvent;
import org.whole.lang.workflows.model.SaveArtifacts;
import org.whole.lang.workflows.model.SaveModel;
import org.whole.lang.workflows.model.Scope;
import org.whole.lang.workflows.model.Sequence;
import org.whole.lang.workflows.model.StringLiteral;
import org.whole.lang.workflows.model.SwitchControl;
import org.whole.lang.workflows.model.Task;
import org.whole.lang.workflows.model.Text;
import org.whole.lang.workflows.model.Unparse;
import org.whole.lang.workflows.model.Variable;
import org.whole.lang.workflows.model.WhileLoop;
import org.whole.lang.workflows.model.Workflow;
import org.whole.lang.workflows.visitors.WorkflowsIdentityDefaultVisitor;
/**
* @author Riccardo Solmi
*/
public class WorkflowsDiagramPartFactoryVisitor extends WorkflowsIdentityDefaultVisitor implements IEditPartFactory {
protected EditPart part, context;
public EditPart createEditPart(EditPart context, Object modelEntity) {
this.context = context;
((IWorkflowsEntity) modelEntity).accept(this);
return part;
}
public void visit(IWorkflowsEntity entity) {
part = DefaultTextualPartFactory.instance().createEditPart(context, entity);
}
public void visit(Workflow entity) {
part = new WorkflowPart();
}
public void visit(OnCallEvent entity) {
part = new OnCallEventPart();
}
public void visit(OnMessageEvent entity) {
part = new OnMessageEventPart();
}
public void visit(OnTimerEvent entity) {
part = new OnTimerEventPart();
}
public void visit(Sequence entity) {
part = new SequencePart();
}
public void visit(Parallel entity) {
part = new ParallelPart();
}
public void visit(FlowObjects entity) {
if (context instanceof ParallelPart)
part = new AbstractCompositePart() {
protected IFigure createFigure() {
CompositeFigure f = new CompositeFigure(true);
f.getLayoutManager().withMinorAlignment(Alignment.LEADING);
return f;
}
};
else
part = new AbstractCompositePart() {
protected IFigure createFigure() {
CompositeFigure f = new CompositeFigure(false);
f.getLayoutManager().withSpacing(7).withMinorAlignment(Alignment.CENTER);
return f;
}
};
}
public void visit(SwitchControl entity) {
part = new SwitchControlPart();
}
public void visit(ConditionalCases entity) {
part = new AbstractCompositePart() {
protected IFigure createFigure() {
CompositeFigure f = new CompositeFigure(true);
f.getLayoutManager().withMinorAlignment(Alignment.LEADING);
return f;
}
};
}
public void visit(ConditionalCase entity) {
part = new ConditionalCasePart();
}
public void visit(DefaultCase entity) {
part = new DefaultCasePart();
}
public void visit(PickControl entity) {
part = new PickControlPart();
}
public void visit(EventHandler entity) {
part = new EventHandlerPart();
}
public void visit(WhileLoop entity) {
part = new WhileControlPart();
}
public void visit(Scope entity) {
part = new ScopePart();
}
public void visit(FaultEvent entity) {
part = new FaultEventPart();
}
public void visit(FaultHandler entity) {
part = new FaultHandlerPart();
}
public void visit(AssignActivity entity) {
part = new AssignActivityPart();
}
public void visit(Assignments entity) {
part = new AssignmentsTablePart();
}
public void visit(Assign entity) {
part = new AssignPart();
}
public void visit(EmptyActivity entity) {
part = new EmptyActivityPart();
}
public void visit(ForeachLoop entity) {
part = new ForeachLoopPart();
}
public void visit(ReturnEvent entity) {
part = new ReturnEventPart();
}
public void visit(FaultHandlers entity) {
part = new CompositeColumnPart();
}
public void visit(EventHandlers entity) {
part = new CompositeRowWithPlaceholderPart();
}
public void visit(Declarations entity) {
part = new CompositeColumnPart();
}
public void visit(Variable entity) {
part = new VariableDataEntityPart();
}
@Override
public void visit(BooleanLiteral entity) {
part = new ContentDataEntityPart();
}
@Override
public void visit(IntLiteral entity) {
part = new ContentDataEntityPart();
}
@Override
public void visit(StringLiteral entity) {
part = EntityUtils.isComposite((IEntity) context.getModel()) ?
new QuotedStringTextualEntityPart() :
new ContentTextualEntityPart();
}
public void visit(Text entity) {
part = new ContentTextualEntityPart();
}
@Override
public void visit(Task entity) {
part = new TaskPart();
}
@Override
public void visit(Breakpoint entity) {
part = new BreakpointPart();
}
@Override
public void visit(Operation entity) {
part = new OperationPart();
}
@Override
public void visit(InvokeOperation entity) {
part = new InvokeOperationPart();
}
@Override
public void visit(InvokeQuery entity) {
part = new InvokeQueryPart();
}
@Override
public void visit(CreateEntity entity) {
part = new CreateEntityPart();
}
@Override
public void visit(CreateModel entity) {
part = new CreateModelPart();
}
@Override
public void visit(LoadJavaModel entity) {
part = new LoadJavaModelPart();
}
@Override
public void visit(LoadModel entity) {
part = new LoadModelPart();
}
@Override
public void visit(SaveModel entity) {
part = new SaveModelPart();
}
@Override
public void visit(DeleteArtifacts entity) {
part = new DeleteArtifactsPart();
}
@Override
public void visit(LoadArtifacts entity) {
part = new LoadArtifactsPart();
}
@Override
public void visit(SaveArtifacts entity) {
part = new SaveArtifactsPart();
}
@Override
public void visit(Parse entity) {
part = new ParsePart();
}
@Override
public void visit(Unparse entity) {
part = new UnparsePart();
}
@Override
public void visit(CreateJavaClassInstance entity) {
part = new CreateJavaClassInstancePart();
}
@Override
public void visit(InvokeJavaClassMethod entity) {
part = new InvokeJavaClassMethodPart();
}
@Override
public void visit(InvokeJavaInstanceMethod entity) {
part = new InvokeJavaInstanceMethodPart();
}
@Override
public void visit(Expressions entity) {
part = new CommaSeparatedCompositeFlowPart();
}
}