testdev/ite/src/com.nokia.testfw.stf.scripteditor/src/com/nokia/testfw/stf/scripteditor/utils/Argument.java
changeset 1 96906a986c3b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testdev/ite/src/com.nokia.testfw.stf.scripteditor/src/com/nokia/testfw/stf/scripteditor/utils/Argument.java	Tue Mar 30 14:39:29 2010 +0800
@@ -0,0 +1,279 @@
+/*
+* Copyright (c) 2009 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:
+*
+*/
+
+package com.nokia.testfw.stf.scripteditor.utils;
+
+import java.util.ArrayList;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+class Argument implements Arguments {
+
+	public Argument(String value, String name, String binding, String nvalue) {
+		this.argumentType = value;
+		this.argumentName = name;
+		this.argumentBinding = binding;
+		this.argumentNextvalue = nvalue;
+
+	}
+
+	public String getNextValue() {
+		return argumentNextvalue;
+	}
+	
+	/**
+	 * @return argument type (ex. normal, selective)
+	 */
+	public String getArgumenType() {
+		return argumentType;
+	}
+
+	/**
+	 * @return expected argument value
+	 */
+	public String getArgumentName() {
+		return argumentName;
+	}
+
+	/**
+	 * @return expected binding value ("=" or space)
+	 */
+	public String getArgumentBinding() {
+		return argumentBinding;
+	}
+
+	/**
+	 * @return expected value of complex argument
+	 */
+	public String getargumentNextvalue() {
+		return argumentNextvalue;
+	}
+
+	/**
+	 * 
+	 */
+	public ArrayList<String> validate(ArrayList<String> tokenizedLine) {
+		boolean lineCorrect = false;
+		boolean firstArgument = false;
+		boolean secondArgument = false;
+		boolean thirdArgument = false;
+		if (tokenizedLine.size() > 0) {
+
+			if (this.argumentBinding.equals("none")) {
+
+				if (this.argumentType.equals("digit")) {
+
+					String patternString = "^[0-9+-]*$";
+
+					lineCorrect = validateArgment(patternString, tokenizedLine
+							.get(0));
+
+				} else if (this.argumentType.equals("literal")) {
+
+					String patternString = "^[0-9a-zA-Z\\\\/:=\\s._()-,]*$";
+
+					lineCorrect = validateArgment(patternString, tokenizedLine
+							.get(0));
+
+				} else if (this.argumentType.equals("name")) {
+
+					if (this.argumentName
+							.equalsIgnoreCase(tokenizedLine.get(0))) {
+						lineCorrect = true;
+					}
+					
+					
+				}else if (this.argumentType.equals("words")) {
+					tokenizedLine.clear();
+					
+				}else if (this.argumentType.equals("object")) {
+					for (int i = 0 ; i < Parser.createdObjectsList.size() ; i++){
+					if(Parser.createdObjectsList.get(i).equalsIgnoreCase(tokenizedLine.get(0))){
+						lineCorrect = true;
+					}
+					}
+				}else if (this.argumentType.equals("objectdelete")) {
+					for (int i = 0 ; i < Parser.createdObjectsList.size() ; i++){
+						if(Parser.createdObjectsList.get(i).equalsIgnoreCase(tokenizedLine.get(0))){
+							lineCorrect = true;
+							Parser.createdObjectsList.remove(i);
+						}
+						}
+				}else if (this.argumentType.equals("quoted")) {
+					if(tokenizedLine.get(0).startsWith("\"") && tokenizedLine.get(0).endsWith("\"")){
+						lineCorrect = true;
+					}
+				}
+
+				if (lineCorrect && tokenizedLine.size()>0) {
+					tokenizedLine.remove(0);
+
+				}
+
+			} else if (this.argumentBinding.equals("=")) {
+				if (tokenizedLine.size() > 2) {
+
+					if (this.argumentType.equals("digit")) {
+
+						String patternString = "^[0-9+-]*$";
+
+						firstArgument = validateArgment(patternString,
+								tokenizedLine.get(0));
+
+					} else if (this.argumentType.equals("literal")) {
+
+						String patternString = "^[0-9a-zA-Z\\\\/:._]*$";
+
+						firstArgument = validateArgment(patternString,
+								tokenizedLine.get(0));
+
+					} else if (this.argumentType.equals("name")) {
+
+						if (this.argumentName.equalsIgnoreCase(tokenizedLine
+								.get(0))) {
+							firstArgument = true;
+						}
+					}
+					if (tokenizedLine.get(1).equals("=")) {
+						secondArgument = true;
+
+					}
+					if (this.argumentNextvalue.equals("digit")) {
+
+						String patternString = "^[0-9+-]*$";
+
+						thirdArgument = validateArgment(patternString,
+								tokenizedLine.get(2));
+
+					} else if (this.argumentNextvalue.equals("literal")) {
+
+						String patternString = "^[0-9a-zA-Z\\\\/:._]*$";
+
+						thirdArgument = validateArgment(patternString,
+								tokenizedLine.get(2));
+
+					} else if (this.argumentNextvalue.equals("name")) {
+
+						if (this.argumentName.equalsIgnoreCase(tokenizedLine
+								.get(2))) {
+							thirdArgument = true;
+						}
+					}
+					else if (this.argumentNextvalue.equals("words")) {
+						tokenizedLine.clear();
+					
+					}
+					if (tokenizedLine.size()>0 && firstArgument && secondArgument && thirdArgument) {
+
+						tokenizedLine.remove(0);
+						tokenizedLine.remove(0);
+						tokenizedLine.remove(0);
+					}
+
+				} 
+			}else if (this.argumentBinding.equals("space")) {
+					if (tokenizedLine.size() > 1) {
+							if (this.argumentType.equals("digit")) {
+
+								String patternString = "^[0-9+-]*$";
+
+								firstArgument = validateArgment(patternString,
+										tokenizedLine.get(0));
+
+							} else if (this.argumentType.equals("literal")) {
+
+								String patternString = "^[0-9a-zA-Z\\\\/:._]*$";
+
+								firstArgument = validateArgment(patternString,
+										tokenizedLine.get(0));
+
+							} else if (this.argumentType.equals("name")) {
+
+								if (this.argumentName.equalsIgnoreCase(tokenizedLine
+										.get(0))) {
+									firstArgument = true;
+								}
+							}
+
+							if (this.argumentNextvalue.equals("digit")) {
+
+								String patternString = "^[0-9+-]*$";
+
+								thirdArgument = validateArgment(patternString,
+										tokenizedLine.get(1));
+
+							} else if (this.argumentNextvalue.equals("literal")) {
+
+								String patternString = "^[0-9a-zA-Z\\\\/:._]*$";
+
+								thirdArgument = validateArgment(patternString,
+										tokenizedLine.get(1));
+
+							} else if (this.argumentNextvalue.equals("name")) {
+
+								if (this.argumentName.equalsIgnoreCase(tokenizedLine
+										.get(1))) {
+									thirdArgument = true;
+								}
+							
+							}if (tokenizedLine.size()>0 && firstArgument &&  thirdArgument) {
+
+						tokenizedLine.remove(0);
+						tokenizedLine.remove(0);
+							}
+					}
+				}
+			}
+		
+
+		return tokenizedLine;
+
+	}
+
+	/**
+	 * Validate single argument
+	 * 
+	 * @param patternString -
+	 *            regular expresion mathing expected argument.
+	 * @param token -
+	 *            single token from tokenized line
+	 * @return true if argument is valid
+	 */
+	private boolean validateArgment(String patternString, String token) {
+		Pattern titlePattern = Pattern
+				.compile(patternString, Pattern.MULTILINE);
+		Matcher regExMatcher = titlePattern.matcher(token);
+		if (regExMatcher.find()) {
+			return true;
+
+		}
+		return false;
+	}
+
+	// define argument type (ex. digit, text or name)
+	private String argumentType;
+
+	// uniqe argument name, it is value of XML argument tag
+	private String argumentName;
+
+	// define argument binding type (ex. = or space)
+	private String argumentBinding;
+
+	// define type of value that argument can take (ex. digit or literal)
+	private String argumentNextvalue;
+
+}
\ No newline at end of file