[kepler-dev] Re: kepler/src/org/geon MomlToGraph.java

Christopher Hylands Brooks cxh at eecs.berkeley.edu
Tue May 4 17:17:17 PDT 2004


BTW - There is a NamedObj.description() method that might do what you
want here.

ptolemy/actor/test/CompositeActor.tcl has a test for it:


######################################################################
####
#
test CompositeActor-7.1 {Test clone and description} {
    # NOTE: Uses the setup above
    set e4 [java::cast ptolemy.actor.CompositeActor [$e3 clone $w]]
    $e4 description
} {ptolemy.actor.CompositeActor {.E3} attributes {
    {ptolemy.kernel.util.SingletonConfigurableAttribute {.E3._iconDescription} attributes {
    }}
} ports {
    {ptolemy.actor.IOPort {.E3.P1} attributes {
    } links {
    } insidelinks {
    } configuration {{width 0}} receivers {
    } remotereceivers {
    }}
    {ptolemy.actor.IOPort {.E3.P2} attributes {
    } links {
    } insidelinks {
    } configuration {input output {width 0}} receivers {
    } remotereceivers {
    }}
    {ptolemy.actor.IOPort {.E3.P3} attributes {
    } links {
    } insidelinks {
    } configuration {output {width 0}} receivers {
    } remotereceivers {
    }}
    {ptolemy.actor.IOPort {.E3.P4} attributes {
    } links {
    } insidelinks {
    } configuration {input {width 0}} receivers {
    } remotereceivers {
    }}
    {ptolemy.actor.IOPort {.E3.P5} attributes {
    } links {
    } insidelinks {
    } configuration {{width 0}} receivers {
    } remotereceivers {
    }}
} classes {
} entities {
    {ptolemy.actor.CompositeActor {.E3.E5} attributes {
        {ptolemy.kernel.util.SingletonConfigurableAttribute {.E3.E5._iconDescription} attributes {
        }}
        {ptolemy.actor.Director {.E3.E5.WORMDIR} attributes {
            {ptolemy.kernel.util.SingletonConfigurableAttribute {.E3.E5.WORMDIR._iconDescription} attributes {
            }}
        }}
    } ports {
    } classes {
    } entities {
    } relations {
    }}
} relations {
}}


Subclasses define _description methods that get called appropriately
by description().

It would be great if we had an easier way to provide a visitor pattern
so that a developer could provide their own syntax, but we don't.

-Christopher


------- Forwarded Message


From: jaeger at ecoinformatics.org (Efrat Jaeger)
To: kepler-cvs at ecoinformatics.org
Subject: [kepler-cvs] kepler/src/org/geon MomlToGraph.java
Date: Tue, 4 May 2004 16:51:58 -0700 (PDT)

