package net.ms.designer.editors.componentdetail.commands;
import java.util.ArrayList;
import java.util.List;
import net.ms.designer.editors.componentdetail.models.ChildTable;
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.Table;
import net.ms.designer.editors.componentdetail.models.Wire;
import net.ms.designer.editors.componentdetail.tools.MyContextMenuProvider;
import org.eclipse.gef.EditPartViewer;
import org.eclipse.gef.commands.Command;
import org.eclipse.gef.ui.actions.ActionRegistry;
/**
* @author lili
* @version 1.1.0
*defind the DeleteCommand
*/
public class DeleteCommand extends Command
{
private Element child;
private Container parent;
private int index = -1;
private List sourceConnections = new ArrayList();
private List targetConnections = new ArrayList();
public void setChild(Element base)
{
child = base;
}
public void execute()
{
this.primExecute();
}
private void deleteConnections(Element part)
{
if (part instanceof Container)
{
List children = ((Container) part).getChildren();
for (int i = 0; i < children.size(); i++)
deleteConnections((Element) children.get(i));
}
sourceConnections.addAll(part.getSourceConnections());
for (int i = 0; i < sourceConnections.size(); i++)
{
Wire wire = (Wire) sourceConnections.get(i);
wire.detachSource();
wire.detachTarget();
}
targetConnections.addAll(part.getTargetConnections());
for (int i = 0; i < targetConnections.size(); i++)
{
Wire wire = (Wire) targetConnections.get(i);
wire.detachSource();
wire.detachTarget();
}
}
private void restoreConnections()
{
for (int i = 0; i < sourceConnections.size(); i++)
{
Wire wire = (Wire) sourceConnections.get(i);
wire.attachSource();
wire.attachTarget();
}
sourceConnections.clear();
for (int i = 0; i < targetConnections.size(); i++)
{
Wire wire = (Wire) targetConnections.get(i);
wire.attachSource();
wire.attachTarget();
}
targetConnections.clear();
}
private void primExecute()
{
// deleteConnections(child);
// index = parent.getChildren().indexOf(child);
// if (child instanceof ComponentTable)
// {
//
// return;
//
// }
// if(child instanceof ChildTable && !(child instanceof ComponentTable))
// {
//// child.getParent().getMainTable().setHasChildTable(0);
// if(parent.getChildTableCount() > 0 && parent.getChildTableCount()!=1)
// {
// parent.getMainTable().setHasChildTable(1);
// int newCount = parent.getChildTableCount()-1;
// parent.setChildTableCount(newCount);
// }
// else
// {
// parent.getMainTable().setHasChildTable(0);
// parent.setChildTableCount(0);
// }
//
// }
// if(child instanceof FlowField)
// {
//// child.getParent().getMainTable().setFlowAssociated(0);
// parent.getMainTable().setFlowAssociated(0);
// }
// parent.removeChild(child);
deleteConnections(child);
index = parent.getChildren().indexOf(child);
if (child instanceof ComponentTable)
{
return;
}
if(child instanceof ChildTable && !(child instanceof ComponentTable))
{
//�ж��ֱ��Ƿ����ֱ�����ɾ��������ɾ��----------lili 1116 start
if(((Table)child).getSubTabel().size()>0)
{
return;
}
else
{
for(int i = 0;i< parent.getChildren().size();i++)
{
if(parent.getChildren().get(i) instanceof ChildTable)
{
Table table1 = (Table)(parent.getChildren().get(i));
for(int j=0;j<table1.getSubTabel().size();j++)
{
if(((Table)(table1.getSubTabel().get(j))).getName().equals(child.getName()))
{
table1.getSubTabel().remove(j);
}
}
}
}
((Table)child).getSubTabel().remove(child);
}
//---------------lili 1116 end
// child.getParent().getMainTable().setHasChildTable(0);
if(parent.getChildTableCount() > 0 && parent.getChildTableCount()!=1)
{
parent.getMainTable().setHasChildTable(1);
int newCount = parent.getChildTableCount()-1;
parent.setChildTableCount(newCount);
}
else
{
parent.getMainTable().setHasChildTable(0);
parent.setChildTableCount(0);
}
}
if(child instanceof FlowField)
{
// child.getParent().getMainTable().setFlowAssociated(0);
parent.getMainTable().setFlowAssociated(0);
}
parent.removeChild(child);
}
public void setParent(Container parent)
{
this.parent = parent;
}
public void redo()
{
primExecute();
}
public void undo()
{
restoreConnections();
parent.addChild(child, index);
}
}