001package de.deepamehta.boxrenderer.dom.migrations;
002
003import de.deepamehta.core.Association;
004import de.deepamehta.core.RelatedTopic;
005import de.deepamehta.core.Topic;
006import de.deepamehta.core.service.Migration;
007
008import java.util.logging.Logger;
009
010
011
012/**
013 * Moves the BoxRenderer properties from topics to "Topic Mapcontext" associations.
014 * Runs only in UPDATE mode.
015 * <p>
016 * Part of DM 4.6
017 */
018public class Migration1 extends Migration {
019
020    // ------------------------------------------------------------------------------------------------------- Constants
021
022    private static final String PROP_COLOR    = "dm4.boxrenderer.color";
023    private static final String PROP_EXPANDED = "dm4.boxrenderer.expanded";
024
025    private static final String TOPIC_MAPCONTEXT = "dm4.topicmaps.topic_mapcontext";
026
027    // ---------------------------------------------------------------------------------------------- Instance Variables
028
029    private long topics = 0, props = 0;
030
031    private Logger logger = Logger.getLogger(getClass().getName());
032
033    // -------------------------------------------------------------------------------------------------- Public Methods
034
035    @Override
036    public void run() {
037        logger.info("########## Moving BoxRenderer properties from topics to \"Topic Mapcontext\" associations");
038        //
039        for (Topic topic : dm4.getAllTopics()) {
040            migrateBoxRendererProperties(topic);
041        }
042        //
043        logger.info("########## Moving BoxRenderer properties complete\n    Topics processed: " +
044            topics + "\n    Topics with BoxRenderer properties: " + props);
045    }
046
047    // ------------------------------------------------------------------------------------------------- Private Methods
048
049    private void migrateBoxRendererProperties(Topic topic) {
050        String color = null;
051        Boolean expanded = null;
052        topics++;
053        //
054        if (topic.hasProperty(PROP_COLOR)) {
055            color = (String) topic.getProperty(PROP_COLOR);
056        }
057        if (topic.hasProperty(PROP_EXPANDED)) {
058            expanded = (Boolean) topic.getProperty(PROP_EXPANDED);
059        }
060        //
061        if (color != null || expanded != null) {
062            props++;
063            for (RelatedTopic topicmap : topic.getRelatedTopics(TOPIC_MAPCONTEXT, "dm4.topicmaps.topicmap_topic",
064                                                                "dm4.core.default", "dm4.topicmaps.topicmap")) {
065                Association mapcontextAssoc = topicmap.getRelatingAssociation();
066                if (color != null) {
067                    mapcontextAssoc.setProperty(PROP_COLOR, color, false);          // addToIndex = false
068                }
069                if (expanded != null) {
070                    mapcontextAssoc.setProperty(PROP_EXPANDED, expanded, false);    // addToIndex = false
071                }
072            }
073            //
074            topic.removeProperty(PROP_COLOR);
075            topic.removeProperty(PROP_EXPANDED);
076        }
077    }
078}