001package de.deepamehta.core.migrations;
002
003import de.deepamehta.core.Association;
004import de.deepamehta.core.ChildTopics;
005import de.deepamehta.core.Topic;
006import de.deepamehta.core.service.Migration;
007
008import java.util.List;
009import java.util.logging.Logger;
010
011
012
013/**
014 * Repairing assoc defs with missing "Include in Label" topic.
015 * Runs only in UPDATE mode.
016 * <p>
017 * Part of DM 4.8.6
018 */
019public class Migration7 extends Migration {
020
021    private int[][] count = new int[2][2];
022
023    private Logger logger = Logger.getLogger(getClass().getName());
024
025    @Override
026    public void run() {
027        logger.info("########## Repairing assoc defs with missing \"Include in Label\" topic");
028        //
029        // - Must repair the label config of the types ("comp def" and "aggr def") BEFORE the instances can be repaired
030        // - Must repair "aggr def" BEFORE "comp def"
031        dm4.getAssociationType("dm4.core.aggregation_def").getAssocDef("dm4.core.assoc_type#dm4.core.custom_assoc_type")
032            .getChildTopics().set("dm4.core.include_in_label", false);
033        dm4.getAssociationType("dm4.core.composition_def").getAssocDef("dm4.core.assoc_type#dm4.core.custom_assoc_type")
034            .getChildTopics().set("dm4.core.include_in_label", false);
035        //
036        process(dm4.getAssociationsByType("dm4.core.composition_def"), 0);
037        process(dm4.getAssociationsByType("dm4.core.aggregation_def"), 1);
038        //
039        logger.info("########## Repairing assoc defs with missing \"Include in Label\" topic complete\n    " +
040            "Composition defs repaired: " + count[0][1] + "/" + count[0][0] + "\n    " +
041            "Aggregation defs repaired: " + count[1][1] + "/" + count[1][0]);
042    }
043
044    private void process(List<Association> assocs, int i) {
045        for (Association assoc : assocs) {
046            ChildTopics childs = assoc.getChildTopics();
047            Topic includeInLabel = childs.getTopicOrNull("dm4.core.include_in_label");
048            if (includeInLabel == null) {
049                childs.set("dm4.core.include_in_label", false);
050                count[i][1]++;
051            }
052            count[i][0]++;
053        }
054    }
055}