Konfigurace modulu

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

Zkopírovat odkaz na sekciPříklady

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

java
1 public class WorkflowModule extends CpsGuiSpringModuleAbstract {2
3    @Override4    public CpsModuleConfiguration parseModuleConfiguration(CpsModuleConfigSupport configSupport) {5        // vlastni configuracni trida6        final WorkflowConfig cfg = new WorkflowConfig();7        // prevod z XML podoby do pojo pomoci helper tridy8		final ConfigHelper helper = getConfigHelper();9		helper.configureAccordingToSubElements(10				configSupport.getModuleConfigRootElement(), // root XML element11				cfg,                                        // prazdna instance pro naplneni z XML12				new String[]{"gui", "injectedResources"}    // ignorovat elementy s jinym vyznamem13		);14        return cfg;15    }16
17    @Override18    public String getModuleStatus() {19        // ziskani instance konfigurace20		final WorkflowConfig cfg = getModuleConfiguration(WorkflowConfig.class);21		return "initialized workflows:" + cfg.getWorkflowDefinitions());22    }23}

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

java
1 public class MujNazevModule extends CpsGuiSpringModuleAbstract {2    3    @Override4    protected void setupModuleAfterSpringInitialization(Map<String, Object> config) throws CpsException {5        super.setupModuleAfterSpringInitialization(config);6        // ziskani XML root prvku7        ConfigElement rootElement = getModuleSupport().getConfigSupport(config).getModuleConfigRootElement();8        // ziskani prvniho poduzlu9        ConfigElement mojeKonfiguraceHlavni = rootElement.getChildElement("mojeKonfiguraceHlavni");10        if (mojeKonfiguraceHlavni!=null) {11            String hodnota = mojeKonfiguraceHlavni.getAttributeValue("atribut");12        }13        // ziskani vsech poduzlu14        List<ConfigElement> mojeKonfiguraceDalsi = rootElement.getChildElements("mojeKonfiguraceDalsi");15        // ziskani hodnoty pomoci XPATH16        ConfigElement mojeKonfigurace = rootElement.getElement("mojeKonfiguraceHlavni/mojeKonfigurace");17        String text = mojeKonfigurace.getTextValueTrim(); // mozne NPE!18        // podminka s vychozi hodnotou19        if (rootElement.getOptionalAttributeValueAsBoolean("restApi", false)) {20            // ziskani nepovinne hodnoty21            String restApiPrefix = rootElement.getOptionalAttributeValue("restApiPathPrefix");22        }23        // ziskani nepovinne hodnoty s konverzi24        Integer timeout = rootElement.getOptionalAttribute("timeout", Integer.class);25    }26}

Zkopírovat odkaz na sekciSouhrn

  • 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