001 package com.poemspace.dm4.migrations; 002 003 import static com.poemspace.dm4.MigrationUtils.*; 004 005 import java.util.HashMap; 006 import java.util.Map; 007 import java.util.logging.Logger; 008 009 import de.deepamehta.core.RelatedTopic; 010 import de.deepamehta.core.Topic; 011 import de.deepamehta.core.model.CompositeValueModel; 012 import de.deepamehta.core.model.TopicModel; 013 import de.deepamehta.core.service.Migration; 014 015 public class Migration14 extends Migration { 016 017 private static Logger log = Logger.getLogger(Migration13.class.getName()); 018 019 @SuppressWarnings("serial") 020 @Override 021 public void run() { 022 023 // get criteria topics 024 final Map<String, Long> art = getIdsByValue(dms, ART); 025 final Map<String, Long> press = getIdsByValue(dms, PRESS); 026 027 // define mapping 028 Map<String, Map<String, Long>> MAP = new HashMap<String, Map<String, Long>>(); 029 MAP.put("Jugendclub", new HashMap<String, Long>() { 030 { 031 put(ART, art.get("Kinder- und Jugendeinrichtung")); 032 } 033 }); 034 MAP.put("Kinderclub", new HashMap<String, Long>() { 035 { 036 put(ART, art.get("Kinder- und Jugendeinrichtung")); 037 } 038 }); 039 MAP.put("Café", new HashMap<String, Long>() { 040 { 041 put(ART, art.get("Café/Restaurant")); 042 } 043 }); 044 MAP.put("Restaurant", new HashMap<String, Long>() { 045 { 046 put(ART, art.get("Café/Restaurant")); 047 } 048 }); 049 050 MAP.put("Radio", new HashMap<String, Long>() { 051 { 052 put(PRESS, press.get("Radio")); 053 } 054 }); 055 MAP.put("Radio regional", new HashMap<String, Long>() { 056 { 057 put(PRESS, press.get("Radio")); 058 put(PRESS, press.get("regional")); 059 } 060 }); 061 MAP.put("Radio Überregional", new HashMap<String, Long>() { 062 { 063 put(PRESS, press.get("Radio")); 064 put(PRESS, press.get("überregional")); 065 } 066 }); 067 068 MAP.put("Zeitschrift", new HashMap<String, Long>() { 069 { 070 put(PRESS, press.get("Print")); 071 } 072 }); 073 MAP.put("regionale Printmedien", new HashMap<String, Long>() { 074 { 075 put(PRESS, press.get("Print")); 076 put(PRESS, press.get("regional")); 077 } 078 }); 079 MAP.put("Überregionale Print", new HashMap<String, Long>() { 080 { 081 put(PRESS, press.get("Print")); 082 put(PRESS, press.get("überregional")); 083 } 084 }); 085 086 MAP.put("TV", new HashMap<String, Long>() { 087 { 088 put(PRESS, press.get("Fernsehen")); 089 } 090 }); 091 MAP.put("Websites", new HashMap<String, Long>() { 092 { 093 put(PRESS, press.get("Web")); 094 } 095 }); 096 097 for (Topic criterion : dms.getTopics(ART, false, 0)) { 098 String criterionName = criterion.getSimpleValue().toString(); 099 log.info("reassign members of art criterion " + criterionName); 100 Map<String, Long> criteria = MAP.get(criterionName); 101 if (criteria != null) { 102 // map composite value 103 CompositeValueModel valueUpdate = new CompositeValueModel(); 104 for (String uri : criteria.keySet()) { 105 valueUpdate.addRef(uri, criteria.get(uri)); 106 } 107 108 // update all related contacts 109 for (String contactTypeUri : CONTACT_URIS) { 110 TopicModel model = new TopicModel(contactTypeUri); 111 model.setCompositeValue(valueUpdate); 112 for (RelatedTopic contact : criterion.getRelatedTopics("dm4.core.aggregation", // 113 "dm4.core.child", "dm4.core.parent", contactTypeUri, false, false, 0)) { 114 log.info("update " + criterionName + " contact " + contact.getSimpleValue()); 115 model.setId(contact.getId()); 116 dms.updateTopic(model, null); 117 } 118 } 119 120 // delete distribution list 121 dms.deleteTopic(criterion.getId()); 122 } 123 } 124 } 125 126 }