001package de.deepamehta.plugins.workspaces.migrations;
002
003import de.deepamehta.plugins.workspaces.WorkspacesService;
004
005import de.deepamehta.core.AssociationDefinition;
006import de.deepamehta.core.AssociationType;
007import de.deepamehta.core.DeepaMehtaObject;
008import de.deepamehta.core.Topic;
009import de.deepamehta.core.TopicType;
010import de.deepamehta.core.Type;
011import de.deepamehta.core.service.Inject;
012import de.deepamehta.core.service.Migration;
013
014import java.util.logging.Logger;
015
016
017
018/**
019 * Assigns standard association definitions (and their view config topics) to DeepaMehta workspace.
020 * Runs only in UPDATE mode.
021 * <p>
022 * Part of DM 4.6
023 */
024public class Migration6 extends Migration {
025
026    // ------------------------------------------------------------------------------------------------------- Constants
027
028    // Note: copy in WorkspacesPlugin.java
029    private static final String PROP_WORKSPACE_ID = "dm4.workspaces.workspace_id";
030
031    // ---------------------------------------------------------------------------------------------- Instance Variables
032
033    @Inject
034    private WorkspacesService wsService;
035
036    private long deepamehtaWorkspaceId;
037
038    private long types = 0, standardTypes = 0, assocDefs = 0, configTopics = 0;
039
040    private Logger logger = Logger.getLogger(getClass().getName());
041
042    // -------------------------------------------------------------------------------------------------- Public Methods
043
044    @Override
045    public void run() {
046        logger.info("########## Assigning standard association definitions (and their view config topics) to " +
047            "DeepaMehta workspace");
048        deepamehtaWorkspaceId = getDeepaMehtaWorkspace().getId();
049        //
050        for (TopicType topicType : dms.getAllTopicTypes()) {
051            assignWorkspace(topicType);
052        }
053        for (AssociationType assocType : dms.getAllAssociationTypes()) {
054            assignWorkspace(assocType);
055        }
056        //
057        logger.info("########## Assigning standard association definitions (and their view config topics) to " +
058            "DeepaMehta workspace complete.\n    Types processed: " + types + "\n    Standard types: " +
059            standardTypes + "\n    Association definitions: " + assocDefs + "\n    View config topics: " +
060            configTopics);
061    }
062
063    // ------------------------------------------------------------------------------------------------- Private Methods
064
065    void assignWorkspace(Type type) {
066        types++;
067        if (isDeepaMehtaStandardType(type)) {
068            standardTypes++;
069            for (AssociationDefinition assocDef : type.getAssocDefs()) {
070                assocDefs++;
071                assignToDeepamehtaWorkspace(assocDef);
072                for (Topic configTopic : assocDef.getViewConfig().getConfigTopics()) {
073                    configTopics++;
074                    assignToDeepamehtaWorkspace(configTopic);
075                }
076            }
077        }
078    }
079
080    void assignToDeepamehtaWorkspace(DeepaMehtaObject object) {
081        wsService.assignToWorkspace(object, deepamehtaWorkspaceId);
082    }
083
084    // ### copy in WorkspacesPlugin.java
085    private Topic getDeepaMehtaWorkspace() {
086        return wsService.getWorkspace(WorkspacesService.DEEPAMEHTA_WORKSPACE_URI);
087    }
088
089    // ### copy in WorkspacesPlugin.java
090    private boolean isDeepaMehtaStandardType(Type type) {
091        return type.getUri().startsWith("dm4.");
092    }
093}