[jboss-svn-commits] JBL Code SVN: r29556 - in labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/debug: actions and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Oct 8 10:23:42 EDT 2009


Author: KrisVerlaenen
Date: 2009-10-08 10:23:42 -0400 (Thu, 08 Oct 2009)
New Revision: 29556

Added:
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/debug/actions/FileAuditDropAdapter.java
Modified:
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/debug/AuditView.java
Log:
JBRULES-2287: Add Drag/Drop File support in audit View
 - added support for dropping a file on the audit view for opening it (provided patch applied)

Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/debug/AuditView.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/debug/AuditView.java	2009-10-08 11:12:12 UTC (rev 29555)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/debug/AuditView.java	2009-10-08 14:23:42 UTC (rev 29556)
@@ -1,698 +1,707 @@
-package org.drools.eclipse.debug;
-
-import java.io.EOFException;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.io.ObjectInputStream;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Stack;
-
-import org.drools.audit.event.ActivationLogEvent;
-import org.drools.audit.event.LogEvent;
-import org.drools.audit.event.ObjectLogEvent;
-import org.drools.audit.event.RuleBaseLogEvent;
-import org.drools.audit.event.RuleFlowGroupLogEvent;
-import org.drools.audit.event.RuleFlowLogEvent;
-import org.drools.audit.event.RuleFlowNodeLogEvent;
-import org.drools.eclipse.DroolsEclipsePlugin;
-import org.drools.eclipse.DroolsPluginImages;
-import org.drools.eclipse.debug.actions.DeleteLogAction;
-import org.drools.eclipse.debug.actions.OpenLogAction;
-import org.drools.eclipse.debug.actions.RefreshLogAction;
-import org.drools.eclipse.debug.actions.ShowEventCauseAction;
-import org.eclipse.debug.ui.AbstractDebugView;
-import org.eclipse.jface.action.GroupMarker;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.action.IMenuManager;
-import org.eclipse.jface.action.IToolBarManager;
-import org.eclipse.jface.viewers.IColorProvider;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.TreeViewer;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.IMemento;
-import org.eclipse.ui.IViewSite;
-import org.eclipse.ui.IWorkbenchActionConstants;
-import org.eclipse.ui.PartInitException;
-
-import com.thoughtworks.xstream.XStream;
-import com.thoughtworks.xstream.io.StreamException;
-
-public class AuditView extends AbstractDebugView {
-	
-	private static final String LOG_FILE_NAME = "LogFileName";
-	private static final String CAUSE_EVENT_COLOR = "CauseEventColor";
-	
-	private String logFileName;
-	private IAction deleteAction;
-	private IAction refreshAction;
-	private boolean drools4 = false;
-	
-    protected Viewer createViewer(Composite parent) {
-		final TreeViewer variablesViewer = new TreeViewer(parent);
-		variablesViewer.setContentProvider(new AuditViewContentProvider());
-        variablesViewer.setLabelProvider(new AuditLabelProvider());
-        variablesViewer.setUseHashlookup(true);
-        variablesViewer.addSelectionChangedListener(new ISelectionChangedListener() {
-			public void selectionChanged(SelectionChangedEvent event) {
-				getViewer().refresh();
-			}
-        });
-        return variablesViewer;
-    }
-    
-    public void setLogFile(String logFileName) {
-    	this.logFileName = logFileName;
-    	refresh();
-		deleteAction.setEnabled(logFileName != null);
-        refreshAction.setEnabled(logFileName != null);
-    }
-    
-    @SuppressWarnings("unchecked")
-	public void refresh() {
-    	drools4 = false;
-    	if (logFileName == null) {
-    		getViewer().setInput(null);
-    		return;
-    	}
-        List<LogEvent> eventList = new ArrayList<LogEvent>();
-        try {
-			XStream xstream = new XStream();
-			ObjectInputStream in = xstream.createObjectInputStream(
-				new FileReader(logFileName));
-			try {
-                while (true) {
-                	Object object = in.readObject();
-                	if (object instanceof LogEvent) {
-                		eventList.add((LogEvent) object);
-                	} else if (object instanceof List) {
-                		drools4 = true;
-                		eventList.addAll((List<LogEvent>) object);
-                	} else {
-                		throw new IllegalArgumentException("Unexpected element in log: " + object);
-                	}
-                }
-            } catch (StreamException e) {
-                if (!(e.getCause() instanceof EOFException)) {
-                    throw e;
-                }
-            } catch (EOFException e) {
-            	// do nothing
-            }
-		} catch (FileNotFoundException e) {
-			setLogFile(null);
-		} catch (Throwable t) {
-			DroolsEclipsePlugin.log(t);
-		}
-		if (drools4) {
-			getViewer().setInput(createDrools4EventList(eventList));
-		} else {
-			getViewer().setInput(createEventList(eventList));
-		}
-        // TODO: this is necessary because otherwise, the show cause action
-        // cannot find the cause event if it hasn't been shown yet
-        ((TreeViewer) getViewer()).expandAll();
-    }
-    
-    protected List<Event> createEventList(List<LogEvent> logEvents) {
-		Iterator<LogEvent> iterator = logEvents.iterator();
-		List<Event> events = new ArrayList<Event>();
-		Stack<Event> beforeEvents = new Stack<Event>();
-		List<Event> newActivations = new ArrayList<Event>();
-		Map<String, Event> activationMap = new HashMap<String, Event>();
-		Map<Long, Event> objectMap = new HashMap<Long, Event>();
-		while (iterator.hasNext()) {
-			LogEvent inEvent = (LogEvent) iterator.next();
-			Event event = new Event(inEvent.getType());
-			switch (inEvent.getType()) {
-				case LogEvent.INSERTED:
-					ObjectLogEvent inObjectEvent = (ObjectLogEvent) inEvent;
-					event.setString("Object inserted (" + inObjectEvent.getFactId() + "): " + inObjectEvent.getObjectToString());
-					if (!beforeEvents.isEmpty()) {
-						((Event) beforeEvents.peek()).addSubEvent(event);
-					} else {
-						events.add(event);
-					}
-					event.addSubEvents(newActivations);
-					newActivations.clear();
-					objectMap.put(new Long(((ObjectLogEvent) inEvent).getFactId()), event);
-					break;
-				case LogEvent.UPDATED:
-					inObjectEvent = (ObjectLogEvent) inEvent;
-					event.setString("Object updated (" + inObjectEvent.getFactId() + "): " + inObjectEvent.getObjectToString());
-					if (!beforeEvents.isEmpty()) {
-                        ((Event) beforeEvents.peek()).addSubEvent(event);
-					} else {
-						events.add(event);
-					}
-					event.addSubEvents(newActivations);
-					newActivations.clear();
-					Event assertEvent = (Event) objectMap.get(new Long(((ObjectLogEvent) inEvent).getFactId()));
-					if (assertEvent != null) {
-						event.setCauseEvent(assertEvent);
-					}
-					break;
-				case LogEvent.RETRACTED:
-					inObjectEvent = (ObjectLogEvent) inEvent;
-					event.setString("Object removed (" + inObjectEvent.getFactId() + "): " + inObjectEvent.getObjectToString());
-					if (!beforeEvents.isEmpty()) {
-                        ((Event) beforeEvents.peek()).addSubEvent(event);
-					} else {
-						events.add(event);
-					}
-					event.addSubEvents(newActivations);
-					newActivations.clear();
-					assertEvent = (Event) objectMap.get(new Long(((ObjectLogEvent) inEvent).getFactId()));
-					if (assertEvent != null) {
-						event.setCauseEvent(assertEvent);
-					}
-					break;
-				case LogEvent.ACTIVATION_CREATED:
-					ActivationLogEvent inActivationEvent = (ActivationLogEvent) inEvent;
-					event.setString("Activation created: Rule " + inActivationEvent.getRule() + " " + inActivationEvent.getDeclarations());
-					newActivations.add(event);
-					activationMap.put(((ActivationLogEvent) inEvent).getActivationId(), event);
-					break;
-				case LogEvent.ACTIVATION_CANCELLED:
-					inActivationEvent = (ActivationLogEvent) inEvent;
-					event.setString("Activation cancelled: Rule " + inActivationEvent.getRule() + " " + inActivationEvent.getDeclarations());
-					newActivations.add(event);
-					event.setCauseEvent((Event) activationMap.get(((ActivationLogEvent) inEvent).getActivationId()));
-					break;
-				case LogEvent.BEFORE_ACTIVATION_FIRE:
-					inActivationEvent = (ActivationLogEvent) inEvent;
-					event.setString("Activation executed: Rule " + inActivationEvent.getRule() + " " + inActivationEvent.getDeclarations());
-					events.add(event);
-					beforeEvents.push(event);
-					event.setCauseEvent((Event) activationMap.get(((ActivationLogEvent) inEvent).getActivationId()));
-					break;
-				case LogEvent.AFTER_ACTIVATION_FIRE:
-				    beforeEvents.pop();
-					break;
-				case LogEvent.BEFORE_RULEFLOW_CREATED:
-					RuleFlowLogEvent inRuleFlowEvent = (RuleFlowLogEvent) inEvent;
-					event.setString("Process started: " + inRuleFlowEvent.getProcessName() + "[" + inRuleFlowEvent.getProcessId() + "]");
-					if (!beforeEvents.isEmpty()) {
-                        ((Event) beforeEvents.peek()).addSubEvent(event);
-					} else {
-						events.add(event);
-					}
-                    beforeEvents.push(event);
-					break;
-                case LogEvent.AFTER_RULEFLOW_CREATED:
-                    beforeEvents.pop();
-                    break;
-				case LogEvent.BEFORE_RULEFLOW_COMPLETED:
-					inRuleFlowEvent = (RuleFlowLogEvent) inEvent;
-					event.setString("Process completed: " + inRuleFlowEvent.getProcessName() + "[" + inRuleFlowEvent.getProcessId() + "]");
-					if (!beforeEvents.isEmpty()) {
-                        ((Event) beforeEvents.peek()).addSubEvent(event);
-					} else {
-						events.add(event);
-					}
-                    beforeEvents.push(event);
-					break;
-                case LogEvent.AFTER_RULEFLOW_COMPLETED:
-                    beforeEvents.pop();
-                    break;
-                case LogEvent.BEFORE_RULEFLOW_NODE_TRIGGERED:
-                    RuleFlowNodeLogEvent inRuleFlowNodeEvent = (RuleFlowNodeLogEvent) inEvent;
-                    event.setString("Process node triggered: " + inRuleFlowNodeEvent.getNodeName() + " in process " + inRuleFlowNodeEvent.getProcessName() + "[" + inRuleFlowNodeEvent.getProcessId() + "]");
-                    if (!beforeEvents.isEmpty()) {
-                        ((Event) beforeEvents.peek()).addSubEvent(event);
-                    } else {
-                        events.add(event);
-                    }
-                    beforeEvents.push(event);
-                    break;
-                case LogEvent.AFTER_RULEFLOW_NODE_TRIGGERED:
-                    beforeEvents.pop();
-                    break;
-				case LogEvent.BEFORE_RULEFLOW_GROUP_ACTIVATED:
-					RuleFlowGroupLogEvent inRuleFlowGroupEvent = (RuleFlowGroupLogEvent) inEvent;
-					event.setString("RuleFlow Group activated: " + inRuleFlowGroupEvent.getGroupName() + "[size=" + inRuleFlowGroupEvent.getSize() + "]");
-					if (!beforeEvents.isEmpty()) {
-                        ((Event) beforeEvents.peek()).addSubEvent(event);
-					} else {
-						events.add(event);
-					}
-					beforeEvents.push(event);
-                    break;
-                case LogEvent.AFTER_RULEFLOW_GROUP_ACTIVATED:
-                    beforeEvents.pop();
-                    break;
-				case LogEvent.BEFORE_RULEFLOW_GROUP_DEACTIVATED:
-					inRuleFlowGroupEvent = (RuleFlowGroupLogEvent) inEvent;
-					event.setString("RuleFlow Group deactivated: " + inRuleFlowGroupEvent.getGroupName() + "[size=" + inRuleFlowGroupEvent.getSize() + "]");
-					if (!beforeEvents.isEmpty()) {
-                        ((Event) beforeEvents.peek()).addSubEvent(event);
-					} else {
-						events.add(event);
-					}
-                    beforeEvents.push(event);
-                    break;
-                case LogEvent.AFTER_RULEFLOW_GROUP_DEACTIVATED:
-                    beforeEvents.pop();
-                    break;
-				case LogEvent.BEFORE_PACKAGE_ADDED:
-					RuleBaseLogEvent ruleBaseEvent = (RuleBaseLogEvent) inEvent;
-					event.setString("Package added: " + ruleBaseEvent.getPackageName());
-					if (!beforeEvents.isEmpty()) {
-                        ((Event) beforeEvents.peek()).addSubEvent(event);
-					} else {
-						events.add(event);
-					}
-                    beforeEvents.push(event);
-					break;
-				case LogEvent.AFTER_PACKAGE_ADDED:
-                    beforeEvents.pop();
-					break;
-				case LogEvent.BEFORE_PACKAGE_REMOVED:
-					ruleBaseEvent = (RuleBaseLogEvent) inEvent;
-					event.setString("Package removed: " + ruleBaseEvent.getPackageName());
-					if (!beforeEvents.isEmpty()) {
-                        ((Event) beforeEvents.peek()).addSubEvent(event);
-					} else {
-						events.add(event);
-					}
-                    beforeEvents.push(event);
-					break;
-				case LogEvent.AFTER_PACKAGE_REMOVED:
-                    beforeEvents.pop();
-					break;
-                case LogEvent.BEFORE_RULE_ADDED:
-					ruleBaseEvent = (RuleBaseLogEvent) inEvent;
-					event.setString("Rule added: " + ruleBaseEvent.getRuleName());
-					if (!beforeEvents.isEmpty()) {
-                        ((Event) beforeEvents.peek()).addSubEvent(event);
-					} else {
-						events.add(event);
-					}
-					beforeEvents.push(event);
-					break;
-                case LogEvent.AFTER_RULE_ADDED:
-                    if (!beforeEvents.isEmpty()) {
-                        Event beforeEvent = (Event) beforeEvents.pop();
-                        beforeEvent.addSubEvents(newActivations);
-                        newActivations.clear();
-                    }
-                    break;
-				case LogEvent.BEFORE_RULE_REMOVED:
-					ruleBaseEvent = (RuleBaseLogEvent) inEvent;
-					event.setString("Rule removed: " + ruleBaseEvent.getRuleName());
-					if (!beforeEvents.isEmpty()) {
-                        ((Event) beforeEvents.peek()).addSubEvent(event);
-					} else {
-						events.add(event);
-					}
-					beforeEvents.push(event);
-					break;
-                case LogEvent.AFTER_RULE_REMOVED:
-                    if (!beforeEvents.isEmpty()) {
-                        Event beforeEvent = (Event) beforeEvents.pop();
-                        beforeEvent.addSubEvents(newActivations);
-    					newActivations.clear();
-                    }
-					break;
-			    default:
-			    	// do nothing
-			    	break;
-			}
-		}
-		return events;
-    }
-    
-    protected List createDrools4EventList(List logEvents) {
-		Iterator iterator = logEvents.iterator();
-		List events = new ArrayList();
-		Event currentBeforeActivationEvent = null;
-		Event currentBeforePackageEvent = null;
-		List newActivations = new ArrayList();
-		Map activationMap = new HashMap();
-		Map objectMap = new HashMap();
-		while (iterator.hasNext()) {
-			LogEvent inEvent = (LogEvent) iterator.next();
-			Event event = new Event(inEvent.getType());
-			switch (inEvent.getType()) {
-				case LogEvent.INSERTED:
-					ObjectLogEvent inObjectEvent = (ObjectLogEvent) inEvent;
-					event.setString("Object inserted (" + inObjectEvent.getFactId() + "): " + inObjectEvent.getObjectToString());
-					if (currentBeforeActivationEvent != null) {
-						currentBeforeActivationEvent.addSubEvent(event);
-					} else {
-						events.add(event);
-					}
-					event.addSubEvents(newActivations);
-					newActivations.clear();
-					objectMap.put(new Long(((ObjectLogEvent) inEvent).getFactId()), event);
-					break;
-				case LogEvent.UPDATED:
-					inObjectEvent = (ObjectLogEvent) inEvent;
-					event.setString("Object updated (" + inObjectEvent.getFactId() + "): " + inObjectEvent.getObjectToString());
-					if (currentBeforeActivationEvent != null) {
-						currentBeforeActivationEvent.addSubEvent(event);
-					} else {
-						events.add(event);
-					}
-					event.addSubEvents(newActivations);
-					newActivations.clear();
-					Event assertEvent = (Event) objectMap.get(new Long(((ObjectLogEvent) inEvent).getFactId()));
-					if (assertEvent != null) {
-						event.setCauseEvent(assertEvent);
-					}
-					break;
-				case LogEvent.RETRACTED:
-					inObjectEvent = (ObjectLogEvent) inEvent;
-					event.setString("Object removed (" + inObjectEvent.getFactId() + "): " + inObjectEvent.getObjectToString());
-					if (currentBeforeActivationEvent != null) {
-						currentBeforeActivationEvent.addSubEvent(event);
-					} else {
-						events.add(event);
-					}
-					event.addSubEvents(newActivations);
-					newActivations.clear();
-					assertEvent = (Event) objectMap.get(new Long(((ObjectLogEvent) inEvent).getFactId()));
-					if (assertEvent != null) {
-						event.setCauseEvent(assertEvent);
-					}
-					break;
-				case LogEvent.ACTIVATION_CREATED:
-					ActivationLogEvent inActivationEvent = (ActivationLogEvent) inEvent;
-					event.setString("Activation created: Rule " + inActivationEvent.getRule() + " " + inActivationEvent.getDeclarations());
-					newActivations.add(event);
-					activationMap.put(((ActivationLogEvent) inEvent).getActivationId(), event);
-					break;
-				case LogEvent.ACTIVATION_CANCELLED:
-					inActivationEvent = (ActivationLogEvent) inEvent;
-					event.setString("Activation cancelled: Rule " + inActivationEvent.getRule() + " " + inActivationEvent.getDeclarations());
-					newActivations.add(event);
-					event.setCauseEvent((Event) activationMap.get(((ActivationLogEvent) inEvent).getActivationId()));
-					break;
-				case LogEvent.BEFORE_ACTIVATION_FIRE:
-					inActivationEvent = (ActivationLogEvent) inEvent;
-					event.setString("Activation executed: Rule " + inActivationEvent.getRule() + " " + inActivationEvent.getDeclarations());
-					events.add(event);
-					currentBeforeActivationEvent = event;
-					event.setCauseEvent((Event) activationMap.get(((ActivationLogEvent) inEvent).getActivationId()));
-					break;
-				case LogEvent.AFTER_ACTIVATION_FIRE:
-					currentBeforeActivationEvent = null;
-					break;
-				case 8:
-					RuleFlowLogEvent inRuleFlowEvent = (RuleFlowLogEvent) inEvent;
-					event.setString("RuleFlow started: " + inRuleFlowEvent.getProcessName() + "[" + inRuleFlowEvent.getProcessId() + "]");
-					if (currentBeforeActivationEvent != null) {
-						currentBeforeActivationEvent.addSubEvent(event);
-					} else {
-						events.add(event);
-					}
-					break;
-				case 9:
-					inRuleFlowEvent = (RuleFlowLogEvent) inEvent;
-					event.setString("RuleFlow completed: " + inRuleFlowEvent.getProcessName() + "[" + inRuleFlowEvent.getProcessId() + "]");
-					if (currentBeforeActivationEvent != null) {
-						currentBeforeActivationEvent.addSubEvent(event);
-					} else {
-						events.add(event);
-					}
-					break;
-				case 10:
-					RuleFlowGroupLogEvent inRuleFlowGroupEvent = (RuleFlowGroupLogEvent) inEvent;
-					event.setString("RuleFlowGroup activated: " + inRuleFlowGroupEvent.getGroupName() + "[size=" + inRuleFlowGroupEvent.getSize() + "]");
-					if (currentBeforeActivationEvent != null) {
-						currentBeforeActivationEvent.addSubEvent(event);
-					} else {
-						events.add(event);
-					}
-					break;
-				case 11:
-					inRuleFlowGroupEvent = (RuleFlowGroupLogEvent) inEvent;
-					event.setString("RuleFlowGroup deactivated: " + inRuleFlowGroupEvent.getGroupName() + "[size=" + inRuleFlowGroupEvent.getSize() + "]");
-					if (currentBeforeActivationEvent != null) {
-						currentBeforeActivationEvent.addSubEvent(event);
-					} else {
-						events.add(event);
-					}
-					break;
-				case 12:
-					RuleBaseLogEvent ruleBaseEvent = (RuleBaseLogEvent) inEvent;
-					event.setString("Package added: " + ruleBaseEvent.getPackageName());
-					if (currentBeforeActivationEvent != null) {
-						currentBeforeActivationEvent.addSubEvent(event);
-					} else {
-						events.add(event);
-					}
-					currentBeforePackageEvent = event;
-					break;
-				case 13:
-					currentBeforePackageEvent = null;
-					break;
-				case 14:
-					ruleBaseEvent = (RuleBaseLogEvent) inEvent;
-					event.setString("Package removed: " + ruleBaseEvent.getPackageName());
-					if (currentBeforeActivationEvent != null) {
-						currentBeforeActivationEvent.addSubEvent(event);
-					} else {
-						events.add(event);
-					}
-					currentBeforePackageEvent = event;
-					break;
-				case 15:
-					currentBeforePackageEvent = null;
-					break;
-				case 17:
-					ruleBaseEvent = (RuleBaseLogEvent) inEvent;
-					event.setString("Rule added: " + ruleBaseEvent.getRuleName());
-					if (currentBeforePackageEvent != null) {
-						currentBeforePackageEvent.addSubEvent(event);
-					} else if (currentBeforeActivationEvent != null) {
-						currentBeforeActivationEvent.addSubEvent(event);
-					} else {
-						events.add(event);
-					}
-					event.addSubEvents(newActivations);
-					newActivations.clear();
-					break;
-				case 19:
-					ruleBaseEvent = (RuleBaseLogEvent) inEvent;
-					event.setString("Rule removed: " + ruleBaseEvent.getRuleName());
-					if (currentBeforePackageEvent != null) {
-						currentBeforePackageEvent.addSubEvent(event);
-					} else if (currentBeforeActivationEvent != null) {
-						currentBeforeActivationEvent.addSubEvent(event);
-					} else {
-						events.add(event);
-					}
-					event.addSubEvents(newActivations);
-					newActivations.clear();
-					break;
-			}
-		}
-		return events;
-    }
-
-    public void deleteLog() {
-    	if (logFileName != null) {
-    		File file = new File(logFileName);
-    		try {
-    			file.delete();
-    			// TODO delete file cause this doesn't seem to work
-    			setLogFile(null);
-    			refresh();
-    		} catch (Throwable t) {
-    			t.printStackTrace();
-    			DroolsEclipsePlugin.log(t);
-    		}
-    	}
-    }
-    
-	protected void becomesVisible() {
-		refresh();
-	}
-    
-    protected String getHelpContextId() {
-        return null;
-    }
-    
-    public Event getSelectedEvent() {
-    	ISelection selection = getViewer().getSelection();
-    	if (selection instanceof IStructuredSelection) {
-    		Object selected = ((IStructuredSelection) selection).getFirstElement();
-    		if (selected instanceof Event) {
-    			return (Event) selected;
-    		}
-    	}
-    	return null;
-    }
-    
-    public void showEvent(Event event) {
-    	((TreeViewer) getViewer()).reveal(event);
-    }
-
-    protected void fillContextMenu(IMenuManager menu) {
-    	Event selected = getSelectedEvent();
-    	if (selected != null) {
-			Event causeEvent = selected.getCauseEvent();
-			if (causeEvent != null) {
-				menu.add(getAction("ShowEventCause"));
-			}
-    	}
-		menu.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
-    }
-
-	protected void createActions() {
-        deleteAction = new DeleteLogAction(this);
-        setAction("ClearLog", deleteAction);
-        deleteAction.setEnabled(logFileName != null);
-        refreshAction = new RefreshLogAction(this);
-        setAction("RefreshLog", refreshAction);
-        refreshAction.setEnabled(logFileName != null);
-        IAction action = new OpenLogAction(this);
-        setAction("OpenLog", action);
-		action = new ShowEventCauseAction(this);
-		setAction("ShowEventCause", action);
-    }
-
-    protected void configureToolBar(IToolBarManager tbm) {
-        tbm.add(getAction("OpenLog"));
-        tbm.add(getAction("RefreshLog"));
-        tbm.add(getAction("ClearLog"));
-    }
-    
-    public void saveState(IMemento memento) {
-    	memento.putString(LOG_FILE_NAME, logFileName);
-    }
-    
-    public void init(IViewSite site, IMemento memento) throws PartInitException {
-        super.init(site, memento);
-        if (memento != null) {
-        	logFileName = memento.getString(LOG_FILE_NAME);
-        }
-    }
-    
-	public class Event {
-		
-		private String toString;
-		private int type;
-		private List<Event> subEvents = new ArrayList<Event>();
-		private Event causeEvent;
-		
-		public Event(int type) {
-			this.type = type;
-		}
-		
-		public void setString(String toString) {
-			this.toString = toString;
-		}
-		
-		public String toString() {
-			return toString;
-		}
-		
-		public int getType() {
-			return type;
-		}
-		
-		public void addSubEvent(Event subEvent) {
-			subEvents.add(subEvent);
-		}
-		
-		public void addSubEvents(Collection<Event> subEvents) {
-			this.subEvents.addAll(subEvents);
-		}
-		
-		public Object[] getSubEvents() {
-			return subEvents.toArray();
-		}
-		
-		public boolean hasSubEvents() {
-			return !subEvents.isEmpty();
-		}
-		
-		public void setCauseEvent(Event causeEvent) {
-			this.causeEvent = causeEvent;
-		}
-		
-		public Event getCauseEvent() {
-			return causeEvent;
-		}
-	}
-	
-	public class AuditLabelProvider extends LabelProvider implements IColorProvider {
-
-		public Color getForeground(Object element) {
-			return null;
-		}
-
-		public Color getBackground(Object element) {
-			Event selected = getSelectedEvent();
-			if (selected != null) {
-				if (element.equals(selected.getCauseEvent())) {
-			        Color color = DroolsEclipsePlugin.getDefault().getColor(CAUSE_EVENT_COLOR);
-			        if (color == null) {
-			        	color = new Color(getControl().getDisplay(), 0, 255, 0); 
-		        		DroolsEclipsePlugin.getDefault().setColor(CAUSE_EVENT_COLOR, color);
-			        }
-			        return color;
-				}
-			}
-			return null;
-		}
-		
-	    public Image getImage(Object element) {
-	    	if (element instanceof Event) {
-	    		int type = ((Event) element).getType();
-	    		if (drools4) {
-		    		switch (type) {
-		    			case LogEvent.INSERTED: return DroolsPluginImages.getImage(DroolsPluginImages.INSERT);
-		    			case LogEvent.UPDATED: return DroolsPluginImages.getImage(DroolsPluginImages.UPDATE);
-		    			case LogEvent.RETRACTED: return DroolsPluginImages.getImage(DroolsPluginImages.RETRACT);
-		    			case LogEvent.ACTIVATION_CREATED: return DroolsPluginImages.getImage(DroolsPluginImages.CREATE_ACTIVATION);
-		    			case LogEvent.ACTIVATION_CANCELLED: return DroolsPluginImages.getImage(DroolsPluginImages.CANCEL_ACTIVATION);
-		    			case LogEvent.BEFORE_ACTIVATION_FIRE: return DroolsPluginImages.getImage(DroolsPluginImages.EXECUTE_ACTIVATION);
-		    			case 8: return DroolsPluginImages.getImage(DroolsPluginImages.RULEFLOW);
-		    			case 9: return DroolsPluginImages.getImage(DroolsPluginImages.RULEFLOW);
-		                case LogEvent.BEFORE_RULEFLOW_NODE_TRIGGERED: return DroolsPluginImages.getImage(DroolsPluginImages.RULEFLOW_NODE_TRIGGERED);
-		    			case 10: return DroolsPluginImages.getImage(DroolsPluginImages.RULEFLOW_GROUP);
-		    			case 11: return DroolsPluginImages.getImage(DroolsPluginImages.RULEFLOW_GROUP);
-		    			case 12: return DroolsPluginImages.getImage(DroolsPluginImages.DROOLS);
-		    			case 14: return DroolsPluginImages.getImage(DroolsPluginImages.DROOLS);
-		    			case 17: return DroolsPluginImages.getImage(DroolsPluginImages.DROOLS);
-		    			case 19: return DroolsPluginImages.getImage(DroolsPluginImages.DROOLS);
-		    		}
-	    		}
-	    		switch (type) {
-	    			case LogEvent.INSERTED: return DroolsPluginImages.getImage(DroolsPluginImages.INSERT);
-	    			case LogEvent.UPDATED: return DroolsPluginImages.getImage(DroolsPluginImages.UPDATE);
-	    			case LogEvent.RETRACTED: return DroolsPluginImages.getImage(DroolsPluginImages.RETRACT);
-	    			case LogEvent.ACTIVATION_CREATED: return DroolsPluginImages.getImage(DroolsPluginImages.CREATE_ACTIVATION);
-	    			case LogEvent.ACTIVATION_CANCELLED: return DroolsPluginImages.getImage(DroolsPluginImages.CANCEL_ACTIVATION);
-	    			case LogEvent.BEFORE_ACTIVATION_FIRE: return DroolsPluginImages.getImage(DroolsPluginImages.EXECUTE_ACTIVATION);
-	    			case LogEvent.BEFORE_RULEFLOW_CREATED: return DroolsPluginImages.getImage(DroolsPluginImages.RULEFLOW);
-	    			case LogEvent.BEFORE_RULEFLOW_COMPLETED: return DroolsPluginImages.getImage(DroolsPluginImages.RULEFLOW);
-                    case LogEvent.BEFORE_RULEFLOW_NODE_TRIGGERED: return DroolsPluginImages.getImage(DroolsPluginImages.RULEFLOW_NODE_TRIGGERED);
-	    			case LogEvent.BEFORE_RULEFLOW_GROUP_ACTIVATED: return DroolsPluginImages.getImage(DroolsPluginImages.RULEFLOW_GROUP);
-	    			case LogEvent.BEFORE_RULEFLOW_GROUP_DEACTIVATED: return DroolsPluginImages.getImage(DroolsPluginImages.RULEFLOW_GROUP);
-	    			case LogEvent.BEFORE_PACKAGE_ADDED: return DroolsPluginImages.getImage(DroolsPluginImages.DROOLS);
-	    			case LogEvent.BEFORE_PACKAGE_REMOVED: return DroolsPluginImages.getImage(DroolsPluginImages.DROOLS);
-	    			case LogEvent.BEFORE_RULE_ADDED: return DroolsPluginImages.getImage(DroolsPluginImages.DROOLS);
-	    			case LogEvent.BEFORE_RULE_REMOVED: return DroolsPluginImages.getImage(DroolsPluginImages.DROOLS);
-	    		}
-	    		return null;
-	    	}
-	        return null;
-	    }
-	}
-}
+package org.drools.eclipse.debug;
+
+import java.io.EOFException;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.ObjectInputStream;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Stack;
+
+import org.drools.audit.event.ActivationLogEvent;
+import org.drools.audit.event.LogEvent;
+import org.drools.audit.event.ObjectLogEvent;
+import org.drools.audit.event.RuleBaseLogEvent;
+import org.drools.audit.event.RuleFlowGroupLogEvent;
+import org.drools.audit.event.RuleFlowLogEvent;
+import org.drools.audit.event.RuleFlowNodeLogEvent;
+import org.drools.eclipse.DroolsEclipsePlugin;
+import org.drools.eclipse.DroolsPluginImages;
+import org.drools.eclipse.debug.actions.DeleteLogAction;
+import org.drools.eclipse.debug.actions.FileAuditDropAdapter;
+import org.drools.eclipse.debug.actions.OpenLogAction;
+import org.drools.eclipse.debug.actions.RefreshLogAction;
+import org.drools.eclipse.debug.actions.ShowEventCauseAction;
+import org.eclipse.debug.ui.AbstractDebugView;
+import org.eclipse.jface.action.GroupMarker;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.viewers.IColorProvider;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.FileTransfer;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.IViewSite;
+import org.eclipse.ui.IWorkbenchActionConstants;
+import org.eclipse.ui.PartInitException;
+
+import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.io.StreamException;
+
+public class AuditView extends AbstractDebugView {
+	
+	private static final String LOG_FILE_NAME = "LogFileName";
+	private static final String CAUSE_EVENT_COLOR = "CauseEventColor";
+	
+	private String logFileName;
+	private IAction deleteAction;
+	private IAction refreshAction;
+	private boolean drools4 = false;
+	
+    protected Viewer createViewer(Composite parent) {
+		final TreeViewer variablesViewer = new TreeViewer(parent);
+		variablesViewer.setContentProvider(new AuditViewContentProvider());
+        variablesViewer.setLabelProvider(new AuditLabelProvider());
+        variablesViewer.setUseHashlookup(true);
+        variablesViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+			public void selectionChanged(SelectionChangedEvent event) {
+				getViewer().refresh();
+			}
+        });
+        
+        int ops = DND.DROP_COPY | DND.DROP_MOVE;
+        Transfer[] transfers = new Transfer[] { FileTransfer.getInstance()};
+        variablesViewer.addDropSupport(ops, transfers, new FileAuditDropAdapter(variablesViewer,this));
+        
+        return variablesViewer;
+    }
+    
+    public void setLogFile(String logFileName) {
+    	this.logFileName = logFileName;
+    	refresh();
+		deleteAction.setEnabled(logFileName != null);
+        refreshAction.setEnabled(logFileName != null);
+    }
+    
+    @SuppressWarnings("unchecked")
+	public void refresh() {
+    	drools4 = false;
+    	if (logFileName == null) {
+    		getViewer().setInput(null);
+    		return;
+    	}
+        List<LogEvent> eventList = new ArrayList<LogEvent>();
+        try {
+			XStream xstream = new XStream();
+			ObjectInputStream in = xstream.createObjectInputStream(
+				new FileReader(logFileName));
+			try {
+                while (true) {
+                	Object object = in.readObject();
+                	if (object instanceof LogEvent) {
+                		eventList.add((LogEvent) object);
+                	} else if (object instanceof List) {
+                		drools4 = true;
+                		eventList.addAll((List<LogEvent>) object);
+                	} else {
+                		throw new IllegalArgumentException("Unexpected element in log: " + object);
+                	}
+                }
+            } catch (StreamException e) {
+                if (!(e.getCause() instanceof EOFException)) {
+                    throw e;
+                }
+            } catch (EOFException e) {
+            	// do nothing
+            }
+		} catch (FileNotFoundException e) {
+			setLogFile(null);
+		} catch (Throwable t) {
+			DroolsEclipsePlugin.log(t);
+		}
+		if (drools4) {
+			getViewer().setInput(createDrools4EventList(eventList));
+		} else {
+			getViewer().setInput(createEventList(eventList));
+		}
+        // TODO: this is necessary because otherwise, the show cause action
+        // cannot find the cause event if it hasn't been shown yet
+        ((TreeViewer) getViewer()).expandAll();
+    }
+    
+    protected List<Event> createEventList(List<LogEvent> logEvents) {
+		Iterator<LogEvent> iterator = logEvents.iterator();
+		List<Event> events = new ArrayList<Event>();
+		Stack<Event> beforeEvents = new Stack<Event>();
+		List<Event> newActivations = new ArrayList<Event>();
+		Map<String, Event> activationMap = new HashMap<String, Event>();
+		Map<Long, Event> objectMap = new HashMap<Long, Event>();
+		while (iterator.hasNext()) {
+			LogEvent inEvent = (LogEvent) iterator.next();
+			Event event = new Event(inEvent.getType());
+			switch (inEvent.getType()) {
+				case LogEvent.INSERTED:
+					ObjectLogEvent inObjectEvent = (ObjectLogEvent) inEvent;
+					event.setString("Object inserted (" + inObjectEvent.getFactId() + "): " + inObjectEvent.getObjectToString());
+					if (!beforeEvents.isEmpty()) {
+						((Event) beforeEvents.peek()).addSubEvent(event);
+					} else {
+						events.add(event);
+					}
+					event.addSubEvents(newActivations);
+					newActivations.clear();
+					objectMap.put(new Long(((ObjectLogEvent) inEvent).getFactId()), event);
+					break;
+				case LogEvent.UPDATED:
+					inObjectEvent = (ObjectLogEvent) inEvent;
+					event.setString("Object updated (" + inObjectEvent.getFactId() + "): " + inObjectEvent.getObjectToString());
+					if (!beforeEvents.isEmpty()) {
+                        ((Event) beforeEvents.peek()).addSubEvent(event);
+					} else {
+						events.add(event);
+					}
+					event.addSubEvents(newActivations);
+					newActivations.clear();
+					Event assertEvent = (Event) objectMap.get(new Long(((ObjectLogEvent) inEvent).getFactId()));
+					if (assertEvent != null) {
+						event.setCauseEvent(assertEvent);
+					}
+					break;
+				case LogEvent.RETRACTED:
+					inObjectEvent = (ObjectLogEvent) inEvent;
+					event.setString("Object removed (" + inObjectEvent.getFactId() + "): " + inObjectEvent.getObjectToString());
+					if (!beforeEvents.isEmpty()) {
+                        ((Event) beforeEvents.peek()).addSubEvent(event);
+					} else {
+						events.add(event);
+					}
+					event.addSubEvents(newActivations);
+					newActivations.clear();
+					assertEvent = (Event) objectMap.get(new Long(((ObjectLogEvent) inEvent).getFactId()));
+					if (assertEvent != null) {
+						event.setCauseEvent(assertEvent);
+					}
+					break;
+				case LogEvent.ACTIVATION_CREATED:
+					ActivationLogEvent inActivationEvent = (ActivationLogEvent) inEvent;
+					event.setString("Activation created: Rule " + inActivationEvent.getRule() + " " + inActivationEvent.getDeclarations());
+					newActivations.add(event);
+					activationMap.put(((ActivationLogEvent) inEvent).getActivationId(), event);
+					break;
+				case LogEvent.ACTIVATION_CANCELLED:
+					inActivationEvent = (ActivationLogEvent) inEvent;
+					event.setString("Activation cancelled: Rule " + inActivationEvent.getRule() + " " + inActivationEvent.getDeclarations());
+					newActivations.add(event);
+					event.setCauseEvent((Event) activationMap.get(((ActivationLogEvent) inEvent).getActivationId()));
+					break;
+				case LogEvent.BEFORE_ACTIVATION_FIRE:
+					inActivationEvent = (ActivationLogEvent) inEvent;
+					event.setString("Activation executed: Rule " + inActivationEvent.getRule() + " " + inActivationEvent.getDeclarations());
+					events.add(event);
+					beforeEvents.push(event);
+					event.setCauseEvent((Event) activationMap.get(((ActivationLogEvent) inEvent).getActivationId()));
+					break;
+				case LogEvent.AFTER_ACTIVATION_FIRE:
+				    beforeEvents.pop();
+					break;
+				case LogEvent.BEFORE_RULEFLOW_CREATED:
+					RuleFlowLogEvent inRuleFlowEvent = (RuleFlowLogEvent) inEvent;
+					event.setString("Process started: " + inRuleFlowEvent.getProcessName() + "[" + inRuleFlowEvent.getProcessId() + "]");
+					if (!beforeEvents.isEmpty()) {
+                        ((Event) beforeEvents.peek()).addSubEvent(event);
+					} else {
+						events.add(event);
+					}
+                    beforeEvents.push(event);
+					break;
+                case LogEvent.AFTER_RULEFLOW_CREATED:
+                    beforeEvents.pop();
+                    break;
+				case LogEvent.BEFORE_RULEFLOW_COMPLETED:
+					inRuleFlowEvent = (RuleFlowLogEvent) inEvent;
+					event.setString("Process completed: " + inRuleFlowEvent.getProcessName() + "[" + inRuleFlowEvent.getProcessId() + "]");
+					if (!beforeEvents.isEmpty()) {
+                        ((Event) beforeEvents.peek()).addSubEvent(event);
+					} else {
+						events.add(event);
+					}
+                    beforeEvents.push(event);
+					break;
+                case LogEvent.AFTER_RULEFLOW_COMPLETED:
+                    beforeEvents.pop();
+                    break;
+                case LogEvent.BEFORE_RULEFLOW_NODE_TRIGGERED:
+                    RuleFlowNodeLogEvent inRuleFlowNodeEvent = (RuleFlowNodeLogEvent) inEvent;
+                    event.setString("Process node triggered: " + inRuleFlowNodeEvent.getNodeName() + " in process " + inRuleFlowNodeEvent.getProcessName() + "[" + inRuleFlowNodeEvent.getProcessId() + "]");
+                    if (!beforeEvents.isEmpty()) {
+                        ((Event) beforeEvents.peek()).addSubEvent(event);
+                    } else {
+                        events.add(event);
+                    }
+                    beforeEvents.push(event);
+                    break;
+                case LogEvent.AFTER_RULEFLOW_NODE_TRIGGERED:
+                    beforeEvents.pop();
+                    break;
+				case LogEvent.BEFORE_RULEFLOW_GROUP_ACTIVATED:
+					RuleFlowGroupLogEvent inRuleFlowGroupEvent = (RuleFlowGroupLogEvent) inEvent;
+					event.setString("RuleFlow Group activated: " + inRuleFlowGroupEvent.getGroupName() + "[size=" + inRuleFlowGroupEvent.getSize() + "]");
+					if (!beforeEvents.isEmpty()) {
+                        ((Event) beforeEvents.peek()).addSubEvent(event);
+					} else {
+						events.add(event);
+					}
+					beforeEvents.push(event);
+                    break;
+                case LogEvent.AFTER_RULEFLOW_GROUP_ACTIVATED:
+                    beforeEvents.pop();
+                    break;
+				case LogEvent.BEFORE_RULEFLOW_GROUP_DEACTIVATED:
+					inRuleFlowGroupEvent = (RuleFlowGroupLogEvent) inEvent;
+					event.setString("RuleFlow Group deactivated: " + inRuleFlowGroupEvent.getGroupName() + "[size=" + inRuleFlowGroupEvent.getSize() + "]");
+					if (!beforeEvents.isEmpty()) {
+                        ((Event) beforeEvents.peek()).addSubEvent(event);
+					} else {
+						events.add(event);
+					}
+                    beforeEvents.push(event);
+                    break;
+                case LogEvent.AFTER_RULEFLOW_GROUP_DEACTIVATED:
+                    beforeEvents.pop();
+                    break;
+				case LogEvent.BEFORE_PACKAGE_ADDED:
+					RuleBaseLogEvent ruleBaseEvent = (RuleBaseLogEvent) inEvent;
+					event.setString("Package added: " + ruleBaseEvent.getPackageName());
+					if (!beforeEvents.isEmpty()) {
+                        ((Event) beforeEvents.peek()).addSubEvent(event);
+					} else {
+						events.add(event);
+					}
+                    beforeEvents.push(event);
+					break;
+				case LogEvent.AFTER_PACKAGE_ADDED:
+                    beforeEvents.pop();
+					break;
+				case LogEvent.BEFORE_PACKAGE_REMOVED:
+					ruleBaseEvent = (RuleBaseLogEvent) inEvent;
+					event.setString("Package removed: " + ruleBaseEvent.getPackageName());
+					if (!beforeEvents.isEmpty()) {
+                        ((Event) beforeEvents.peek()).addSubEvent(event);
+					} else {
+						events.add(event);
+					}
+                    beforeEvents.push(event);
+					break;
+				case LogEvent.AFTER_PACKAGE_REMOVED:
+                    beforeEvents.pop();
+					break;
+                case LogEvent.BEFORE_RULE_ADDED:
+					ruleBaseEvent = (RuleBaseLogEvent) inEvent;
+					event.setString("Rule added: " + ruleBaseEvent.getRuleName());
+					if (!beforeEvents.isEmpty()) {
+                        ((Event) beforeEvents.peek()).addSubEvent(event);
+					} else {
+						events.add(event);
+					}
+					beforeEvents.push(event);
+					break;
+                case LogEvent.AFTER_RULE_ADDED:
+                    if (!beforeEvents.isEmpty()) {
+                        Event beforeEvent = (Event) beforeEvents.pop();
+                        beforeEvent.addSubEvents(newActivations);
+                        newActivations.clear();
+                    }
+                    break;
+				case LogEvent.BEFORE_RULE_REMOVED:
+					ruleBaseEvent = (RuleBaseLogEvent) inEvent;
+					event.setString("Rule removed: " + ruleBaseEvent.getRuleName());
+					if (!beforeEvents.isEmpty()) {
+                        ((Event) beforeEvents.peek()).addSubEvent(event);
+					} else {
+						events.add(event);
+					}
+					beforeEvents.push(event);
+					break;
+                case LogEvent.AFTER_RULE_REMOVED:
+                    if (!beforeEvents.isEmpty()) {
+                        Event beforeEvent = (Event) beforeEvents.pop();
+                        beforeEvent.addSubEvents(newActivations);
+    					newActivations.clear();
+                    }
+					break;
+			    default:
+			    	// do nothing
+			    	break;
+			}
+		}
+		return events;
+    }
+    
+    protected List createDrools4EventList(List logEvents) {
+		Iterator iterator = logEvents.iterator();
+		List events = new ArrayList();
+		Event currentBeforeActivationEvent = null;
+		Event currentBeforePackageEvent = null;
+		List newActivations = new ArrayList();
+		Map activationMap = new HashMap();
+		Map objectMap = new HashMap();
+		while (iterator.hasNext()) {
+			LogEvent inEvent = (LogEvent) iterator.next();
+			Event event = new Event(inEvent.getType());
+			switch (inEvent.getType()) {
+				case LogEvent.INSERTED:
+					ObjectLogEvent inObjectEvent = (ObjectLogEvent) inEvent;
+					event.setString("Object inserted (" + inObjectEvent.getFactId() + "): " + inObjectEvent.getObjectToString());
+					if (currentBeforeActivationEvent != null) {
+						currentBeforeActivationEvent.addSubEvent(event);
+					} else {
+						events.add(event);
+					}
+					event.addSubEvents(newActivations);
+					newActivations.clear();
+					objectMap.put(new Long(((ObjectLogEvent) inEvent).getFactId()), event);
+					break;
+				case LogEvent.UPDATED:
+					inObjectEvent = (ObjectLogEvent) inEvent;
+					event.setString("Object updated (" + inObjectEvent.getFactId() + "): " + inObjectEvent.getObjectToString());
+					if (currentBeforeActivationEvent != null) {
+						currentBeforeActivationEvent.addSubEvent(event);
+					} else {
+						events.add(event);
+					}
+					event.addSubEvents(newActivations);
+					newActivations.clear();
+					Event assertEvent = (Event) objectMap.get(new Long(((ObjectLogEvent) inEvent).getFactId()));
+					if (assertEvent != null) {
+						event.setCauseEvent(assertEvent);
+					}
+					break;
+				case LogEvent.RETRACTED:
+					inObjectEvent = (ObjectLogEvent) inEvent;
+					event.setString("Object removed (" + inObjectEvent.getFactId() + "): " + inObjectEvent.getObjectToString());
+					if (currentBeforeActivationEvent != null) {
+						currentBeforeActivationEvent.addSubEvent(event);
+					} else {
+						events.add(event);
+					}
+					event.addSubEvents(newActivations);
+					newActivations.clear();
+					assertEvent = (Event) objectMap.get(new Long(((ObjectLogEvent) inEvent).getFactId()));
+					if (assertEvent != null) {
+						event.setCauseEvent(assertEvent);
+					}
+					break;
+				case LogEvent.ACTIVATION_CREATED:
+					ActivationLogEvent inActivationEvent = (ActivationLogEvent) inEvent;
+					event.setString("Activation created: Rule " + inActivationEvent.getRule() + " " + inActivationEvent.getDeclarations());
+					newActivations.add(event);
+					activationMap.put(((ActivationLogEvent) inEvent).getActivationId(), event);
+					break;
+				case LogEvent.ACTIVATION_CANCELLED:
+					inActivationEvent = (ActivationLogEvent) inEvent;
+					event.setString("Activation cancelled: Rule " + inActivationEvent.getRule() + " " + inActivationEvent.getDeclarations());
+					newActivations.add(event);
+					event.setCauseEvent((Event) activationMap.get(((ActivationLogEvent) inEvent).getActivationId()));
+					break;
+				case LogEvent.BEFORE_ACTIVATION_FIRE:
+					inActivationEvent = (ActivationLogEvent) inEvent;
+					event.setString("Activation executed: Rule " + inActivationEvent.getRule() + " " + inActivationEvent.getDeclarations());
+					events.add(event);
+					currentBeforeActivationEvent = event;
+					event.setCauseEvent((Event) activationMap.get(((ActivationLogEvent) inEvent).getActivationId()));
+					break;
+				case LogEvent.AFTER_ACTIVATION_FIRE:
+					currentBeforeActivationEvent = null;
+					break;
+				case 8:
+					RuleFlowLogEvent inRuleFlowEvent = (RuleFlowLogEvent) inEvent;
+					event.setString("RuleFlow started: " + inRuleFlowEvent.getProcessName() + "[" + inRuleFlowEvent.getProcessId() + "]");
+					if (currentBeforeActivationEvent != null) {
+						currentBeforeActivationEvent.addSubEvent(event);
+					} else {
+						events.add(event);
+					}
+					break;
+				case 9:
+					inRuleFlowEvent = (RuleFlowLogEvent) inEvent;
+					event.setString("RuleFlow completed: " + inRuleFlowEvent.getProcessName() + "[" + inRuleFlowEvent.getProcessId() + "]");
+					if (currentBeforeActivationEvent != null) {
+						currentBeforeActivationEvent.addSubEvent(event);
+					} else {
+						events.add(event);
+					}
+					break;
+				case 10:
+					RuleFlowGroupLogEvent inRuleFlowGroupEvent = (RuleFlowGroupLogEvent) inEvent;
+					event.setString("RuleFlowGroup activated: " + inRuleFlowGroupEvent.getGroupName() + "[size=" + inRuleFlowGroupEvent.getSize() + "]");
+					if (currentBeforeActivationEvent != null) {
+						currentBeforeActivationEvent.addSubEvent(event);
+					} else {
+						events.add(event);
+					}
+					break;
+				case 11:
+					inRuleFlowGroupEvent = (RuleFlowGroupLogEvent) inEvent;
+					event.setString("RuleFlowGroup deactivated: " + inRuleFlowGroupEvent.getGroupName() + "[size=" + inRuleFlowGroupEvent.getSize() + "]");
+					if (currentBeforeActivationEvent != null) {
+						currentBeforeActivationEvent.addSubEvent(event);
+					} else {
+						events.add(event);
+					}
+					break;
+				case 12:
+					RuleBaseLogEvent ruleBaseEvent = (RuleBaseLogEvent) inEvent;
+					event.setString("Package added: " + ruleBaseEvent.getPackageName());
+					if (currentBeforeActivationEvent != null) {
+						currentBeforeActivationEvent.addSubEvent(event);
+					} else {
+						events.add(event);
+					}
+					currentBeforePackageEvent = event;
+					break;
+				case 13:
+					currentBeforePackageEvent = null;
+					break;
+				case 14:
+					ruleBaseEvent = (RuleBaseLogEvent) inEvent;
+					event.setString("Package removed: " + ruleBaseEvent.getPackageName());
+					if (currentBeforeActivationEvent != null) {
+						currentBeforeActivationEvent.addSubEvent(event);
+					} else {
+						events.add(event);
+					}
+					currentBeforePackageEvent = event;
+					break;
+				case 15:
+					currentBeforePackageEvent = null;
+					break;
+				case 17:
+					ruleBaseEvent = (RuleBaseLogEvent) inEvent;
+					event.setString("Rule added: " + ruleBaseEvent.getRuleName());
+					if (currentBeforePackageEvent != null) {
+						currentBeforePackageEvent.addSubEvent(event);
+					} else if (currentBeforeActivationEvent != null) {
+						currentBeforeActivationEvent.addSubEvent(event);
+					} else {
+						events.add(event);
+					}
+					event.addSubEvents(newActivations);
+					newActivations.clear();
+					break;
+				case 19:
+					ruleBaseEvent = (RuleBaseLogEvent) inEvent;
+					event.setString("Rule removed: " + ruleBaseEvent.getRuleName());
+					if (currentBeforePackageEvent != null) {
+						currentBeforePackageEvent.addSubEvent(event);
+					} else if (currentBeforeActivationEvent != null) {
+						currentBeforeActivationEvent.addSubEvent(event);
+					} else {
+						events.add(event);
+					}
+					event.addSubEvents(newActivations);
+					newActivations.clear();
+					break;
+			}
+		}
+		return events;
+    }
+
+    public void deleteLog() {
+    	if (logFileName != null) {
+    		File file = new File(logFileName);
+    		try {
+    			file.delete();
+    			// TODO delete file cause this doesn't seem to work
+    			setLogFile(null);
+    			refresh();
+    		} catch (Throwable t) {
+    			t.printStackTrace();
+    			DroolsEclipsePlugin.log(t);
+    		}
+    	}
+    }
+    
+	protected void becomesVisible() {
+		refresh();
+	}
+    
+    protected String getHelpContextId() {
+        return null;
+    }
+    
+    public Event getSelectedEvent() {
+    	ISelection selection = getViewer().getSelection();
+    	if (selection instanceof IStructuredSelection) {
+    		Object selected = ((IStructuredSelection) selection).getFirstElement();
+    		if (selected instanceof Event) {
+    			return (Event) selected;
+    		}
+    	}
+    	return null;
+    }
+    
+    public void showEvent(Event event) {
+    	((TreeViewer) getViewer()).reveal(event);
+    }
+
+    protected void fillContextMenu(IMenuManager menu) {
+    	Event selected = getSelectedEvent();
+    	if (selected != null) {
+			Event causeEvent = selected.getCauseEvent();
+			if (causeEvent != null) {
+				menu.add(getAction("ShowEventCause"));
+			}
+    	}
+		menu.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
+    }
+
+	protected void createActions() {
+        deleteAction = new DeleteLogAction(this);
+        setAction("ClearLog", deleteAction);
+        deleteAction.setEnabled(logFileName != null);
+        refreshAction = new RefreshLogAction(this);
+        setAction("RefreshLog", refreshAction);
+        refreshAction.setEnabled(logFileName != null);
+        IAction action = new OpenLogAction(this);
+        setAction("OpenLog", action);
+		action = new ShowEventCauseAction(this);
+		setAction("ShowEventCause", action);
+    }
+
+    protected void configureToolBar(IToolBarManager tbm) {
+        tbm.add(getAction("OpenLog"));
+        tbm.add(getAction("RefreshLog"));
+        tbm.add(getAction("ClearLog"));
+    }
+    
+    public void saveState(IMemento memento) {
+    	memento.putString(LOG_FILE_NAME, logFileName);
+    }
+    
+    public void init(IViewSite site, IMemento memento) throws PartInitException {
+        super.init(site, memento);
+        if (memento != null) {
+        	logFileName = memento.getString(LOG_FILE_NAME);
+        }
+    }
+    
+	public class Event {
+		
+		private String toString;
+		private int type;
+		private List<Event> subEvents = new ArrayList<Event>();
+		private Event causeEvent;
+		
+		public Event(int type) {
+			this.type = type;
+		}
+		
+		public void setString(String toString) {
+			this.toString = toString;
+		}
+		
+		public String toString() {
+			return toString;
+		}
+		
+		public int getType() {
+			return type;
+		}
+		
+		public void addSubEvent(Event subEvent) {
+			subEvents.add(subEvent);
+		}
+		
+		public void addSubEvents(Collection<Event> subEvents) {
+			this.subEvents.addAll(subEvents);
+		}
+		
+		public Object[] getSubEvents() {
+			return subEvents.toArray();
+		}
+		
+		public boolean hasSubEvents() {
+			return !subEvents.isEmpty();
+		}
+		
+		public void setCauseEvent(Event causeEvent) {
+			this.causeEvent = causeEvent;
+		}
+		
+		public Event getCauseEvent() {
+			return causeEvent;
+		}
+	}
+	
+	public class AuditLabelProvider extends LabelProvider implements IColorProvider {
+
+		public Color getForeground(Object element) {
+			return null;
+		}
+
+		public Color getBackground(Object element) {
+			Event selected = getSelectedEvent();
+			if (selected != null) {
+				if (element.equals(selected.getCauseEvent())) {
+			        Color color = DroolsEclipsePlugin.getDefault().getColor(CAUSE_EVENT_COLOR);
+			        if (color == null) {
+			        	color = new Color(getControl().getDisplay(), 0, 255, 0); 
+		        		DroolsEclipsePlugin.getDefault().setColor(CAUSE_EVENT_COLOR, color);
+			        }
+			        return color;
+				}
+			}
+			return null;
+		}
+		
+	    public Image getImage(Object element) {
+	    	if (element instanceof Event) {
+	    		int type = ((Event) element).getType();
+	    		if (drools4) {
+		    		switch (type) {
+		    			case LogEvent.INSERTED: return DroolsPluginImages.getImage(DroolsPluginImages.INSERT);
+		    			case LogEvent.UPDATED: return DroolsPluginImages.getImage(DroolsPluginImages.UPDATE);
+		    			case LogEvent.RETRACTED: return DroolsPluginImages.getImage(DroolsPluginImages.RETRACT);
+		    			case LogEvent.ACTIVATION_CREATED: return DroolsPluginImages.getImage(DroolsPluginImages.CREATE_ACTIVATION);
+		    			case LogEvent.ACTIVATION_CANCELLED: return DroolsPluginImages.getImage(DroolsPluginImages.CANCEL_ACTIVATION);
+		    			case LogEvent.BEFORE_ACTIVATION_FIRE: return DroolsPluginImages.getImage(DroolsPluginImages.EXECUTE_ACTIVATION);
+		    			case 8: return DroolsPluginImages.getImage(DroolsPluginImages.RULEFLOW);
+		    			case 9: return DroolsPluginImages.getImage(DroolsPluginImages.RULEFLOW);
+		                case LogEvent.BEFORE_RULEFLOW_NODE_TRIGGERED: return DroolsPluginImages.getImage(DroolsPluginImages.RULEFLOW_NODE_TRIGGERED);
+		    			case 10: return DroolsPluginImages.getImage(DroolsPluginImages.RULEFLOW_GROUP);
+		    			case 11: return DroolsPluginImages.getImage(DroolsPluginImages.RULEFLOW_GROUP);
+		    			case 12: return DroolsPluginImages.getImage(DroolsPluginImages.DROOLS);
+		    			case 14: return DroolsPluginImages.getImage(DroolsPluginImages.DROOLS);
+		    			case 17: return DroolsPluginImages.getImage(DroolsPluginImages.DROOLS);
+		    			case 19: return DroolsPluginImages.getImage(DroolsPluginImages.DROOLS);
+		    		}
+	    		}
+	    		switch (type) {
+	    			case LogEvent.INSERTED: return DroolsPluginImages.getImage(DroolsPluginImages.INSERT);
+	    			case LogEvent.UPDATED: return DroolsPluginImages.getImage(DroolsPluginImages.UPDATE);
+	    			case LogEvent.RETRACTED: return DroolsPluginImages.getImage(DroolsPluginImages.RETRACT);
+	    			case LogEvent.ACTIVATION_CREATED: return DroolsPluginImages.getImage(DroolsPluginImages.CREATE_ACTIVATION);
+	    			case LogEvent.ACTIVATION_CANCELLED: return DroolsPluginImages.getImage(DroolsPluginImages.CANCEL_ACTIVATION);
+	    			case LogEvent.BEFORE_ACTIVATION_FIRE: return DroolsPluginImages.getImage(DroolsPluginImages.EXECUTE_ACTIVATION);
+	    			case LogEvent.BEFORE_RULEFLOW_CREATED: return DroolsPluginImages.getImage(DroolsPluginImages.RULEFLOW);
+	    			case LogEvent.BEFORE_RULEFLOW_COMPLETED: return DroolsPluginImages.getImage(DroolsPluginImages.RULEFLOW);
+                    case LogEvent.BEFORE_RULEFLOW_NODE_TRIGGERED: return DroolsPluginImages.getImage(DroolsPluginImages.RULEFLOW_NODE_TRIGGERED);
+	    			case LogEvent.BEFORE_RULEFLOW_GROUP_ACTIVATED: return DroolsPluginImages.getImage(DroolsPluginImages.RULEFLOW_GROUP);
+	    			case LogEvent.BEFORE_RULEFLOW_GROUP_DEACTIVATED: return DroolsPluginImages.getImage(DroolsPluginImages.RULEFLOW_GROUP);
+	    			case LogEvent.BEFORE_PACKAGE_ADDED: return DroolsPluginImages.getImage(DroolsPluginImages.DROOLS);
+	    			case LogEvent.BEFORE_PACKAGE_REMOVED: return DroolsPluginImages.getImage(DroolsPluginImages.DROOLS);
+	    			case LogEvent.BEFORE_RULE_ADDED: return DroolsPluginImages.getImage(DroolsPluginImages.DROOLS);
+	    			case LogEvent.BEFORE_RULE_REMOVED: return DroolsPluginImages.getImage(DroolsPluginImages.DROOLS);
+	    		}
+	    		return null;
+	    	}
+	        return null;
+	    }
+	}
+}

