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 }