Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

For instance, for the Scheduler component (check the functions the Scheduler must implement in ACS Workshop - Interfaces):

Code Block
languageyml
titlescheduler.yml
working_dir: /home/developer/workspace
prefix: acsws
module: SCHEDULER_MODULE
component_name: Scheduler
functions:
  - 'void start()'
  - 'void stop()'
  - 'long proposalUnderExecution()'

Example output After executing the Component Generator Tool you should see something like (click on "Expand source"):

Code Block
languagebash
titleComponent generation output
collapsetrue
> create_acs_component -l python scheduler.yml 
2022-08-24 16:15:39 localhost.localdomain __main__[21561] INFO Loading component's YAML definition.
2022-08-24 16:15:39 localhost.localdomain __main__[21561] DEBUG Component's definition: {'working_dir': '/home/developer/workspace', 'prefix': 'acsws', 'module': 'SCHEDULER_MODULE', 'component_name': 'Scheduler', 'functions': ['void start()', 'void stop()', 'long proposalUnderExecution()']}
2022-08-24 16:15:39 localhost.localdomain __main__[21561] INFO Creating IDL's directories
\nCreating/checking Module directory
   CREATED >>> |---idlScheduler 
   CREATED >>>     |---bin 
   CREATED >>>     |---include 
   CREATED >>>     |---idl 
   CREATED >>>     |---lib 
   CREATED >>>     |---lib/endorsed 
   CREATED >>>     |---lib/python 
   CREATED >>>     |---lib/ACScomponents 
   CREATED >>>     |---lib/python/site-packages 
   CREATED >>>     |---man 
   CREATED >>>     |---man/man1 
   CREATED >>>     |---man/man2 
   CREATED >>>     |---man/man3 
   CREATED >>>     |---man/man4 
   CREATED >>>     |---man/man5 
   CREATED >>>     |---man/man6 
   CREATED >>>     |---man/man7 
   CREATED >>>     |---man/man8 
   CREATED >>>     |---man/mann 
   CREATED >>>     |---man/manl 
   CREATED >>>     |---doc 
   CREATED >>>     |---object 
   CREATED >>>     |---LOGS 
   CREATED >>>     |---test 
   CREATED >>>     |---src 
   CREATED >>>     |---rtai 
   CREATED >>>     |---config 
   CREATED >>>     |---config/CDB 
   CREATED >>>     |---config/CDB/schemas 
   CREATED >>>     |---ChangeLog
\nCopying Makefile template for WS code
\nCopying Makefile.mk template for WS code
\nCopying module.mk template for WS code
2022-08-24 16:15:39 localhost.localdomain __main__[21561] INFO Creating IDL's content
2022-08-24 16:15:39 localhost.localdomain __main__[21561] DEBUG IDL's content: #ifndef _SCHEDULER_IDL_
#define _SCHEDULER_IDL_
 
#pragma prefix "acsws"
 
#include <acscomponent.idl>
 
module SCHEDULER_MODULE {
    interface Scheduler : ACS::ACSComponent {
        void start();

        void stop();

        long proposalUnderExecution();
    };
};

#endif

