001package org.deepamehta.plugins.moodle.migrations;
002
003import de.deepamehta.core.AssociationType;
004import de.deepamehta.core.Topic;
005import de.deepamehta.core.TopicType;
006import de.deepamehta.core.model.AssociationModel;
007import de.deepamehta.core.model.SimpleValue;
008import de.deepamehta.core.model.TopicModel;
009import de.deepamehta.core.model.TopicRoleModel;
010import de.deepamehta.core.service.Migration;
011import java.util.logging.Logger;
012import org.deepamehta.plugins.moodle.MoodleServiceClient;
013
014public class Migration2 extends Migration {
015
016    private Logger logger = Logger.getLogger(getClass().getName());
017
018    private static final String WS_MOODLE_URI = "org.deepamehta.workspaces.moodle";
019    private static final String DEEPAMEHTA_USERNAME_URI = "dm4.accesscontrol.username";
020
021    @Override
022    public void run() {
023
024        // 1) create "ISIS / Moodle""-Workspace
025        TopicModel workspace = new TopicModel(WS_MOODLE_URI, "dm4.workspaces.workspace");
026        Topic ws = dms.createTopic(workspace);
027        ws.setSimpleValue(MoodleServiceClient.WS_MOODLE_NAME);
028        // 2) assign "admin" username to "Moodle"-Workspace
029        Topic administrator = dms.getTopic(DEEPAMEHTA_USERNAME_URI, new SimpleValue("admin"));
030        assignToMoodleWorkspace(administrator);
031        // 3) Assign some of our types to the "Moodle"-Workspace
032        TopicType item = dms.getTopicType(MoodleServiceClient.MOODLE_ITEM_URI);
033        assignToMoodleWorkspace(item);
034        TopicType section = dms.getTopicType(MoodleServiceClient.MOODLE_SECTION_URI);
035        assignToMoodleWorkspace(section);
036        TopicType course = dms.getTopicType(MoodleServiceClient.MOODLE_COURSE_URI);
037        assignToMoodleWorkspace(course);
038        AssociationType participant = dms.getAssociationType(MoodleServiceClient.MOODLE_PARTICIPANT_EDGE);
039        assignToMoodleWorkspace(participant);
040
041    }
042
043    // === Workspace ===
044
045    private void assignToMoodleWorkspace(Topic topic) {
046        if (hasAnyWorkspace(topic)) {
047            return;
048        }
049        Topic defaultWorkspace = dms.getTopic("uri", new SimpleValue(WS_MOODLE_URI));
050        dms.createAssociation(new AssociationModel("dm4.core.aggregation",
051            new TopicRoleModel(topic.getId(), "dm4.core.parent"),
052            new TopicRoleModel(defaultWorkspace.getId(), "dm4.core.child")
053        ));
054    }
055
056    private boolean hasAnyWorkspace(Topic topic) {
057        return topic.getRelatedTopics("dm4.core.aggregation", "dm4.core.parent", "dm4.core.child",
058            "dm4.workspaces.workspace", 0).getSize() > 0;
059    }
060
061}