Home

Cadena 2.0: Manual

image

Contents

1. c attr To avoid requiring script authors to essentially translate the Java code listing above into Python functions which then are invoked using the style x getAttrValue c attr the Cadena Python interpreter has been enhanced to attach helper functions at several points in the Cadena metamodel API These helper functions are accessed simply by requesting a particular field name on the metamodel object For example the ComponentInstance object is augmented to invoke a helper method very similar to getAtt rValue above whenever some attribute analogous to at t r is requested Thus one can simply write c attr in Cadena Python to fetch the value of a property named attr on a component instance Table 6 1 Supplementary Attributes in Python Environment gives a full listing of all these various syntax sugar attributes 24 Python Scripting Table 6 1 Supplementary Attributes in Python Environment Java Type Additional Attribute Description ComponentInstance any port option name n If n is the name of a port option on the component kind from which the ComponentInstance derives then the attribute n yields a map whose keys are the names of the ports declared inside that port option and whose values are PortProxy instances detailed below If no such port option n exists then a NameError is raised any property name n If n is the name of a property declared to exist on the kind or type from which the
2. Y mMyEventConnector server client connector connector connector interface ki interface ki meta conn meta conn meta conn PROVIDES USES mMyBundleConnector mMyCommandConnector mMyEventConnector MyEventinterface MyEventinterface mcConnector mcConnector mcConnector mMyEventinterface mMyEventinterface Once the connector kinds are created you should move on to create the component kind and name it MyComponent It will need 6 port options for the 6 types of connections that it can make usesBundle providesBundle usesEvent providesEvent usesCommand providesCommand The MyComponent will also have a single property type named location with an integer type 32 Plug In to Cadena Figure 7 4 eNesC Component Kinds in the Cadena Style Editor Component Meta Kinds Name Y MyComponent providesBundle providesCommand providesEvent useBundle usescommand usesEvent Y mMyComponent v location Category O component interface kind bindin interface kind bindin interface kind bindin interface kind bindin interface kind bindin interface kind bindin O meta component property declaration Parent Meta Kind Interface Met mMyComponent MyBundleinterface MyCommandinterface MyEventinterface MyBundleinterface MyCommandinterface MyEventinterface mComponent lt integer type gt integer providesBundle PROVIDES mMyBundlelnterface providesCommand PROVID
3. Product Line Development Software Product Lines SPL Middleware Type Service Meta Model Component Interface Connector Meta Kind Kind Platform Port Option Role Interface Kind and connectors as well as an optional collection of interfaces commands and events that it uses and provides This holds no logic An Eclipse term that refers to flags set on Eclipse projects These flags help Eclipse behave in a prescribed way For example certain actions features and builders are only available in projects with certain natures For example the Cadena Specification Path can only be defined in a project with a Cadena nature A Cadena term that refers to the path Cadena uses to find the model specifications available in a project This includes three distinct paths for styles modules and scenarios A Cadena nesC term that refers to a Cadena Module that is set to use the nesC style A Cadena nesC term that refers to a Cadena Scenario that 1s set to use the nesC style 43 Glossary Component Kind Connector Kind Instance Level Layer Assembly 44 Bibliography Eclipse URL Eclipse Eclipse Website 2001 nesC URL nesC Web Site TinyOS URL TinyOS Web Site Cadena URL isc Cadena Web Site 45
4. Glossary Cadena TinyOS nesC Eclipse workspace project Module File Scenario File Scenario Module Style nesC Interface nesC Module nesC Configuration An Eclipse based extensible integrated modeling and development framework for component based systems An open source operating system designed for wireless embedded sensor networks It features a component based architecture which enables rapid innovation and implementation while minimizing code size as required by the severe memory constraints inherent in sensor networks An extension to the C programming language designed to embody the structuring concepts and execution model of TinyOS An open source community whose projects are focused on building an open development platform comprised of extensible frameworks tools and runtimes for building deploying and managing software across the lifecycle When we refer to Eclipse it is usually as an IDE or platform and not the project or community An Eclipse term that refers to the central hub for all user data This is a specific folder directory A good quote from the Eclipse website is you can think of the platform workbench as a tool that allows the user to navigate and manipulate the workspace An Eclipse term that refers to a specific type of resource in the workspace To be more specific a workspace contains a collection of projects Projects contain files and folders A Cadena term that refers to
5. as nested scenarios and connectors which tie the instances together The New Scenario Wizard To create a new scenario Use the navigator view to browse to a folder within a Cadena project where the scenario will be placed The folder that is chosen should be a part of the scenario path for the project The standard location for this is in the specification scenario folder Right click on the chosen folder and select New Other from the pop up menu The new resource dialog should appear From the tree on the left select Cadena Cadena Scenario and then click the Next button The Cadena Scenario wizard page of the wizard should appear To continue a valid scenario name must be entered The desired style of the scenario must also be selected Once a valid scenario name and style have been selected the Finish button may be clicked to create the scenario If the scenario is succesfully created a scenario editor for the new scenario will be opened The Scenario Editor The scenario editor is used to view and modify Cadena scenarios The editor has three tabs the Overview tab the Table tab and the Graph tab The Overview tab is used to view and modify general aspects of the scenario The Table tab provides a table based view for viewing and modifying the individual elements that comprise the model The Graph tab provides a graph based view for viewing and modifying the individual elements of the model as well Pro
6. 10 Complete Style Extension point in Eclipse Plugin in Manifest Editor Extensions Q All Extensions l B Extension Element Details Define extensions for this plug in in the following section Set the properties of style Required fields are denoted by type filter text URI http cadena wallentine com eNesC style Add resource specification eNesC style Browse v edu ksu cis cadena core specifications E style Overview Dependencies Runtime Extensions Extension Points Build MANIFEST MF plugin xml build properties Once you have added the URI and resource you can save the changes You have now added your new style to your new platform plugin You are now ready to add the visual style which is described in the section called Add the Visual Style Testing the Platform Plugin Now that you have a platform plugin you may want to test to make sure you have done everything correct up to this point This is very easy using Eclipse s built in facilities for debugging Eclipse plug ins You simply need to run it as an Eclipse Application a k a a runtime workbench Once you start up the new Eclipse instance you can create a new Cadena project In that new project you can create a new Module When creating that module you should be able to select your newly create style from the list If it isn t available you have a problem that needs to be debugged You can now continue the development o
7. New Plug in Project x Plug in Content Enter the data required to generate the plug in ug in Properties D Plug in ID ledu cis cadena platform sensorNetwork Plug in Version 1 0 0 Plug in Name SensorNetwork Plug in Plug in Provider Santos Lab Classpath Plug in Options Y Generate an activator a Java class that controls the plug in s life cycle Activator edu cis cadena platform sensornetwork Activator Y This plug in will make contributions to the UI Rich Client Application Would you like to create a rich client application O Yes No lt Back Next gt Einish Cancel 34 Plug In to Cadena The next screen provides an easy way to create certain types of plugins using project templates In this case we don t want to use any of the templates so you should unselect the checkbox for Create a plug in using one of the templates This can be seen in Figure 7 8 New Plugin Project Complete It Once you unselect click Finish and the new project will be created for you Figure 7 8 New Plugin Project Complete It New Plug in Project x Templates Zr C Create a plug in using one of the templates Available Templates lt Back Einish Cancel The new plugin project is now created and ready for the style the visual style and the new generator To continue the journey of
8. Role Interface type variable binding properties Name Description interfaceKind The interface kind that this binding is bound to Note this property is not present if the binding is for a role and the role specified is an interface type variable as it s interface constraint Only interface kinds that inherit from the role s chosen interface meta kind may be used Attributes While kinds and kind features are useful for creating the functional aspects of a model it is often useful to attach non functional data in the form of non stateful attributes Attributes are useful in configuring the underlying middleware and service infrastructure of a system The attribute values can then be used for many things including schedulability analysis code generation configuration management and deployment configuration generation Attribute specifications may be attached to any meta kinds To add an attribute specification right click on a meta kind and select Add Property Type The new attribute specification should show up as a child of the meta kind An attribute specification has the following properties Table 3 9 Attribute specification properties Name Description name The unique identifier of the attribute Attribute values are named according to their specification s name kind The binding time of the attribute This binding time determines at what tier in the model a value can be assigned to the attribute
9. We suggest naming it similar to our naming convention The name starts 33 Plug In to Cadena with your domain name in reverse in our case edu ksu cis and you append cadena platform so that it is obviously a plugin for Cadena and that it is a platform Finally append a name for the platform In this case we will name our platform sensorNetwork This results in a plugin named edu ksu cis cadena platform sensorNetwork Althought it might be something like com wallentine cadena platform sensorNetwork or net tinyos cadena platform sensorNetwork Figure 7 6 New Plugin Project Name It e New Plug in Project x Plug in Project Create a new plug in project Project name edu cis cadena platform sensorNetwork N Use default location Project Settings IV Create a Java project Source folder sre Output folder bin Target Platform This plug in is targeted to run with amp Eclipse version 33 O an OSGi framework O lt Back Next gt cancel The next screen allows you to configure some plugin options that describe the plugin to users Feel free to accept the defaults or change them as you see fit We suggest you at least leave the Plug in ID and Plug in Version alone This can be seen in Figure 7 7 New Plugin Project ID It After you are satisfied with your changes click Next to continue the wizard Figure 7 7 New Plugin Project ID It e
10. along the hierarchy until a property value is attached At the point that a value is specified for the property the property becomes finalized Once a property is finalized values can no longer be specified for the property at a lower point in the hierarchy meaning that values may not be overridden See Figure 3 1 Property Value Hierarchy for a diagram of the property value hierarchy 11 Style Tier Figure 3 1 Property Value Hierarchy Initial Interface Meta Kind gt Specification of Component Meta Kind C Connector Meta Kind the Property x Y Y Interface Kind Component Kind Connector Kind EN 2 AA gu 2 m Connector Kind Connector Kind Component Kind S Role Binding P Interface Type Variable Binding al Port Option Binding _ V A N N Interface Type N lt b 7 LEY Properties Y N Component Type NS T EIE V left open by er a Poke TE Port 7 parent IG Component Type 9 V etd component x vA Y types may be ee ee finalized by Y Component Type y child _ AAA X ud Port componen Component Type e zm types ia N NI s Inst p Y Connector omponentinstance Component Instance Connector D Ke Role ciy rot A k Inheritance Cadena allows for structural inheritance in two different ways The first way is meta kind inheritance When one meta kind inherits from another all of the features port opti
11. anonymous extensions of the adapter AbstractModelChangeAction class CadenaEclipsePlugin enqueueModelChangeAction new AbstractModelChangeAction public void run element setAttr newValue A similar thing can be done in the Python environment f Cadena API imports from edu ksu cis cadena core queue import AbstractModelChangeAction from edu ksu cis cadena eclipse import CadenaEclipsePlugin class SomeModelChangeAction AbstractModelChangeAction def __init self lement newValue self element element self newValue newValu def run self self element setAttr self newValue element fetch object to be modified action SomeModelChangeAction element newValue CadenaEclipsePlugin enqueueModelChangeAction action Putting it all Together To this point various idioms for accomplishing isolated tasks inside a Cadena Python script have been introduced This section will present an example stitching all these techniques together to accomplish a real task 26 Python Scripting The Premise Suppose that a given Cadena scenario exists which has undergone incremental changes over an extended time As component instances have been added and removed the component integrators have not been careful always to remove those connectors which have unbound roles This leaves a scenario which is probably malformed Although this sort of misconfiguration will probably already b
12. formally capture the definition of widely used component models such as the CORBA Component Model CCM Enterprise Java Beans EJB and nesC a component model for sensor networks built on TinyOS Meta models can include attributes that represent settings and parameters for underlying middleware frameworks on which systems will be deployed Define domain specific component models Cadena meta modeling can also be applied to specify new component models including domain specific component models that are tailored to the characteristics of a particular domain or underlying middleware capabilities Hexibly combine and extend multiple component models in a single system Cadena meta models called styles can be directly manipulated using style operations This provides a variety of powerful and useful capabilities to system architects Styles can be extended through inheritance This enables reuse of meta model definitions and facilities refinement of platform definitions multi step platform independent to platform specific model refinement Multiple styles can be combined within the same architecture model environment to support development of systems of systems that incorporate multiple component models Define end to end model driven development environments Cadena s base set of capabilities can be extended using plug in mechanisms based on the Eclipse plug in architecture This enables infrastructure developers to build end to en
13. instance getPropertyValue propertyDeclaration 0 if directProperty None propertyValue directProperty getValue if propertyValue None return propertyValue getValue return None Fetch the property declaration from the given instance that has the given property name The type of the returned object will a PropertyDeclaration edu ksu cis cadena core specification property def fetchPropertyDeclaration instance name for propertyDeclaration in instance getAllPropertyDeclarations if name propertyDeclaration getName return propertyDeclaration return None Main Logic Walk through the scenario and print the name of the instance and what location it should be deployed to first we need to get the scenario Scenario fetchRoot selection next we will collect up the component and scenario instances for instance in scenario allInstances location getLocation instance 40 Plug In to Cadena print Instance name s Location location d name instance name location location Once you have entered the text into the new Python script you should save it Once saved you can use it from within the Scenario Switch to the Scenario Editor that has your Scenario open If you are in the Table or Graph view right click to bring up the context menu In that menu there is a Jython sub menu that has a menu item named Run Jython Script Select it and
14. selected in the Graph view drag points will displayed on its two end points The end of the role that is connected to a component s port can be dragged to another component s port using this drag point If the new component port can be bound to the role a cursor that looks like a will be displayed If the new component port can not be used a circle with a line through it will be displayed on Navigating the Scenario Editor There are many ways to use the Scenario Editor to get the job done Below you will find a list of tips on using the Scenario Editor in an efficient manner 19 Scenario Tier When using scenario instances in a scenario the user can use the Ctl key along with double clicking on the instance to open up the sub scenario in a new Scenario Editor When using component instances in a scenario the user can use the Ctl key along with double clicking on the instance to open up the component type in a new Module Editor For all instances in a scenario the user can double click on the instance to open up the Propertiew View that will show the properties associated with that instance The Graph and Table views are connected in two ways 1 the underlying model and 2 the graphical user interface GUI state Specicially when you are in the Graph view and you have an instance or connector selected you can switch to the Table view and see that instance of connector selected as well 20 Chapter 6 Python Scripti
15. theType The type of the attribute The following attribute types are supported string integer boolean enum struct and collection The attribute types are described in more detail below defaultValue The default value of the attribute This is an optional property If no value is specified for an attribute by the user the value of the attribute is then equal to the default value Basic Property Types The following basic property types are supported 10 Style Tier Table 3 10 Basic Property Types Name Description string A sequence of characters integer A numerical integer boolean An enumerated domain corresponding to the usual notion of the mathematical Boolean field The two legal literals in this enumerated type are t rue and false enum A user defined enumerated value To use this property one or more enum members need to be added To add a member expand the attribute specification so that the lt enum type gt child is visible Right click on the child and select Add Enum Member from the menu The new member should show up as a child of the lt enum type gt child Double click on the new enum member and set its name struct A struct is a composite type that allows one more nested named child properties called struct members To add a child struct member expand the attribute specification so that the lt struct type gt child is visible Right click on the child an
16. 2 Type Properties sc ee in VETE PEA Nose haa POSEEN 14 4 3 Component Type properties sss HH HH eme hene rene 15 4 4 Component port properties inerte ttr rtr REI be ot ER ERR e EE e ed RP R EYE 15 3 1 Visual Style Color Values 22er Ro Ds 18 6 1 Supplementary Attributes in Python Environment sseeee IH 25 7 1 eNesC Interface Kinds er eere tr nn anne 31 7 2 eNesC Connector Kinds na ae la e ER rem RR eU RR dico 31 vii Chapter 1 Overview The Cadena 2 0 Manual was created as a complete reference manual for the Cadena development environment It has a feature centric focus meaning that it describes features and how they are used This is slightly different than the Cadena tutorials which provide a task centric focus meaning that it describes tasks and how they can be accomplished using features available in the Cadena development environment Cadena Cadena is an Eclipse based extensible integrated modeling and development framework for component based systems Cadena s models are type centric in that multi level type systems are used to specify and enforce a variety of architectural constraints relevant to development of large scale systems and software product lines Cadena provides the following capabilities to system architects infrastructure developers and system developers Define modeling environments for widely used component models Cadena s meta modeling capabilities can be used to
17. Cadena 2 0 Manual Jesse Greenwald Todd Wallentine Cadena 2 0 Manual Jesse Greenwald Todd Wallentine Copyright O 2007 The SAnToS Laboratory K State Table of Contents 1 Overview 22 cese eie Pd e SER I oer bb tele oat d sete bae orbes iet ee d da tu o se be Abad 1 Cadena id A A E Ao es A A A ur PE EE 1 Component Based Development center derer EE RR EE ES PISES ESSE 1 Eclipse Overview erica eds 2 Cadena Installation sesse 222 cte ette er dro poten Ege 2 2 A Cadena Project u en a Res 3 OveivieW nn tree RS HS E oU He POPE owas esos RI RR res e ER QE Re RA 3 The New Project Wizard tete nte vetet en Dress dns 3 Configuring a Project css ecce en Rte coe I la 3 Dou c EE 3 Project Dependencies ir EO X RR CER ERE KEENE RE RERFOPER GER CERE REEF HER 4 3 Style Tier ann NI 9 The New Style Wizard 2er nn 5 MERI M X 5 Providing the Visual Style 0 2 2 2 8 00 e RR ee esse PO Besen 5 Kinds tii a ana In res Dann 6 Interface Kinds 2 rs ea rei u Br 7 Component Kinds A IR an NR INE 7 Connector Kinds iere on dE ibn Dean sn 8 xul d P 10 Basic Property Types nee ee pi epi 10 User Defined Property Types sssessese III eme a 11 Property Values c oca ee xe ER ne nennen erfahre 11 Inherit nee iu ee e pe eee etes pede reete certet 12 4 Module lier 2 2 eet mte re rc te meto eer Be eicere i
18. ES mMyCommandinterface providesEvent PROVIDES mMyEventinterface useBundle USES mMyBundleinterface usesCommand USES mMyCommandinterface usesEvent USES mMyEventinterface The style is now created and should be saved To save open the File menu and select Save Cadena Model To continue the journey of creating a new platform for use in Cadena move on to the next section the section called Create the Eclipse Plugin Project Create the Eclipse Plugin Project Anytime you want to create a new Eclipse plugin you will likely follow the same steps For more detail on this please see the Eclipse documentation that is available online help eclipse org or in Eclipse Help Help Contents In short you will use a New Project Wizard to create a new plugin project where your style visual style and other extensions will be stored To start the wizard select the File menu then the New sub menu and finally the Project menu item A new dialog will be shown and you should select Plugin in Project and press Next Figure 7 5 Menus to create a new project Edit Navigate Search Project Run Window Help New Sine UNES 2 java Project Package G Class Interface G Enum Annotation 4 amp 3 Source Folder C Folder File E Untitled Text File ES JUnit Test Case Revert Cadena Model Save Cadena Madal F5 Other At this point you should name it and accept the rest of the defaults on this page unless you know better already
19. Eclipse Text Editor depending on what plug ins you have installed and how you have it configured it may open up an external application like emacs vi or notepad Once opened enter the following code which prints the names of the instances and the associated location User Interface API imports from edu ksu cis cadena eclipse import CadenaEclipsePlugin from edu ksu cis cadena core queue import AbstractModelChangeAction 39 Plug In to Cadena Eclipse API imports from org eclipse emf ecore import EObject from org eclipse jface viewers import IStructuredSelection Miscellaneous Java library imports from java lang import Runnable Thread 4 Fetch the root EObject from the JFace current selection def fetchRoot selection if selection is None or selection isEmpty return None elif not isinstance selection IStructuredSelection return None elif isinstance selection firstElement EObject root selection firstElement while not root is None and not root eContainer is None root root eContainer return root Get the location property value from the given instance It is assumed that the name of the property is location and it has a type of IntegerValue Therefore the return type is Long java lang def getLocation instance propertyDeclaration fetchPropertyDeclaration instance location if propertyDeclaration None directProperty
20. RE EP EE E se 29 iv Cadena 2 0 Manual 7 El g in to Cadena RT 30 OVERVIEW stas ae ob aed dae A E E 30 Create a New Platform 5 ete RE Hain DEFERRI eds 30 Create the Style cs oce rae HEU eite eb E RI eran 30 Create the Eclipse Plugin Project ans ses sen des 33 Addithe Styler sen ee Uo eoe BSH 35 Testing the Platform Plugin unse Bin 37 Add the Vistial Style sue in dali 37 Prototype the Generador inscrito aint steh nn rennt rose 37 Add new Gener tor Action s sre RE Bes 41 Continue to Develop seite Bene state eher one B Pee cde End 41 GIOSSAIy ir Aa Ui Ui Lee e m uS 42 Bibliography san seen to elitista dais sumed enon pet 45 List of Figures 1 1 The Cadena meta modeling language esses em emen menthe 1 3 1 Property Value Hierarchy 2 demde ru onen taa erae 12 7 1 eNesC Interface Kinds nien e Rr Healing pe 31 7 2 eNesC Connector Kinds inasistencias sinn 32 7 3 eNesC Connector Kinds in the Cadena Style Editor ooocconcnoccnccnnncnnccnnconnconnccnnccnnconaconicos 32 7 4 eNesC Component Kinds in the Cadena Style Editor see 33 75 Menus to create a new pro ect is ione rtt tereti re P RES Oo ERE Ee Eg ER se Erro ere edd 33 7 6 New Plugin Project Name It cec user tiet eo Re eet R p ee sey pre deri pis 34 1 1 New Plugin Project ID It iun vett oer re I ee E terrre 34 7 8 New Plugin Project Complete It ooooconoconocnncconcconocononnnc
21. a file that contains a Cadena Module A Cadena term that refers to a file that contains a Cadena Scenario A Cadena term that refers to a collection of instances component scenario and connector that define a modeled application A Cadena term that refers to the description of the types available in the model which will be used at the Scenario tier Modules contain definitions of Types that are used to define Scenario instances A Cadena term that refers to the description of the platform that will be modeled at the other tiers of Cadena module and scenario tiers In other words the style helps define a language to use in the Module tier Styles contain definitions of Kinds and Meta Kinds that are used to define Module Types A TinyOS nesC term that refers to a collection of methods or method signatures with a name In nesC components modules and configurations provide and use interfaces A TinyOS nesC term that refers to a component that holds logic This uses and provides interfaces commands and events It also holds the logic that maps to the defined interfaces commands and events A TinyOS nesC term that refers to a component that does not hold logic A configuration defines a collection of components modules and configurations 42 Glossary Nature Specification Path Interface Type Component Type Component Instance Scenario Instance TinyOS Module TinyOS Scenario Architectural Language ADL
22. ance You should notice that the location property is unset as seen in Figure 7 14 eNesC Example Scenario Properties To set it double click it and then set a valid value Do this for each instance and the errors should disappear This is important for this demo since we will be using the value of this location to generate code 38 Plug In to Cadena Figure 7 13 eNesC Example Scenario Error Messages E Problems X N Javadoc 8 Declaration Fo ao 2 errors 0 warnings 0 infos Description Resource Path v Errors 2 items property location is unset and is not bound to an open property Foo scenar Foo spe property location is unset and is not bound to an open property Foo scenar Foo spe Cd P Figure 7 14 eNesC Example Scenario Properties ASI Foo Foo z Graph View Serverl i Server2 useMyServices gt useMyServices gt providesMyServices providesMyServices Property Value Y Core location integer lt unset double click to set name Serverl Now that you have created the module and scenario you are prepared to write the prototype script To do this you will need to familiar with Python and the Cadena core API For this demo it should be enough that you copy n paste and follow the directions To start create a new File in the scenario sub directory named generate py Make sure to open it in the
23. appear allowing modules to be selected for import Select the modules for import and click the OK button The import list should now be updated to show the newly imported modules To remove a module from the import list select the module from the list and click the Remove button The import list should now be updated Component Instances Once one or more modules containing component types are imported by the scenario instances of the component types can be created To create a new component instance Switch to either the Table view or the Graph view If the table view is visible right click within the Instances table to make the pop up menu visible If the graph view is visible right click anywhere within the main editor area The Add Component Instance submenu should be available as an option within the pop up menu The submenu contains separate menu options for each of the component kinds that are declared in the style Select the desired component kind The new component instance wizard should appear Aunique name that no other instance uses must be chosen A component type must also be chosen by clicking on the Browse button and selecting a component type from the dialog Once a name and component type have been chosen click the Finish button to continue The new component should show up in both the Graph tab and the Table tab Within the graph view the component can be dragged around and dropped in a
24. at the Outline view is shown in Figure 7 11 eNesC Example Module Figure 7 11 eNesC Example Module Module Detail View Component Types Interface Types Name Kind Parent Type Po Name Kind lv MyServer O MyComponent MyServices O MyBundleinterface providesMyServices E providesBundle MyServices useMyServices useBundle MyServices Outline 23 MyServer useMyServices gt providesMyServices Overview Table Now that you have created the Module you should create a new Scenario details on this can be found in Chapter 5 Scenario Tier In this Scenario you should make sure to import the module you just created Once that is done switch to the Graph or Table view and create 2 instances of the MyServer component type And to make it slightly more interesting connect them You can see an example of this in Figure 7 12 eNesC Example Scenario Figure 7 12 eNesC Example Scenario 45i Foo 42 Foo 23 gt Graph View Serverl i Server2 useMyServices gt providesMyServices Overview Table Graph If you had the Problems view open you should have seen 2 errors show up as seen in Figure 7 13 eNesC Example Scenario Error Messages This is a reminder that you have not set the location property which is required To do this switch to the Properties view and select an instance This will populate the Properties view with the properties associated with that inst
25. ate up through containment relation the top top of the model def findRoot elem while not elem is None lem return elem if not selection isEmpty Scenario find Python Enhancements to eventually finding and not elem eContainer is None lem eContainer and isinstance selection IStructuredSelection Root selection getFirstElement Object Model Some common tasks for writers of scripts for example fetch the value of an integer typed attribute att x on a ComponentInstance c are conceptually simple but somewhat verbose to accomplish when directly using the Java API to Cadena s metamodel The Java code to accomplish this would look like the following public long getAttrValue ComponentInstance c String attrName for PropertyDeclaration pd c getAllPropertyDeclarations if pd getName equals attr DirectProperty value c getPropertyValue pd false if value null return IntegerValue value getValue getValue Property defaul if return defaultValue IntegerValu tValue pd getDefaultValue null defaultValue getValue getValue return null throw new NoSuchElement Exception No such proper ty declared on component This is somewhat disappointing given that the concept encoded would normally be written in a specification language as this elegant fragment 23 Python Scripting
26. c references to learn what properties bean style get set pairs and children are available on each Cadena model element All methods available on the public statement of the metamodel s API are callable from Python For instance displaying the name of each component instance in a scenario could be done as follows Core Cadena API imports from edu ksu cis cadena specification scenario import Scenario from edu ksu cis cadena specification scenario import ComponentInstance Eclipse API imports from org eclipse jface viewers import IStructuredSelection Main procedure assumes that currently selected element is the top level scenario container if isinstance selection IStructuredSelection Scenario selection getFirstElement use the bean style abbreviation of getComponentInstances for c in scenario componentInstances assert isinstance c ComponentInstance print Scenario s contains component s Scenario name c name If the developer is interested only in running a script across the entire model let us suppose a Scenario http cadena projects cis ksu edu api edu ksu cis cadena core specification scenario Scenario html then it suffices to trace the containment relation from just the first selected element f Eclipse API imports from org eclipse emf ecore import EObject from org eclipse jface viewers import IStructuredSelection 22 Python Scripting Iter
27. component instance is derived then the value of that property If no such property is declared then a NameError is raised Scenariolnstance any port name n any property name n A PortProxy detailed below representing the port named n on the subassembly instance If no port named n exists then a NameError is raised If n is the name of a property declared to exist on the subassembly from which the ScenarioInstance is derived then the value of that property If no such property is declared then a NameError is raised PortProxy not in the core object model instance The instance either ComponentInstance or ScenarioInstance which owns the port port The port as declared inside the component type from which the instance is instantiated connectors Fetches a java util Collection whose elements are any property name n the Connectors hooked onto the instance s port If n is the name of a property declared on either the port or the port option from which it is derived then the value of that property If no such property 1s declared then a NameError is raised Connector any role name r If the connector has a role named r then r evaluates to the PortBinding for that role otherwise a NameError is raised any property name p If p is the name of a property declared on the connector s kind then the value of that property If no such property is declared then a NameError is raised Por
28. creating a new platform for use in Cadena move on to the next section the section called Add the Style Add the Style Once you have created the style and the plugin project you are ready to move the style into the plugin This involves changes to the file system as well as changes to the plugin First you will need to create a location in the file system where the style will reside The Cadena team typically uses a single directory name specification in the root of the plugin project There are many ways to create a new folder in Eclipse so choose one and create the specification folder Then copy the new style file from the Cadena project created in the section called Create the Style into the newly created specification folder An example of this can be seen in Figure 7 9 The New Style in the New Plugin Project 35 Plug In to Cadena Figure 7 9 The New Style in the New Plugin Project fg Hierarchy E amp Y Y 32 com wallentine cadena platform enesc b 3 src gt m RE System Library sun jdk 1 5 0 13 D m Plug in Dependencies D META INF Y gt specification amp eNesC style B eNesC style view la build properties ae plugin xml gt 8 eNesc Now that the plugin project contains the style file you can tell Cadena about this This means that you will need to declare an extension to Cadena using the edu ksu cis cadena core specifications extension point To do this open the plugin xml fi
29. d model driven development environments that include facilities for editing component implementations model level configuration of middleware capabilities code generation simulation verification and creating system builds Plug ins can also be developed to link other development tools including tools for requirements capture and down stream class level modeling tools such as Rational Rose or Modeler or iLogix Rhapsody Figure 1 1 The Cadena meta modeling language Component Based Development TODO Give an overview of component based development here Talk about how components provide interfaces which are connected by connectors Overview Eclipse Overview TODO A short description of Eclipse here Cadena Installation This manual assumes that you have Cadena installed properly For more information on installing Cadena please read the Cadena 2 0 Install Guide Chapter 2 A Cadena Project Overview A project serves as the basic organizational unit of Cadena Related artifacts can be stored and grouped within projects Artifacts of one project may be made visible to another project by creating a project dependency between the two projects The New Project Wizard Before any Cadena artifacts can be created a project must be created to contain them To create a new project Select File New Project from the main menu The new project dialog should appear From the tree on the left select Cadena Ca
30. d select Add Struct Member from the menu The new member should show up as a child of the lt struct type gt child Double click on the new struct member to set its name and type collection A collection allows multiple values to be specified for an attribute value A collection type must specify the type of the elements it may contain the minimum and maximum number of elements it may contain and the collection type The collection type may be either BAG SEQUENCE or SET To set these properties expand the attribute specification so that the lt collection type gt child is visible and double click on it User Defined Property Types Reusable user defined types or typedefs may be created as well Type defs may be used by multiple attribute specifications This feature can be especially useful when a complex struct needs to be reused To create a typedef change to the table and right click anywhere within the main table Select New Type Def from the pop up menu Double click on the typedef to change it s properties A typedef has the following properties Table 3 11 Typedef properties Name Description name The unique identifier of the typedef type The type of the typedef The type can be any one of the basic types described above or the type can be another typedef Property Values Property values may be attached at several points along the Cadena model hierarchy Properties remain open
31. d then click the Next button The Cadena Module wizard page should appear To continue a valid module name must be entered The desired style of the module must also be selected Once a valid module name and style have been selected the Finish button must be clicked to create the module If the module is succesfully created a module editor for the new module will be opened The Module Editor The module editor is used to view and modify Cadena modules The editor has two tabs the Overview tab and the Table tab The Overview tab is used to view and modify general aspects of the module while the Table tab provides a table based view for viewing and modifying the individual elements that comprise the model Providing the Visual Style The Cadena Module editor allows the user to configure visual properties of the editor so that the user can have a richer experience The customizations are rudimentary at this time but should be sufficient for most users If more customizations are necessary a plugin should be created for the style To make changes to the visual style a user must create a file with a name that follows this pattern lt moduleFileName gt visuals where lt moduleFileName gt is the name of the style file before the module This will be a simple text file that uses the Java properties format Each property provides the Module editor with configurations that can enhance the look n feel of the editor to match user expectation
32. d to a port of the same interface kind This is useful for single role connectors where the compatibility of multiple roles does not need to be enforced If an interface type variable is used instead the role not only needs to be connected to a port of the same interface kind as the type variable but it must also be connected to a port of the same interface type as all of the other roles which share the interface type variable parity The parity of the role constrains the kinds of ports that the role may be connected to Roles may only be connected to ports where the parity of the role matches Connector meta kinds may also contain interface type variables Interface type variables are used to insure that a group of roles within a connection are all connected to ports of the same type Interface type variables have the following properties Table 3 7 Interface type variable properties Name Description name A unique identifer of the interface type variable The name must not be reused by other interface type variables interfaceMetaKind The interface meta kind of the interface type variable It is used to constrain the interface kind of an interface type variable binding When a connector meta kind is finalized as a connector kind a binding must exist for each of the roles and interface type variables contained in the parent meta kind A binding has the following properties Style Tier Table 3 8
33. deas 13 The New Module Wizard eee eis ans 13 The Mod le Editor ee iier recen ea Den bern EIS 13 Providing the Visual Stylie resa eee peperere pret e 13 Types esum use ee IE Ce eva ve vene nes ER oet ub 14 Interface Types MOM EE 15 Component Types nerit aor RE ern Rire rte TREE IRR EROS 15 Imported Modules u 22 28 80 bi abe een ps e RIT 16 3 Scenario TIET enter 17 The New Scenario Wizard eet eer DRIN 17 The Scenario Editor iei ee RR re OS PSESE RES EPES PERET RR ERES 17 Providing the Visual Style os 2 3 eee tuti e Ie bene cen iens 17 Imported Modules sss otto ss uttter I IR E v ER US ESSE br ig 18 Component Instances iieaeoe er e Ran sees der abr queen Diesen 18 CONMMECHONS th un eoe RE REPRE PR dani sad seda sin 19 Tips on Navigating the Scenario Editor ooocoooccnncnncconccnnccnnncnnconoronccnnccnnconnccnnccnnconnconncos 19 6 Python Scuptmg i et tere DRE m Fee Para tes et pae et eh 21 BacKeround C 21 Environment era Sika nr se stevdssces ERR ERE eds 21 Usage inmi ERIESAUBeER HEB ec ane gh 21 Object Model ivonne i ere Se ede UP pr PEU PEE 22 Python Enhancements to Object Model sssssss e 23 Modifying the Model eerte ipee epum o Er PR SERERE RETE pue 26 Puttingat all Together cortesia is ein an na 26 The Premises tette ei ae 27 Procedure ee eret Rer eren rear iR in Ie 27 R nning erre PR RR eigen ERR
34. dena Project and then click the Next button The Cadena Project page ofthe wizard should appear To continue a valid project name must be entered Once a valid project name has been entered the Finish button may be clicked to create the project The new project should now show up within the resource navigator view Configuring a Project Paths Within a project paths are used to specify what directories artifacts must be placed in to be visible to other artifacts Separate directory lists are maintained for each type of Cadena artifact When a new project is created a default set of specification paths are configured specification style specification module and specification scenario for styles modules and scenarios respectively To view the specification paths for a project Right click on the project within the resource navigator view and select Properties from the main menu The project properties dialog should appear From the tree on the left select Cadena Specification Paths The specification paths page should appear to the right There is a separate tab for each type of Cadena artifact The specification path of each type of artifact can be set through these tabs The list within each tab shows the currently defined paths A path can be removed by selecting it from the list and clicking the Remove button Clicking the Add Folder button will cause a folder selection dialog to be displayed which allows ad
35. different location 18 Scenario Tier Connections Tips Once one or more instances have been created connections may be created to connect the instances together Connections may be made a few different ways The first way to make a connection is described below Switch to either the Table view or the Graph view If the table view is visible right click within the Instances or Connections tables to make the pop up menu visible If the graph view is visible right click anywhere within the main editor area The Add Connector submenu should be available as an option within the pop up menu The submenu contains separate menu options for each of the connector kinds that are declared in the style Select one of the options The new connection wizard should appear The main table in the wizard displays each role of the selected connector kind Each role must be bound to a type correct port To bind a role select the binding from the table and choose an instance and port combination from the binding drop down box Once a type correct binding has been chosen for each role click the Finish button to create the connection The new connection should show up in both the Graph tab and the Table tab Within the graph view the connection can be dragged around and dropped in a different location To limit the available options displayed in the binding drop down box multiple instances or ports may be selected before openi
36. ditional paths to be added to the list If a path specified in Cadena configuration cannot be resolved it will still be listed When this happens it will be denoted in that dialog with a RED X You can remove this path from the list by selecting it and pressing the Remove button You can also remove all bad or errorneous paths from the list using the Cleanup button A Cadena Project Project Dependencies By default artifacts within one project are not visible to artifacts within other projects However these artifacts can be made visible by creating a project reference Once a reference to a project is established artifacts that are contained within the referenced project will be visible within the project that created the reference To view a project s references Right click on the project within the resource navigator view and select Properties from the main menu The project properties dialog should appear From the tree on the left select Project References The references page should appear to the right References to projects are indicated by the checkboxes located next to the name of each project A reference can be added or removed by clicking on the checkbox of a project For the artifacts of one project to be visible to the artifacts of a referencing project the artifacts must be located on the referenced project s specification paths Chapter 3 Style Tier Inside a Cadena style the shape
37. e reported as illegal by the system type checker a script capable of excising the offending not fully attached connectors could be useful Procedure To begin create a new file to hold the Python script Choose File New File from the menu Createanew file cleanConnectors py inside the project containing the scenario In principle this script could exist anywhere on the filesystem It is convenient however to include it inside a folder managed by Eclipse by doing so one can share scripts over version control and keep the script in close proximity to the artifact on which it operates In general complete Cadena script will need to accomplish the following tasks extract the current selection from the JFace ISelection wrapper object possibly trace the selection backward to find the root model element iterate across the contents of the model and perform some modifications on the model cleanConnectors py will begin by importing some libraries needed 1 to interrogate the current JFace selection and 2 to make the Java typenames of various Cadena metamodel elements visible f Cadena API imports from edu ksu cis cadena core specification scenario import Connector from edu ksu cis cadena core queue import AbstractModelChangeAction from edu ksu cis cadena eclipse import CadenaEclipsePlugin Eclipse API imports from org eclipse jface viewers import IStructuredSelection After this a utility function to find th
38. e root container in the present case a Scenario is added just as before f Iterate up through containment relation eventually finding the top top of the model def findRoot elem while not elem is None and not elem eContainer is None lem elem eContainer return elem Because the main task of the script is to repeatedly ask whether a proferred connection is fully attached it will prove convenient to define a Python function which returns this verdict Check whether every role on a connector is attached to some port def isFullyAttached connection 27 Python Scripting sanity check on parameter assert isinstance connection Connector the metakind lists all the roles on the connector metakind connection kind connectorMetaKind make sure that each role has a corresponding binding on the connector instance for ps in metakind getAllPortSpecs True found False for pb in connection getPortBindings if pb portSpec ps continue if pb instanceRole is None continue if pb instanceRole instance is None continue if pb instanceRole port is None continue found True if not found return False return True Next an IModelChangeAction object will be needed to encapsulate the work of removing malformed connectors from the scenario Implementation of IModelChangeAction used to remove the specified connector from the specified scenario class RemoveConnect
39. easily translated to nesC With that in mind we will walk through the following steps Create a style that represents the specifications detail above Create an Eclipse plugin for the platform Add the style to the platform plugin Add a visual style to the platform plugin Prototype the code generation with a Jython script Add an action to the platform plugin that will generate nesC code Create the Style The first step in creating a new Cadena platform is to create a style that describes the possibilities Put another way you must describe the kinds of things available in this platform This is done by describing what component connector and interface kinds that make up this platform As mentioned before we are 30 Plug In to Cadena trying to stay as close to the nesC model as possible so we will have 1 component kind 3 connector kinds and 3 interface kinds As you create the kinds keep in mind that Cadena expects each kind to have a meta kind as a parent Therefore you should create the meta kinds first and then create the kinds The details of how to create a new style are available in Chapter 3 Style Tier Using that as a guide create the following interface kinds listed in Table 7 1 eNesC Interface Kinds Table 7 1 eNesC Interface Kinds Name Parent MetaKind mMyCommandInterface minterface Y MyCommandInterface mMyCommandInterface N mMykEventInterface minterface Y MyEve
40. er interface It is a Java object implementing the JFace interface ISelection http help eclipse org help31 topic org eclipse platform doc isv reference api org eclipse jface viewers ISelection html Each element if selection is an IStructuredSelection is a Cadena model object that is a CalmObject http cadena projects cis ksu edu api edu ksu cis cadena core specification base CalmObject html Thus the usual idiom for a Python script to find the Java object for each current selection is as follows Eclipse API imports from org eclipse jface viewers import IStructuredSelection Current set of objects selected in user interface is held 21 Python Scripting f by selection container if isinstance selection IStructuredSelection for selectedObject in selection toList do some work on the model element print selectedObject Object Model A Cadena model is exposed to the Python interpreter simply as the underlying Java objects used to represent the model inside Cadena listed at http cadena projects cis ksu edu api index html The Cadena object model itself is implemented using the Eclipse Modeling Framework http www eclipse org emf as a consequence every Cadena model object CalmObject has extensive metadata available including its position in parent child relationships via the eContainer and eContents methods respectively In general a Python script writer will use these Javado
41. f this plugin by developing a visual style prototyping a code generator or building a code generator as an Eclipse action Add the Visual Style This section is not yet complete please continue on to the section called Prototype the Generator Prototype the Generator You now have a working platform plugin that uses your new style One way to start using that style is to prototype the code generator that we described before This can be done using the Cadena scripting functionality which is described in Chapter 6 Python Scripting To do this you should start up a runtime workbench with your platform plugin Once it is started you should create a new Cadena project Within that project you should create new Cadena modules and scenarios Those modules and scenarios will be used to demonstrate the scripting capabilities In this case we will walk you through creating 1 Cadena module and 1 Cadena scenario You first task is creating a Cadena module for details on this see Chapter 4 Module Tier In this new Module you should create 1 Interface Type and 1 Component Type You should name the Interface Type MyServices and make it a MyBundleInterface Further name the Component Type MyServer MyServer should now use and provide this interface by adding ports useBundle and providesBundle and naming 37 Plug In to Cadena them usesMyServices and providesMyServices An example of what the Module Editor would look like as well as wh
42. form there is no need to create connector types within the module tier Instead connector kinds are instantiated directly as connections within the scenario tier Style Tier Each connector definition consists of a number of role declarations much like the port options in component kinds Single role connectors abstract services such as timeout generators multi role connectors model inter component communication services When a connector kind is instantiated as a connection within the scenario tier each of the connection s roles must be connected to a port of a component instance Roles are created in the same way that port options are created by right clicking on a connector meta kind and selecting Add Role from the pop up menu The role s properties can be modified by double clicking on the role to display the properties view A role has the following properties Table 3 6 Role properties Name Description name A keyword to uniquely identify the name of a role interfaceMetaKind The interface meta kind constrains the kinds and possibly the types of interfaces that a role may be connected to The value must be either an interface meta kind or an interface type variable If an interface meta kind is used the role must be bound to a concrete interface kind when the connector meta kind is finalized as a connector kind When a connector is instantiated as a connection in the scenario tier the role must be connecte
43. he appropriate root meta kind To create a kind or meta kind Change to the Table tab of the style editor Right click within the main table to bring up the pop up menu To create a kind or meta kind select one of the options from the New Kind or New Meta Kind submenus respectively The New Kind wizard should appear e A unique name that no other kind or meta kind uses must be chosen A parent meta kind either one of the core meta kinds or another user created meta kind must also be selected Click the Finish button to create the new kind or meta kind If the kind or meta kind was successfully created it should now show up in the table Double clicking on it will bring up the properties view allowing some of the item s properties to be manipulated Meta kinds have the following properties that may be changed Table 3 2 Meta kind properties Name Description name The name of the component meta kind It should be unique among kinds and meta kinds exposed If set to true it can be used as a parent meta kind within styles that extend from the containing style See below for more information about meta kind inheritance parent The parent of the meta kind See below for more information about meta kind inheritance Style Tier Kinds have the following properties that may be changed Table 3 3 Kind properties Name Description name The name of the component meta kind It s
44. hould be unique among kinds and meta kinds ComponentMetaKind The meta kind that the kind finalizes InterfaceMetaKind ConnectorMetaKind Interface Kinds The first kind category is the interface kinds category Interface kinds categorize interaction points of platform components and check compatibility between component and connector Component Kinds The second kind category is the component kinds category Component kinds describe the software unit primitives of a platform Each component kind may be instantiated as zero or more component types within the module tier Each of those component types may be further instantiated as component instances within the scenario tier Component meta kinds expose possible interaction points through port options Port options are used to declare and constrain the kinds of ports that a component type may contain Port options are also used to constrain the connections that are allowed to ports of a component instance Port options are declared in component meta kinds and then finalized within component kinds To add a port option to a component meta kind Change to the Table tab of the style editor Right click on the component meta kind to bring up the pop up menu Select Add Port Option from the menu A new port option should now be present as a child to the component meta kind and it should automatically be selected To complete the port option s specification a few propert
45. ies must be set If the properties view is not already visible double click on the port option to make the properties view visible Style Tier Table 3 4 Port spec properties Name Description name A keyword to uniquely identify the kind of a port interfaceMetaKind The interface meta kind of the port spec When a component kind is created an interface kind needs to be specified for each port spec that is present in the component kind s meta kind The interface kind must inherit from the interface meta kind that is specified here parity The parity of the port spec In order to connect the port of a component instance to a connector the parity of the port s port spec must match the parity of the connector s role The parity can be set to either USES or PROVIDES minimumMultiplicity The minimum multiplicity of the port spec This property restricts the minimum number of ports that a component type may contain of this port spec maximumMultiplicity The maximum multiplicity of the port spec This property restricts the maximum number of ports that a component type may contain of this port spec minimumMultiplexity The minimum multiplexity of the port spec This property restricts the minimum number of connections that may be made to a port of this kind within a component instance maximumMultiplexity The maximum multiplexity of the port spec This property restricts the maximum number of connections tha
46. ightGray green darkGreen lightGreen black white cyan orange red yellow The second configurable item is the location of the port on the component instance This is specified using the component instance name and the port name For example if we have a port named myPort on a component instance named myComponent you could specify the location using a property like myComponent myPort side top The possible values are top bottom left and right You should note that inheritance of these properties will occur So if you define a property in the style or module tier it will be inherited in the scenario tier For example if you set the color of a kind at the style tier you will get this color at the scenario tier if you don t override it with a more specific color Imported Modules Before any component instances can be created component types must be made visible to the scenario This is done in the same way that modules must be imported by other modules in order to make types visible to other modules Modules must be imported by a scenario in order to make the module s types visible within the scenario To view and modify a scenario s import list Change to the Overview tab of the scenario editor The Imported Modules section of the overview page shows the list of currently imported modules by default this list is empty e To add a module to the import list click the Add button to the right of the list A dialog will
47. le using the Eclipse Plug in Manifest Editor Once opened switch to the Extensions view and add the extension use the Add button to bring up the wizard dialog In the dialog be sure to un select the checkbox labeled Show only extension points from the required plug ins You can then select the specified extension point and press Finish This will bring you back to the Manifest Editor and will add this extension to the list of All Extensions Now that the extension is added you will need to configure it In this case you will need to add a style node and specify the URI and resource for that node In this case enter the relative path to the style file e g specification eNesC style in the resource text field or click Browse to locate it on the file system Next you will need to enter a URI that will provide a unique identifier for this style The Cadena team uses a naming scheme similar to the one we use for plugin names First we use http as the protocol so each URI starts with http Next we use the main web site URL cadena projects cis ksu edu Finally we use the name of the style file In this case the style is named eNesC style So your URI might look something like http cadena projects cis ksu edu eNesC style or even http cadena wallentine com eNesC style An example of this completed can be seen in Figure 7 10 Complete Style Extension point in Eclipse Plugin in Manifest Editor 36 Plug In to Cadena Figure 7
48. ng Background Environment Cadena includes a slightly modified version of the Jython http www jython org library to provide users with a Python interpreter to facilitate rapid development and easily shareable units of business logic This interpreter allows the developer to exploit the very terse syntax of Python while still maintaining full access to Java class libraries the outcome is a powerfully expressive scripting framework A short example conveys the concept of using Java objects inside a Python environment f usual Python import syntax from java util import from java math import BigInteger call constructor as usual in Python list LinkedList list add BigInteger valueOf 1 list add BigInteger valueOf 2 list add BigInteger valueOf 3 native Python iteration across Java collections for element in list print s s element lement getClass Usage Python scripts are launched by right clicking inside the Table or Graph tabs of a Cadena editor then choosing Jython Run Jython Script A file selector dialog appears after choosing the script a file ending with the py extension it is immediately executed A short history of recently executed scripts is maintained inside the Jython menu for easy repetitive launching When the interpreter for the script is initialized the identifier selection is bound to the current set of Cadena model objects selected highlighted in the us
49. ng the wizard For instance if two separate instances are selected only ports from those two instances will be available as options in the bindings drop down If an instance and a port from another instance are selected only ports from the selected instance and the selected port will be displayed in the drop down box Connections can also be created in the following way Switch to the Table view Right click on an instance s port within the Instances table to display the pop up menu The New Connection for Port submenu should be available as an option within the pop up menu The submenu contains separate menu options for each of the connector kind role combinations that the port may be bound to Select the desired connector kind role combination The new connection wizard should be displayed The selected role should already be bound to the port that was right clicked on The remaining roles need to be bound to ports in the same way as above Once a connection has been created the roles can be bound to different ports two different ways The first way is by using the properties view The role must be selected either in the Connections table in the Table view or by selecting the role in the graphical view the role is visualized as a line between the connection and the component port Once the role is selected it s instanceRole property may be changed in the properties view The second way is by using the Graph view If role is
50. nnncnnncnn He EEE O aE 35 7 9 The New Style in the New Plugin Project sessessese HH Hee 36 7 10 Complete Style Extension point in Eclipse Plugin in Manifest Editor ssssss 37 71 eNesC Example Module 5 eerte e EIER ER e EO Here Eta Rise 38 7 12 eNesC Example Scenario nsss 1 2 oen e E E Ionen Dann 38 7 13 eNesC Example Scenario Error Messages sssssessesseseee eH eme meme 39 7 14 eNesC Example Scenario Properties ooocococnnccnnccnonnnnconoconccnnccnnccnnccnnconncnnncnnncnnncnnnnnnss 39 7 15 eNesC Example Scenario Python Script Results es eee 41 vi List of Tables 3 1 Vasual Style Color Values ccoo ter tt eoe iter une Ex eR la 6 3 2 Meta kind properties nein Inn Wei tes kg 6 3 3 Kind properties ee nre rM PR REPERI AERE 7 3 4 Port spec properties eee Rte hebt cre ree Rr Ie rd td 8 3 5 Port spec binding properties etit er een else 8 3 6 Role properties cuicos 9 3 7 Interface type variable properties 11 15 pner HER Reed re RE e enr PERI 9 3 8 Role Interface type variable binding properties oooconocnnccnnccnncnnoconoconccnnconnconnccnnccnnconnconncos 10 3 9 Attribute specification properties tette te PAR REP SET sobs 10 3 10 Basic Property Types u en ee Inn Inn ee 11 3 11 Typedef properties iio Gotb fl Dose RR REEF ERE ESSER TE rS 11 4 1 Visual Style Color Values see anal eee Ten senses 14 4
51. ntInterface mMyEventInterface N mMyBundleInterface minterface Y MyBundleInterface mMyBundleInterface N Figure 7 1 eNesC Interface Kinds mInterface Once the interface kinds are created you should move on to create the connector kinds listed in Table 7 2 eNesC Connector Kinds Table 7 2 eNesC Connector Kinds Name Parent MetaKind mMyCommandConnector mConnector Y MyCommandConnector mMyCommandConnector N mMyEventConnector mConnector Y MyEventConnector mMyEventConnector N mMyBundleConnector mConnector Y MyBundleConnector mMyBundleConnector N When creating the connector kinds create two role options One role option should be a USES and be named client while the other role option should be a PROVIDES and be named server Use the appropriate 31 Plug In to Cadena interface kinds for the MyEventConnector kind use the MyEventInterface kind A graphical view of these can be seen in Figure 7 2 eNesC Connector Kinds And a view of them in the Cadena Style Editor can be see in Figure 7 3 eNesC Connector Kinds in the Cadena Style Editor Figure 7 2 eNesC Connector Kinds mConnector Figure 7 3 eNesC Connector Kinds in the Cadena Style Editor Connector Meta Kinds Name Category Parent Meta Kind Interface Meta Kind b MyBundleConnector b MyCommandConnector Y MyEventConnector client server PD mMyBundleConnector gt mMyCommandConnector
52. ogether as a hybrid style This hybrid style can then contain component kinds that act as translators between the component kinds of the parent styles thus allowing scenarios to be created containing interconnected components from multiple unrelated platforms To add or remove a parent style Change to the Overview tab of the style editor e To remove a parent style select a style from the parent style list within the Parent Styles section and click the Remove button To add a parent style click on the Add button within the Parent Styles section A dialog should appear which allows for the selection of the parent style 12 Chapter 4 Module Tier Once an architecture or platform has been described in a style see Chapter 3 Style Tier a module using that style can be created Inside a module users can create component types and interface types corresponding to the component kinds and interface kinds described within the style The New Module Wizard To create a new module Use the navigator view to browse to a folder within a Cadena project where the module will be placed The folder that is chosen should be a part of the module path for the project The standard location for this is in the specification module folder Right click on the chosen folder and select New Other from the pop up menu The new resource dialog should appear From the tree on the left select Cadena Cadena Module an
53. ons roles amp interface type variables of the the parent meta kind are present in the child meta kind It is also possible to refine or specialize features from the parent meta kind within the child meta kind For instance a child connector meta kind may refine an interface type variable such that it requires a more specialized interface meta kind than was required by the parent connector meta kind In the editor these inherited features are shown with gray text to indicate that they are not declared within the child meta kind but at a higher level in the meta kind s inheritance hierarchy The feature can be specialized by double clicking on it to display the properties view and then setting a value to one of the properties Once a feature has been specialized it will be shown with green text The second form of structural inheritance Cadena allows is inheritance of styles For one style to inherit from another means that the contents of the parent style are also present in the child style Meta kinds are allowed to inherit from either meta kinds declared within the same style or meta kinds that are declared in parent styles Combined these two forms of inheritance allow not only for the meta kinds of a single platform to specialize each other but meta kinds of a platform to specialize meta kinds of a parent platform to create a specialized platform Furthermore multiple inheritance of styles allows multiple unrelated styles to be bridged t
54. orJob AbstractModelChangeAction def init self scenario connector self scenario scenario self connector connector def run self self scenario getConnectors remove self connector Finally some driver code will iterate across the model and submit model change jobs for each bad connector Main procedure if not selection isEmpty and isinstance selection IStructuredSelection scenario findRoot selection getFirstElement 28 Python Scripting connsToRemove for c in scenario connectors if not isFullyAttached c connsToRemove append c for c in connsToRemove job RemoveConnectorJob scenario c CadenaEclipsePlugin enqueueModelChangeAction job Running After entering all the Python code listings from the section called Procedure into the file cleanConnectors py the script is ready to execute Open the model to be cleaned Switch to the Table or Graph tab of the model s editor Right click and choose Jython Run Jython Script Browse to and select cleanConnectors py As the script runs parsing and loading it may take a few moments please be patient the model will shrink as any connectors having roles not attached to some port are progressively removed 29 Chapter 7 Plug In to Cadena Overview Cadena is built using the Eclipse environment and framework Because of that it is very easy to enhance and extend
55. rt side top The possible values are top bottom left and right The fourth configurable item is the icon used for the port on the component This is specified using the component type name and port name For example if we have a port named myPort and a component type named myComponent you could specify the icon using a property like myComponent myPort icon test gif We suggest you use an icon whose size is 16x16 pixels You should note that inheritance of these properties will occur So if you define a property in the style tier it will be inherited at the module tier For example if you set the color of a kind at the style tier you will get this color at the module tier if you don t override it with a more specific color Types TODO give some text describe the roles of types in a cadena model To create a new type Change to the Table tab of the module editor Right click within either the Component Types or the Interface Types table to bring up the pop up menu Either the Add Interface Type or Add Component Type submenu should appear as an option depending on which table was right clicked in The submenu contains separate menu options for each of the interface kinds or component kinds that are declared in the style Select one of the options The new type wizard should appear Aunique name that no other type uses must be chosen Once a name is chosen click the Finish button to create the new type If the type was s
56. s Therefore the property names and values are important The first configurable item is the icon used for interface types The naming scheme that is used is based upon the name of the type followed by icon For example if we have an interface type named testInterfaceType we can set the icon that is used to denote it by setting testInterfaceType icon test gif We suggest you use an icon that whose size is 16x16 pixels The second configurable item is the color used for component types The naming scheme that is used is based upon the name of the type followed by color For example if we have a component kind named testComponentType we can set the color that is used to testComponentType color red The values that 13 Module Tier can be used must be in the set of Eclipse Draw2d color constants org eclipse draw2d ColorConstants or a proper HEX value e g FF0000 is red and CCEEFF is bluish This set of colors is listed in Table 4 1 Visual Style Color Values Table 4 1 Visual Style Color Values blue darkBlue lightBlue gray darkGray lightGray green darkGreen lightGreen black white cyan orange red yellow The third configurable item is the location of the port on the component type This is specified using the component type name and the port name For example if we have a port named myPort on a component type named myComponent you could specify the location using a property like myComponent myPo
57. s or structures of the architectural elements are described i e the vocabulary of a platform is introduced Another way to look at this is that the style tier is the factory for the constituent parts of an architecture The New Style Wizard To create a new style Use the navigator view to browse to a folder within a Cadena project where the style will be placed The folder that is chosen should be a part of the style path for the project Right click on the chosen folder and select New Other from the pop up menu The new resource dialog should appear From the tree on the left select Cadena Cadena Style and then click the Next button The Cadena Style wizard page of the wizard should appear To continue a valid style name must be entered Once a valid style name has been selected click the Finish button to create the style If the style is succesfully created a style editor for the new style will be opened The Style Editor The style editor is used to view and modify Cadena styles The editor has two tabs the Overview tab and the Table tab The Overview tab is used to view and modify general aspects of the style while the Table tab provides a table based view for viewing and modifying the individual elements that comprise the model Providing the Visual Style The Cadena Style editor allows the user to configure visual properties of the editor so that the user can have a richer experience The customi
58. t may be made to a port of this kind within a component instance Within a concrete component kind a port option binding must be present for each of the port options present in the component kind s meta kind For each of these bindings a concrete interface kind must be chosen The concrete interface kind must inherit from the interface meta kind that was chosen for the port option When a component kind is created bindings are automatically created for all of the port specs However if a component kind already exists and a port spec is added to or removed from its meta kind the bindings must manually be fixed by right clicking on the component kind and selecting Fix Bindings from the pop up menu Port spec bindings have the following properties Table 3 5 Port spec binding properties Name Description interfaceKind The interface kind that the port spec is bound to Only interface kinds that inherit from the port spec s chosen interface meta kind may be used Connector Kinds Connector kinds are the final category of kinds Connectors model the services provided by the platform The chosen platform may include a variety of middleware services supporting inter component communication distribution persistence and state replication among others These services are modeled through connectors where a connector represents a distinct service of the platform Since connectors represent services provided by the plat
59. t types may contain ports Ports are used to expose concrete interaction points Each port must be associated with a port option declared by the style Each port must also be associated with an interface type The combination of the port option and interface type of the port helps determine its compatibility with roles of a connector within the scenario tier To add a port to a component type Change to the Table tab of the module editor Right click on the component type to bring up the pop up menu Select the Add Port submenu In the submenu there are separate options for each of the port options that are declared in the style Select one and the new port wizard should appear e A unique name that no other port in this component type uses must be chosen An interface type belonging to the port option s kind must also be chosen Once a name and interface type are chosen click the Finish button to create the new port If the new port was successfully created it should now show up as a child of the component type Component ports have the following properties Table 4 4 Component port properties Name Description name The name of the port The name should be unique with respect to the other ports contained within the component type interface The interface type of the component port The port should belong to the same interface kind as specified by the port s port option 15 Module Tier Imported Mod
60. tBinding instance port The instance either ComponentInstance or ScenarioInstance to which the connector s role is attached The port itself either located on a ComponentInstance or a ScenarioInstance to which the connector s role is attached any property name p If p is the name of a property declared on the connector then the value of that property If no such property exists then a NameError is raised 25 Python Scripting Modifying the Model Because the Java types which implement the Cadena metamodel are built using the Eclipse Modeling Framework the pattern and style of methods used to change features of a model is very predictable if an object has some attribute attr then a method set Attr will exist on its Java class Modifications to the model usually consist of nothing more than calling this mutator method with the new value passed as an argument Cadena imposes one extra requirement on changes to a model though all changes must be performed by a dedicated thread One requests the model change thread to execute a change by submitting a worker object into a queue then optionally blocking until the modification has been finished The model change queue requires that changes executed by the run method of an IModelChangeAction http cadena projects cis ksu edu api edu ksu cis cadena core queue IModelChangeAction html object The usual practice in the Java universe is to use instances of
61. the features that Cadena currently has This is done through the use of Eclipse plugins This section will try to explain and show how a developer can plug into Cadena using the Eclipse plugin framework This section is not complete but should give developers a start In addition to this section of the manual developers should also look into the sample projects that are available with each Cadena release For example we release the source for the OpenCCM CCM and nesC platform plugins for Cadena In those two plugins developers will find examples of styles visual styles actions wizards code generators and much more Create a New Platform One of the ways that Cadena can be extended is by developing plugins for new platforms For example if a developer wants to deploy his application to a J2EE EJB platform a platform plugin would need to be written to facilitate that The following section will provide some details on how this could be accomplished This section will walk through creating a platform independent model PIM for use with sensor networks The details of the language are as follows There is a single component kind which has a single property named location Each component instance will have a location associated with it nesC Code will be generated that uses the location There are three kinds of connectors There are three kinds of interfaces The PIM is very closely related to the nesC model so that it is
62. uccesfully created it will now show up in the table Double clicking on it will bring up the properties view allowing some of item s properties to be manipulated All types have the following properties that may be changed Table 4 2 Type properties Name Description name The name of the type It should not be reused by any other type 14 Module Tier Interface Types Each port of a component designates one interface type as the shape to which it conforms A connector kind may use the interface types of ports to insure that only ports of compatible interface types are connected together by a connector If an interface type is selected all of the ports of that interface type will be selected in the component types table Component Types Each component kind created within the module s style may be instantiated as zero or more component types within the module Each of these component types may be further instantiated as zero or more component instances within the scenario tier Component types have the following additional properties Table 4 3 Component Type properties Name Description parent The parent component type of the component type A child component type of a parent component type inherits all of the ports of it s parent component type abstract If a component type is abstract it can not be instantiated as a component instance The value is either true or false Componen
63. uish This set of colors is listed in Table 3 1 Visual Style Color Values Style Tier Table 3 1 Visual Style Color Values blue darkBlue lightBlue gray darkGray lightGray green darkGreen lightGreen black white cyan orange red yellow Kinds The starting point of a Cadena architectural specification is the definition of kinds sometimes referred to as platform types or architectural types in a Cadena style to describe a meta model of the architectural elements that can be used in the construction of a system The kinds available in Cadena fall into the three categories fundamental to component based systems components interfaces and connectors Each kind definition e g a component kind in a Cadena style defines a language of types e g a language of component types that can be used in the construction of a system For the construction of a kind for an architectural element Cadena offers the concept of meta kinds intuitively a toolkit to build shapes or structures which form the vocabulary for the types Unlike concrete kinds meta kinds are allowed to extend from one another For one meta kind to inherit from another means that all of the features that are defined in the parent meta kind are also present in the child meta kind Three root meta kinds are present in the core style mComponent mInterface and mConnector All kinds and meta kinds must inherit either directly or indirectly from t
64. ules In order for a child component type to extend another parent component type the parent component type must be visible In order for a component port to use an interface type as its type the interface type must also be visible Types declared within a module are automatically visible to all of the other types within the same module To make a type declared in one module visible to types declared in another module the module where the type is declared must be imported by the other module To view and modify a module s import list Change to the Overview tab of the module editor The Imported Modules section of the overview page shows the list of currently imported modules by default this list is empty To add a module to the import list click the Add button to the right of the list A dialog will appear allowing modules to be selected for import Select the modules for import and click the OK button The import list should now be updated to show the newly imported modules To remove a module from the import list select the module from the list and click the Remove button The import list should now be updated 16 Chapter 5 Scenario Tier Once an architecture or platform has been described in a style see Chapter 3 Style Tier and a module with component types has been created see Chapter 4 Module Tier a scenario can be created Scenarios contain instances of component types instances of other scenarios
65. use the dialog to select your newly created Python script It should run and print the instance names and locations to the console view see Figure 7 15 eNesC Example Scenario Python Script Results for an example of what this should look like Figure 7 15 eNesC Example Scenario Python Script Results a Foo X E generate py m Graph View Serverl l Server2 useMyServices gt useMyServices _ n gt providesMyServices gt providesMyServices Overview Table Graph Problems Javadoc 2 Declaration Properties El Console 3 m thon B BB r By coy Instance Serverl Location 1 Instance Server2 Location 2 You have now created your first Python script that works with the Cadena API You can continue to experiment in this way to query modify and create model elements Once you complete your experiments you can transition this logic into a part of your platform plugin so everyone can use your code generation when they use your platform For more on that see the section called Add a new Generator Action Add a new Generator Action This section is not yet complete please continue on to the section called Continue to Develop Continue to Develop You have now completed the creation of a platform plugin for Cadena You can now explore the Eclipse documentation to see how you can extend Eclipse more as well as how to distribute this plugin to others 41
66. viding the Visual Style The Cadena Scenario editor allows the user to configure visual properties of the editor so that the user can have a richer experience The customizations are rudimentary at this time but should be sufficient for most users If more customizations are necessary a plugin should be created for the style To make changes to the visual style a user must create a file with a name that follows this pattern lt scenarioFileName gt visuals where scenarioFileName is the name of the style file before the scenario This will be a simple text file that uses the Java properties format Each property provides the Scenario editor with configurations that can enhance the look n feel of the editor to match user expectations Therefore the property names and values are important The first configurable item is the color used for component instances The naming scheme that is used is based upon the name of the instance followed by color For example if we have a component instance named testComponent we can set the color that is used to testComponent color red The values that can be used must be in the set of Eclipse Draw2d color constants org eclipse draw2d ColorConstants or a proper HEX value e g FF0000 is red and CCEEFF is bluish This set of colors is listed in Table 5 1 Visual Style Color Values 17 Scenario Tier Table 5 1 Visual Style Color Values blue darkBlue lightBlue gray darkGray l
67. zations are rudimentary at this time but should be sufficient for most users If more customizations are necessary a plugin should be created for the style To make changes to the visual style a user must create a file with a name that follows this pattern lt styleFileName gt visuals where lt styleFileName gt is the name of the style file before the style This will be a simple text file that uses the Java properties format Each property provides the Style editor with configurations that can enhance the look n feel of the editor to match user expectations Therefore the property names and values are important The first configurable item is the icon used for interface kinds The naming scheme that is used is based upon the name of the kind followed by icon For example if we have an interface kind named testInterfaceKind we can set the icon that is used to denote it by setting testInterfaceKind icon test gif We suggest you use an icon that whose size is 16x16 pixels The second configurable item is the color used for component kinds as well as meta kinds The naming scheme that is used is based upon the name of the kind followed by color For example if we have a component kind named testComponent we can set the color that is used to testComponent color red The values that can be used must be in the set of Eclipse Draw2d color constants org eclipse draw2d ColorConstants or a proper HEX value e g FF0000 is red and CCEEFF is bl

Download Pdf Manuals

image

Related Search

Related Contents

Manual em PDF  Receptor RP8D1 Gracias por comprar el receptor  Philips myLiving Suspension light 37670/86/16  Philips Lumea IPL hair removal system TT3000/01  Netgear PTV3000 Data Sheet  ディセクトロン超音波メス  2013年7月号(PDFファイル:9.5MB)  MANUAL DE USUARIO DEL PORTAL - Servicio de Rentas Internas    Lire le fichier PDF  

Copyright © All rights reserved.
Failed to retrieve file