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    }