/**
* <p>Copyright: Copyright 2010</p>
* <p>Company: �������ӹɷ�����˾</p>
*/
package com.hundsun.ares.studio.ui.control.deprecated;
import java.util.List;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.operations.AbstractOperation;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.viewers.TreePath;
/**
* �ɳ���������������item����
* @author maxh
*
*/
public class TreeAddItemOperation extends AbstractOperation {
TreeViewerExComponent component;
TreePath[] paths;
List addItems;
int index = 0;
public TreeAddItemOperation(String label,TreeViewerExComponent component,TreePath[] paths,List addItems) {
super(label);
this.component = component;
this.paths = paths;
this.addItems = addItems;
}
@Override
public IStatus execute(IProgressMonitor monitor, IAdaptable info)
throws ExecutionException {
List input;
if(component.getInput() instanceof List){
input = (List)component.getInput();
}else{
return Status.CANCEL_STATUS;
}
if(paths.length == 0){
return Status.CANCEL_STATUS;
}
TreePath parentPath = paths[0].getParentPath();
if (parentPath == TreePath.EMPTY) {
index = input.indexOf(paths[0].getLastSegment());
if (index == -1) {
index = input.size();
}
for (Object obj : addItems) {
input.add( index, obj);
}
} else {
List<Object> lst = (List<Object>)component.getChildrenMap().get(parentPath.getLastSegment());
index = lst.indexOf(paths[0].getLastSegment());
if (index == -1) {
index = lst.size();
}
for (Object obj : addItems) {
lst.add(index,obj);
}
}
return Status.OK_STATUS;
}
@Override
public IStatus redo(IProgressMonitor monitor, IAdaptable info)
throws ExecutionException {
// TODO Auto-generated method stub
return execute(monitor, info);
}
@Override
public IStatus undo(IProgressMonitor monitor, IAdaptable info)
throws ExecutionException {
List input;
if(component.getInput() instanceof List){
input = (List)component.getInput();
}else{
return Status.CANCEL_STATUS;
}
if(paths.length == 0){
return Status.CANCEL_STATUS;
}
TreePath parentPath = paths[0].getParentPath();
if (parentPath == TreePath.EMPTY) {
for (Object obj : addItems) {
input.remove(obj);
}
} else {
List<Object> lst = (List<Object>)component.getChildrenMap().get(parentPath.getLastSegment());
for (Object obj : addItems) {
lst.remove(obj);
}
}
return Status.OK_STATUS;
}
}