Organized imports
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / corext / template / php / CodeTemplateContextType.java
1 /*******************************************************************************
2  * Copyright (c) 2000, 2004 IBM Corporation and others.
3  * All rights reserved. This program and the accompanying materials 
4  * are made available under the terms of the Common Public License v1.0
5  * which accompanies this distribution, and is available at
6  * http://www.eclipse.org/legal/cpl-v10.html
7  * 
8  * Contributors:
9  *     IBM Corporation - initial API and implementation
10  *******************************************************************************/
11 package net.sourceforge.phpdt.internal.corext.template.php;
12
13 import java.util.ArrayList;
14
15 import net.sourceforge.phpdt.core.ToolFactory;
16 import net.sourceforge.phpdt.core.compiler.IScanner;
17 import net.sourceforge.phpdt.core.compiler.ITerminalSymbols;
18 import net.sourceforge.phpdt.core.compiler.InvalidInputException;
19 import net.sourceforge.phpdt.internal.corext.codemanipulation.StubUtility;
20
21 import org.eclipse.jface.text.templates.ContextTypeRegistry;
22 import org.eclipse.jface.text.templates.GlobalTemplateVariables;
23 import org.eclipse.jface.text.templates.TemplateContext;
24 import org.eclipse.jface.text.templates.TemplateContextType;
25 import org.eclipse.jface.text.templates.TemplateException;
26 import org.eclipse.jface.text.templates.TemplateVariable;
27 import org.eclipse.jface.text.templates.TemplateVariableResolver;
28
29 /**
30   */
31 public class CodeTemplateContextType extends TemplateContextType {
32         
33         /* context types */
34         public static final String CATCHBLOCK_CONTEXTTYPE= "php_catchblock_context"; //$NON-NLS-1$
35         public static final String METHODBODY_CONTEXTTYPE= "php_methodbody_context"; //$NON-NLS-1$
36         public static final String CONSTRUCTORBODY_CONTEXTTYPE= "php_constructorbody_context"; //$NON-NLS-1$
37         public static final String GETTERBODY_CONTEXTTYPE= "php_getterbody_context"; //$NON-NLS-1$
38         public static final String SETTERBODY_CONTEXTTYPE= "php_setterbody_context"; //$NON-NLS-1$
39         public static final String NEWTYPE_CONTEXTTYPE= "php_newtype_context"; //$NON-NLS-1$
40         public static final String NEWHTML_CONTEXTTYPE= "php_newhtml_context"; //$NON-NLS-1$
41         public static final String TYPECOMMENT_CONTEXTTYPE= "php_typecomment_context"; //$NON-NLS-1$
42         public static final String FIELDCOMMENT_CONTEXTTYPE= "php_fieldcomment_context"; //$NON-NLS-1$
43         public static final String METHODCOMMENT_CONTEXTTYPE= "php_methodcomment_context"; //$NON-NLS-1$
44         public static final String CONSTRUCTORCOMMENT_CONTEXTTYPE= "php_constructorcomment_context"; //$NON-NLS-1$
45         public static final String OVERRIDECOMMENT_CONTEXTTYPE= "php_overridecomment_context"; //$NON-NLS-1$
46         public static final String GETTERCOMMENT_CONTEXTTYPE= "php_gettercomment_context"; //$NON-NLS-1$
47         public static final String SETTERCOMMENT_CONTEXTTYPE= "php_settercomment_context"; //$NON-NLS-1$
48
49         /* templates */
50         public static final String COMMENT_SUFFIX= "comment"; //$NON-NLS-1$
51         public static final String CATCHBLOCK= "catchblock"; //$NON-NLS-1$
52         public static final String METHODSTUB= "methodbody"; //$NON-NLS-1$      
53         public static final String NEWTYPE= "newtype"; //$NON-NLS-1$    
54         public static final String NEWHTML= "newhtml"; //$NON-NLS-1$    
55         public static final String CONSTRUCTORSTUB= "constructorbody"; //$NON-NLS-1$
56         public static final String GETTERSTUB= "getterbody"; //$NON-NLS-1$
57         public static final String SETTERSTUB= "setterbody"; //$NON-NLS-1$
58         public static final String TYPECOMMENT= "type" + COMMENT_SUFFIX; //$NON-NLS-1$
59         public static final String FIELDCOMMENT= "field" + COMMENT_SUFFIX; //$NON-NLS-1$
60         public static final String METHODCOMMENT= "method" + COMMENT_SUFFIX; //$NON-NLS-1$
61         public static final String CONSTRUCTORCOMMENT= "constructor" + COMMENT_SUFFIX; //$NON-NLS-1$
62         public static final String OVERRIDECOMMENT= "override" + COMMENT_SUFFIX; //$NON-NLS-1$
63         public static final String GETTERCOMMENT= "getter" + COMMENT_SUFFIX; //$NON-NLS-1$
64         public static final String SETTERCOMMENT= "setter" + COMMENT_SUFFIX; //$NON-NLS-1$
65         
66         /* resolver types */
67         public static final String EXCEPTION_TYPE= "exception_type"; //$NON-NLS-1$
68         public static final String EXCEPTION_VAR= "exception_var"; //$NON-NLS-1$
69         public static final String ENCLOSING_METHOD= "enclosing_method"; //$NON-NLS-1$
70         public static final String ENCLOSING_TYPE= "enclosing_type"; //$NON-NLS-1$
71         public static final String BODY_STATEMENT= "body_statement"; //$NON-NLS-1$
72         public static final String FIELD= "field"; //$NON-NLS-1$
73         public static final String FIELD_TYPE= "field_type"; //$NON-NLS-1$
74         public static final String BARE_FIELD_NAME= "bare_field_name"; //$NON-NLS-1$
75         
76         public static final String PARAM= "param"; //$NON-NLS-1$
77         public static final String RETURN_TYPE= "return_type"; //$NON-NLS-1$
78         public static final String SEE_TAG= "see_to_overridden"; //$NON-NLS-1$
79         
80         public static final String TAGS= "tags"; //$NON-NLS-1$
81         
82         public static final String TYPENAME= "type_name"; //$NON-NLS-1$
83         public static final String FILENAME= "file_name"; //$NON-NLS-1$
84         public static final String PACKAGENAME= "package_name"; //$NON-NLS-1$
85         public static final String PROJECTNAME= "project_name"; //$NON-NLS-1$
86
87         public static final String PACKAGE_DECLARATION= "package_declaration"; //$NON-NLS-1$
88         public static final String TYPE_DECLARATION= "type_declaration"; //$NON-NLS-1$
89         public static final String TYPE_COMMENT= "typecomment"; //$NON-NLS-1$
90         
91         
92         /**
93          * Resolver that resolves to the variable defined in the context.
94          */
95         public static class CodeTemplateVariableResolver extends TemplateVariableResolver {
96                 public CodeTemplateVariableResolver(String type, String description) {
97                         super(type, description);
98                 }
99                 
100                 protected String resolve(TemplateContext context) {
101                         return context.getVariable(getType());
102                 }
103         }
104         
105         /**
106          * Resolver for javadoc tags.
107          */
108         public static class TagsVariableResolver extends TemplateVariableResolver {
109                 public TagsVariableResolver() {
110                         super(TAGS,  JavaTemplateMessages.getString("CodeTemplateContextType.variable.description.tags")); //$NON-NLS-1$
111                 }
112                 
113                 protected String resolve(TemplateContext context) {
114                         return "@"; //$NON-NLS-1$
115                 }
116         }       
117                 
118         /**
119          * Resolver for todo tags.
120          */
121         protected static class Todo extends TemplateVariableResolver {
122
123                 public Todo() {
124                         super("todo", JavaTemplateMessages.getString("CodeTemplateContextType.variable.description.todo")); //$NON-NLS-1$ //$NON-NLS-2$
125                 }
126                 
127                 protected String resolve(TemplateContext context) {
128                         String todoTaskTag= StubUtility.getTodoTaskTag(((CodeTemplateContext) context).getJavaProject());
129                         if (todoTaskTag == null)
130                                 return "XXX"; //$NON-NLS-1$
131         
132                         return todoTaskTag;
133                 }
134         }
135         
136         private boolean fIsComment;
137         
138         public CodeTemplateContextType(String contextName) {
139                 super(contextName);
140                 
141                 fIsComment= false;
142                 
143                 // global
144                 addResolver(new GlobalTemplateVariables.Dollar());
145                 addResolver(new GlobalTemplateVariables.Date());
146                 addResolver(new GlobalTemplateVariables.Year());
147                 addResolver(new GlobalTemplateVariables.Time());
148                 addResolver(new GlobalTemplateVariables.User());
149                 addResolver(new Todo());
150                 
151                 if (CATCHBLOCK_CONTEXTTYPE.equals(contextName)) {
152                         addResolver(new CodeTemplateVariableResolver(EXCEPTION_TYPE,  JavaTemplateMessages.getString("CodeTemplateContextType.variable.description.exceptiontype"))); //$NON-NLS-1$
153                         addResolver(new CodeTemplateVariableResolver(EXCEPTION_VAR,  JavaTemplateMessages.getString("CodeTemplateContextType.variable.description.exceptionvar"))); //$NON-NLS-1$
154                 } else if (METHODBODY_CONTEXTTYPE.equals(contextName)) {
155                         addResolver(new CodeTemplateVariableResolver(ENCLOSING_TYPE,  JavaTemplateMessages.getString("CodeTemplateContextType.variable.description.enclosingtype"))); //$NON-NLS-1$
156                         addResolver(new CodeTemplateVariableResolver(ENCLOSING_METHOD,  JavaTemplateMessages.getString("CodeTemplateContextType.variable.description.enclosingmethod"))); //$NON-NLS-1$
157                         addResolver(new CodeTemplateVariableResolver(BODY_STATEMENT,  JavaTemplateMessages.getString("CodeTemplateContextType.variable.description.bodystatement"))); //$NON-NLS-1$
158                 } else if (CONSTRUCTORBODY_CONTEXTTYPE.equals(contextName)) {
159                         addResolver(new CodeTemplateVariableResolver(ENCLOSING_TYPE,  JavaTemplateMessages.getString("CodeTemplateContextType.variable.description.enclosingtype"))); //$NON-NLS-1$
160                         addResolver(new CodeTemplateVariableResolver(BODY_STATEMENT,  JavaTemplateMessages.getString("CodeTemplateContextType.variable.description.bodystatement"))); //$NON-NLS-1$
161                 } else if (GETTERBODY_CONTEXTTYPE.equals(contextName)) {
162                         addResolver(new CodeTemplateVariableResolver(ENCLOSING_TYPE,  JavaTemplateMessages.getString("CodeTemplateContextType.variable.description.enclosingtype"))); //$NON-NLS-1$
163                         addResolver(new CodeTemplateVariableResolver(ENCLOSING_METHOD,  JavaTemplateMessages.getString("CodeTemplateContextType.variable.description.enclosingmethod"))); //$NON-NLS-1$
164                         addResolver(new CodeTemplateVariableResolver(FIELD, JavaTemplateMessages.getString("CodeTemplateContextType.variable.description.getterfieldname"))); //$NON-NLS-1$
165                 } else if (SETTERBODY_CONTEXTTYPE.equals(contextName)) {
166                         addResolver(new CodeTemplateVariableResolver(ENCLOSING_TYPE,  JavaTemplateMessages.getString("CodeTemplateContextType.variable.description.enclosingtype"))); //$NON-NLS-1$
167                         addResolver(new CodeTemplateVariableResolver(ENCLOSING_METHOD,  JavaTemplateMessages.getString("CodeTemplateContextType.variable.description.enclosingmethod"))); //$NON-NLS-1$
168                         addResolver(new CodeTemplateVariableResolver(FIELD, JavaTemplateMessages.getString("CodeTemplateContextType.variable.description.getterfieldname"))); //$NON-NLS-1$
169                         addResolver(new CodeTemplateVariableResolver(PARAM, JavaTemplateMessages.getString("CodeTemplateContextType.variable.description.param"))); //$NON-NLS-1$
170                 } else if (NEWTYPE_CONTEXTTYPE.equals(contextName)) {
171                         addResolver(new CodeTemplateVariableResolver(TYPENAME,  JavaTemplateMessages.getString("CodeTemplateContextType.variable.description.typename"))); //$NON-NLS-1$
172                         addResolver(new CodeTemplateVariableResolver(PACKAGE_DECLARATION,  JavaTemplateMessages.getString("CodeTemplateContextType.variable.description.packdeclaration"))); //$NON-NLS-1$
173                         addResolver(new CodeTemplateVariableResolver(TYPE_DECLARATION,  JavaTemplateMessages.getString("CodeTemplateContextType.variable.description.typedeclaration"))); //$NON-NLS-1$
174                         addResolver(new CodeTemplateVariableResolver(TYPE_COMMENT,  JavaTemplateMessages.getString("CodeTemplateContextType.variable.description.typecomment"))); //$NON-NLS-1$
175                         addCompilationUnitVariables();
176                 } else if (NEWHTML_CONTEXTTYPE.equals(contextName)) {
177                         addResolver(new CodeTemplateVariableResolver(TYPENAME,  JavaTemplateMessages.getString("CodeTemplateContextType.variable.description.typename"))); //$NON-NLS-1$
178                         addResolver(new CodeTemplateVariableResolver(PACKAGE_DECLARATION,  JavaTemplateMessages.getString("CodeTemplateContextType.variable.description.packdeclaration"))); //$NON-NLS-1$
179                         addResolver(new CodeTemplateVariableResolver(TYPE_DECLARATION,  JavaTemplateMessages.getString("CodeTemplateContextType.variable.description.typedeclaration"))); //$NON-NLS-1$
180                         addResolver(new CodeTemplateVariableResolver(TYPE_COMMENT,  JavaTemplateMessages.getString("CodeTemplateContextType.variable.description.typecomment"))); //$NON-NLS-1$
181                         addCompilationUnitVariables();
182                 }else if (TYPECOMMENT_CONTEXTTYPE.equals(contextName)) {
183                         addResolver(new CodeTemplateVariableResolver(TYPENAME,  JavaTemplateMessages.getString("CodeTemplateContextType.variable.description.typename"))); //$NON-NLS-1$
184                         addResolver(new CodeTemplateVariableResolver(ENCLOSING_TYPE,  JavaTemplateMessages.getString("CodeTemplateContextType.variable.description.enclosingtype"))); //$NON-NLS-1$
185                         addResolver(new TagsVariableResolver());
186                         addCompilationUnitVariables();
187                         fIsComment= true;
188                 } else if (FIELDCOMMENT_CONTEXTTYPE.equals(contextName)) {
189                         addResolver(new CodeTemplateVariableResolver(FIELD_TYPE, JavaTemplateMessages.getString("CodeTemplateContextType.variable.description.fieldtype"))); //$NON-NLS-1$
190                         addResolver(new CodeTemplateVariableResolver(FIELD, JavaTemplateMessages.getString("CodeTemplateContextType.variable.description.fieldname"))); //$NON-NLS-1$
191                         addCompilationUnitVariables();
192                         fIsComment= true;
193                 } else if (METHODCOMMENT_CONTEXTTYPE.equals(contextName)) {
194                         addResolver(new CodeTemplateVariableResolver(ENCLOSING_TYPE,  JavaTemplateMessages.getString("CodeTemplateContextType.variable.description.enclosingtype"))); //$NON-NLS-1$
195                         addResolver(new CodeTemplateVariableResolver(ENCLOSING_METHOD,  JavaTemplateMessages.getString("CodeTemplateContextType.variable.description.enclosingmethod"))); //$NON-NLS-1$
196                         addResolver(new CodeTemplateVariableResolver(RETURN_TYPE,  JavaTemplateMessages.getString("CodeTemplateContextType.variable.description.returntype"))); //$NON-NLS-1$
197                         addResolver(new TagsVariableResolver());
198                         addCompilationUnitVariables();
199                         fIsComment= true;
200                 } else if (OVERRIDECOMMENT_CONTEXTTYPE.equals(contextName)) {
201                         addResolver(new CodeTemplateVariableResolver(ENCLOSING_TYPE,  JavaTemplateMessages.getString("CodeTemplateContextType.variable.description.enclosingtype"))); //$NON-NLS-1$
202                         addResolver(new CodeTemplateVariableResolver(ENCLOSING_METHOD,  JavaTemplateMessages.getString("CodeTemplateContextType.variable.description.enclosingmethod"))); //$NON-NLS-1$
203                         addResolver(new CodeTemplateVariableResolver(SEE_TAG,  JavaTemplateMessages.getString("CodeTemplateContextType.variable.description.seetag"))); //$NON-NLS-1$
204                         addResolver(new TagsVariableResolver());
205                         addCompilationUnitVariables();
206                         fIsComment= true;
207                 } else if (CONSTRUCTORCOMMENT_CONTEXTTYPE.equals(contextName)) {
208                         addResolver(new CodeTemplateVariableResolver(ENCLOSING_TYPE,  JavaTemplateMessages.getString("CodeTemplateContextType.variable.description.enclosingtype"))); //$NON-NLS-1$
209                         addResolver(new TagsVariableResolver());
210                         addCompilationUnitVariables();
211                         fIsComment= true;
212                 } else if (GETTERCOMMENT_CONTEXTTYPE.equals(contextName)) {
213                         addResolver(new CodeTemplateVariableResolver(ENCLOSING_TYPE,  JavaTemplateMessages.getString("CodeTemplateContextType.variable.description.enclosingtype"))); //$NON-NLS-1$
214                         addResolver(new CodeTemplateVariableResolver(FIELD_TYPE,  JavaTemplateMessages.getString("CodeTemplateContextType.variable.description.getterfieldtype"))); //$NON-NLS-1$
215                         addResolver(new CodeTemplateVariableResolver(FIELD, JavaTemplateMessages.getString("CodeTemplateContextType.variable.description.getterfieldname"))); //$NON-NLS-1$
216                         addResolver(new CodeTemplateVariableResolver(ENCLOSING_METHOD,  JavaTemplateMessages.getString("CodeTemplateContextType.variable.description.enclosingmethod"))); //$NON-NLS-1$
217                         addResolver(new CodeTemplateVariableResolver(BARE_FIELD_NAME, JavaTemplateMessages.getString("CodeTemplateContextType.variable.description.barefieldname"))); //$NON-NLS-1$
218                         addCompilationUnitVariables();
219                         fIsComment= true;
220                 } else if (SETTERCOMMENT_CONTEXTTYPE.equals(contextName)) {
221                         addResolver(new CodeTemplateVariableResolver(ENCLOSING_TYPE,  JavaTemplateMessages.getString("CodeTemplateContextType.variable.description.enclosingtype"))); //$NON-NLS-1$
222                         addResolver(new CodeTemplateVariableResolver(FIELD_TYPE,  JavaTemplateMessages.getString("CodeTemplateContextType.variable.description.getterfieldtype"))); //$NON-NLS-1$
223                         addResolver(new CodeTemplateVariableResolver(FIELD, JavaTemplateMessages.getString("CodeTemplateContextType.variable.description.getterfieldname"))); //$NON-NLS-1$
224                         addResolver(new CodeTemplateVariableResolver(ENCLOSING_METHOD,  JavaTemplateMessages.getString("CodeTemplateContextType.variable.description.enclosingmethod"))); //$NON-NLS-1$
225                         addResolver(new CodeTemplateVariableResolver(PARAM, JavaTemplateMessages.getString("CodeTemplateContextType.variable.description.param"))); //$NON-NLS-1$
226                         addResolver(new CodeTemplateVariableResolver(BARE_FIELD_NAME, JavaTemplateMessages.getString("CodeTemplateContextType.variable.description.barefieldname"))); //$NON-NLS-1$
227                         addCompilationUnitVariables();
228                         fIsComment= true;
229                 }
230         }
231         
232         private void addCompilationUnitVariables() {
233                 addResolver(new CodeTemplateVariableResolver(FILENAME, JavaTemplateMessages.getString("CodeTemplateContextType.variable.description.filename"))); //$NON-NLS-1$
234                 addResolver(new CodeTemplateVariableResolver(PACKAGENAME, JavaTemplateMessages.getString("CodeTemplateContextType.variable.description.packagename"))); //$NON-NLS-1$
235                 addResolver(new CodeTemplateVariableResolver(PROJECTNAME, JavaTemplateMessages.getString("CodeTemplateContextType.variable.description.projectname"))); //$NON-NLS-1$
236         }
237         
238         /*
239          * @see net.sourceforge.phpdt.internal.corext.template.ContextType#validateVariables(net.sourceforge.phpdt.internal.corext.template.TemplateVariable[])
240          */
241         protected void validateVariables(TemplateVariable[] variables) throws TemplateException {
242                 ArrayList required=  new ArrayList(5);
243                 String contextName= getId();
244 //              if (NEWTYPE_CONTEXTTYPE.equals(contextName)) {
245 //                      required.add(PACKAGE_DECLARATION);
246 //                      required.add(TYPE_DECLARATION);
247 //              }
248                 for (int i= 0; i < variables.length; i++) {
249                         String type= variables[i].getType();
250                         if (getResolver(type) == null) {
251                                 throw new TemplateException(JavaTemplateMessages.getFormattedString("CodeTemplateContextType.validate.unknownvariable", type)); //$NON-NLS-1$
252                         }
253                         required.remove(type);
254                 }
255                 if (!required.isEmpty()) {
256                         String missing= (String) required.get(0);
257                         throw new TemplateException(JavaTemplateMessages.getFormattedString("CodeTemplateContextType.validate.missingvariable", missing)); //$NON-NLS-1$
258                 }
259                 super.validateVariables(variables);
260         }       
261         
262         
263
264         /* (non-Javadoc)
265          * @see net.sourceforge.phpdt.internal.corext.template.ContextType#createContext()
266          */
267         public TemplateContext createContext() {
268                 return null;
269         }
270
271         public static void registerContextTypes(ContextTypeRegistry registry) {
272                 registry.addContextType(new CodeTemplateContextType(CodeTemplateContextType.CATCHBLOCK_CONTEXTTYPE));
273                 registry.addContextType(new CodeTemplateContextType(CodeTemplateContextType.METHODBODY_CONTEXTTYPE));
274                 registry.addContextType(new CodeTemplateContextType(CodeTemplateContextType.CONSTRUCTORBODY_CONTEXTTYPE));
275                 registry.addContextType(new CodeTemplateContextType(CodeTemplateContextType.GETTERBODY_CONTEXTTYPE));
276                 registry.addContextType(new CodeTemplateContextType(CodeTemplateContextType.SETTERBODY_CONTEXTTYPE));           
277                 registry.addContextType(new CodeTemplateContextType(CodeTemplateContextType.NEWTYPE_CONTEXTTYPE));
278                 registry.addContextType(new CodeTemplateContextType(CodeTemplateContextType.NEWHTML_CONTEXTTYPE));
279                 
280                 registry.addContextType(new CodeTemplateContextType(CodeTemplateContextType.TYPECOMMENT_CONTEXTTYPE));
281                 registry.addContextType(new CodeTemplateContextType(CodeTemplateContextType.FIELDCOMMENT_CONTEXTTYPE));
282                 registry.addContextType(new CodeTemplateContextType(CodeTemplateContextType.METHODCOMMENT_CONTEXTTYPE));
283                 registry.addContextType(new CodeTemplateContextType(CodeTemplateContextType.CONSTRUCTORCOMMENT_CONTEXTTYPE));
284                 registry.addContextType(new CodeTemplateContextType(CodeTemplateContextType.OVERRIDECOMMENT_CONTEXTTYPE));              
285                 registry.addContextType(new CodeTemplateContextType(CodeTemplateContextType.GETTERCOMMENT_CONTEXTTYPE));                
286                 registry.addContextType(new CodeTemplateContextType(CodeTemplateContextType.SETTERCOMMENT_CONTEXTTYPE));                
287         }
288         
289         
290
291         /*
292          * @see net.sourceforge.phpdt.internal.corext.template.ContextType#validate(java.lang.String)
293          */
294         public void validate(String pattern) throws TemplateException {
295                 super.validate(pattern);
296                 if (fIsComment) {
297                         if (!isValidComment(pattern)) {
298                                 throw new TemplateException(JavaTemplateMessages.getString("CodeTemplateContextType.validate.invalidcomment")); //$NON-NLS-1$
299                         }
300                 }
301         }
302                 
303         
304         private boolean isValidComment(String template) {
305                 IScanner scanner= ToolFactory.createScanner(true, false, false, true);// false);
306                 scanner.setSource(template.toCharArray());
307                 try {
308                         int next= scanner.getNextToken();
309                         while (next == ITerminalSymbols.TokenNameCOMMENT_LINE || next == ITerminalSymbols.TokenNameCOMMENT_PHPDOC || next == ITerminalSymbols.TokenNameCOMMENT_BLOCK) {
310                                 next= scanner.getNextToken();
311                         }
312                         return next == ITerminalSymbols.TokenNameEOF;
313                 } catch (InvalidInputException e) {
314                 }
315                 return false;
316         }       
317
318 }