diff -r f1112f777ce9 -r 96906a986c3b testdev/ite/src/com.nokia.testfw.stf.scripteditor/src/com/nokia/testfw/stf/scripteditor/utils/Argument.java --- /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 validate(ArrayList 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