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<TraceParameter> 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);
+ }
+
+}