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}