001    package org.deepamehta.plugins.moodle.migrations;
002    
003    import de.deepamehta.core.AssociationType;
004    import de.deepamehta.core.Topic;
005    import de.deepamehta.core.TopicType;
006    import de.deepamehta.core.model.AssociationModel;
007    import de.deepamehta.core.model.SimpleValue;
008    import de.deepamehta.core.model.TopicModel;
009    import de.deepamehta.core.model.TopicRoleModel;
010    import de.deepamehta.core.service.Migration;
011    import java.util.logging.Logger;
012    import org.deepamehta.plugins.moodle.MoodleServiceClient;
013    
014    public class Migration2 extends Migration {
015    
016        private Logger logger = Logger.getLogger(getClass().getName());
017    
018        private 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, null);
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"), true);
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), false);
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            ), null);
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", false, false, 0).getSize() > 0;
059        }
060    
061    }