001 package org.deepamehta.plugins.wikidata.migrations; 002 003 import de.deepamehta.core.AssociationType; 004 import de.deepamehta.core.Topic; 005 import de.deepamehta.core.TopicType; 006 import de.deepamehta.core.model.*; 007 import de.deepamehta.core.service.Migration; 008 import java.util.logging.Logger; 009 010 011 /* 012 * A very basic plugin for searching and turning wikidata-properties into association-types. 013 * 014 * @author Malte Reißig (<malte@mikromedia.de>) 015 * @website https://github.com/mukil/dm4-wikidata 016 */ 017 018 public class Migration6 extends Migration { 019 020 private Logger log = Logger.getLogger(getClass().getName()); 021 022 private final static String WS_WIKIDATA_URI = "org.deepamehta.workspaces.wikidata"; 023 024 private final static String WD_SEARCH_ENTITY = "org.deepamehta.wikidata.search_entity"; 025 026 private final static String WD_CLAIM_EDGE_TYPE_URI = "org.deepamehta.wikidata.claim_edge"; 027 028 private final static String WD_TEXT_TYPE_URI = "org.deepamehta.wikidata.text"; 029 private final static String WD_COMMONS_MEDIA_TYPE_URI = "org.deepamehta.wikidata.commons_media"; 030 private final static String WD_GLOBE_COORDINATE_TYPE_URI = "org.deepamehta.wikidata.globe_coordinate"; 031 032 @Override 033 public void run() { 034 035 // 1) Assign all new wikidata types to the \"Wikidata\"-Workspace 036 AssociationType claim = dms.getAssociationType(WD_CLAIM_EDGE_TYPE_URI); 037 assignWorkspace(claim); 038 TopicType coordinate = dms.getTopicType(WD_GLOBE_COORDINATE_TYPE_URI); 039 assignWorkspace(coordinate); 040 TopicType commons_media = dms.getTopicType(WD_COMMONS_MEDIA_TYPE_URI); 041 assignWorkspace(commons_media); 042 TopicType text = dms.getTopicType(WD_TEXT_TYPE_URI); 043 assignWorkspace(text); 044 log.info("1) Assigned \"Wikidata Text\", \"Wikidata Commons Media\", \"Wikidata Globe Coordinate\" " 045 + "to \"Wikidata\"-Workspace"); 046 // 2) Make \"Wikidata Search Entity\" (type=property) part of each \"Wikidata Claim\"-Edge 047 TopicType searchEntity = dms.getTopicType(WD_SEARCH_ENTITY); 048 claim.addAssocDef(new AssociationDefinitionModel("dm4.core.aggregation_def", 049 claim.getUri(), searchEntity.getUri(), "dm4.core.one", "dm4.core.one")); 050 log.info("2) Assigned \"Wikidata Search Entity\" to \"Wikidata Claim\""); 051 // 3) Add "Ordinal Number" to "Search Entity" 052 TopicType ordinalNr = dms.getTopicType("org.deepamehta.wikidata.search_ordinal_nr"); 053 searchEntity.addAssocDef(new AssociationDefinitionModel("dm4.core.composition_def", 054 searchEntity.getUri(), ordinalNr.getUri(), "dm4.core.one", "dm4.core.one")); 055 log.info("3) Assigned \"Search Entity Ordinal Nr\" to \"Search Entity\""); 056 057 } 058 059 // === Workspace === 060 061 private void assignWorkspace(Topic topic) { 062 Topic defaultWorkspace = dms.getTopic("uri", new SimpleValue(WS_WIKIDATA_URI), false); 063 dms.createAssociation(new AssociationModel("dm4.core.aggregation", 064 new TopicRoleModel(topic.getId(), "dm4.core.parent"), 065 new TopicRoleModel(defaultWorkspace.getId(), "dm4.core.child") 066 ), null); 067 } 068 069 }