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);
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));
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));
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 ));
065 }
066
067 }