package net.ms.designer.editors.componentdetail.editparts;
import java.util.List;
import java.util.Vector;
import net.ms.designer.core.MsEditorInput;
import net.ms.designer.core.MsProject;
import net.ms.designer.editors.componentdetail.models.AutoNumField;
import net.ms.designer.editors.componentdetail.models.AutoPField;
import net.ms.designer.editors.componentdetail.models.ChildTable;
import net.ms.designer.editors.componentdetail.models.CommonField;
import net.ms.designer.editors.componentdetail.models.ComponentTable;
import net.ms.designer.editors.componentdetail.models.Container;
import net.ms.designer.editors.componentdetail.models.Element;
import net.ms.designer.editors.componentdetail.models.FlowField;
import net.ms.designer.editors.componentdetail.models.Label;
import net.ms.designer.editors.componentdetail.models.Table;
import net.ms.designer.editors.componentdetail.models.Wire;
import net.ms.designer.editors.componentdetail.ui.CompDetailEditor;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.EditPartFactory;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.internal.UIPlugin;
/**
* @author lili
* @version 1.1.0
* defind the GraphicalPartFactory ,it can excute creatEditPart and do the auto connet wire.
*/
public class GraphicalPartFactory implements EditPartFactory
{
public EditPart createEditPart(EditPart context, Object model)
{
EditPart part = null;
if((model instanceof ChildTable) && !(model instanceof ComponentTable))
{
part = new CompTableEditPart();
}
if (model instanceof net.ms.designer.editors.componentdetail.models.Table)
{
part = new CompTableEditPart();
}
else if(model instanceof FlowField)
{
part = new FlowEditPart();
}
else if (model instanceof Wire)
part = new WireEditPart();
else if (model instanceof Label)
part = new LabelEditPart();
else if (model instanceof CommonField)
{
part = new CommonEditPart();
}
else if (model instanceof net.ms.designer.editors.componentdetail.models.Container)
{
net.ms.designer.editors.componentdetail.models.Container ct = (net.ms.designer.editors.componentdetail.models.Container) model;
if (!ct.hasMainTable())
{
ComponentTable t = new ComponentTable();
t.setId(ct.getId());
t.setName(ct.getName());
t.setIName(t.getName());
AutoNumField at = new AutoNumField();
at.setName(ct.getName().toLowerCase() + "id");
at.setIName(at.getName());
ChildTable cd = new ChildTable();
cd.setMainTableName(ct.getName().toLowerCase() + "id");
ct.addChild(t);
t.addChild(at);
ct.setMainTable(true);
}
part = new net.ms.designer.editors.componentdetail.editparts.DiagramEditPart();
part.setModel(ct);
return part;
}
if (context instanceof net.ms.designer.editors.componentdetail.editparts.DiagramEditPart
&& (model instanceof ChildTable )&& !(model instanceof ComponentTable))
{
ChildTable ct = (ChildTable) model;
boolean hasConnToMainTable = false; //look out it has connet to the mainTable or not
ComponentTable mainTable = ((net.ms.designer.editors.componentdetail.editparts.DiagramEditPart) context).getDiagram().getMainTable();
mainTable.setHasChildTable(1);
Vector conns = ct.getSourceConnections();
for (int i = 0; i < conns.size(); i++)
{
// ((ChildTable)child).setChildID(i);
Wire w = (Wire) conns.get(i);
net.ms.designer.editors.componentdetail.models.Element target = (net.ms.designer.editors.componentdetail.models.Element)w.getTarget();
if ((target instanceof ComponentTable) ||
!target.getName().equals(mainTable.getName()))
{
hasConnToMainTable = true;
break;
}
}
if (!hasConnToMainTable)
{
Wire wire = new Wire();
wire.setSource(ct);
wire.setTarget(((net.ms.designer.editors.componentdetail.editparts.DiagramEditPart) context).getDiagram()
.getMainTable());
wire.attachSource();
wire.attachTarget();
}
}
if (context instanceof net.ms.designer.editors.componentdetail.editparts.DiagramEditPart
&&(model instanceof FlowField))
{
//connet to the mainTable to the mainTable
//System.out.println("GraphicalPartFactory.createEditPart().if(context)");
FlowField ff = (FlowField)model;
boolean hasConnToMainTable1 = false; //look out it has connet to the mainTable or not
ComponentTable mainTable = ((net.ms.designer.editors.componentdetail.editparts.DiagramEditPart) context).getDiagram().getMainTable();
mainTable.setFlowAssociated(1);
Vector conns = ff.getSourceConnections();
for (int i = 0; i < conns.size(); i++)
{
Wire w = (Wire) conns.get(i);
net.ms.designer.editors.componentdetail.models.Element target = (net.ms.designer.editors.componentdetail.models.Element)w.getTarget();
if ((target instanceof ComponentTable) ||
!target.getName().equals(mainTable.getName()))
{
hasConnToMainTable1 = true;
break;
}
}
if (!hasConnToMainTable1)
{
//System.out.println("flowField ffffffffffffffffff");
Wire wire = new Wire();
wire.setSource(ff);
wire.setTarget(((net.ms.designer.editors.componentdetail.editparts.DiagramEditPart) context).getDiagram()
.getMainTable());
wire.attachSource();
wire.attachTarget();
}
}
part.setModel(model);
return part;
}
}