001package org.deepamehta.plugins.wikidata.migrations;
002
003import de.deepamehta.core.Topic;
004import de.deepamehta.core.TopicType;
005import de.deepamehta.core.model.*;
006import de.deepamehta.core.service.Migration;
007import 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
017public 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}