2022-08-24 16:15:39 localhost.localdomain __main__[21561] INFO Editing Makefile
2022-08-24 16:15:39 localhost.localdomain __main__[21561] INFO Adding component to CDB
2022-08-24 16:15:39 localhost.localdomain __main__[21561] DEBUG CDB's content: <?xml version="1.0" encoding="ISO-8859-1"?>
<Components  xmlns="urn:schemas-cosylab-com:Components:1.0"
       xmlns:cdb="urn:schemas-cosylab-com:CDB:1.0" 
       xmlns:baci="urn:schemas-cosylab-com:BACI:1.0" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <e Name="PBEND_B_01"   Code="acsexmplPowerSupplyImpl"
                             Type="IDL:alma/PS/PowerSupply:1.0"
                             Container="bilboContainer" ImplLang="cpp" />
      <e Name="PBUMP_B_01"   Code="acsexmplPowerSupplyImpl"
                             Type="IDL:alma/PS/PowerSupply:1.0"
                             Container="bilboContainer" ImplLang="cpp" />
      <e Name="PBUMP_B_02"   Code="acsexmplPowerSupplyImpl"
                             Type="IDL:alma/PS/PowerSupply:1.0"
                             Container="bilboContainer" ImplLang="cpp" />
      <e Name="TEST_PS_1"    Code="acsexmplPowerSupplyImpl"
                             Type="IDL:alma/PS/PowerSupply:1.0"
                             Container="bilboContainer" ImplLang="cpp" />
      <e Name="TEST_PS_2"    Code="acsexmplPowerSupplyImpl"
                             Type="IDL:alma/PS/PowerSupply:1.0"
                             Container="bilboContainer" ImplLang="cpp" />
      <e Name="TEST_PS_3"    Code="acsexmplPowerSupplyImpl"
                             Type="IDL:alma/PS/PowerSupply:1.0"
                             Container="bilboContainer" ImplLang="cpp" />
      <e Name="TEST_PS_4"    Code="acsexmplPowerSupplyImpl"
                             Type="IDL:alma/PS/PowerSupply:1.0"
                             Container="bilboContainer" ImplLang="cpp" />
      <e Name="TEST_PS_5"    Code="acsexmplPowerSupplyImpl"
                             Type="IDL:alma/PS/PowerSupply:1.0"
                             Container="bilboContainer" ImplLang="cpp" />
      <e Name="TEST_PS_6"    Code="acsexmplPowerSupplyImpl"
                             Type="IDL:alma/PS/PowerSupply:1.0"
                             Container="bilboContainer" ImplLang="cpp" />
      <e Name="TEST_PS_7"    Code="acsexmplPowerSupplyImpl"
                             Type="IDL:alma/PS/PowerSupply:1.0"
                             Container="bilboContainer" ImplLang="cpp" />
      <e Name="TEST_PS_8"    Code="acsexmplPowerSupplyImpl"
                             Type="IDL:alma/PS/PowerSupply:1.0"
                             Container="bilboContainer" ImplLang="cpp" />
      <e Name="TEST_PS_9"    Code="acsexmplPowerSupplyImpl"
                             Type="IDL:alma/PS/PowerSupply:1.0"
                             Container="bilboContainer" ImplLang="cpp" />
      <e Name="TEST_PS_10"    Code="acsexmplPowerSupplyImpl"
                             Type="IDL:alma/PS/PowerSupply:1.0"
                             Container="bilboContainer" ImplLang="cpp" />
      <e Name="TEST_PS_11"    Code="acsexmplPowerSupplyImpl"
                             Type="IDL:alma/PS/PowerSupply:1.0"
                             Container="bilboContainer" ImplLang="cpp" />
      <e Name="TEST_PS_12"    Code="acsexmplPowerSupplyImpl"
                             Type="IDL:alma/PS/PowerSupply:1.0"
                             Container="bilboContainer" ImplLang="cpp" />
      <e Name="TEST_PS_13"    Code="acsexmplPowerSupplyImpl"
                             Type="IDL:alma/PS/PowerSupply:1.0"
                             Container="bilboContainer" ImplLang="cpp" />
      <e Name="TEST_PS_14"    Code="acsexmplPowerSupplyImpl"
                             Type="IDL:alma/PS/PowerSupply:1.0"
                             Container="bilboContainer" ImplLang="cpp" />
      <e Name="TEST_PS_15"    Code="acsexmplPowerSupplyImpl"
                             Type="IDL:alma/PS/PowerSupply:1.0"
                             Container="bilboContainer" ImplLang="cpp" />
      <e Name="TEST_PS_16"    Code="acsexmplPowerSupplyImpl"
                             Type="IDL:alma/PS/PowerSupply:1.0"
                             Container="bilboContainer" ImplLang="cpp" />
      <e Name="TEST_PS_17"    Code="acsexmplPowerSupplyImpl"
                             Type="IDL:alma/PS/PowerSupply:1.0"
                             Container="bilboContainer" ImplLang="cpp" />
      <e Name="TEST_PS_18"    Code="acsexmplPowerSupplyImpl"
                             Type="IDL:alma/PS/PowerSupply:1.0"
                             Container="bilboContainer" ImplLang="cpp" />
      <e Name="MOUNT1"       Code="acsexmplMountImpl"	
                             Type="IDL:alma/MOUNT_ACS/Mount:1.0"
                             Container="bilboContainer" ImplLang="cpp" />
      <e Name="MOUNT2"       Code="acsexmplMountImpl"	
                             Type="IDL:alma/MOUNT_ACS/Mount:1.0"
                             Container="bilboContainer" ImplLang="cpp" />
      <e Name="MOUNT3"       Code="acsexmplMountImpl"	
                             Type="IDL:alma/MOUNT_ACS/Mount:1.0"
                             Container="bilboContainer" ImplLang="cpp" />
      <e Name="MOUNT4"       Code="acsexmplMountImpl"	
                             Type="IDL:alma/MOUNT_ACS/Mount:1.0"
                             Container="bilboContainer" ImplLang="cpp" />
      <e Name="MOUNT5"       Code="acsexmplMountImpl"	
                             Type="IDL:alma/MOUNT_ACS/Mount:1.0"
                             Container="bilboContainer" ImplLang="cpp" />
      <e Name="MOUNT6"       Code="acsexmplMountImpl"	
                             Type="IDL:alma/MOUNT_ACS/Mount:1.0"
                             Container="bilboContainer" ImplLang="cpp" />
      <e Name="LAMP1"        Code="acsexmplLampImpl"
                             Type="IDL:alma/acsexmplLamp/Lamp:1.0"
                             Container="bilboContainer" ImplLang="cpp" />
      <e Name="LAMPWHEEL1"   Code="acsexmplLampWheelImpl"
                             Type="IDL:alma/acsexmplLampWheel/LampWheel:1.0"
                             Container="bilboContainer" ImplLang="cpp" />
	  <e Name="FILTERWHEEL1" Code="acsexmplFilterWheelImpl" 
							 Type="IDL:alma/acsexmplFilterWheel/FilterWheel:1.0" 
							 Container="bilboContainer" ImplLang="cpp" />
      <e Name="CLOCK1"	     Code="acsclock"
                             Type="IDL:alma/acstime/Clock:1.0" 
			     Container="bilboContainer"
			     Default="true" ImplLang="cpp" />
      <e Name="TIMER1"	     Code="acstimer" 
                             Type="IDL:alma/acstime/Timer:1.0" 
			     Container="bilboContainer"
			     Default="true" ImplLang="cpp" />
      <e Name="FRIDGE1"	     Code="acsexmplFridgeImpl"	  
                             Type="IDL:alma/FRIDGE/FridgeControl:1.0"
 		             Container="bilboContainer" ImplLang="cpp" />
      <e Name="HELLODEMO1"   Code="alma.demo.HelloDemoImpl.HelloDemoHelper" 
                             Type="IDL:alma/demo/HelloDemo:1.0" 
                             Container="frodoContainer" ImplLang="java" />
      <e Name="HELLOLAMP1"   Code="alma.demo.LampAccessImpl.LampAccessHelper" 
                             Type="IDL:alma/demo/LampAccess:1.0" 
                             Container="frodoContainer" ImplLang="java" />
      <e Name="LAMPACCESS1"  Code="alma.demo.LampAccessImpl.LampAccessHelper"
                             Type="IDL:alma/demo/LampAccess:1.0" 
                             Container="frodoContainer" ImplLang="java" />
      <e Name="LAMPCALLBACK1" Code="alma.demo.LampCallbackImpl.LampCallbackHelper"
                              Type="IDL:alma/demo/LampCallback:1.0" 
                              Container="frodoContainer" ImplLang="java" />
      <e Name="XMLCOMP1"     Code="alma.demo.XmlComponentImpl.XmlComponentHelper" 
                             Type="IDL:alma/demo/XmlComponent:1.0" 
                             Container="frodoContainer" ImplLang="java" />
      <e Name="PYHELLODEMO1"
                             Code="demoImpl.HelloDemo"   
			     Type="IDL:alma/demo/HelloDemo:1.0"   
			     Container="aragornContainer" ImplLang="py" />
      <e Name="ARCHIVE_IDENTIFIER"
                             Code="alma.archive.helpers.IdentifierHelper"
                             Type="IDL:alma/xmlstore/Identifier:1.0"
                             Container="frodoContainer"
                             Default="true" ImplLang="java" />
      <e Name="ARCHIVE_CONNECTION"
                             Code="alma.archive.helpers.ArchiveConnectionHelper"
                             Type="IDL:alma/xmlstore/ArchiveConnection:1.0"
                             Container="frodoContainer"
                             Default="true" ImplLang="java" />
      <e Name="ERRORCOMP_CPP" 	    
         Code="acsexmplErrorComponentImpl" 
         Type="IDL:alma/acsexmplErrorComponent/ErrorComponent:1.0"
         Container="bilboContainer" ImplLang="cpp" />
      <e Name="ERRORCOMP_JAVA" 
         Code="alma.acsexmplErrorComponent.ErrorComponentImpl.ErrorComponentHelper" 
         Type="IDL:alma/acsexmplErrorComponent/ErrorComponent:1.0" 
         Container="frodoContainer"  ImplLang="java" />
      <e Name="ERRORCOMP_PY" 	    
         Code="acsexmplErrorComponentImpl.ErrorComponent" 
         Type="IDL:alma/acsexmplErrorComponent/ErrorComponent:1.0"
         Container="aragornContainer" ImplLang="py" />
      <e Name="SchedulerPython" 	
         Code="SCHEDULER_MODULEImpl.SchedulerImpl" 
         Type="IDL:acsws/SCHEDULER_MODULE/Scheduler:1.0"
         Container="aragornContainer" ImplLang="py" />
