Add setting tab

The following example shows some possibilities about the SDK configuration framework.

XML definition

In the following definition, three scopes are defined: server, project, process-catalog.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <tab name="sample-server" scope="server">
        <class qualifiedName="com.axemble.vdoc.configuration.TestDataTestServerConfigurationSDKEditor" />
        <section name="settings" label="service.library.createFolder.section.settings.label">
            <fields>
            <field name="sampleServerBoolean" label="sample-server.sampleServerBoolean.label" description="" ctrl="checkbox" boolean-value="true" throw-events="true"/>
                <field name="sampleServerText" label="sampleServerText" description="" ctrl="text" />
                <field name="sampleServerList" label="sampleServerList" description="" ctrl="textselectlist" mode="write" throw-events="true" string-value="sampleServerListOptionOne" allowreset="never">
                    <options>
                        <option key="sampleServerListOptionOne" labelid="sampleServerListOptionOne" />
                        <option key="sampleServerListOptionTwo" labelid="sampleServerListOptionTwo" />
                    </options>
                </field>
                <field name="sampleServerDate" label="sampleServerDate" description="" ctrl="date" />
                <field name="sampleServerUser" label="sampleServerUser" description="" ctrl="user" />
            </fields>
        </section>
        <custom>
            <customElement1 attribute1="attributeValue1"/>
        </custom>
    </tab>
    <tab name="sample-catalog" scope="process-catalog">
        <class qualifiedName="com.axemble.vdoc.configuration.TestDataTestCatalogConfigurationSDKEditor" />
        <section name="settings" label="service.library.createFolder.section.settings.label">
            <fields>
                <field name="sampleCatalogText" ctrl="text" label="sampleCatalogText"/>
                <field name="sampleCatalogBoolean" label="sample-server.sampleServerBoolean.label" description="" ctrl="checkbox" boolean-value="true" throw-events="true"/>
            </fields>
        </section>
        <section name="advanced">
            <fields>
                <field name="sampleCatalogDate" ctrl="date" />
                <field name="sampleCatalogUser" ctrl="user" />
            </fields>
        </section>
    </tab>
</configuration>

BaseConfigurationEditor implementation

TestDataTestServerConfigurationSDKEditor implementation

The onAfterLoad() method is implemented to initialize and hide some fields.

package com.axemble.vdoc.configuration;

import java.io.IOException;

import com.axemble.commons.xml.DomWriter;
import com.axemble.vdoc.sdk.configuration.base.BaseConfigurationEditor;
import com.axemble.vdp.utils.StringUtils;


public class TestDataTestServerConfigurationSDKEditor extends BaseConfigurationEditor {
    private static final long serialVersionUID = 1L;

    public TestDataTestServerConfigurationSDKEditor() {

    }

    @Override
    public boolean onAfterLoad() {

        // hide fields (getResourceController())
        // if sampleServerBoolean is check then sampleServerDate and sampleServerUser field will be hidden.
        boolean advanced = (getResource().getValue("sampleServerBoolean") == null) ? false : (boolean) getResource().getValue("sampleServerBoolean");
        getConfigurationSection().getEntryByName("sampleServerDate").setHidden(advanced);
        getResourceController().getDefaultWidget("sampleServerUser").setHidden(advanced);

        // Set field to an initial value (getResource())
        if (StringUtils.isEmpty((String) getResource().getValue("sampleServerText"))) {
            getDocument().getAbstractFieldByName("sampleServerText").setValue("Initial value");
        }

        return super.onAfterLoad();
    }
}

TestDataTestCatalogConfigurationSDKEditor implementation

package com.axemble.vdoc.configuration;

import java.io.IOException;

import com.axemble.commons.xml.DomWriter;
import com.axemble.vdoc.sdk.configuration.base.BaseConfigurationEditor;
import com.axemble.vdp.ui.framework.components.events.ChangeEvent;
import com.axemble.vdp.ui.framework.components.listeners.ChangeListener;
import com.axemble.vdp.ui.framework.document.AbstractField;
import com.axemble.vdp.utils.StringUtils;

public class TestDataTestCatalogConfigurationSDKEditor extends BaseConfigurationEditor {
    private static final long serialVersionUID = 1L;

    public TestDataTestCatalogConfigurationSDKEditor() {}

    @Override
    public boolean onAfterLoad() {

        //initialize default value (getResource())
        if (StringUtils.isEmpty((String) getResource().getValue("sampleCatalogText"))) {
            getDocument().getAbstractFieldByName("sampleCatalogText").setValue("Bla bla");
        }

        AbstractField booleanField = getDocument().getAbstractFieldByName("sampleCatalogBoolean");
        hideAdvancedSection((booleanField.getValue() != null) ? (boolean) booleanField.getValue() : false);

        booleanField.addChangeListener(new ChangeListener() {
            private static final long serialVersionUID = -2491203551267196556L;

            @Override
            public void onChange(ChangeEvent event) {
                boolean hide = (boolean) ((AbstractField) event.getSource()).getValue();
                hideAdvancedSection(hide);
            }
        });

        return super.onAfterLoad();
    }

    void hideAdvancedSection(boolean hide) {
        if (getConfigurationSection().getSubSectionByName("advanced") != null)
            getConfigurationSection().getSubSectionByName("advanced").setHidden(hide);
    }

}