View Javadoc

1   /********************************************************************************
2    *
3    *	Copyright (C) 2008 Fujitsu Services Ltd.
4    *
5    *	Author: Nick Battle
6    *
7    *	This file is part of VDMJ.
8    *
9    *	VDMJ is free software: you can redistribute it and/or modify
10   *	it under the terms of the GNU General Public License as published by
11   *	the Free Software Foundation, either version 3 of the License, or
12   *	(at your option) any later version.
13   *
14   *	VDMJ is distributed in the hope that it will be useful,
15   *	but WITHOUT ANY WARRANTY; without even the implied warranty of
16   *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17   *	GNU General Public License for more details.
18   *
19   *	You should have received a copy of the GNU General Public License
20   *	along with VDMJ.  If not, see <http://www.gnu.org/licenses/>.
21   *
22   ******************************************************************************/
23  
24  package org.overturetool.vdmj.commands;
25  
26  import java.util.regex.Matcher;
27  import java.util.regex.Pattern;
28  
29  import org.overturetool.vdmj.definitions.ClassDefinition;
30  import org.overturetool.vdmj.definitions.ClassList;
31  import org.overturetool.vdmj.runtime.ClassInterpreter;
32  import org.overturetool.vdmj.runtime.VDMThreadSet;
33  
34  
35  /***
36   * A class to read and perform class related commands from standard input.
37   */
38  
39  public class ClassCommandReader extends CommandReader
40  {
41  	/*** A ClassInterpreter version of the interpreter field. */
42  	private final ClassInterpreter cinterpreter;
43  
44  	public ClassCommandReader(ClassInterpreter interpreter, String prompt)
45  	{
46  		super(interpreter, prompt);
47  		cinterpreter = interpreter;
48  	}
49  
50  	@Override
51  	protected boolean doDefault(String line) throws Exception
52  	{
53  		String parts[] = line.split("//s+");
54  
55  		if (parts.length != 2)
56  		{
57  			throw new Exception("Usage: default <default class name>");
58  		}
59  
60  		cinterpreter.setDefaultName(parts[1]);
61  		println("Default class set to " + cinterpreter.getDefaultName());
62  		return true;
63  	}
64  
65  	@Override
66  	protected boolean doClasses(String line)
67  	{
68  		String def = cinterpreter.getDefaultName();
69  		ClassList classes = cinterpreter.getClasses();
70  
71  		for (ClassDefinition c: classes)
72  		{
73  			if (c.name.name.equals(def))
74  			{
75  				println(c.name.name + " (default)");
76  			}
77  			else
78  			{
79  				println(c.name.name);
80  			}
81  		}
82  
83  		return true;
84  	}
85  
86  	@Override
87  	protected boolean doCreate(String line) throws Exception
88  	{
89  		Pattern p = Pattern.compile("^create (//w+)//s*?:=//s*(.+)$");
90  		Matcher m = p.matcher(line);
91  
92  		if (m.matches())
93  		{
94  			String var = m.group(1);
95  			String exp = m.group(2);
96  
97  			cinterpreter.create(var, exp);
98  		}
99  		else
100 		{
101 			throw new Exception("Usage: create <id> := <value>");
102 		}
103 
104 		return true;
105 	}
106 
107 	@Override
108 	protected boolean doThreads(String line)
109 	{
110 		print(VDMThreadSet.getStatus());
111 		return true;
112 	}
113 
114 	@Override
115 	protected void doHelp(String line)
116 	{
117 		println("classes - list the loaded class names");
118 		println("threads - list active threads");
119 		println("default <class> - set the default class name");
120 		println("create <id> := <exp> - create a named variable");
121 		super.doHelp(line);
122 	}
123 }