package simgrid.msg;
import java.util.Vector;
+import java.util.Hashtable;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
-import java.lang.reflect.*;
/**
* The handler used to parse the deployment file which contains
* @since SimGrid 3.3
* @since JDK1.5011
*/
-public final class ApplicationHandler extends DefaultHandler
-{
-
- /*
- * This class is used to create the processes descibed in the deployment file.
- */
- class ProcessFactory
- {
- /**
+public final class ApplicationHandler extends DefaultHandler {
+
+ /*
+ * This class is used to create the processes descibed in the deployment file.
+ */
+ class ProcessFactory {
+ /**
* The vector which contains the arguments of the main function
* of the process object.
*/
- public Vector<String> args;
-
- /**
+ public Vector args;
+
+ public Hashtable properties;
+
+ /**
* The name of the host of the process.
- */
- private String hostName;
-
- /**
+ */
+ private String hostName;
+
+ /**
* The function of the process.
*/
- private String function;
-
- /**
+ private String function;
+
+
+ /**
* Default constructor.
*/
- public ProcessFactory(){
- this.args = new Vector<String>();
- this.hostName = null;
- this.function = null;
- }
-
- /**
+ public ProcessFactory() {
+ this.args = new Vector();
+ this.properties = new Hashtable();
+ this.hostName = null;
+ this.function = null;
+ }
+ /**
* This method is called by the start element handler.
* It sets the host and the function of the process to create,
* and clear the vector containing the arguments of the
* @function The function of the process to create.
*
*/
- public void setProcessIdentity(String hostName, String function){
- this.hostName = hostName;
- this.function = function;
-
- if(!args.isEmpty())
- args.clear();
- }
-
- /**
+ public void setProcessIdentity(String hostName, String function) {
+ this.hostName = hostName;
+ this.function = function;
+
+ if (!this.args.isEmpty())
+ this.args.clear();
+
+ if(!this.properties.isEmpty())
+ this.properties.clear();
+ }
+ /**
* This method is called by the startElement() handler.
* It stores the argument of the function of the next
* process to create in the vector of arguments.
*
* @arg The argument to add.
*
- */
- public void registerProcessArg(String arg){
- this.args.add(arg);
- }
-
- public void createProcess(){
- try {
-
- System.out.println("Create process " + function + " on the host " + hostName);
- Class cls = Class.forName(this.function);
- simgrid.msg.Process process = (simgrid.msg.Process)cls.newInstance();
- process.name = process.getName(); //this.function;
- process.id = simgrid.msg.Process.nextProcessId++;
- Host host = Host.getByName(this.hostName);
- Msg.processCreate(process,host);
-
- Vector<String> args = processFactory.args;
- int size = args.size();
-
- for(int index = 0; index < size; index++)
- process.addArg(args.get(index));
-
- } catch(JniException e)
- {
- System.out.println(e.toString());
- e.printStackTrace();
-
- } catch(NativeException e)
- {
- System.out.println(e.toString());
- e.printStackTrace();
-
- } catch(HostNotFoundException e) {
- System.out.println(e.toString());
- e.printStackTrace();
-
- } catch(ClassNotFoundException e) {
- System.out.println(this.function + " class not found\n The attribut function of the element process of your deployment file\n must correspond to the name of a Msg Proces class)");
- e.printStackTrace();
-
- } catch(InstantiationException e) {
- System.out.println("instantiation exception");
- e.printStackTrace();
- } catch (IllegalAccessException e) {
- System.out.println("illegal access exception");
- e.printStackTrace();
- } catch (IllegalArgumentException e) {
- System.out.println("illegal argument exception");
- e.printStackTrace();
- }
-
- }
- }
-
- /*
- * the ProcessFactory object used to create the processes.
- */
- private ProcessFactory processFactory;
+ */ public void registerProcessArg(String arg) {
+ this.args.add(arg);
+ }
+
+ public void setProperty(String id, String value)
+ {
+ this.properties.put(id,value);
+ }
- public ApplicationHandler() {
- super();
+ public String getHostName()
+ {
+ return this.hostName;
}
+
+ public void createProcess() {
+ try {
+
+ Class cls = Class.forName(this.function);
+
+ simgrid.msg.Process process = (simgrid.msg.Process) cls.newInstance();
+ process.name = /*process.getName();*/ this.function;
+ process.id = simgrid.msg.Process.nextProcessId++;
+ Host host = Host.getByName(this.hostName);
+
+ MsgNative.processCreate(process, host);
+ Vector args = processFactory.args;
+ int size = args.size();
+
+ for (int index = 0; index < size; index++)
+ process.args.add(args.get(index));
+
+ process.properties = this.properties;
+ this.properties = new Hashtable();
+
+ } catch(JniException e) {
+ System.out.println(e.toString());
+ e.printStackTrace();
+
+ } catch(NativeException e) {
+ System.out.println(e.toString());
+ e.printStackTrace();
+
+ } catch(HostNotFoundException e) {
+ System.out.println(e.toString());
+ e.printStackTrace();
+
+ } catch(ClassNotFoundException e) {
+ System.out.println(this.function +
+ " class not found\n The attribut function of the element process of your deployment file\n must correspond to the name of a Msg Proces class)");
+ e.printStackTrace();
+
+ } catch(InstantiationException e) {
+ System.out.println("instantiation exception");
+ e.printStackTrace();
+ } catch(IllegalAccessException e) {
+ System.out.println("illegal access exception");
+ e.printStackTrace();
+ } catch(IllegalArgumentException e) {
+ System.out.println("illegal argument exception");
+ e.printStackTrace();
+ }
+
+ }
+ }
+
+ /*
+ * the ProcessFactory object used to create the processes.
+ */
+ private ProcessFactory processFactory;
+
+ public ApplicationHandler() {
+ super();
+ }
/**
* instanciates the process factory
*/
- public void startDocument(){
- this.processFactory = new ProcessFactory();
- }
-
- public void characters(char[] caracteres, int debut, int longueur) {} // NOTHING TODO
-
+ public void startDocument() {
+ this.processFactory = new ProcessFactory();
+ }
+
+ public void characters(char[]caracteres, int debut, int longueur) {
+ } // NOTHING TODO
+
/**
* element handlers
*/
- public void startElement(String nameSpace, String localName,String qName,Attributes attr) {
- if(localName.equals("process"))
- onProcessIdentity(attr);
- else if(localName.equals("argument"))
- onProcessArg(attr);
- }
-
+ public void startElement(String nameSpace, String localName, String qName,
+ Attributes attr) {
+ if (localName.equals("process"))
+ onProcessIdentity(attr);
+ else if(localName.equals("prop"))
+ onProperty(attr);
+ else if (localName.equals("argument"))
+ onProcessArg(attr);
+ }
+
/**
* process attributs handler.
*/
- public void onProcessIdentity(Attributes attr) {
- processFactory.setProcessIdentity(attr.getValue(0),attr.getValue(1));
- }
-
- /**
+ public void onProcessIdentity(Attributes attr) {
+ processFactory.setProcessIdentity(attr.getValue(0), attr.getValue(1));
+ }
+
+ public void onProperty(Attributes attr) {
+ processFactory.setProperty(attr.getValue(0), attr.getValue(1));
+ }
+
+ /**
* process arguments handler.
*/
- public void onProcessArg(Attributes attr) {
- processFactory.registerProcessArg(attr.getValue(0));
- }
-
+ public void onProcessArg(Attributes attr) {
+ processFactory.registerProcessArg(attr.getValue(0));
+ }
+
/**
* creates the process
*/
- public void endElement(String nameSpace, String localName,String qName) {
- if(localName.equals("process"))
-{
- processFactory.createProcess();
- }
+ public void endElement(String nameSpace, String localName, String qName) {
+ if (localName.equals("process")) {
+ processFactory.createProcess();
}
-
- public void endDocument() {} // NOTHING TODO
+ }
+
+ public void endDocument() {
+ } // NOTHING TODO
}