</Components>


2022-08-24 16:15:39 localhost.localdomain create_python_component[21561] INFO Creating component's directories.
\nCreating/checking Module directory
   CREATED >>> |---pyScheduler 
   CREATED >>>     |---bin 
   CREATED >>>     |---include 
   CREATED >>>     |---idl 
   CREATED >>>     |---lib 
   CREATED >>>     |---lib/endorsed 
   CREATED >>>     |---lib/python 
   CREATED >>>     |---lib/ACScomponents 
   CREATED >>>     |---lib/python/site-packages 
   CREATED >>>     |---man 
   CREATED >>>     |---man/man1 
   CREATED >>>     |---man/man2 
   CREATED >>>     |---man/man3 
   CREATED >>>     |---man/man4 
   CREATED >>>     |---man/man5 
   CREATED >>>     |---man/man6 
   CREATED >>>     |---man/man7 
   CREATED >>>     |---man/man8 
   CREATED >>>     |---man/mann 
   CREATED >>>     |---man/manl 
   CREATED >>>     |---doc 
   CREATED >>>     |---object 
   CREATED >>>     |---LOGS 
   CREATED >>>     |---test 
   CREATED >>>     |---src 
   CREATED >>>     |---rtai 
   CREATED >>>     |---config 
   CREATED >>>     |---config/CDB 
   CREATED >>>     |---config/CDB/schemas 
   CREATED >>>     |---ChangeLog
