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.*;
006    import de.deepamehta.core.service.Migration;
007    import java.util.logging.Logger;
008    
009    
010    /*
011     * A very basic plugin for searching and turning wikidata-properties into association-types.
012     *
013     * @author Malte Reißig (<malte@mikromedia.de>)
014     * @website https://github.com/mukil/dm4-wikidata
015     */
016    
017    public class Migration10 extends Migration {
018    
019        private Logger log = Logger.getLogger(getClass().getName());
020    
021        private final String WS_WIKIDATA_URI = "org.deepamehta.workspaces.wikidata";
022    
023        private final String WD_COMMONS_MEDIA_TYPE_URI = "org.deepamehta.wikidata.commons_media";
024        private final String WD_COMMONS_MEDIA_NAME_TYPE_URI = "org.deepamehta.wikidata.commons_media_name";
025        private final String WD_COMMONS_MEDIA_PATH_TYPE_URI = "org.deepamehta.wikidata.commons_media_path";
026        private final String WD_COMMONS_MEDIA_TYPE_TYPE_URI = "org.deepamehta.wikidata.commons_media_type";
027        private final String WD_COMMONS_MEDIA_DESCR_TYPE_URI = "org.deepamehta.wikidata.commons_media_descr";
028        private final String WD_COMMONS_AUTHOR_HTML_URI = "org.deepamehta.wikidata.commons_author_html";
029        private final String WD_COMMONS_LICENSE_HTML_URI = "org.deepamehta.wikidata.commons_license_html";
030    
031        @Override
032        public void run() {
033    
034            // 1) Assign all new wikidata types to the \"Wikidata\"-Workspace
035            TopicType media_name = dms.getTopicType(WD_COMMONS_MEDIA_NAME_TYPE_URI);
036            assignWorkspace(media_name);
037            TopicType media_path = dms.getTopicType(WD_COMMONS_MEDIA_PATH_TYPE_URI);
038            assignWorkspace(media_path);
039            TopicType media_type = dms.getTopicType(WD_COMMONS_MEDIA_TYPE_TYPE_URI);
040            assignWorkspace(media_type);
041            TopicType media_descr = dms.getTopicType(WD_COMMONS_MEDIA_DESCR_TYPE_URI);
042            assignWorkspace(media_descr);
043            TopicType license_name = dms.getTopicType(WD_COMMONS_AUTHOR_HTML_URI);
044            assignWorkspace(license_name);
045            TopicType license_info = dms.getTopicType(WD_COMMONS_LICENSE_HTML_URI);
046            assignWorkspace(license_info);
047            log.info("1) Assigned alle \"Wikimedia Commons ***\" child-types to \"Wikidata\"-Workspace");
048            // 2) Remove (old, unusable) File Association Definion from \"Wikimedia Commons Media\"-Type
049            TopicType commonsMedia = dms.getTopicType(WD_COMMONS_MEDIA_TYPE_URI);
050            commonsMedia.removeAssocDef("dm4.files.file");
051            // 3) Make all new \"Wikimedia Commons ***\" types part of each \"Wikimedia Commons Media\"-Type
052            commonsMedia.addAssocDef(new AssociationDefinitionModel("dm4.core.composition_def",
053                    commonsMedia.getUri(), WD_COMMONS_MEDIA_NAME_TYPE_URI, "dm4.core.one", "dm4.core.one"));
054            commonsMedia.addAssocDef(new AssociationDefinitionModel("dm4.core.composition_def",
055                    commonsMedia.getUri(), WD_COMMONS_MEDIA_PATH_TYPE_URI, "dm4.core.one", "dm4.core.one"));
056            commonsMedia.addAssocDef(new AssociationDefinitionModel("dm4.core.composition_def",
057                    commonsMedia.getUri(), WD_COMMONS_MEDIA_TYPE_TYPE_URI, "dm4.core.one", "dm4.core.one"));
058            commonsMedia.addAssocDef(new AssociationDefinitionModel("dm4.core.composition_def",
059                    commonsMedia.getUri(), WD_COMMONS_MEDIA_DESCR_TYPE_URI, "dm4.core.one", "dm4.core.one"));
060            commonsMedia.addAssocDef(new AssociationDefinitionModel("dm4.core.composition_def",
061                    commonsMedia.getUri(), WD_COMMONS_AUTHOR_HTML_URI, "dm4.core.one", "dm4.core.one"));
062            commonsMedia.addAssocDef(new AssociationDefinitionModel("dm4.core.composition_def",
063                    commonsMedia.getUri(), WD_COMMONS_LICENSE_HTML_URI, "dm4.core.one", "dm4.core.one"));
064            log.info("2) Assigned all \"Wikimedia Commons ***\" child-types to \"Wikimedia Commons Media\"");
065        }
066    
067        // === Workspace ===
068    
069        private void assignWorkspace(Topic topic) {
070            Topic defaultWorkspace = dms.getTopic("uri", new SimpleValue(WS_WIKIDATA_URI));
071            dms.createAssociation(new AssociationModel("dm4.core.aggregation",
072                new TopicRoleModel(topic.getId(), "dm4.core.parent"),
073                new TopicRoleModel(defaultWorkspace.getId(), "dm4.core.child")
074            ));
075        }
076    
077    }