/**
* <p>Copyright: Copyright 2010</p>
* <p>Company: �������ӹɷ�����˾</p>
*/
package com.hundsun.ares.studio.ui.grid.table;
import java.util.Arrays;
import java.util.Comparator;
import java.util.LinkedHashMap;
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;
/**
* �ɳ��������ı��ɾ��item����
* @author maxh
*
*/
public class GridTableDeleteItemOperation extends AbstractOperation {
GridTableViewerBasicComponent tableComponent;
List deleteItems;
LinkedHashMap<Integer,Object> indexs;
public GridTableDeleteItemOperation(String label,GridTableViewerBasicComponent tableComponent,List deleteItems) {
super(label);
this.tableComponent = tableComponent;
this.deleteItems = deleteItems;
indexs = new LinkedHashMap<Integer,Object>();
}
@Override
public IStatus execute(IProgressMonitor monitor, IAdaptable info)
throws ExecutionException {
if(tableComponent != null && deleteItems != null){
for(Object o:deleteItems){
int index = ((List)tableComponent.getInput()).indexOf(o);
if(index != -1){
indexs.put(index,o);
}
}
if(tableComponent.getInput() instanceof List){
((List)tableComponent.getInput()).removeAll(deleteItems);
}
tableComponent.getViewer().getGrid().setRedraw(false);
tableComponent.getViewer().refresh();
tableComponent.getViewer().getGrid().setRedraw(true);
tableComponent.getDirty().setValue(true);
return Status.OK_STATUS;
}
return Status.CANCEL_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 {
if(tableComponent.getInput() instanceof List){
Integer[] keys = indexs.keySet().toArray(new Integer[indexs.keySet().size()]);
Arrays.sort(keys, new Comparator<Integer>(){
public int compare(Integer o1, Integer o2) {
return o1-o2;
}
});
for(int i = 0;i<keys.length;i++){
((List)tableComponent.getInput()).add(keys[i], indexs.get(keys[i]));
}
tableComponent.getViewer().getGrid().setRedraw(false);
tableComponent.getViewer().refresh();
tableComponent.getViewer().getGrid().setRedraw(true);
tableComponent.getDirty().setValue(true);
return Status.OK_STATUS;
}
return Status.CANCEL_STATUS;
}
}