diff -r 14dc2103a631 -r ed1c9f64298a trace/tracebuilder/com.nokia.tracebuilder/src/com/nokia/tracebuilder/engine/propertydialog/DeleteMultipleTracesCallback.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/trace/tracebuilder/com.nokia.tracebuilder/src/com/nokia/tracebuilder/engine/propertydialog/DeleteMultipleTracesCallback.java Wed Jun 23 14:35:40 2010 +0300 @@ -0,0 +1,324 @@ +/* +* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +* Deletes multiple traces +* +*/ +package com.nokia.tracebuilder.engine.propertydialog; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import com.nokia.tracebuilder.engine.CheckListDialogEntry; +import com.nokia.tracebuilder.engine.LocationProperties; +import com.nokia.tracebuilder.engine.TraceBuilderDialogs; +import com.nokia.tracebuilder.engine.TraceBuilderGlobals; +import com.nokia.tracebuilder.engine.TraceLocationList; +import com.nokia.tracebuilder.engine.TraceBuilderDialogs.CheckListDialogParameters; +import com.nokia.tracebuilder.engine.TraceBuilderDialogs.CheckListDialogType; +import com.nokia.tracebuilder.engine.TraceBuilderDialogs.QueryDialogParameters; +import com.nokia.tracebuilder.engine.TraceBuilderErrorCodes.TraceBuilderErrorCode; +import com.nokia.tracebuilder.engine.source.SourceEngine; +import com.nokia.tracebuilder.engine.source.SourceProperties; +import com.nokia.tracebuilder.model.Trace; +import com.nokia.tracebuilder.model.TraceBuilderException; +import com.nokia.tracebuilder.model.TraceGroup; +import com.nokia.tracebuilder.model.TraceModel; +import com.nokia.tracebuilder.model.TraceObject; + +/** + * Deletes multiple traces + * + */ +public final class DeleteMultipleTracesCallback extends + DeleteTraceFromSourceCallback { + + /** + * Instrumentation engine contains sets of instrumented traces + */ + private InstrumentationEngine instrumentationEngine; + + /** + * Trace model + */ + private TraceModel model; + + /** + * Constructor + * + * @param model + * trace model + * @param sourceEngine + * source engine + * @param instrumentationEngine + * instrumentation engine + */ + public DeleteMultipleTracesCallback(TraceModel model, + SourceEngine sourceEngine, + InstrumentationEngine instrumentationEngine) { + super(model, sourceEngine); + this.model = model; + this.instrumentationEngine = instrumentationEngine; + } + + /** + * Shows the delete dialog + * + * @return the dialog result + * @throws TraceBuilderException + * if traces cannot be deleted + */ + @Override + public int delete() throws TraceBuilderException { + int retval; + ArrayList traces = new ArrayList(); + showDialog(traces); + if (traces.size() > 0) { + model.startProcessing(); + try { + for (int i = 0; i < traces.size(); i++) { + deleteTrace(traces.get(i)); + } + } finally { + model.processingComplete(); + } + retval = TraceBuilderDialogs.OK; + } else { + retval = TraceBuilderDialogs.CANCEL; + } + return retval; + } + + /** + * Deletes a trace + * + * @param trace + * the trace to be deleted + */ + private void deleteTrace(Trace trace) { + removeTraceFromSource(trace); + trace.getGroup().removeTrace(trace); + } + + /** + * Shows the dialog + * + * @param traces + * the list for traces to be removed + * @throws TraceBuilderException + * if processing fails + */ + private void showDialog(List traces) throws TraceBuilderException { + List rootEntries = null; + CheckListDialogEntry groups = createGroups(); + CheckListDialogEntry instrumentations = createInstrumentations(groups); + if (instrumentations.hasChildren()) { + rootEntries = new ArrayList(); + rootEntries.add(instrumentations); + rootEntries.add(groups); + } else if (groups.hasChildren()) { + rootEntries = new ArrayList(); + rootEntries.add(groups); + } + if (rootEntries != null) { + CheckListDialogParameters parameters = buildParameters(instrumentations + .hasChildren()); + parameters.rootItems = rootEntries; + parameters.dialogType = CheckListDialogType.DELETE_TRACES; + int ret = TraceBuilderGlobals.getDialogs() + .showCheckList(parameters); + if (ret == TraceBuilderDialogs.OK) { + // Deletes the checked traces + for (CheckListDialogEntry entry : rootEntries) { + addToList(entry, traces); + } + } + } else { + throw new TraceBuilderException( + TraceBuilderErrorCode.NO_TRACES_TO_DELETE); + } + } + + /** + * Builds the parameter list + * + * @param hasInstrumentation + * true if there are instrumentation entries + * @return the list + */ + private CheckListDialogParameters buildParameters(boolean hasInstrumentation) { + CheckListDialogParameters parameters = new CheckListDialogParameters(); + parameters.expandLevel = 0; + parameters.showRoot = hasInstrumentation; + return parameters; + } + + /** + * Creates instrumentations list + * + * @param groupRoot + * the root of groups list + * @return the root entry for instrumentations + */ + private CheckListDialogEntry createInstrumentations( + CheckListDialogEntry groupRoot) { + Iterator instrumentations = instrumentationEngine + .getInstrumenterIDs(); + CheckListDialogEntry instrumenterRoot = new CheckListDialogEntry(); + instrumenterRoot.setObject("Traces from instrumentations"); //$NON-NLS-1$ + while (instrumentations.hasNext()) { + String instrumenterID = instrumentations.next(); + addInstrumentation(instrumenterRoot, instrumenterID, groupRoot); + } + return instrumenterRoot; + } + + /** + * Adds traces from given instrumentation to the list + * + * @param entry + * the root entry for instrumentations + * @param instrumenterID + * the instrumenter ID + * @param groupRoot + * the root of groups list + */ + private void addInstrumentation(CheckListDialogEntry entry, + String instrumenterID, CheckListDialogEntry groupRoot) { + Iterator instrumentedTraces = instrumentationEngine + .getInstrumentedTraces(instrumenterID); + CheckListDialogEntry instrumenterEntry = new CheckListDialogEntry(); + instrumenterEntry.setObject(instrumenterID); + while (instrumentedTraces.hasNext()) { + Trace trace = (Trace) instrumentedTraces.next().getOwner(); + addTrace(instrumenterEntry, trace); + } + if (instrumenterEntry.hasChildren()) { + entry.addChild(instrumenterEntry); + } + } + + /** + * Adds a trace to given entry + * + * @param entry + * the root entry + * @param trace + * the trace + * @return the trace entry + */ + private CheckListDialogEntry addTrace(CheckListDialogEntry entry, + Trace trace) { + CheckListDialogEntry traceEntry = new CheckListDialogEntry(); + + TraceLocationList list = trace.getExtension(TraceLocationList.class); + if (list != null) { + for (LocationProperties loc : list) { + String traceLocationFileName = loc.getFileName(); + Iterator sources = TraceBuilderGlobals + .getTraceBuilder().getOpenSources(); + while (sources.hasNext()) { + SourceProperties source = sources.next(); + if (traceLocationFileName.equals(source.getFileName())) { + traceEntry.setObject(trace); + entry.addChild(traceEntry); + break; + } + } + } + } + + return traceEntry; + } + + /** + * Adds groups to the list + * + * @return the root of group entries + */ + private CheckListDialogEntry createGroups() { + CheckListDialogEntry groupRoot = new CheckListDialogEntry(); + groupRoot.setObject("Traces from groups"); //$NON-NLS-1$ + for (TraceGroup group : model) { + addGroup(groupRoot, group); + } + return groupRoot; + } + + /** + * Adds a group to the list + * + * @param rootEntry + * the root entry + * @param group + * the group + */ + private void addGroup(CheckListDialogEntry rootEntry, TraceGroup group) { + CheckListDialogEntry groupEntry = new CheckListDialogEntry(); + groupEntry.setObject(group); + for (Trace trace : group) { + addTrace(groupEntry, trace); + } + if (groupEntry.hasChildren()) { + rootEntry.addChild(groupEntry); + } + } + + /** + * Recursively adds children of given entry to the list of traces to be + * removed + * + * @param entry + * an entry + * @param traces + * the list of traces + */ + private void addToList(CheckListDialogEntry entry, List traces) { + if (entry.isChecked() && entry.getObject() instanceof Trace) { + traces.add((Trace) entry.getObject()); + } + for (CheckListDialogEntry child : entry) { + addToList(child, traces); + } + } + + /* + * (non-Javadoc) + * + * @see com.nokia.tracebuilder.engine.propertydialog.DeleteObjectCallback# + * buildQuery(com.nokia.tracebuilder.model.TraceObject) + */ + @Override + protected QueryDialogParameters buildQuery(TraceObject object) + throws TraceBuilderException { + // Not used, this class overrides the delete method + return null; + } + + /* + * (non-Javadoc) + * + * @see com.nokia.tracebuilder.engine.propertydialog.DeleteObjectCallback# + * deleteObject(com.nokia.tracebuilder.model.TraceObject, + * com.nokia.tracebuilder.engine.TraceBuilderDialogs.QueryDialogParameters) + */ + @Override + protected void deleteObject(TraceObject object, + QueryDialogParameters queryResults) { + // Not used, this class overrides the delete method + } + +}