001 package org.deepamehta.plugins.wikidata.migrations; 002 003 import de.deepamehta.core.Topic; 004 import de.deepamehta.core.TopicType; 005 import de.deepamehta.core.model.AssociationModel; 006 import de.deepamehta.core.model.SimpleValue; 007 import de.deepamehta.core.model.TopicModel; 008 import de.deepamehta.core.model.TopicRoleModel; 009 import de.deepamehta.core.service.Migration; 010 import java.util.logging.Logger; 011 012 013 /* 014 * A very basic plugin for searching and turning wikidata-properties into association-types. 015 * 016 * @author Malte Reißig (<malte@mikromedia.de>) 017 * @website https://github.com/mukil/dm4-wikidata 018 */ 019 020 public class Migration2 extends Migration { 021 022 private Logger log = Logger.getLogger(getClass().getName()); 023 024 private final static String WD_SEARCH_BUCKET = "org.deepamehta.wikidata.search_bucket"; 025 private final static String WD_SEARCH_ENTITY = "org.deepamehta.wikidata.search_entity"; 026 private final static String WD_ISO_LANGUAGE_CODE = "org.deepamehta.wikidata.language"; 027 028 private final static String DEEPAMEHTA_USERNAME_URI = "dm4.accesscontrol.username"; 029 private final static String DEEPAMEHTA_ADMIN_USERNAME = "admin"; 030 031 private final String WS_WIKIDATA_URI = "org.deepamehta.workspaces.wikidata"; 032 033 @Override 034 public void run() { 035 036 // 1) create \"Wikidata\"-Workspace 037 TopicModel workspace = new TopicModel(WS_WIKIDATA_URI, "dm4.workspaces.workspace"); 038 Topic ws = dms.createTopic(workspace, null); 039 ws.setSimpleValue("Wikidata"); 040 log.info("1) Created WIKIDATA Workspace .."); 041 // 2) assign "admin" username to \"Wikidata\"-Workspace 042 Topic administrator = dms.getTopic(DEEPAMEHTA_USERNAME_URI, new SimpleValue(DEEPAMEHTA_ADMIN_USERNAME), true); 043 assignWorkspace(administrator); 044 log.info("2) Assigned admin to WIKIDATA Workspace .."); 045 // 3) assign all types to our new workspace 046 TopicType searchType = dms.getTopicType(WD_SEARCH_BUCKET); 047 TopicType seachEntity = dms.getTopicType(WD_SEARCH_ENTITY); 048 TopicType languageCode = dms.getTopicType(WD_ISO_LANGUAGE_CODE); 049 assignWorkspace(searchType); 050 assignWorkspace(seachEntity); 051 log.info("3) Assigned Wikidata Search Types to \"Wikidata\"-Workspace .."); 052 assignWorkspace(languageCode); 053 log.info("4) Assigned Wikidata Language Type to \"Wikidata\"-Workspace .."); 054 055 } 056 057 // === Workspace === 058 059 private void assignWorkspace(Topic topic) { 060 Topic defaultWorkspace = dms.getTopic("uri", new SimpleValue(WS_WIKIDATA_URI), false); 061 dms.createAssociation(new AssociationModel("dm4.core.aggregation", 062 new TopicRoleModel(topic.getId(), "dm4.core.parent"), 063 new TopicRoleModel(defaultWorkspace.getId(), "dm4.core.child") 064 ), null); 065 } 066 067 }