Changeset 1008


Ignore:
Timestamp:
03/09/2011 11:11:31 AM (9 years ago)
Author:
michael.kriegel
Message:

World Model Initialisation can now be loaded from an xml file

Location:
libs/cmion
Files:
4 added
6 edited

Legend:

Unmodified
Added
Removed
  • libs/cmion/cmionAndroidAddOns/src/cmion/architecture/AndroidArchitecture.java

    r425 r1008  
    5252import cmion.level2.CompetencyExecution; 
    5353import cmion.level2.CompetencyLibrary; 
    54 import cmion.level2.migration.MigrationUtils; 
    5554import cmion.level3.AndroidCompetencyManager; 
    5655import cmion.level3.CompetencyManager; 
    5756import cmion.storage.BlackBoard; 
    58 import cmion.storage.WorldModel; 
     57import cmion.storage.AndroidWorldModel; 
    5958 
    6059import ion.Meta.Element; 
     
    6766                 
    6867        /** the world model in which we store high level symbolic information */ 
    69         private WorldModel worldModel; 
     68        private AndroidWorldModel worldModel; 
    7069 
    7170        /** the black board that stores lower level information for competencies to share 
     
    8786        /** the name of the file with the competency library configuration */ 
    8887        private String competencyLibraryFile; 
     88         
     89        /** the name of the file with the initial world model content */ 
     90        private String worldModelInitFile; 
    8991         
    9092        /** This list stores all custom components that are loaded dynamically, depending on the  
     
    113115                 
    114116                // 1: create data storage components: Worldmodel and Blackboard 
    115                 worldModel = new WorldModel(this,"WorldModel"); 
     117                worldModel = new AndroidWorldModel(this,"WorldModel"); 
    116118                Simulation.instance.getElements().add(worldModel); 
    117119                Simulation.instance.update(); 
     
    142144                 
    143145                Simulation.instance.update(); 
     146                 
     147                // load world model initial state, if an init file was specified  
     148                if (worldModelInitFile!=null) 
     149                {        
     150                        worldModel.loadInitFile(worldModelInitFile); 
     151                        Simulation.instance.update(); 
     152                } 
    144153                 
    145154                System.out.println("CMION initialised"); 
     
    183192                else 
    184193                        throw new Exception("Architecture Configuration file does not specify competency library configuration file. Attribute CompetencyLibraryConfigurationFile not found."); 
     194                 
     195                // read optional attribute WorldModelInitFile 
     196                Node atrWorldModelFile = attribs.getNamedItem("WorldModelInitFile"); 
     197                if (atrWorldModelFile!=null)  
     198                        worldModelInitFile = atrWorldModelFile.getNodeValue(); 
     199                else 
     200                        worldModelInitFile=null; 
    185201                 
    186202                // load custom components and create them 
     
    288304        /** returns the world model component */ 
    289305        @Override 
    290         public WorldModel getWorldModel() 
     306        public AndroidWorldModel getWorldModel() 
    291307        { 
    292308                return worldModel; 
  • libs/cmion/cmionLauncher/ArchitectureConfiguration.dtd

    r181 r1008  
    55<!-- The xml file in which the competency library is set up--> 
    66<!ATTLIST ArchitectureConfiguration CompetencyLibraryConfigurationFile CDATA #REQUIRED> 
     7<!-- (optional) the xml file from which to load the initial content of the world model --> 
     8<!ATTLIST ArchitectureConfiguration WorldModelInitFile CDATA #IMPLIED> 
    79 
    810<!ELEMENT ArchitectureComponent EMPTY> 
  • libs/cmion/cmionLauncher/ArchitectureConfiguration.xml

    r296 r1008  
    99<ArchitectureConfiguration  
    1010 CompetencyManagerRulesFile="CompManagerRulesTest.xml"  
    11  CompetencyLibraryConfigurationFile="CompetencyLibraryTest.xml" > 
     11 CompetencyLibraryConfigurationFile="CompetencyLibraryTest.xml"  
     12 WorldModelInitFile = "worldModelInit.xml"> 
    1213 
    1314 <!-- following a number of architecture components to load can be specified. by  
     
    2324 <ArchitectureComponent ClassName="cmion.level3.fatima.FAtiMAConnector" ConstructorParameters="" /> 
    2425 <ArchitectureComponent ClassName="cmion.addOns.monitors.CmionEventMonitor" /> 
     26 <ArchitectureComponent ClassName="cmion.addOns.manipulators.WorldModelManipulator" /> 
    2527 <ArchitectureComponent ClassName="cmion.addOns.samgar.SamgarConnector" /> 
    26  
    2728</ArchitectureConfiguration> 
  • libs/cmion/cmionLauncher/src/cmion/architecture/Architecture.java

    r424 r1008  
    4747import cmion.level2.CompetencyExecution; 
    4848import cmion.level2.CompetencyLibrary; 
    49 import cmion.level2.migration.MigrationUtils; 
    5049import cmion.level3.CompetencyManager; 
    5150import cmion.storage.BlackBoard; 
     
    8180        /** the name of the file with the competency library configuration */ 
    8281        private String competencyLibraryFile; 
     82         
     83        /** the name of the file with the initial world model content */ 
     84        private String worldModelInitFile; 
    8385         
    8486        /** This list stores all custom components that are loaded dynamically, depending on the  
     
    129131                        if (element instanceof CmionComponent) 
    130132                                ((CmionComponent)element).registerHandlers(); 
    131                  
    132                 Simulation.instance.update(); 
     133 
     134                Simulation.instance.update(); 
     135                 
     136                // load world model initial state, if an init file was specified  
     137                if (worldModelInitFile!=null) 
     138                {        
     139                        worldModel.loadInitFile(worldModelInitFile); 
     140                        Simulation.instance.update(); 
     141                } 
    133142                 
    134143                System.out.println("CMION initialised"); 
     
    169178                else 
    170179                        throw new Exception("Architecture Configuration file does not specify competency library configuration file. Attribute CompetencyLibraryConfigurationFile not found."); 
     180 
     181                // read optional attribute WorldModelInitFile 
     182                Node atrWorldModelFile = attribs.getNamedItem("WorldModelInitFile"); 
     183                if (atrWorldModelFile!=null)  
     184                        worldModelInitFile = atrWorldModelFile.getNodeValue(); 
     185                else 
     186                        worldModelInitFile=null; 
     187 
    171188                 
    172189                // load custom components and create them 
  • libs/cmion/cmionMain/src/cmion/storage/WorldModel.java

    r248 r1008  
    3030package cmion.storage; 
    3131 
     32import java.io.File; 
     33import java.io.FileInputStream; 
     34import java.io.InputStream; 
    3235import java.util.ArrayList; 
    3336import java.util.HashMap; 
     37 
     38import javax.xml.parsers.DocumentBuilder; 
     39import javax.xml.parsers.DocumentBuilderFactory; 
     40 
     41import org.w3c.dom.Document; 
     42import org.w3c.dom.Node; 
     43import org.w3c.dom.NodeList; 
    3444 
    3545import cmion.architecture.IArchitecture; 
     
    4858                super(architecture,name, "WorldModel", null); 
    4959        } 
    50  
    5160         
    5261        /** request adding an agent to the world model */ 
     
    128137        } 
    129138         
     139        protected InputStream openInitFile(String initFileName) throws Exception{ 
     140                File initFile = new File(initFileName); 
     141 
     142                // check if file exists 
     143                if (! initFile.exists()) throw new Exception("cannot locate world model initialization file " + initFileName ); 
     144                 
     145                return new FileInputStream(initFile); 
     146        } 
     147         
     148        /** Load the initial contents for the world model from the specified file */ 
     149        public void loadInitFile(String initFile) throws Exception 
     150        { 
     151                InputStream inStream = openInitFile(initFile); 
     152                 
     153                // parse the file to a dom document 
     154                DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); 
     155                DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder(); 
     156                Document doc = docBuilder.parse (inStream); 
     157 
     158                // normalize text representation 
     159                doc.getDocumentElement().normalize(); 
     160                 
     161                ArrayList<String> names = new ArrayList<String>(); 
     162                 
     163                // read agents 
     164                readAgentOrObject(doc,"Agent",true,names);               
     165                // read objects 
     166                readAgentOrObject(doc,"Object",false,names);             
     167                                 
     168        } 
     169         
     170        private void readAgentOrObject(Document doc, String tag, boolean agent,ArrayList<String> names) throws Exception 
     171        { 
     172                // read <Agent>, or <Object> tags 
     173                NodeList tags = doc.getElementsByTagName(tag);           
     174                for (int i=0; i<tags.getLength(); i++) 
     175                { 
     176                        Node nameAttr = tags.item(i).getAttributes().getNamedItem("Name"); 
     177 
     178                        if (nameAttr==null) throw new Exception(tag + " name not specified in World Model Init File"); 
     179                         
     180                        String name = nameAttr.getNodeValue().trim(); 
     181 
     182                        if (name.equals("")) throw new Exception(tag + " name not specified in World Model Init File"); 
     183                         
     184                        if (names.contains(name)) throw new Exception(tag + " name " + name + " may not be used multiple times in World Model Init File"); 
     185                                 
     186                        names.add(name); 
     187                         
     188                        HashMap<String,Object> properties = new HashMap<String,Object>(); 
     189                         
     190                        NodeList propNodes = tags.item(i).getChildNodes(); 
     191                                                 
     192                        for (int j=0; j<propNodes.getLength(); j++) 
     193                        { 
     194                                 
     195                                if (propNodes.item(j).getNodeName().equals("Property")) 
     196                                { 
     197                                        Node propNameAttr = propNodes.item(j).getAttributes().getNamedItem("Name"); 
     198                                         
     199                                        if (propNameAttr==null) throw new Exception("Property name not specified for "+tag+" "+ name + " in World Model Init File"); 
     200                                         
     201                                        String propName = propNameAttr.getNodeValue().trim(); 
     202 
     203                                        if (propName.equals("")) throw new Exception("Property name not specified for "+tag+" "+ name + " in World Model Init File"); 
     204 
     205                                        Node propValueAttr = propNodes.item(j).getAttributes().getNamedItem("Value"); 
     206                                         
     207                                        if (propValueAttr==null) throw new Exception("Property value not specified for "+tag+" "+ name + " in World Model Init File"); 
     208                                         
     209                                        String propValue = propValueAttr.getNodeValue().trim(); 
     210                                         
     211                                        properties.put(propName, propValue);                                     
     212                                         
     213                                } 
     214                        } 
     215                         
     216                        if (agent) 
     217                                this.requestAddAgent(name, properties); 
     218                        else 
     219                                this.requestAddObject(name, properties);                                                         
     220                }                                
     221        } 
     222         
    130223} 
Note: See TracChangeset for help on using the changeset viewer.