tracesrv/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/plugin/PluginTracePropertyVerifier.java
author hgs
Fri, 08 Oct 2010 14:56:39 +0300
changeset 56 aa2539c91954
permissions -rw-r--r--
201041
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
56
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies). 
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
* Property verifier for trace objects
hgs
parents:
diff changeset
    17
*
hgs
parents:
diff changeset
    18
*/
hgs
parents:
diff changeset
    19
package com.nokia.tracecompiler.engine.plugin;
hgs
parents:
diff changeset
    20
hgs
parents:
diff changeset
    21
import java.util.Iterator;
hgs
parents:
diff changeset
    22
hgs
parents:
diff changeset
    23
import com.nokia.tracecompiler.engine.TraceCompilerEngineGlobals;
hgs
parents:
diff changeset
    24
import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorCodes.RangeErrorParameters;
hgs
parents:
diff changeset
    25
import com.nokia.tracecompiler.engine.TraceCompilerEngineErrorCodes.TraceCompilerErrorCode;
hgs
parents:
diff changeset
    26
import com.nokia.tracecompiler.model.Trace;
hgs
parents:
diff changeset
    27
import com.nokia.tracecompiler.model.TraceCompilerException;
hgs
parents:
diff changeset
    28
import com.nokia.tracecompiler.model.TraceConstantTable;
hgs
parents:
diff changeset
    29
import com.nokia.tracecompiler.model.TraceConstantTableEntry;
hgs
parents:
diff changeset
    30
import com.nokia.tracecompiler.model.TraceGroup;
hgs
parents:
diff changeset
    31
import com.nokia.tracecompiler.model.TraceModel;
hgs
parents:
diff changeset
    32
import com.nokia.tracecompiler.model.TraceObjectPropertyVerifier;
hgs
parents:
diff changeset
    33
import com.nokia.tracecompiler.model.TraceParameter;
hgs
parents:
diff changeset
    34
import com.nokia.tracecompiler.plugin.TraceCompilerPlugin;
hgs
parents:
diff changeset
    35
import com.nokia.tracecompiler.source.SourceConstants;
hgs
parents:
diff changeset
    36
import com.nokia.tracecompiler.source.SourceUtils;
hgs
parents:
diff changeset
    37
import com.nokia.tracecompiler.project.*;
hgs
parents:
diff changeset
    38
hgs
parents:
diff changeset
    39
/**
hgs
parents:
diff changeset
    40
 * Property verifier for trace objects
hgs
parents:
diff changeset
    41
 * 
hgs
parents:
diff changeset
    42
 */
hgs
parents:
diff changeset
    43