Added: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/debug/actions/FileAuditDropAdapter.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/debug/actions/FileAuditDropAdapter.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/debug/actions/FileAuditDropAdapter.java	2009-10-08 14:23:42 UTC (rev 29556)
@@ -0,0 +1,37 @@
+package org.drools.eclipse.debug.actions;
+
+import org.drools.eclipse.debug.AuditView;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerDropAdapter;
+import org.eclipse.swt.dnd.DropTargetListener;
+import org.eclipse.swt.dnd.FileTransfer;
+import org.eclipse.swt.dnd.TransferData;
+import org.eclipse.ui.part.ViewPart;
+
+public class FileAuditDropAdapter extends ViewerDropAdapter implements DropTargetListener {
+	
+	private AuditView view = null;
+	
+	public FileAuditDropAdapter(Viewer viewer, AuditView view) {
+		super(viewer);
+		this.view = view;
+	}
+
+	@Override
+	public boolean performDrop(Object data) {
+		String[] toDrop = (String[])data;
+		if (toDrop.length>0) {
+			view.setLogFile (toDrop[0]);
+			return true;
+		}
+		return false;
+	}
+	@Override
+	public boolean validateDrop(Object target, int operation,
+			TransferData transferType) {
+		return FileTransfer.getInstance().isSupportedType(transferType);
+
+	}
+
+}



More information about the jboss-svn-commits mailing list