--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/trace/tracebuilder/com.nokia.tracebuilder/src/com/nokia/tracebuilder/engine/propertydialog/PropertyDialogVerifier.java Wed Jun 23 14:35:40 2010 +0300
@@ -0,0 +1,264 @@
+/*
+ * Copyright (c) 2008-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:
+ *
+ * Verifies the contents of a property dialog
+ *
+ */
+package com.nokia.tracebuilder.engine.propertydialog;
+
+import com.nokia.tracebuilder.engine.TraceBuilderGlobals;
+import com.nokia.tracebuilder.engine.TraceObjectPropertyDialog;
+import com.nokia.tracebuilder.engine.TraceObjectPropertyDialogVerifier;
+import com.nokia.tracebuilder.engine.TraceBuilderErrorCodes.TraceBuilderErrorCode;
+import com.nokia.tracebuilder.engine.rules.PerformanceEventTemplate;
+import com.nokia.tracebuilder.engine.rules.StateTraceTemplate;
+import com.nokia.tracebuilder.engine.utils.TraceUtils;
+import com.nokia.tracebuilder.model.Trace;
+import com.nokia.tracebuilder.model.TraceBuilderException;
+import com.nokia.tracebuilder.model.TraceConstantTable;
+import com.nokia.tracebuilder.model.TraceConstantTableEntry;
+import com.nokia.tracebuilder.model.TraceGroup;
+import com.nokia.tracebuilder.model.TraceModel;
+import com.nokia.tracebuilder.model.TraceObjectPropertyVerifier;
+import com.nokia.tracebuilder.plugin.TraceFormatConstants;
+import com.nokia.tracebuilder.project.FormattingUtils;
+import com.nokia.tracebuilder.project.GroupNameHandlerBase;
+
+/**
+ * Verifies the contents of a property dialog
+ *
+ */
+final class PropertyDialogVerifier implements TraceObjectPropertyDialogVerifier {
+
+ /**
+ * Property dialog
+ */
+ private TraceObjectPropertyDialog propertyDialog;
+
+ /**
+ * Trace model
+ */
+ private TraceModel model;
+
+ /**
+ * Constructor
+ *
+ * @param model
+ * the trace model
+ * @param propertyDialog
+ * the property dialog to be verified
+ */
+ PropertyDialogVerifier(TraceModel model,
+ TraceObjectPropertyDialog propertyDialog) {
+ this.propertyDialog = propertyDialog;
+ this.model = model;
+ }
+
+ /**
+ * Changes the property dialog
+ *
+ * @param propertyDialog
+ * new property dialog
+ */
+ void setPropertyDialog(TraceObjectPropertyDialog propertyDialog) {
+ this.propertyDialog = propertyDialog;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @seecom.nokia.tracebuilder.engine.TraceObjectPropertyDialogVerifier#
+ * verifyContents()
+ */
+ public void verifyContents() throws TraceBuilderException {
+ int type = propertyDialog.getDialogType();
+ String target = propertyDialog.getTarget();
+ TraceObjectPropertyVerifier verifier = model.getVerifier();
+ TraceGroup group;
+ TraceConstantTable table;
+ Trace trace;
+ int nextTraceID;
+ switch (type) {
+ case TraceObjectPropertyDialog.ADD_CONSTANT:
+ table = model.findConstantTableByName(target);
+ verifier.checkConstantProperties(table, null, propertyDialog
+ .getID(), propertyDialog.getName());
+ break;
+ case TraceObjectPropertyDialog.EDIT_CONSTANT:
+ TraceConstantTableEntry entry = (TraceConstantTableEntry) propertyDialog
+ .getTargetObject();
+ verifier.checkConstantProperties(entry.getTable(), entry,
+ propertyDialog.getID(), propertyDialog.getName());
+ break;
+ case TraceObjectPropertyDialog.ADD_PARAMETER:
+ trace = (Trace) propertyDialog.getTargetObject();
+ verifier.checkTraceParameterProperties(trace, null, propertyDialog
+ .getID(), propertyDialog.getName(), propertyDialog
+ .getValue());
+ break;
+ case TraceObjectPropertyDialog.ADD_TRACE:
+ nextTraceID = verifyGroupName(target, verifier);
+ group = model.findGroupByName(target);
+ verifier.checkTraceProperties(group, null, nextTraceID, propertyDialog
+ .getName(), propertyDialog.getValue());
+ break;
+ case TraceObjectPropertyDialog.EDIT_TRACE:
+ trace = (Trace) propertyDialog.getTargetObject();
+ verifier.checkTraceProperties(trace.getGroup(), trace,
+ propertyDialog.getID(), propertyDialog.getName(),
+ propertyDialog.getValue());
+ break;
+ case TraceObjectPropertyDialog.EDIT_GROUP:
+ group = model.findGroupByName(target);
+ verifier.checkTraceGroupProperties(model, group, propertyDialog
+ .getID(), propertyDialog.getName());
+ break;
+
+ case TraceObjectPropertyDialog.EDIT_CONSTANT_TABLE:
+ table = model.findConstantTableByName(target);
+ verifier.checkConstantTableProperties(model, table, propertyDialog
+ .getID(), propertyDialog.getName());
+ break;
+ case TraceObjectPropertyDialog.INSTRUMENTER:
+ nextTraceID = verifyGroupName(target, verifier);
+
+ // In case of instrumentation the formatting is verified
+ verifyInstrumentation();
+ break;
+ }
+ }
+
+ /**
+ * Verify Group Name
+ *
+ * @param groupName
+ * the name of the trace group
+ * @param verifier
+ * the verifier
+ * @return next trace ID
+ * @throws TraceBuilderException
+ */
+ private int verifyGroupName(String groupName,
+ TraceObjectPropertyVerifier verifier) throws TraceBuilderException {
+ TraceGroup group;
+ int nextTraceID;
+ preverifyGroupName();
+
+ // If group does not exist, the group properties must also be
+ // checked since it will be created
+ group = model.findGroupByName(groupName);
+ nextTraceID = 1;
+ if (group != null) {
+ nextTraceID = group.getNextTraceID();
+ } else {
+ int groupId = FormattingUtils.getGroupID(model, propertyDialog
+ .getTarget());
+
+ verifier.checkTraceGroupProperties(model, null, groupId,
+ propertyDialog.getTarget());
+ }
+ return nextTraceID;
+ }
+
+ /**
+ * Preverify group name
+ *
+ * @throws TraceBuilderException
+ */
+ private void preverifyGroupName() throws TraceBuilderException {
+
+ // Group name TRACE_STATE is allowed only if selected template is State
+ // Trace
+ // Group name TRACE_PERFORMANCE is allowed only if selected template is
+ // Performnce
+ // Event Entry-Exist
+ String groupName = propertyDialog.getTarget();
+ GroupNameHandlerBase groupNameHandler = TraceBuilderGlobals
+ .getGroupNameHandler();
+ String[] defaultGroups = groupNameHandler.getDefaultGroups();
+ if ((!(propertyDialog.getTemplate() instanceof StateTraceTemplate) && groupName
+ .equals(defaultGroups[groupNameHandler.getStateGroupIdIndex()]))
+ || (!(propertyDialog.getTemplate() instanceof PerformanceEventTemplate) && groupName
+ .equals(defaultGroups[groupNameHandler
+ .getPerformanceGroupIdIndex()]))) {
+ throw new TraceBuilderException(
+ TraceBuilderErrorCode.INVALID_GROUP_NAME);
+ }
+ }
+
+ /**
+ * Verifies that instrumentation dialog contents are valid
+ *
+ * @throws TraceBuilderException
+ * if contents are not valid
+ */
+ private void verifyInstrumentation() throws TraceBuilderException {
+ String nameFormat = propertyDialog.getName();
+ String traceFormat = propertyDialog.getValue();
+ if (nameFormat != null && traceFormat != null) {
+ if (hasFunctionName(nameFormat)) {
+ checkInstrumentationFormat(nameFormat, traceFormat);
+ } else {
+ throw new TraceBuilderException(
+ TraceBuilderErrorCode.TRACE_NAME_FORMAT_MISSING_FUNCTION);
+ }
+ } else {
+ if (nameFormat == null) {
+ throw new TraceBuilderException(
+ TraceBuilderErrorCode.INVALID_TRACE_NAME_FORMAT);
+ }
+ throw new TraceBuilderException(
+ TraceBuilderErrorCode.INVALID_TRACE_TEXT_FORMAT);
+ }
+ }
+
+ /**
+ * Formats the instrumentation dialog contents and checks the formatted data
+ *
+ * @param nameFormat
+ * the name format
+ * @param traceFormat
+ * the trace text format
+ * @throws TraceBuilderException
+ * if data is not valid
+ */
+ private void checkInstrumentationFormat(String nameFormat,
+ String traceFormat) throws TraceBuilderException {
+ // Removes tags and checks the remaining data
+ String name = TraceUtils.formatTrace(nameFormat, "_", "_"); //$NON-NLS-1$ //$NON-NLS-2$
+ String text = TraceUtils.formatTrace(traceFormat, "_", "_"); //$NON-NLS-1$ //$NON-NLS-2$
+ String target = propertyDialog.getTarget();
+ TraceGroup group = model.findGroupByName(target);
+ int id = 1;
+ if (group != null) {
+ id = group.getNextTraceID();
+ }
+ model.getVerifier().checkTraceProperties(group, null, id, name, text);
+ }
+
+ /**
+ * Checks if the format has the function name
+ *
+ * @param format
+ * the format
+ * @return true if it has the function name
+ */
+ private boolean hasFunctionName(String format) {
+ String nc = TraceFormatConstants.FORMAT_FUNCTION_NAME_NORMAL_CASE;
+ String uc = TraceFormatConstants.FORMAT_FUNCTION_NAME_UPPER_CASE;
+ return format.contains(nc) || format.contains(uc);
+ }
+
+}
\ No newline at end of file