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 }