<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-business</artifactId>
<name>Faktor-IOS-Expert Unfall-Business</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-core-impl</artifactId>
</dependency>
<dependency>
<groupId>de.faktorzehn.ios</groupId>
<artifactId>ios-expert-unfall-verkaufsprodukte</artifactId>
</dependency>
<dependency>
<groupId>de.faktorzehn.systems</groupId>
<artifactId>ios-basis-business</artifactId>
</dependency>
<!-- Faktor Zehn Dependencies -->
<dependency>
<groupId>de.faktorzehn.muster.shu-privat</groupId>
<artifactId>vm-unfall-extapi</artifactId>
</dependency>
<dependency>
<groupId>de.faktorzehn.muster.shu-privat</groupId>
<artifactId>vm-unfall-extapimapper</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
<manifest>
<addClasspath>false</addClasspath>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
</project>
Sparte anlegen
Modul Business
Modul Business anlegen
Im Modul business
wird die Geschäftslogik implementiert. Abhängigkeiten sind auf das Modul verkaufsprodukte
und auf die business
Komponente von IOS-Basis.
Sparte konfigurieren
Folgende Klassen müssen im Modul business
erstellt werden.
UvLobConfig
In der Klasse UvLobConfig
wird die Sparte konfiguriert.
/**
* Konfiguration der Sparte Unfall.
*/
@Component
public class UvLobConfig extends VbLobConfig {
public static final String LOB_ID = "uv";
@Autowired
@Lazy
@CheckForNull
private IUvPolicyManagementFacade uvFacade;
@Autowired
public UvLobConfig(LobInitializationContainer initContainer, PartnerRepository partnerRepository) {
super(LOB_ID, initContainer, partnerRepository);
}
@Override
public IProductConfiguration getProductConfiguration() {
return UvProductConfigurationProvider.getProductConfiguration();
}
@Override
public UvVersicherungOperations getVersicherungOperations() {
return new UvVersicherungOperations();
}
@Override
public String getName(Locale locale) {
return "Unfall";
}
@Override
public VorversicherungsInfoConfiguration getVorversicherungsInfoConfiguration() {
VuVerzeichnis vuVerzeichnis = VuVerzeichnis.getInstance(getProductConfiguration().getRepository());
return new UvVorversicherungsInfoConfiguration(vuVerzeichnis);
}
@Override
public CreateOfferProcess getCreateOfferProcess(ProcessContext context) {
// Im context muss eine Instanz des Users hinzugefügt sein
return new UvCreateOfferProcessImpl(VbProcessContext.Builder.from((VbProcessContext)context)//
.offerNumberGenerator(getOfferNumberGenerator())//
.iosApplication(getIOSApplication())//
.productConfiguration(getProductConfiguration())//
.partnerCache(getPartnerCache())//
.versicherungOperations(getVersicherungOperations())//
.get());
}
@Override
protected IPolicyManagementFacade getPolicyManagementFacade() {
return requireNonNull(uvFacade, "uvFacade darf nicht null sein");
}
...
}
UvProductConfigurationProvider
In der Klasse UvProductConfigurationProvider
werden alle Modell- und Produktrepositories zusammengeführt. Der Provider ordnet die Struktur der Repositories in folgender Weise an:
-
Das neu erstellte Verkaufsprodukte-Modul ist die Ausgangsbasis, die weitere RuntimeRepositories referenziert,
-
Referenz auf ein Repository, das alle Repositories aus dem Faktor-IOS-Core-Projekt beinhaltet,
-
Referenz auf das Repository aus der Faktor-IOS-Versicherungsbasis,
-
Referenz auf ein Repository mit den spartenspezifischen Produktdaten, welches alle notwendigen Modell- und Produktrepositories des spartenspezifischen (kundenindividuellen) und releasefesten Versicherungsmodells beinhaltet,
-
ggf. Referenz auf das F10-Partnermodell und (kundenindividuelle) Partner-Produktdaten,
-
ggf. Referenz auf sonstige kundenindividuelle oder F10 Modell- und Produktrepositories (z.B. das Fragebogenmodell).
/**
* Produktkonfiguration mit allen benötigten FIPS-RuntimeRepositories.
*/
@UtilityClass
public class UvProductConfigurationProvider {
private static final String DE_FAKTORZEHN_PARTNER_MODELL = "de/faktorzehn/partnerinterface/model/internal/partner-model-repository-toc.xml";
private static final IRuntimeRepository RUNTIME_REPOSITORY = createRuntimeRepository();
private static final IProductConfiguration PRODUCT_CONFIGURATION = new DefaultProductConfiguration(
RUNTIME_REPOSITORY);
private UvProductConfigurationProvider() {
//
}
/**
* Gibt das {@link IRuntimeRepository} zurück.
*/
public static IRuntimeRepository getRuntimeRepository() {
return RUNTIME_REPOSITORY;
}
/**
* Gibt die {@link IProductConfiguration} zum Zugriff auf die Produktdaten zurück.
*/
public static IProductConfiguration getProductConfiguration() {
return PRODUCT_CONFIGURATION;
}
private static IRuntimeRepository createRuntimeRepository() {
AbstractRuntimeRepository uvExpertVerkaufsprodukteRepo = UvIosVerkaufsprodukteClassloaderRuntimeRepository.INSTANCE;
// Basis-Modell
uvExpertVerkaufsprodukteRepo.addDirectlyReferencedRepository(createRepository(DE_FAKTORZEHN_PARTNER_MODELL));
uvExpertVerkaufsprodukteRepo.addDirectlyReferencedRepository(
IosCoreClassloaderRuntimeRepositoryUtil.createIosCoreRuntimeRepository());
uvExpertVerkaufsprodukteRepo.addDirectlyReferencedRepository(IosBasisVmClassloaderRuntimeRepository.INSTANCE);
return uvExpertVerkaufsprodukteRepo;
}
private static ClassloaderRuntimeRepository createRepository(String tocPath) {
ClassloaderRuntimeRepository repository = ClassloaderRuntimeRepository.create(tocPath);
repository.setFormulaEvaluatorFactory(new GroovyFormulaEvaluatorFactory());
return repository;
}
}
Die Runtime-Repository-Klasse UvIosVerkaufsprodukteClassloaderRuntimeRepository
führt alle Modell- und Produktrepositories für das spartenspezifische Versicherungsmodell zusammen.
/**
* Produktrepository mit allen für die Sparte Unfall relevanten Verkaufsproduktdaten sowie allen
* transitiv verfügbaren Daten des Versicherungsmodells.
*/
public class UvIosVerkaufsprodukteClassloaderRuntimeRepository {
public static final ClassloaderRuntimeRepository INSTANCE = ClassloaderRuntimeRepository
.create("de/faktorzehn/ios/uv/produkte/internal/uvverkaufsprodukte-repository-toc.xml");
static {
INSTANCE.setFormulaEvaluatorFactory(new GroovyFormulaEvaluatorFactory());
INSTANCE.addDirectlyReferencedRepository(UvProduktClassloaderRuntimeRepository.INSTANCE);
}
private UvIosVerkaufsprodukteClassloaderRuntimeRepository() {
// Util-Klasse
}
}
UvCreateOfferProcessImpl
In der Klasse UvCreateOfferProcessImpl
werden zusätzlich zum Angebotserstellungsprozess im Standard konkrete Feinheiten der Sparte gesteuert.
/**
* Unfall Implementierung.
*/
public class UvCreateOfferProcessImpl extends VbCreateOfferProcessImpl {
public UvCreateOfferProcessImpl(ProcessContext context) {
super(context);
}
@Override
protected UvVersicherungOperations getVersicherungOperations() {
return (UvVersicherungOperations)super.getVersicherungOperations();
}
@Override
protected Optional<DefaultVariantBuilderSupport> variantBuilderSupport() {
return Optional.of(new UvVariantBuilderSupport(getVersicherungOperations(), getInitialOfferVariantStatus(),
getPartnerCache()));
}
}
Hierbei sind zwei Anwendungsfälle üblich:
-
Wenn das Versicherungsmodell das direkte Anlegen von Varianten zulässt, kann
createOffer(StartOfferData data)
überschrieben und um den MethodenaufrufcreateVariants(offer)
erweitert werden. -
Wenn vor dem Erstellen von Angebotsvarianten noch Angaben zur Versicherung während des Angebotsprozesses vorgenommen werden müssen, kann
createVersicherung(VbStartNewOfferData data)
überschrieben werden, um eine Versicherung mit minimalen Daten zu erstellen, die im Angebot in denVbInitializationData
abgelegt wird.
UvVariantBuilderSupport
Um während der Erstellung der Angebotsvarianten die Versicherungdaten zu initialisieren, wird die Klasse UvVariantBuilderSupport
in der Methode UvCreateOfferProcessImpl.variantBuilderSupport()
erzeugt und zurückgegeben.
/**
* Varianten Builder Support wird aufgerufen, wenn eine Variante erzeugt wird.
*/
public class UvVariantBuilderSupport extends VbVariantenBuilderSupport {
public UvVariantBuilderSupport(RvVersicherungOperations operations, EditingStatus editingStatus,
PartnerCache partnerCache) {
super(operations, editingStatus, partnerCache);
}
@Override
public void postCreation(int index, OfferVariant variant) {
super.postCreation(index, variant);
// weitere Initialisierungen
}
}
UvPolicyManagementFacade
Zuerst wird ein Interface erstellt, das von IPolicyManagementFacade
ableitet, damit die Spring-Technologie über die UvLobConfig
die spartenspezifsche PolicyManagementFacade erkennt.
/**
* Spartenspezifisches Interface für Unfall zur Unterscheidung der Implementierung der
* Bestandssystemanbindung.
*/
public interface IUvPolicyManagementFacade extends IPolicyManagementFacade {
//
}
Danach wird von diesem Interface die konkrete Klasse UvPolicyManagementFacade
implementiert. Implementierungsdetails können entweder direkt in der Klasse vorgenommen werden, oder diese kommen von einer Klasse mit Standardimplementierungen (z.B. die im Standard enthaltene Klasse IpmPolicyRestService
bei einer IPM-Anbindung), von der die UvPolicyManagementFacade
ableiten kann.
/**
* Implementierung der Schnittstelle zur Anlage einer neuen Police
*/
public interface UvPolicyManagementFacade implements IUvPolicyManagementFacade {
//Implementierungsdetails
}