diff -r 14dc2103a631 -r ed1c9f64298a trace/tracebuilder/com.nokia.tracebuilder/src/com/nokia/tracebuilder/engine/propertydialog/PropertyDialogVerifier.java --- /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