001package org.deepamehta.plugins.wikidata.migrations;
002
003import de.deepamehta.core.Topic;
004import de.deepamehta.core.TopicType;
005import de.deepamehta.core.model.AssociationModel;
006import de.deepamehta.core.model.SimpleValue;
007import de.deepamehta.core.model.TopicModel;
008import de.deepamehta.core.model.TopicRoleModel;
009import de.deepamehta.core.service.Migration;
010import 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
020public 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 (if non-existent)
037        TopicModel workspace = new TopicModel(WS_WIKIDATA_URI, "dm4.workspaces.workspace");
038        Topic ws = dms.getTopic("uri", new SimpleValue(WS_WIKIDATA_URI));
039        if (ws == null) {
040            ws = dms.createTopic(workspace);
041            ws.setSimpleValue("Wikidata");
042            log.info("1) Created WIKIDATA Workspace ..");
043        }
044        // 2) assign "admin" username to \"Wikidata\"-Workspace
045        Topic administrator = dms.getTopic(DEEPAMEHTA_USERNAME_URI, new SimpleValue(DEEPAMEHTA_ADMIN_USERNAME));
046        assignWorkspace(administrator);
047        log.info("2) Assigned admin to WIKIDATA Workspace ..");
048        // 3) assign all types to our new workspace
049        TopicType searchType = dms.getTopicType(WD_SEARCH_BUCKET);
050        TopicType seachEntity = dms.getTopicType(WD_SEARCH_ENTITY);
051        TopicType languageCode = dms.getTopicType(WD_ISO_LANGUAGE_CODE);
052        assignWorkspace(searchType);
053        assignWorkspace(seachEntity);
054        log.info("3) Assigned Wikidata Search Types to \"Wikidata\"-Workspace ..");
055        assignWorkspace(languageCode);
056        log.info("4) Assigned Wikidata Language Type to \"Wikidata\"-Workspace ..");
057
058    }
059
060    // === Workspace ===
061
062    private void assignWorkspace(Topic topic) {
063        Topic defaultWorkspace = dms.getTopic("uri", new SimpleValue(WS_WIKIDATA_URI));
064        dms.createAssociation(new AssociationModel("dm4.core.aggregation",
065            new TopicRoleModel(topic.getId(), "dm4.core.parent"),
066            new TopicRoleModel(defaultWorkspace.getId(), "dm4.core.child")
067        ));
068    }
069
070}