public final class PluginTracePropertyVerifier implements TraceObjectPropertyVerifier {
hgs
parents:
diff changeset
    44
hgs
parents:
diff changeset
    45
	/**
hgs
parents:
diff changeset
    46
	 * Valid data character range start
hgs
parents:
diff changeset
    47
	 */
hgs
parents:
diff changeset
    48
	private static final int DATA_CHAR_START = 0x20; // CodForChk_Dis_Magic
hgs
parents:
diff changeset
    49
hgs
parents:
diff changeset
    50
	/**
hgs
parents:
diff changeset
    51
	 * Valid data character range end
hgs
parents:
diff changeset
    52
	 */
hgs
parents:
diff changeset
    53
	private static final int DATA_CHAR_END = 0x7E; // CodForChk_Dis_Magic
hgs
parents:
diff changeset
    54
	/**
hgs
parents:
diff changeset
    55
	 * TAB character
hgs
parents:
diff changeset
    56
	 */
hgs
parents:
diff changeset
    57
	private static final int TAB =  0x9;  // CodForChk_Dis_Magic
hgs
parents:
diff changeset
    58
hgs
parents:
diff changeset
    59
	/**
hgs
parents:
diff changeset
    60
	 * Plugin engine
hgs
parents:
diff changeset
    61
	 */
hgs
parents:
diff changeset
    62
	private PluginEngine pluginEngine;
hgs
parents:
diff changeset
    63
hgs
parents:
diff changeset
    64
	/**
hgs
parents:
diff changeset
    65
	 * Constructor. Empty public constructor is needed by test class.
hgs
parents:
diff changeset
    66
	 */
hgs
parents:
diff changeset
    67
	public PluginTracePropertyVerifier() {
hgs
parents:
diff changeset
    68
		
hgs
parents:
diff changeset
    69
	}
hgs
parents:
diff changeset
    70
	
hgs
parents:
diff changeset
    71
	/**
hgs
parents:
diff changeset
    72
	 * Constructor
hgs
parents:
diff changeset
    73
	 * 
hgs
parents:
diff changeset
    74
	 * @param engine
hgs
parents:
diff changeset
    75
	 *            plug-in engine
hgs
parents:
diff changeset
    76
	 */
hgs
parents:
diff changeset
    77
	PluginTracePropertyVerifier(PluginEngine engine) {
hgs
parents:
diff changeset
    78
		this.pluginEngine = engine;
hgs
parents:
diff changeset
    79
	}
hgs
parents:
diff changeset
    80
hgs
parents:
diff changeset
    81
	/*
hgs
parents:
diff changeset
    82
	 * (non-Javadoc)
hgs
parents:
diff changeset
    83
	 * 
hgs
parents:
diff changeset
    84
	 * @see com.nokia.tracecompiler.model.TraceObjectPropertyVerifier#
hgs
parents:
diff changeset
    85
	 *      checkConstantProperties(com.nokia.tracecompiler.model.TraceConstantTable,
hgs
parents:
diff changeset
    86
	 *      com.nokia.tracecompiler.model.TraceConstantTableEntry, int,
hgs
parents:
diff changeset
    87
	 *      java.lang.String)
hgs
parents:
diff changeset
    88
	 */
hgs
parents:
diff changeset
    89
	public void checkConstantProperties(TraceConstantTable table,
hgs
parents:
diff changeset
    90
			TraceConstantTableEntry entry, int id, String value)
hgs
parents:
diff changeset
    91
			throws TraceCompilerException {
hgs
parents:
diff changeset
    92
		if (!SourceUtils.isValidName(value)) {
hgs
parents:
diff changeset
    93
			throw new TraceCompilerException(
hgs
parents:
diff changeset
    94
					TraceCompilerErrorCode.INVALID_CONSTANT_VALUE);
hgs
parents:
diff changeset
    95
		}
hgs
parents:
diff changeset
    96
		if (table != null) {
hgs
parents:
diff changeset
    97
			// If table exists, the value and ID must be unique
hgs
parents:
diff changeset
    98
			TraceConstantTableEntry old = table.findEntryByID(id);
hgs
parents:
diff changeset
    99
			if (old != null && old != entry) {
hgs
parents:
diff changeset
   100
				throw new TraceCompilerException(
hgs
parents:
diff changeset
   101
						TraceCompilerErrorCode.DUPLICATE_CONSTANT_ID);
hgs
parents:
diff changeset
   102
			}
hgs
parents:
diff changeset
   103
			old = table.findEntryByName(value);
hgs
parents:
diff changeset
   104
			if (old != null && old != entry) {
hgs
parents:
diff changeset
   105
				throw new TraceCompilerException(
hgs
parents:
diff changeset
   106
						TraceCompilerErrorCode.DUPLICATE_CONSTANT_VALUE);
hgs
parents:
diff changeset
   107
			}
hgs
parents:
diff changeset
   108
		}
hgs
parents:
diff changeset
   109
		Iterator<TraceCompilerPlugin> itr = pluginEngine.getPlugins();
hgs
parents:
diff changeset
   110
		while (itr.hasNext()) {
hgs
parents:
diff changeset
   111
			TraceCompilerPlugin provider = itr.next();
hgs
parents:
diff changeset
   112
			if (provider instanceof TraceObjectPropertyVerifier) {
hgs
parents:
diff changeset
   113
				((TraceObjectPropertyVerifier) provider)
hgs
parents:
diff changeset
   114
						.checkConstantProperties(table, entry, id, value);
hgs
parents:
diff changeset
   115
			}
hgs
parents:
diff changeset
   116
		}
hgs
parents:
diff changeset
   117
	}
hgs
parents:
diff changeset
   118
hgs
parents:
diff changeset
   119
	/*
hgs
parents:
diff changeset
   120
	 * (non-Javadoc)
hgs
parents:
diff changeset
   121
	 * 
hgs
parents:
diff changeset
   122
	 * @see com.nokia.tracecompiler.model.TraceObjectPropertyVerifier#
hgs
parents:
diff changeset
   123
	 *      checkConstantTableProperties(com.nokia.tracecompiler.model.TraceModel,
hgs
parents:
diff changeset
   124
	 *      com.nokia.tracecompiler.model.TraceConstantTable, int,
hgs
parents:
diff changeset
   125
	 *      java.lang.String)
hgs
parents:
diff changeset
   126
	 */
hgs
parents:
diff changeset
   127
	public void checkConstantTableProperties(TraceModel model,
hgs
parents:
diff changeset
   128
			TraceConstantTable table, int id, String tableName)
hgs
parents:
diff changeset
   129
			throws TraceCompilerException {
hgs
parents:
diff changeset
   130
		if (!SourceUtils.isValidName(tableName)) {
hgs
parents:
diff changeset
   131
			 throw new TraceCompilerException(
hgs
parents:
diff changeset
   132
			 TraceCompilerErrorCode.INVALID_CONSTANT_TABLE_NAME, false);
hgs
parents:
diff changeset
   133
		}
hgs
parents:
diff changeset
   134
		TraceConstantTable old = model.findConstantTableByID(id);
hgs
parents:
diff changeset
   135
		if (old != null && old != table) {
hgs
parents:
diff changeset
   136
			throw new TraceCompilerException(
hgs
parents:
diff changeset
   137
					TraceCompilerErrorCode.DUPLICATE_CONSTANT_TABLE_ID);
hgs
parents:
diff changeset
   138
		}
hgs
parents:
diff changeset
   139
		old = model.findConstantTableByName(tableName);
hgs
parents:
diff changeset
   140
		if (old != null && old != table) {
hgs
parents:
diff changeset
   141
			throw new TraceCompilerException(
hgs
parents:
diff changeset
   142
					TraceCompilerErrorCode.DUPLICATE_CONSTANT_TABLE_NAME);
hgs
parents:
diff changeset
   143
		}
hgs
parents:
diff changeset
   144
		Iterator<TraceCompilerPlugin> itr = pluginEngine.getPlugins();
hgs
parents:
diff changeset
   145
		while (itr.hasNext()) {
hgs
parents:
diff changeset
   146
			TraceCompilerPlugin provider = itr.next();
hgs
parents:
diff changeset
   147
			if (provider instanceof TraceObjectPropertyVerifier) {
hgs
parents:
diff changeset
   148
				((TraceObjectPropertyVerifier) provider)
hgs
parents:
diff changeset
   149
						.checkConstantTableProperties(model, table, id,
hgs
parents:
diff changeset
   150
								tableName);
hgs
parents:
diff changeset
   151
			}
hgs
parents:
diff changeset
   152
		}
hgs
parents:
diff changeset
   153
	}
hgs
parents:
diff changeset
   154
hgs
parents:
diff changeset
   155
	/*
hgs
parents:
diff changeset
   156
	 * (non-Javadoc)
hgs
parents:
diff changeset
   157
	 * 
hgs
parents:
diff changeset
   158
	 * @see com.nokia.tracecompiler.model.TraceObjectPropertyVerifier#
hgs
parents:
diff changeset
   159
	 *      checkTraceGroupProperties(com.nokia.tracecompiler.model.TraceModel,
hgs
parents:
diff changeset
   160
	 *      com.nokia.tracecompiler.model.TraceGroup, int, java.lang.String)
hgs
parents:
diff changeset
   161
	 */
hgs
parents:
diff changeset
   162
	public void checkTraceGroupProperties(TraceModel model, TraceGroup group,
hgs
parents:
diff changeset
   163
			int id, String name) throws TraceCompilerException {
hgs
parents:
diff changeset
   164
		if (!SourceUtils.isValidName(name)) {
hgs
parents:
diff changeset
   165
			throw new TraceCompilerException(
hgs
parents:
diff changeset
   166
					TraceCompilerErrorCode.INVALID_GROUP_NAME);
hgs
parents:
diff changeset
   167
		} else if ((id < 0) || (id > TraceCompilerEngineGlobals.MAX_GROUP_ID)) {
hgs
parents:
diff changeset
   168
			RangeErrorParameters params = new RangeErrorParameters();
hgs
parents:
diff changeset
   169
			params.start = 0;
hgs
parents:
diff changeset
   170
			params.end = TraceCompilerEngineGlobals.MAX_GROUP_ID;
hgs
parents:
diff changeset
   171
			params.isHex = true;
hgs
parents:
diff changeset
   172
			throw new TraceCompilerException(
hgs
parents:
diff changeset
   173
					TraceCompilerErrorCode.INVALID_GROUP_ID, params);
hgs
parents:
diff changeset
   174
		} else {
hgs
parents:
diff changeset
   175
			TraceGroup old = model.findGroupByID(id);
hgs
parents:
diff changeset
   176
			// this condition is to check that user defined group ids are unique.
hgs
parents:
diff changeset
   177
			// system defined group ids at present are not required to be unique.
hgs
parents:
diff changeset
   178
			if ((old != null) && (old != group) && (id >= GroupNames.USER_GROUP_ID_FIRST  ) && (id <= GroupNames.USER_GROUP_ID_LAST )) {
hgs
parents:
diff changeset
   179
				throw new TraceCompilerException(
hgs
parents:
diff changeset
   180
						TraceCompilerErrorCode.DUPLICATE_GROUP_ID);
hgs
parents:
diff changeset
   181
			}
hgs
parents:
diff changeset
   182
			old = model.findGroupByName(name);
hgs
parents:
diff changeset
   183
			if (old != null && old != group) {
hgs
parents:
diff changeset
   184
				throw new TraceCompilerException(
hgs
parents:
diff changeset
   185
						TraceCompilerErrorCode.DUPLICATE_GROUP_NAME);
hgs
parents:
diff changeset
   186
			}
hgs
parents:
diff changeset
   187
		}
hgs
parents:
diff changeset
   188
		Iterator<TraceCompilerPlugin> itr = pluginEngine.getPlugins();
hgs
parents:
diff changeset
   189
		while (itr.hasNext()) {
hgs
parents:
diff changeset
   190
			TraceCompilerPlugin provider = itr.next();
hgs
parents:
diff changeset
   191
			if (provider instanceof TraceObjectPropertyVerifier) {
hgs
parents:
diff changeset
   192
				((TraceObjectPropertyVerifier) provider)
hgs
parents:
diff changeset
   193
						.checkTraceGroupProperties(model, group, id, name);
hgs
parents:
diff changeset
   194
			}
hgs
parents:
diff changeset
   195
		}
hgs
parents:
diff changeset
   196
	}
hgs
parents:
diff changeset
   197
hgs
parents:
diff changeset
   198
	/*
hgs
parents:
diff changeset
   199
	 * (non-Javadoc)
hgs
parents:
diff changeset
   200
	 * 
hgs
parents:
diff changeset
   201
	 * @see com.nokia.tracecompiler.model.TraceObjectPropertyVerifier#
hgs
parents:
diff changeset
   202
	 *      checkTraceModelProperties(com.nokia.tracecompiler.model.TraceModel,
hgs
parents:
diff changeset
   203
	 *      int, java.lang.String, java.lang.String)
hgs
parents:
diff changeset
   204
	 */
hgs
parents:
diff changeset
   205
	public void checkTraceModelProperties(TraceModel model, int id,
hgs
parents:
diff changeset
   206
			String name, String path) throws TraceCompilerException {
hgs
parents:
diff changeset
   207
	}
hgs
parents:
diff changeset
   208
hgs
parents:
diff changeset
   209
	/*
hgs
parents:
diff changeset
   210
	 * (non-Javadoc)
hgs
parents:
diff changeset
   211
	 * 
hgs
parents:
diff changeset
   212
	 * @see com.nokia.tracecompiler.model.TraceObjectPropertyVerifier#
hgs
parents:
diff changeset
   213
	 *      checkTraceParameterProperties(com.nokia.tracecompiler.model.Trace,
hgs
parents:
diff changeset
   214
	 *      com.nokia.tracecompiler.model.TraceParameter, int, java.lang.String,
hgs
parents:
diff changeset
   215
	 *      java.lang.String)
hgs
parents:
diff changeset
   216
	 */
hgs
parents:
diff changeset
   217
	public void checkTraceParameterProperties(Trace owner,
hgs
parents:
diff changeset
   218
			TraceParameter parameter, int id, String name, String type)
hgs
parents:
diff changeset
   219
			throws TraceCompilerException {
hgs
parents:
diff changeset
   220
		if (!SourceUtils.isValidParameterName(name)) {
hgs
parents:
diff changeset
   221
			throw new TraceCompilerException(
hgs
parents:
diff changeset
   222
					TraceCompilerErrorCode.INVALID_PARAMETER_NAME);
hgs
parents:
diff changeset
   223
		}
hgs
parents:
diff changeset
   224
		TraceParameter old = owner.findParameterByID(id);
hgs
parents:
diff changeset
   225
		if (old != null && old != parameter) {
hgs
parents:
diff changeset
   226
			throw new TraceCompilerException(
hgs
parents:
diff changeset
   227
					TraceCompilerErrorCode.DUPLICATE_PARAMETER_ID);
hgs
parents:
diff changeset
   228
		}
hgs
parents:
diff changeset
   229
		old = owner.findParameterByName(name);
hgs
parents:
diff changeset
   230
		if (old != null && old != parameter) {
hgs
parents:
diff changeset
   231
			throw new TraceCompilerException(
hgs
parents:
diff changeset
   232
					TraceCompilerErrorCode.DUPLICATE_PARAMETER_NAME);
hgs
parents:
diff changeset
   233
		}
hgs
parents:
diff changeset
   234
		Iterator<TraceCompilerPlugin> itr = pluginEngine.getPlugins();
hgs
parents:
diff changeset
   235
		while (itr.hasNext()) {
hgs
parents:
diff changeset
   236
			TraceCompilerPlugin provider = itr.next();
hgs
parents:
diff changeset
   237
			if (provider instanceof TraceObjectPropertyVerifier) {
hgs
parents:
diff changeset
   238
				((TraceObjectPropertyVerifier) provider)
hgs
parents:
diff changeset
   239
						.checkTraceParameterProperties(owner, parameter, id,
hgs
parents:
diff changeset
   240
								name, type);
hgs
parents:
diff changeset
   241
			}
hgs
parents:
diff changeset
   242
		}
hgs
parents:
diff changeset
   243
	}
hgs
parents:
diff changeset
   244
hgs
parents:
diff changeset
   245
	/*
hgs
parents:
diff changeset
   246
	 * (non-Javadoc)
hgs
parents:
diff changeset
   247
	 * 
hgs
parents:
diff changeset
   248
	 * @see com.nokia.tracecompiler.model.TraceObjectPropertyVerifier#
hgs
parents:
diff changeset
   249
	 *      checkTraceProperties(com.nokia.tracecompiler.model.TraceGroup,
hgs
parents:
diff changeset
   250
	 *      com.nokia.tracecompiler.model.Trace, int, java.lang.String,
hgs
parents:
diff changeset
   251
	 *      java.lang.String)
hgs
parents:
diff changeset
   252
	 */
hgs
parents:
diff changeset
   253
	public void checkTraceProperties(TraceGroup group, Trace trace, int id,
hgs
parents:
diff changeset
   254
			String name, String data) throws TraceCompilerException {
hgs
parents:
diff changeset
   255
		if (!isValidData(data)) {
hgs
parents:
diff changeset
   256
			throw new TraceCompilerException(
hgs
parents:
diff changeset
   257
					TraceCompilerErrorCode.INVALID_TRACE_DATA);
hgs
parents:
diff changeset
   258
		} else if (!SourceUtils.isValidName(name)) {
hgs
parents:
diff changeset
   259
			throw new TraceCompilerException(
hgs
parents:
diff changeset
   260
					TraceCompilerErrorCode.INVALID_TRACE_NAME);
hgs
parents:
diff changeset
   261
		} else if ((id < 0) || (id > TraceCompilerEngineGlobals.MAX_TRACE_ID)) {
hgs
parents:
diff changeset
   262
			RangeErrorParameters params = new RangeErrorParameters();
hgs
parents:
diff changeset
   263
			params.start = 0;
hgs
parents:
diff changeset
   264
			params.end = TraceCompilerEngineGlobals.MAX_TRACE_ID;
hgs
parents:
diff changeset
   265
			params.isHex = true;
hgs
parents:
diff changeset
   266
			throw new TraceCompilerException(
hgs
parents:
diff changeset
   267
					TraceCompilerErrorCode.INVALID_TRACE_ID, params);
hgs
parents:
diff changeset
   268
		} else {
hgs
parents:
diff changeset
   269
			// Verifies the trace name is globally unique
hgs
parents:
diff changeset
   270
			Trace old = TraceCompilerEngineGlobals.getTraceModel().findTraceByName(
hgs
parents:
diff changeset
   271
					name);
hgs
parents:
diff changeset
   272
			if (old != trace && old != null) {
hgs
parents:
diff changeset
   273
				throw new TraceCompilerException(
hgs
parents:
diff changeset
   274
						TraceCompilerErrorCode.DUPLICATE_TRACE_NAME);
hgs
parents:
diff changeset
   275
			}
hgs
parents:
diff changeset
   276
			if (group != null) {
hgs
parents:
diff changeset
   277
				// If group exists, the trace ID and text must be unique within
hgs
parents:
diff changeset
   278
				// the group
hgs
parents:
diff changeset
   279
				old = group.findTraceByID(id);
hgs
parents:
diff changeset
   280
				if (old != trace && old != null) {
hgs
parents:
diff changeset
   281
					// Trace ID's must be unique within group
hgs
parents:
diff changeset
   282
					throw new TraceCompilerException(
hgs
parents:
diff changeset
   283
							TraceCompilerErrorCode.DUPLICATE_TRACE_ID);
hgs
parents:
diff changeset
   284
				}
hgs
parents:
diff changeset
   285
			}
hgs
parents:
diff changeset
   286
		}
hgs
parents:
diff changeset
   287
		Iterator<TraceCompilerPlugin> itr = pluginEngine.getPlugins();
hgs
parents:
diff changeset
   288
		while (itr.hasNext()) {
hgs
parents:
diff changeset
   289
			TraceCompilerPlugin provider = itr.next();
hgs
parents:
diff changeset
   290
			if (provider instanceof TraceObjectPropertyVerifier) {
hgs
parents:
diff changeset
   291
				((TraceObjectPropertyVerifier) provider).checkTraceProperties(
hgs
parents:
diff changeset
   292
						group, trace, id, name, data);
hgs
parents:
diff changeset
   293
			}
hgs
parents:
diff changeset
   294
		}
hgs
parents:
diff changeset
   295
	}
hgs
parents:
diff changeset
   296
hgs
parents:
diff changeset
   297
	/**
hgs
parents:
diff changeset
   298
	 * Checks the validity of data
hgs
parents:
diff changeset
   299
	 * 
hgs
parents:
diff changeset
   300
	 * @param data
hgs
parents:
diff changeset
   301
	 *            the data
hgs
parents:
diff changeset
   302
	 * @return true if valid
hgs
parents:
diff changeset
   303
	 */
hgs
parents:
diff changeset
   304
	private boolean isValidData(String data) {
hgs
parents:
diff changeset
   305
		boolean retval;
hgs
parents:
diff changeset
   306
		if (data != null) {
hgs
parents:
diff changeset
   307
			retval = true;
hgs
parents:
diff changeset
   308
			for (int i = 0; i < data.length() && retval; i++) {
hgs
parents:
diff changeset
   309
				char c = data.charAt(i);
hgs
parents:
diff changeset
   310
				// Unescaped quotes are not allowed
hgs
parents:
diff changeset
   311
				if (c == SourceConstants.QUOTE_CHAR
hgs
parents:
diff changeset
   312
						&& (i == 0 || data.charAt(i - 1) != SourceConstants.BACKSLASH_CHAR)) {
hgs
parents:
diff changeset
   313
					retval = false;
hgs
parents:
diff changeset
   314
				} else {
hgs
parents:
diff changeset
   315
					retval = isValidDataChar(c);
hgs
parents:
diff changeset
   316
				}
hgs
parents:
diff changeset
   317
			}
hgs
parents:
diff changeset
   318
		} else {
hgs
parents:
diff changeset
   319
			retval = false;
hgs
parents:
diff changeset
   320
		}
hgs
parents:
diff changeset
   321
		return retval;
hgs
parents:
diff changeset
   322
	}
hgs
parents:
diff changeset
   323
hgs
parents:
diff changeset
   324
	/**
hgs
parents:
diff changeset
   325
	 * Checks data character validity
hgs
parents:
diff changeset
   326
	 * 
hgs
parents:
diff changeset
   327
	 * @param c
hgs
parents:
diff changeset
   328
	 *            character
hgs
parents:
diff changeset
   329
	 * @return true if valid
hgs
parents:
diff changeset
   330
	 */
hgs
parents:
diff changeset
   331
	private boolean isValidDataChar(char c) {
hgs
parents:
diff changeset
   332
		// Special and extended characters are not allowed, except TAB
hgs
parents:
diff changeset
   333
		return c >= DATA_CHAR_START && c <= DATA_CHAR_END || c == TAB;
hgs
parents:
diff changeset
   334
	}
hgs
parents:
diff changeset
   335
hgs
parents:
diff changeset
   336
}