\nCopying Makefile template for WS code
\nCopying Makefile.mk template for WS code
\nCopying module.mk template for WS code
2022-08-24 16:15:40 localhost.localdomain create_python_component[21561] INFO Creating component's content.
2022-08-24 16:15:40 localhost.localdomain create_python_component[21561] DEBUG Component's content: # Client stubs and definitions, such as structs, enums, etc.
import SCHEDULER_MODULE
# Skeleton infrastructure for server implementation
import SCHEDULER_MODULE__POA
   
# Base component implementation
from Acspy.Servants.ACSComponent import ACSComponent
# Services provided by the container to the component
from Acspy.Servants.ContainerServices import ContainerServices
# Basic component lifecycle (initialize, execute, cleanUp and aboutToAbort methods)
from Acspy.Servants.ComponentLifecycle import ComponentLifecycle


class SchedulerImpl(SCHEDULER_MODULE__POA.Scheduler, ACSComponent, ContainerServices, ComponentLifecycle):
    def __init__(self):
        ACSComponent.__init__(self)
        ContainerServices.__init__(self)
        self._logger = self.getLogger()
        
    def start(self):
        raise NotImplementedError("This function should do something")

    def stop(self):
        raise NotImplementedError("This function should do something")

    def proposalUnderExecution(self):
        raise NotImplementedError("This function should do something")

2022-08-24 16:15:40 localhost.localdomain create_python_component[21561] INFO Editing Makefile

As you can see, two directories were created: "idlScheduler" and "idlSchedulerpyScheduler".

