Edee.one · Dokumentace

Konfigurace modulu

Modul libovolně definuje svoji konfiguraci v příslušném XML souboru - doporučená konvence využívá cestu config/module-muj-nazev/module-muj-nazev.xml.

Obsah konfiguračního souboru modulu je pak např. následující:

xml
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE sitemap SYSTEM "cps.dtd"><!-- historicky daný základ konfiguračního souboru, který je includován z jiného místa konfigurace --><sitemap>    <!-- definice modulu s nazvem "mujnazev" -->    <mujnazevmodule classname="mojepackage.mujnazev.MujNazevModule" mujVolitelnyAtribut="hodnota">        <!-- vlastní konfigurace modulu - je vhodné nedefinovat značky použité na jiné úrovni, nebo v jiném modulu -->        <mojeKonfiguraceHlavni atribut="hodnota">            <mojeKonfigurace>text</mojeKonfigurace>                </mojeKonfiguraceHlavni>        <mojeKonfiguraceDalsi />    </mujnazevmodule></sitemap>

CPS dle konfigurace vytvoří instanci modulu, XML konfigurace je pak dostupná ve vybraných fázích životního cyklu pomocí CpsModuleConfigSupport.

Pro zpracování konfigurace je přímo určena metoda parseModuleConfiguration, která je volána ještě před setup fází. Metoda vrací instanci konfiguračního objektu specifikované pouze marker interfacem CpsModuleConfiguration.

Výchozí implementace vrací BaseCpsModuleConfiguration, kde jsou XML atributy (v příkladu jako mujVolitelnyAtribut) pouze převedeny do mapy vlastností a dostupné pomocí com.fg.webapp.cps.v1.modules.BaseCpsModuleConfiguration.getProperty metody.

Typicky modul definuje vlastní konfigurační objekt. Pro rychlý převod XML konfigurace do pojo reprezentace lze využít třídu configHelper, případně zpracovat XML reprezentované v podobě ConfigElement.

Příklady

Zpracování pomocí configHelper a následný přístup k instanci konfigurace

java
public class WorkflowModule extends CpsGuiSpringModuleAbstract {
    @Override    public CpsModuleConfiguration parseModuleConfiguration(CpsModuleConfigSupport configSupport) {        // vlastni configuracni trida        final WorkflowConfig cfg = new WorkflowConfig();        // prevod z XML podoby do pojo pomoci helper tridy		final ConfigHelper helper = getConfigHelper();		helper.configureAccordingToSubElements(				configSupport.getModuleConfigRootElement(), // root XML element				cfg,                                        // prazdna instance pro naplneni z XML				new String[]{"gui", "injectedResources"}    // ignorovat elementy s jinym vyznamem		);        return cfg;    }
    @Override    public String getModuleStatus() {        // ziskani instance konfigurace		final WorkflowConfig cfg = getModuleConfiguration(WorkflowConfig.class);		return "initialized workflows:" + cfg.getWorkflowDefinitions());    }}

Ruční získání a zpracování XML

java
public class MujNazevModule extends CpsGuiSpringModuleAbstract {        @Override    protected void setupModuleAfterSpringInitialization(Map<String, Object> config) throws CpsException {        super.setupModuleAfterSpringInitialization(config);        // ziskani XML root prvku        ConfigElement rootElement = getModuleSupport().getConfigSupport(config).getModuleConfigRootElement();        // ziskani prvniho poduzlu        ConfigElement mojeKonfiguraceHlavni = rootElement.getChildElement("mojeKonfiguraceHlavni");        if (mojeKonfiguraceHlavni!=null) {            String hodnota = mojeKonfiguraceHlavni.getAttributeValue("atribut");        }        // ziskani vsech poduzlu        List<ConfigElement> mojeKonfiguraceDalsi = rootElement.getChildElements("mojeKonfiguraceDalsi");        // ziskani hodnoty pomoci XPATH        ConfigElement mojeKonfigurace = rootElement.getElement("mojeKonfiguraceHlavni/mojeKonfigurace");        String text = mojeKonfigurace.getTextValueTrim(); // mozne NPE!        // podminka s vychozi hodnotou        if (rootElement.getOptionalAttributeValueAsBoolean("restApi", false)) {            // ziskani nepovinne hodnoty            String restApiPrefix = rootElement.getOptionalAttributeValue("restApiPathPrefix");        }        // ziskani nepovinne hodnoty s konverzi        Integer timeout = rootElement.getOptionalAttribute("timeout", Integer.class);    }}

Souhrn

  • modul může mít libovolnou konfiguraci, kterou modul může zpracovat (ideálně v parseModuleConfiguration)
  • instance konfiguračního objektu vzniká před setup fází a je dostupná pomocí metod getModuleConfiguration, případně CpsModuleSupport#getModuleConfiguration
  • je připraven mechanizmus pro převod XML do POJO podpoby - configHelper
  • Spring moduly mohou ve svých třídách bezpečně používat Autowire konfigurační třídy - případně další možnosti pro konfigurace Spring modulu