Components, applications and programs that select them

The complete source of structure_applications.ek9, compiled by the EK9 compiler. Shown on structure.html.

#!ek9
defines module site.structure.applications

  defines component

    BaseConfiguration as abstract
      getFileStoreName() as abstract
        <- rtn as String?

    MainStoreSolution extends BaseConfiguration
      override getFileStoreName()
        <- rtn as String: "MainStore"

    SecondaryStoreSolution extends BaseConfiguration
      override getFileStoreName()
        <- rtn as String: "SecondaryStore"

    DefaultStoreSolution extends BaseConfiguration
      override getFileStoreName()
        <- rtn as String: "DefaultStore"

    DataCache as abstract
      cacheName() as abstract
        <- rtn as String?

    RedisCache extends DataCache
      override cacheName()
        <- rtn as String: "Redis"

    MemCached extends DataCache
      override cacheName()
        <- rtn as String: "MemCached"

  defines application

    AppV1
      register MainStoreSolution() as BaseConfiguration
      register RedisCache() as DataCache

    AppV2
      register SecondaryStoreSolution() as BaseConfiguration
      register RedisCache() as DataCache

    AppV3
      register DefaultStoreSolution() as BaseConfiguration
      register MemCached() as DataCache

  defines class

    ConfigHandler
      //Because BaseConfiguration is an abstract component it will get injected
      //Note the use of the ! suffix
      config as BaseConfiguration!

      showConfigDetails()
        stdout <- Stdout()
        stdout.println(config.getFileStoreName())

      default operator ?

  defines program

    v1Program with application of AppV1
      configHandler <- ConfigHandler()
      configHandler.showConfigDetails()

    v2Program with application of AppV2
      configHandler <- ConfigHandler()
      configHandler.showConfigDetails()

    v3Program with application of AppV3
      configHandler <- ConfigHandler()
      configHandler.showConfigDetails()

Download structure_applications.ek9

Output

v1Program

MainStore

v2Program

SecondaryStore

v3Program

DefaultStore