jaeger      04/05/04 16:51:58

  Added:       src/org/geon MomlToGraph.java
  Log:
  Translating a moml file into a simple graph.
  
  Revision  Changes    Path
  1.1                  kepler/src/org/geon/MomlToGraph.java
  
  Index: MomlToGraph.java
  ===================================================================
  package org.geon;
  
  import ptolemy.actor.IOPort;
  import ptolemy.actor.TypedCompositeActor;
  import ptolemy.kernel.ComponentEntity;
  import ptolemy.kernel.ComponentRelation;
  import ptolemy.kernel.Port;
  import ptolemy.kernel.util.NamedObj;
  import ptolemy.moml.MoMLParser;
  
  import java.io.BufferedWriter;
  import java.io.File;
  import java.io.FileWriter;
  import java.io.IOException;
  import java.net.URL;
  import java.util.Enumeration;
  import java.util.Iterator;
  import java.util.LinkedList;
  import java.util.List;
  import java.util.StringTokenizer;
  import java.util.Vector;
  
  import javax.xml.parsers.DocumentBuilder;
  import javax.xml.parsers.DocumentBuilderFactory;
  
  import org.w3c.dom.Document;
  import org.w3c.dom.Element;
  import org.w3c.dom.Node;
  import org.w3c.dom.NodeList;
  
  
  public class MomlToGraph {
  
          public MomlToGraph() {
  
          }
          
          public static void main(String args[]) throws Exception {
          	//TODO: add a file name to args.
          	
          	String _momlFileStr = 
          		"C:/Projects/kepler/workflows/test/SRBDemo.xml";
          	int ind = _momlFileStr.lastIndexOf("/");
          	String base = "", fileName = "";
          	if (ind > -1) {
          		base =  _momlFileStr.substring(0,ind);
          		fileName = _momlFileStr.substring(ind+1);
          	}
          	ind = fileName.indexOf(".");
          	String outputName = "";
          	if (ind > -1) {
          		outputName = fileName.substring(0,ind) + ".pl";
          	} else {
          		throw new Exception("file name exception");
          	}
  
              try {
              	File outputFile = new File(base+"/"+outputName);
                  BufferedWriter out = new BufferedWriter(new FileWriter(output
    File.getAbsolutePath(), false));
                  System.out.println(outputFile.getAbsolutePath());
              	File _momlFile = new File(_momlFileStr);
              	URL _momlUrl = _momlFile.toURL();
          	
              	MoMLParser parser = new MoMLParser();
              	parser.reset();
              	NamedObj toplevel = null;
              	toplevel = parser.parse(_momlUrl, _momlUrl);
              	String workspace = toplevel.getFullName();
              	int workspaceLen = workspace.length()+1;
              	TypedCompositeActor TCA = (TypedCompositeActor)toplevel;
              	Enumeration ents = TCA.getEntities();
              	String axiom = "";
              	while (ents.hasMoreElements()) {
              		Object obj = ents.nextElement();
              		ComponentEntity CA = (ComponentEntity) obj;
              		System.out.println(obj.getClass().getName());
              		//ComponentEntity CA = (ComponentEntity) ents.nextEleme
    nt();
              		System.out.println(CA.getClass());
              		System.out.println(CA.getName());
              		axiom = "Actor(" + CA.getName() + ",";
              		axiom += obj.getClass().getName() + ").";
              		out.write(axiom);
              		out.write("\r\n");
              	}
              	Enumeration rels = TCA.getRelations();
              	while (rels.hasMoreElements()) {
              		//List inputs = new LinkedList();
              		//List outputs = new LinkedList();
              		ComponentRelation CR = (ComponentRelation) rels.nextEle
    ment();
              		System.out.println(CR.getName());
              		Enumeration ports = CR.linkedPorts();
              		while (ports.hasMoreElements()) {
              			IOPort p = (IOPort)ports.nextElement();
              			System.out.println(p.getName());
  
              			// connect all input ports to output ports.
              			if (p.isInput()) {
              				Iterator connected = p.connectedPortLis
    t().iterator();
              				while (connected.hasNext()) {
              					// relations between ports.
              					IOPort outPort = (IOPort) conne
    cted.next();
              					String inP = p.getFullName().su
    bstring(workspaceLen);
              					String outP = outPort.getFullNa
    me().substring(workspaceLen);
                  				axiom = "PortRelation(" + inP +
     "," + outP + ").";
                  				out.write(axiom);
                  				out.write("\r\n");
                  				//relations between actors.
                  				int dotInd = inP.lastIndexOf(".
    ");
                  				if (dotInd > -1) {
                  					axiom = "Relation(" + i
    nP.substring(0,dotInd) + ",";
                  				} else {
                  					axiom = "Relation(" + i
    nP + ",";
                  				}
                  				dotInd = outP.lastIndexOf(".");
                  				if (dotInd > -1) {
                  					axiom += outP.substring
    (0,dotInd) + ").";
                  				} else {
                  					axiom += outP + ").";
                  				}
                  				out.write(axiom);
                  				out.write("\r\n");
                  				//TODO: TAKE CARE OF COMPOSITE 
    ENTITIES.
              				}
              			}
              		}
              		//Object _rel = rels.nextElement();
              		//System.out.println(_rel.getClass().getName());
    //          		System.out.println(CA.getClass());
    //          		System.out.println(CA.getName());
              	}
              	out.close();
              	parser.reset();
              	toplevel = null;
              	TCA = null;
               	System.out.println("get toplevel here!");
              } catch (IOException io) {
              	throw io;
              }
  
          }
  }
          
  
  
  
_______________________________________________
kepler-cvs mailing list
kepler-cvs at ecoinformatics.org
http://www.ecoinformatics.org/mailman/listinfo/kepler-cvs

------- End of Forwarded Message




More information about the Kepler-dev mailing list