Code Block
languagebash
titleidlScheduler
collapsetrue
> tree workspace/idlScheduler/
workspace/idlScheduler/
├── bin
├── ChangeLog
├── config
│   └── CDB
│       └── schemas
├── doc
├── idl
│   └── Scheduler.idl
├── include
├── lib
│   ├── ACScomponents
│   ├── endorsed
│   ├── libSchedulerStubs.a
│   ├── libSchedulerStubs.so
│   ├── python
│   │   └── site-packages
│   │       ├── Scheduler_idl.py
│   │       ├── SCHEDULER_MODULE
│   │       │   └── __init__.py
│   │       └── SCHEDULER_MODULE__POA
│   │           └── __init__.py
│   └── Scheduler.jar
├── LOGS
├── man
│   ├── man1
│   ├── man2
│   ├── man3
│   ├── man4
│   ├── man5
│   ├── man6
│   ├── man7
│   ├── man8
│   ├── manl
│   └── mann
├── object
│   ├── SchedulerC.cpp
│   ├── SchedulerC.d
│   ├── SchedulerC.h
│   ├── SchedulerC.inl
│   ├── SchedulerC.o
│   ├── SchedulerS.cpp
│   ├── SchedulerS.d
│   ├── SchedulerS.h
│   └── SchedulerS.o
├── rtai
├── src
│   ├── acsws
│   │   └── SCHEDULER_MODULE
│   │       └── SchedulerImpl
│   │           └── SchedulerComponentHelper.java.tpl
│   ├── Makefile
│   ├── Makefile.mk
│   └── module.mk
└── test

33 directories, 21 files
Code Block
languagebash
titlepyScheduler
collapsetrue
> tree workspace/pyScheduler/
workspace/pyScheduler/
├── bin
├── ChangeLog
├── config
│   └── CDB
│       └── schemas
├── doc
├── idl
├── include
├── lib
│   ├── ACScomponents
│   ├── endorsed
│   └── python
│       └── site-packages
│           └── SCHEDULER_MODULEImpl
│               ├── __init__.py
│               └── SchedulerImpl.py
├── LOGS
├── man
│   ├── man1
│   ├── man2
│   ├── man3
│   ├── man4
│   ├── man5
│   ├── man6
│   ├── man7
│   ├── man8
│   ├── manl
│   └── mann
├── object
├── rtai
├── src
│   ├── Makefile
│   ├── Makefile.mk
│   ├── module.mk
│   └── SCHEDULER_MODULEImpl
│       ├── __init__.py
│       └── SchedulerImpl.py
└── test

30 directories, 8 files

With the following source code for the IDL and implementation:

Code Block
languagecpp
titleidlScheduler/idl/Scheduler.idl
linenumberstrue
#ifndef _SCHEDULER_IDL_
#define _SCHEDULER_IDL_
 
#pragma prefix "acsws"
 
#include <acscomponent.idl>
 
module SCHEDULER_MODULE {
    interface Scheduler : ACS::ACSComponent {
        void start();

        void stop();

        long proposalUnderExecution();
    };
};

#endif
Code Block
languagepy
titlepyScheduler/src/SCHEDULER_MODULEImpl/SchedulerImpl.py
linenumberstrue
# Client stubs and definitions, such as structs, enums, etc.
import SCHEDULER_MODULE
# Skeleton infrastructure for server implementation
import SCHEDULER_MODULE__POA
   
# Base component implementation
from Acspy.Servants.ACSComponent import ACSComponent
# Services provided by the container to the component
from Acspy.Servants.ContainerServices import ContainerServices
# Basic component lifecycle (initialize, execute, cleanUp and aboutToAbort methods)
from Acspy.Servants.ComponentLifecycle import ComponentLifecycle


class SchedulerImpl(SCHEDULER_MODULE__POA.Scheduler, ACSComponent, ContainerServices, ComponentLifecycle):
    def __init__(self):
        ACSComponent.__init__(self)
        ContainerServices.__init__(self)
        self._logger = self.getLogger()
        
    def start(self):
        raise NotImplementedError("This function should do something")

    def stop(self):
        raise NotImplementedError("This function should do something")

    def proposalUnderExecution(self):
        raise NotImplementedError("This function should do something")