From: Teiniker E. <tei...@us...> - 2007-02-13 13:56:54
|
Update of /cvsroot/ccmtools/ccmtools/src/ccmtools/parser/assembly/metamodel In directory sc8-pr-cvs4.sourceforge.net:/tmp/cvs-serv11134/src/ccmtools/parser/assembly/metamodel Added Files: Tag: BRANCH-FHJ Connection.java Value.java Port.java QualifiedName.java Module.java Constant.java AssemblyElement.java Component.java Model.java Attribute.java Number.java Assembly.java ModelElement.java Text.java Log Message: merged changes from trunk --- NEW FILE: Component.java --- /* * Created on Feb 5, 2007 * * R&D Salomon Automation (http://www.salomon.at) * * Robert Lechner (rob...@sa...) * * $Id: Component.java,v 1.3.2.1 2007/02/13 13:56:43 teiniker Exp $ */ package ccmtools.parser.assembly.metamodel; import java.io.PrintStream; import java.util.Map; /** * defines an inner component */ public class Component extends AssemblyElement { private QualifiedName idl_name_; private String name_; public Component( QualifiedName idl_name, String name ) { idl_name_ = idl_name; name_ = name; } void postProcessing( Assembly parent, Map<String, Component> components ) { parent_ = parent; idl_name_.postProcessing(parent.getParent()); if (components.containsKey(name_)) { throw new RuntimeException("inner component \"" + name_ + "\" already exists"); } components.put(name_, this); } public void prettyPrint( PrintStream out, String offset ) { out.println(offset + "component " + idl_name_ + " " + name_ + " ;"); } } --- NEW FILE: Text.java --- /* * Created on Feb 9, 2007 * * R&D Salomon Automation (http://www.salomon.at) * * Robert Lechner (rob...@sa...) * * $Id: Text.java,v 1.2.2.1 2007/02/13 13:56:46 teiniker Exp $ */ package ccmtools.parser.assembly.metamodel; public class Text extends Value { private String value_; public Text( String value ) { value_ = value; } public String toString() { return "\"" + value_ + "\""; } } --- NEW FILE: Connection.java --- /* * Created on Feb 5, 2007 * * R&D Salomon Automation (http://www.salomon.at) * * Robert Lechner (rob...@sa...) * * $Id: Connection.java,v 1.3.2.1 2007/02/13 13:56:42 teiniker Exp $ */ package ccmtools.parser.assembly.metamodel; import java.io.PrintStream; import java.util.Map; /** * connects a facet with a receptacle */ public class Connection extends AssemblyElement { private Port facet_; private Port receptacle_; public Connection( Port facet, Port receptacle ) { facet_ = facet; receptacle_ = receptacle; } void postProcessing( Assembly parent, Map<String, Component> components ) { parent_ = parent; facet_.postProcessing(components); receptacle_.postProcessing(components); } public void prettyPrint( PrintStream out, String offset ) { out.println(offset + "connect " + facet_ + " to " + receptacle_ + " ;"); } } --- NEW FILE: AssemblyElement.java --- /* * Created on Feb 5, 2007 * * R&D Salomon Automation (http://www.salomon.at) * * Robert Lechner (rob...@sa...) * * $Id: AssemblyElement.java,v 1.3.2.1 2007/02/13 13:56:43 teiniker Exp $ */ package ccmtools.parser.assembly.metamodel; import java.io.PrintStream; import java.util.Map; /** * One line of an assembly description. */ public abstract class AssemblyElement { public abstract void prettyPrint( PrintStream out, String offset ); protected Assembly parent_; /** * call this method after model creation * * @param parent the assembly * @param components map with all known inner components */ abstract void postProcessing( Assembly parent, Map<String, Component> components ); } --- NEW FILE: Constant.java --- /* * Created on Feb 9, 2007 * * R&D Salomon Automation (http://www.salomon.at) * * Robert Lechner (rob...@sa...) * * $Id: Constant.java,v 1.3.2.1 2007/02/13 13:56:43 teiniker Exp $ */ package ccmtools.parser.assembly.metamodel; import java.io.PrintStream; import java.util.Map; /** * sets the attribute of an inner component to a constant value */ public class Constant extends AssemblyElement { private Port target_; private Value value_; public Constant( Port target, Value value ) { target_ = target; value_ = value; } void postProcessing( Assembly parent, Map<String, Component> components ) { parent_ = parent; target_.postProcessing(components); } public void prettyPrint( PrintStream out, String offset ) { out.println(offset + "constant " + target_ + " = " + value_ + " ;"); } } --- NEW FILE: Attribute.java --- /* * Created on Feb 5, 2007 * * R&D Salomon Automation (http://www.salomon.at) * * Robert Lechner (rob...@sa...) * * $Id: Attribute.java,v 1.4.2.1 2007/02/13 13:56:43 teiniker Exp $ */ package ccmtools.parser.assembly.metamodel; import java.io.PrintStream; import java.util.Map; /** * connects an attribute of the assembly with the attribute of an inner component */ public class Attribute extends AssemblyElement { private Port target_; private Port source_; public Attribute( Port target, Port source ) { target_ = target; source_ = source; } void postProcessing( Assembly parent, Map<String, Component> components ) { parent_ = parent; target_.postProcessing(components); source_.postProcessing(components); } public void prettyPrint( PrintStream out, String offset ) { out.println(offset + "attribute " + target_ + " = " + source_ + " ;"); } } --- NEW FILE: Model.java --- /* * Created on Feb 5, 2007 * * R&D Salomon Automation (http://www.salomon.at) * * Robert Lechner (rob...@sa...) * * $Id: Model.java,v 1.4.2.1 2007/02/13 13:56:43 teiniker Exp $ */ package ccmtools.parser.assembly.metamodel; import java.io.PrintStream; import java.util.Vector; /** * The root element of the ccmtools assembly metamodel. */ public class Model { private Vector<ModelElement> elements_ = new Vector<ModelElement>(); /** * adds a new ModelElement */ public void add( ModelElement e ) { elements_.add(e); } /** * call this method after model creation */ public void postProcessing() { for (int i = 0; i < elements_.size(); ++i) { elements_.get(i).postProcessing(null); } } /** * prints the model to an output stream * * @param out the output stream */ public void prettyPrint( PrintStream out ) { for (int i = 0; i < elements_.size(); ++i) { elements_.get(i).prettyPrint(out, ""); } } } --- NEW FILE: Number.java --- /* * Created on Feb 9, 2007 * * R&D Salomon Automation (http://www.salomon.at) * * Robert Lechner (rob...@sa...) * * $Id: Number.java,v 1.2.2.1 2007/02/13 13:56:46 teiniker Exp $ */ package ccmtools.parser.assembly.metamodel; /** * a number (integer or floating point) */ public class Number extends Value { private String value_; public Number( String value ) { value_ = value; } public String toString() { return value_; } } --- NEW FILE: Value.java --- /* * Created on Feb 9, 2007 * * R&D Salomon Automation (http://www.salomon.at) * * Robert Lechner (rob...@sa...) * * $Id: Value.java,v 1.2.2.1 2007/02/13 13:56:42 teiniker Exp $ */ package ccmtools.parser.assembly.metamodel; /** * defines a constant value for attributs */ public abstract class Value { public abstract String toString(); } --- NEW FILE: ModelElement.java --- /* * Created on Feb 5, 2007 * * R&D Salomon Automation (http://www.salomon.at) * * Robert Lechner (rob...@sa...) * * $Id: ModelElement.java,v 1.3.2.1 2007/02/13 13:56:46 teiniker Exp $ */ package ccmtools.parser.assembly.metamodel; import java.io.PrintStream; /** * Top level element of the model. */ public abstract class ModelElement { protected String name_; protected ModelElement( String name ) { name_ = name; } public abstract void prettyPrint( PrintStream out, String offset ); protected Module parent_; /** * returns the parent Module of this element (or null) */ public Module getParent() { return parent_; } /** * call this method after model creation * * @param parent namespace or null */ abstract void postProcessing( Module parent ); } --- NEW FILE: QualifiedName.java --- /* * Created on Feb 5, 2007 * * R&D Salomon Automation (http://www.salomon.at) * * Robert Lechner (rob...@sa...) * * $Id: QualifiedName.java,v 1.4.2.1 2007/02/13 13:56:43 teiniker Exp $ */ package ccmtools.parser.assembly.metamodel; /** * a qualified name */ public final class QualifiedName { private String qn_; public QualifiedName( String qn ) { qn_ = qn; } public String toString() { return qn_; } private Module scope_; /** * defines the scope of this qualified name * * @param scope scope of this qualified name (or null for global scope) */ void postProcessing( Module scope ) { scope_ = scope; } } --- NEW FILE: Assembly.java --- /* * Created on Feb 5, 2007 * * R&D Salomon Automation (http://www.salomon.at) * * Robert Lechner (rob...@sa...) * * $Id: Assembly.java,v 1.4.2.1 2007/02/13 13:56:46 teiniker Exp $ */ package ccmtools.parser.assembly.metamodel; import java.io.PrintStream; import java.util.HashMap; import java.util.Vector; /** * defines one assembly */ public class Assembly extends ModelElement { private QualifiedName idl_name_; private Vector<AssemblyElement> elements_; public Assembly( String name, QualifiedName idl_name, Vector<AssemblyElement> elements ) { super(name); idl_name_ = idl_name; elements_ = elements; } private HashMap<String, Component> components_; void postProcessing( Module parent ) { parent_ = parent; idl_name_.postProcessing(parent); components_ = new HashMap<String, Component>(); for (int i = 0; i < elements_.size(); ++i) { elements_.get(i).postProcessing(this, components_); } } public void prettyPrint( PrintStream out, String offset ) { out.println(offset + "assembly " + name_ + " implements " + idl_name_ + " {"); for (int i = 0; i < elements_.size(); ++i) { elements_.get(i).prettyPrint(out, offset + " "); } out.println(offset + "};"); } } --- NEW FILE: Port.java --- /* * Created on Feb 5, 2007 * * R&D Salomon Automation (http://www.salomon.at) * * Robert Lechner (rob...@sa...) * * $Id: Port.java,v 1.4.2.1 2007/02/13 13:56:43 teiniker Exp $ */ package ccmtools.parser.assembly.metamodel; import java.util.Map; /** * facet or receptacle */ public final class Port { private String component_; private String connector_; /** * internal port (port of an inner component) * * @param component name of the inner component * @param connector facet or receptacle name */ public Port( String component, String connector ) { component_ = component; connector_ = connector; } /** * external port (port of the assembly) * * @param connector facet or receptacle name */ public Port( String connector ) { component_ = null; connector_ = connector; } public String toString() { if (component_ == null) return "this." + connector_; else return component_ + "." + connector_; } void postProcessing( Map<String, Component> components ) { if (component_ != null) { if (!components.containsKey(component_)) { throw new RuntimeException("inner component \"" + component_ + "\" is undefined"); } } } } --- NEW FILE: Module.java --- /* * Created on Feb 5, 2007 * * R&D Salomon Automation (http://www.salomon.at) * * Robert Lechner (rob...@sa...) * * $Id: Module.java,v 1.4.2.1 2007/02/13 13:56:43 teiniker Exp $ */ package ccmtools.parser.assembly.metamodel; import java.io.PrintStream; import java.util.Vector; /** * a namespace */ public class Module extends ModelElement { private Vector<ModelElement> children_; public Module( String name, Vector<ModelElement> children ) { super(name); children_ = children; } void postProcessing( Module parent ) { parent_ = parent; for (int i = 0; i < children_.size(); ++i) { children_.get(i).postProcessing(this); } } public void prettyPrint( PrintStream out, String offset ) { out.println(offset + "module " + name_ + " {"); for (int i = 0; i < children_.size(); ++i) { children_.get(i).prettyPrint(out, offset + " "); } out.println(offset + "};"); } } |