/** * <p>Copyright: Copyright 2010</p> * <p>Company: �������ӹɷ����޹�˾</p> */ package com.hundsun.ares.studio.ui.control.deprecated; import java.util.LinkedHashMap; import java.util.List; import java.util.Set; 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 TableDeleteItemOperation extends AbstractOperation { TableViewerExComponent tableComponent; List deleteItems; LinkedHashMap<Integer,Object> indexs; public TableDeleteItemOperation(String label,TableViewerExComponent 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().refresh(); 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){ int index = -1; for(int i = 0;i<indexs.keySet().size();i++){ index = findMin(indexs.keySet(),index); ((List)tableComponent.getInput()).add(index, indexs.get(index)); } tableComponent.getViewer().refresh(); return Status.OK_STATUS; } return Status.CANCEL_STATUS; } int findMin(Set<Integer> set,int min){ int result = -1; for(int i:set){ if(result == -1){ result = i; continue; } if(i < result && i > min){ result = i; } } return result; } }