001 package de.deepamehta.plugins.topicmaps.migrations; 002 003 import de.deepamehta.core.Association; 004 import de.deepamehta.core.ChildTopics; 005 import de.deepamehta.core.Topic; 006 import de.deepamehta.core.service.Migration; 007 008 import java.util.logging.Logger; 009 010 011 012 /** 013 * Converts the "Topic Mapcontext" association's child topics into properties. 014 * Runs only in UPDATE mode. 015 * <p> 016 * Part of DM 4.6 017 */ 018 public class Migration4 extends Migration { 019 020 // ---------------------------------------------------------------------------------------------- Instance Variables 021 022 private long assocs = 0, topicsDeleted = 0, typesDeleted = 0; 023 024 private Logger logger = Logger.getLogger(getClass().getName()); 025 026 // -------------------------------------------------------------------------------------------------- Public Methods 027 028 @Override 029 public void run() { 030 logger.info("########## Converting \"Topic Mapcontext\" associations"); 031 // 032 // 1) convert the "Topic Mapcontext" association's child topics into properties 033 for (Association assoc : dms.getAssociations("dm4.topicmaps.topic_mapcontext")) { 034 migrateMapcontextAssociation(assoc); 035 } 036 // 037 // 2) delete "Topic Mapcontext" child types 038 deleteTopicType("dm4.topicmaps.x"); 039 deleteTopicType("dm4.topicmaps.y"); 040 deleteTopicType("dm4.topicmaps.visibility"); 041 // 042 // 3) make "Topic Mapcontext" a simple type 043 dms.getAssociationType("dm4.topicmaps.topic_mapcontext").setDataTypeUri("dm4.core.text"); 044 // 045 logger.info("########## Converting \"Topic Mapcontext\" associations complete.\n Associations processed: " + 046 assocs + "\n X, Y, Visibility topics deleted: " + topicsDeleted + "\n Topic types deleted: " + 047 typesDeleted); 048 } 049 050 // ------------------------------------------------------------------------------------------------- Private Methods 051 052 private void migrateMapcontextAssociation(Association assoc) { 053 assocs++; 054 // 055 ChildTopics childs = assoc.getChildTopics(); 056 int x = childs.getInt("dm4.topicmaps.x"); 057 int y = childs.getInt("dm4.topicmaps.y"); 058 boolean visibility = childs.getBoolean("dm4.topicmaps.visibility"); 059 // 060 assoc.setProperty("dm4.topicmaps.x", x, false); // addToIndex = false 061 assoc.setProperty("dm4.topicmaps.y", y, false); // addToIndex = false 062 assoc.setProperty("dm4.topicmaps.visibility", visibility, false); // addToIndex = false 063 } 064 065 private void deleteTopicType(String topicTypeUri) { 066 typesDeleted++; 067 // delete instances 068 for (Topic topic : dms.getTopics(topicTypeUri, 0)) { // maxResultSize=0 069 topic.delete(); 070 topicsDeleted++; 071 } 072 // delete type 073 dms.deleteTopicType(topicTypeUri); 074 } 075 }