diff -r 14dc2103a631 -r ed1c9f64298a trace/tracebuilder/com.nokia.tracebuilder/src/com/nokia/tracebuilder/engine/propertydialog/DeleteParameterCallback.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/trace/tracebuilder/com.nokia.tracebuilder/src/com/nokia/tracebuilder/engine/propertydialog/DeleteParameterCallback.java Wed Jun 23 14:35:40 2010 +0300 @@ -0,0 +1,140 @@ +/* +* Copyright (c) 2007 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: +* +* Trace parameter deletion query processor +* +*/ +package com.nokia.tracebuilder.engine.propertydialog; + +import java.util.Iterator; + +import com.nokia.tracebuilder.engine.LocationProperties; +import com.nokia.tracebuilder.engine.TraceLocation; +import com.nokia.tracebuilder.engine.TraceLocationList; +import com.nokia.tracebuilder.engine.TraceBuilderDialogs.DeleteObjectQueryParameters; +import com.nokia.tracebuilder.engine.TraceBuilderDialogs.QueryDialogParameters; +import com.nokia.tracebuilder.engine.TraceBuilderDialogs.QueryDialogType; +import com.nokia.tracebuilder.engine.TraceBuilderErrorCodes.TraceBuilderErrorCode; +import com.nokia.tracebuilder.engine.source.TraceFormattingRule; +import com.nokia.tracebuilder.engine.source.TraceParameterFormattingRule; +import com.nokia.tracebuilder.model.Trace; +import com.nokia.tracebuilder.model.TraceBuilderException; +import com.nokia.tracebuilder.model.TraceObject; +import com.nokia.tracebuilder.model.TraceParameter; +import com.nokia.tracebuilder.rules.TraceParameterRestrictionRule; + +/** + * Trace parameter deletion query processor + * + */ +public final class DeleteParameterCallback extends DeleteObjectCallback { + + /** + * Constructor + * + * @param parameter + * the parameter to be deleted + */ + public DeleteParameterCallback(TraceParameter parameter) { + super(parameter); + } + + /* + * (non-Javadoc) + * + * @see com.nokia.tracebuilder.engine.propertydialog.DeleteObjectCallback# + * buildQuery(com.nokia.tracebuilder.model.TraceObject) + */ + @Override + protected QueryDialogParameters buildQuery(TraceObject object) + throws TraceBuilderException { + TraceParameter parameter = (TraceParameter) object; + // If the owner prevents parameter deletion, it is not deleted + TraceParameterRestrictionRule rule = parameter.getTrace().getExtension( + TraceParameterRestrictionRule.class); + DeleteObjectQueryParameters params; + if (rule == null || rule.canRemoveParameters()) { + params = new DeleteObjectQueryParameters(); + params.dialogType = QueryDialogType.DELETE_PARAMETER; + params.objectName = parameter.getName(); + params.ownerName = parameter.getTrace().getName(); + } else { + throw new TraceBuilderException( + TraceBuilderErrorCode.PARAMETER_REMOVE_NOT_ALLOWED); + } + return params; + } + + /* + * (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) { + TraceParameter parameter = (TraceParameter) object; + Trace owner = parameter.getTrace(); + Iterator parameters = owner.getParameters(); + int index = 0; + boolean found = false; + // Calculates the index of the parameter in source + while (parameters.hasNext() && !found) { + TraceParameter param = parameters.next(); + TraceParameterFormattingRule rule = param + .getExtension(TraceParameterFormattingRule.class); + if (rule == null || rule.isShownInSource()) { + // Only parameters that are shown in source are checked + if (parameter == param) { + found = true; + } else { + index++; + } + } else { + // If the parameter to be removed is not shown in source, there + // is no need to update the locations + if (parameter == param) { + found = true; + index = -1; + } + } + } + if (found && index >= 0) { + // If index in source was found, the parameter lists in locations of + // the trace are updated. When the source is updated, the location + // gets the correct parameter list + TraceLocationList list = owner + .getExtension(TraceLocationList.class); + if (list != null) { + for (LocationProperties loc : list) { + ((TraceLocation) loc).removeParameterAt(index); + } + } + } + TraceFormattingRule rule = owner + .getExtension(TraceFormattingRule.class); + if (rule == null) { + rule = owner.getModel().getExtension(TraceFormattingRule.class); + } + if (rule != null) { + // Remove parameter text from trace text + rule.parameterAboutToBeRemoved(parameter, index); + } + parameter.getTrace().removeParameter(parameter); + } + +}