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}