Produktwechsel

Erweiterte Produktfinder

Genügt die Defaultimplementierung nicht, können unterschiedliche eigene Implementierungen zum Finden des passenden Wechselziels mitgegeben werden, z.B. anhand eines Attributswertes:

ProductSwitch.from(hausratVertrag).matchingBy(HausratDeckungstyp.class, HausratDeckungstyp.PROPERTY_DECKUNGS_ART).to(hausratKompakt2023);

// oder für komplexere Betrachtungen der Objektstruktur

ProductSwitch
    .from(hausratVertrag)
    .switchAt(IpsModel.getPolicyCmptType(HausratVertrag.class).getAssociation(HausratVertrag.ASSOCIATION_HAUSRATZUSATZDECKUNG),
        new AdvancedProductFinder() {

            @Override
            public ProductFinderResult findMatchingProduct(IConfigurableModelObject parent,
                IProductComponent oldParentProdCmpt,
                IConfigurableModelObject child,
                PolicyAssociation parentToChild) {
                    if(((HausratVertrag)parent).includesEbikes()){
                        return eBikeDeckungsTyp;
                    } else {
                        return standardRadlDeckungsTyp;
                    }
                }
            })
    .elseUseDefault()
    .to(hausratKompakt2023);

// gerne natürlich auch als Lambda

ProductSwitch
    .from(hausratVertrag)
    .switchAt(IpsModel.getPolicyCmptType(HausratVertrag.class).getAssociation(HausratVertrag.ASSOCIATION_HAUSRATZUSATZDECKUNG),
        (parent, oldParentProdCmpt, child, parentToChild) -> ((HausratVertrag)parent).includesEbikes()) ? eBikeDeckungsTyp : standardRadlDeckungsTyp)
    .elseUseDefault()
    .to(hausratKompakt2023);

Weitere Varianten werden im Javadoc von ProductSwitch und den zugehörigen Klassen beschrieben.