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 }