trace/tracebuilder/com.nokia.tracebuilder/src/com/nokia/tracebuilder/engine/rules/ArrayParameterFlag.java
changeset 10 ed1c9f64298a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/trace/tracebuilder/com.nokia.tracebuilder/src/com/nokia/tracebuilder/engine/rules/ArrayParameterFlag.java	Wed Jun 23 14:35:40 2010 +0300
@@ -0,0 +1,175 @@
+/*
+ * Copyright (c) 2007-2010 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:
+ *
+ * UI flag for array parameter type
+ *
+ */
+package com.nokia.tracebuilder.engine.rules;
+
+import java.util.List;
+
+import com.nokia.tracebuilder.engine.TraceBuilderGlobals;
+import com.nokia.tracebuilder.engine.TraceObjectPropertyDialogTemplate;
+import com.nokia.tracebuilder.engine.TraceParameterPropertyDialogDynamicFlag;
+import com.nokia.tracebuilder.model.Trace;
+import com.nokia.tracebuilder.model.TraceModelExtension;
+import com.nokia.tracebuilder.model.TraceObject;
+import com.nokia.tracebuilder.model.TraceParameter;
+import com.nokia.tracebuilder.project.GroupNameHandlerBase;
+
+/**
+ * UI flag for array parameter type
+ * 
+ */
+final class ArrayParameterFlag extends DialogDynamicFlagBase implements
+		TraceParameterPropertyDialogDynamicFlag {
+
+	/**
+	 * Title shown in UI
+	 */
+	private static final String UI_TITLE = Messages
+			.getString("ArrayParameterFlag.Title"); //$NON-NLS-1$
+
+	/**
+	 * Template has been selected flag
+	 */
+	private boolean hasTemplate;
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracebuilder.engine.TraceObjectPropertyDialogFlag#
+	 * createExtensions(java.util.List)
+	 */
+	public void createExtensions(List<TraceModelExtension> extList) {
+		extList.add(new ArrayParameterRuleImpl());
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * com.nokia.tracebuilder.engine.TraceObjectPropertyDialogFlag#getText()
+	 */
+	public String getText() {
+		return UI_TITLE;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.nokia.tracebuilder.engine.TraceObjectPropertyDialogDynamicFlag#
+	 * templateChanged
+	 * (com.nokia.tracebuilder.engine.TraceObjectPropertyDialogTemplate)
+	 */
+	@Override
+	public boolean templateChanged(TraceObjectPropertyDialogTemplate template) {
+		boolean retval = false;
+		if (template != null) {
+			if (isAvailable()) {
+				setAvailable(false);
+				retval = true;
+			}
+			hasTemplate = true;
+		} else {
+			if (!isAvailable()) {
+				setAvailable(true);
+				retval = true;
+			}
+			hasTemplate = false;
+		}
+
+		// If Performance or State Trace is selected, array types are
+		// not supported
+		if (isPerformaceTraceSelected() || isStateTraceSelected()) {
+			setAvailable(false);
+			retval = true;
+		}
+		return retval;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * com.nokia.tracebuilder.engine.TraceParameterPropertyDialogDynamicFlag
+	 * #typeChanged(int)
+	 */
+	public boolean typeChanged(String newType) {
+		boolean retval = false;
+		if (!hasTemplate) {
+			// String arrays are not supported
+			if (newType != TraceParameter.ASCII
+					&& newType != TraceParameter.UNICODE
+					&& !isPerformaceTraceSelected() && !isStateTraceSelected()) {
+				if (!isAvailable()) {
+					setAvailable(true);
+					retval = true;
+				}
+			} else {
+				if (isAvailable()) {
+					setAvailable(false);
+					retval = true;
+				}
+			}
+		}
+
+		return retval;
+	}
+
+	/**
+	 * Check is Performance Event trace selected
+	 * 
+	 * @return true if Performance Event Trace is selected, otherwise false
+	 */
+	private boolean isPerformaceTraceSelected() {
+		boolean retval = false;
+
+		TraceObject selectedObject = TraceBuilderGlobals.getTraceBuilder()
+				.getSelectedObject();
+
+		if (selectedObject instanceof Trace) {
+			Trace trace = (Trace) selectedObject;
+			GroupNameHandlerBase groupNameHandler = TraceBuilderGlobals.getGroupNameHandler();
+			if (trace.getGroup().getName().equals(
+					groupNameHandler.getDefaultGroups()[groupNameHandler.getPerformanceGroupIdIndex()])) {
+				retval = true;
+			}
+		}
+		return retval;
+	}
+
+	/**
+	 * Check is State trace selected
+	 * 
+	 * @return true if State Trace is selected, otherwise false
+	 */
+	private boolean isStateTraceSelected() {
+		boolean retval = false;
+
+		TraceObject selectedObject = TraceBuilderGlobals.getTraceBuilder()
+				.getSelectedObject();
+
+		if (selectedObject instanceof Trace) {
+			Trace trace = (Trace) selectedObject;
+			GroupNameHandlerBase groupNameHandler = TraceBuilderGlobals.getGroupNameHandler();
+			if (trace.getGroup().getName().equals(
+					groupNameHandler.getDefaultGroups()[groupNameHandler.getStateGroupIdIndex()])) {
+				retval = true;
+			}
+		}
+		return retval;
+	}
+}