Sparte anlegen

Modul Web

Wenn für IOS eine linkki-Oberfläche eingerichtet werden soll, kann ein We-Modul erstellt werden, dass auf den Web-Modulen des Standards aufbaut.

Modul Web anlegen

Im Modul web sind alle Implementierungen für die Oberfläche enthalten und hat Abhängigkeiten zum Modul business und zum web Modul von IOS-Basis.

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>de.faktorzehn.ios</groupId>
        <artifactId>ios-expert-unfall</artifactId>
        <version>25.7.0-SNAPSHOT</version>
    </parent>

    <artifactId>ios-expert-unfall-web</artifactId>
    <name>Faktor-IOS-Expert Unfall-Web</name>
    <packaging>jar</packaging>

    <properties>
        <checkstyle.header.file>${project.basedir}/../../checkstyle.java.header</checkstyle.header.file>
    </properties>

    <dependencies>
        <dependency>
            <groupId>de.faktorzehn.ios</groupId>
            <artifactId>ios-expert-unfall-business</artifactId>
        </dependency>
        <dependency>
            <groupId>de.faktorzehn.ios</groupId>
            <artifactId>ios-basis-web</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>${maven.compiler.source}</source>
                    <target>${maven.compiler.source}</target>
                    <annotationProcessorPaths>
                        <annotationProcessorPath>
                            <groupId>org.linkki-framework.tooling</groupId>
                            <artifactId>linkki-apt</artifactId>
                            <version>${linkki.version}</version>
                        </annotationProcessorPath>
                    </annotationProcessorPaths>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

Sparte konfigurieren

UvLobUIConfig

Im Modul web muss unter anderem die Klasse UvLobUIConfig erstellt werden.

/**
 * Ableitung von {@link VbLobUIConfig} für die Sparte Unfall.
 */
@Component
public class UvLobUIConfig extends VbLobUIConfig {

    private final UvLobConfig lobConfig;
    private final ApplicationInfo applicationInfo;

    @Autowired
    public UvLobUIConfig(ApplicationInfo applicationInfo, UvLobConfig lobConfig, @Lazy PartnerUI partnerUI) {
        super(partnerUI);
        this.applicationInfo = requireNonNull(applicationInfo, "ApplicationInfo darf nicht null sein");
        this.lobConfig = requireNonNull(lobConfig, "lobConfig darf nicht null sein");
    }

    @Override
    public String getLobId() {
        return getLobConfig().getLobId();
    }

    @Override
    public UvLobConfig getLobConfig() {
        return lobConfig;
    }

    @Override
    public UvOfferViewConfig getOfferViewConfig() {
        return new UvOfferViewConfig(this);
    }

    @Override
    public UvStartNewOfferViewConfig getStartNewOfferViewConfig() {
        return new UvStartNewOfferViewConfig(applicationInfo, this);
    }


    ...
}

Seitenkonfiguration anlegen

Über die Klasse UvAngebotTaskConfigFactory wird der Ablauf des Angebotsprozesses vorkonfiguriert.

public class UvAngebotTaskConfigFactory {

    public TaskConfig createTaskConfig() {
        return new TaskConfigBuilder()//
                .stepConfig(new UvVersichertePersonStepConfig())
                .stepConfig(new UvVersSchutzStepConfig())
                .stepConfig(new UvVorversicherungStepConfig()) //
                .stepConfig(new UvAngebotStepConfig()) //
                .stepConfig(new UvAbschlussStepConfig()) //
                .finishConfiguration(new UvAngebotFinishTaskConfig())//
                .build();
    }

}

Das Anbinden der Seite für den Angebotsprozess wird in drei Schritten angebunden.

Zuerst wird in der Klasse UvOfferViewConfig die Anwendung des Layouts definiert. Der Standard bietet hier das SidebarLayout Layout an:

/**
 * Konfiguration der Sparte Unfall für die Bearbeitung eines Angebots.
 */
public class UvOfferViewConfig extends VbOfferViewConfig {

    public UvOfferViewConfig(UvLobUIConfig lobUiConfig) {
        super(lobUiConfig);
    }

    @Override
    public OfferUIEditing createOfferUIEditing(Offer offer, User user) {
        return new UvOfferUIEditing(getLobUiConfig(), createEditing(offer, user));
    }

    @Override
    protected EditOfferComponentFactory getEditOfferComponentFactory() {
        return new UvEditOfferSidebarSheets();
    }

    protected OfferEditing createEditing(Offer offer, User user) {
        return new VbOfferEditing(offer, getLobConfig(), user);
    }

}

Danach wird in der Layoutklasse UvEditOfferSidebarSheets die Teilkomponente des Layouts (in diesem Fall ein SidebarSheet) hinzugefügt:

/**
 * Unfall-Erweiterung, die für den Edit-Offer-View-Inhalt ein {@link SidebarLayout} erstellt und
 * diesem {@link LinkkiTabSheet SidebarSheets} hinzufügt.
 */
public class UvEditOfferSidebarSheets extends VbEditOfferSidebarSheets {

    // (Haupt)EditSheet

    @Override
    protected SidebarSheet createEditSheet(OfferUIEditing uiEditing) {
        return new UvEditOfferViewSidebarSheet(uiEditing).createSheet(createEditSheetHeader(uiEditing));
    }

}

Als letztes wird in der Klasse UvEditOfferViewSidebarSheet die Seite des Abgebotsprozesses initialisiert und angelegt.

/**
 * Konfiguration der Sparte Unfall für die Bearbeitung eines Angebots
 */
public class UvEditOfferViewSidebarSheet extends VbEditOfferViewSidebarSheet {

    public UvEditOfferViewSidebarSheet(OfferUIEditing uiEditing) {
        super(uiEditing);
    }

    @Override
    protected UvOfferUIEditing getUIEditing() {
        return (UvOfferUIEditing)super.getUIEditing();
    }

    @Override
    protected Component createEditViewContent() {
        TaskConfig config = new UvAngebotTaskConfigFactory().createTaskConfig();
        TaskContext context = new UvAngebotTaskContext(getLocale(), getUIEditing());
        return TaskComponentFactory.createTaskComponentBasedOnTabSheet(config, context).getComponent();
    }