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 Migration13 extends Migration {
016    
017        private static Logger log = Logger.getLogger(Migration12.class.getName());
018    
019        @SuppressWarnings("serial")
020        @Override
021        public void run() {
022    
023            // get criteria topics
024            final Map<String, Long> projects = getIdsByValue(dms, PROJECT);
025            final Map<String, Long> years = getIdsByValue(dms, YEAR);
026            final Map<String, Long> affiliations = getIdsByValue(dms, AFFILIATION);
027            final Map<String, Long> publics = getIdsByValue(dms, PUBLIC);
028    
029            // define mapping
030            Map<String, Map<String, Long>> MAP = new HashMap<String, Map<String, Long>>();
031            MAP.put("Mitstreiter10", new HashMap<String, Long>() {
032                {
033                    put(PROJECT, projects.get("Poesiefrühling"));
034                    put(YEAR, years.get("2010"));
035                    put(AFFILIATION, affiliations.get("Mitstreiter"));
036                }
037            });
038            MAP.put("Mitstreiter11", new HashMap<String, Long>() {
039                {
040                    put(PROJECT, projects.get("Poesiefrühling"));
041                    put(YEAR, years.get("2011"));
042                    put(AFFILIATION, affiliations.get("Mitstreiter"));
043                }
044            });
045            MAP.put("Mitstreiter 12", new HashMap<String, Long>() {
046                {
047                    put(PROJECT, projects.get("Poesiefrühling"));
048                    put(YEAR, years.get("2012"));
049                    put(AFFILIATION, affiliations.get("Mitstreiter"));
050                }
051            });
052            MAP.put("Printemps des Poètes Berlin09", new HashMap<String, Long>() {
053                {
054                    put(PROJECT, projects.get("Poesiefrühling"));
055                    put(YEAR, years.get("2009"));
056                }
057            });
058            MAP.put("Printemps des Poètes, Berlin10", new HashMap<String, Long>() {
059                {
060                    put(PROJECT, projects.get("Poesiefrühling"));
061                    put(YEAR, years.get("2010"));
062                }
063            });
064            MAP.put("Poesiefrühling-2011", new HashMap<String, Long>() {
065                {
066                    put(PROJECT, projects.get("Poesiefrühling"));
067                    put(YEAR, years.get("2011"));
068                }
069            });
070            MAP.put("Poesiefrühling 2012", new HashMap<String, Long>() {
071                {
072                    put(PROJECT, projects.get("Poesiefrühling"));
073                    put(YEAR, years.get("2012"));
074                }
075            });
076    
077            MAP.put("MeisterInnen12", new HashMap<String, Long>() {
078                {
079                    put(PROJECT, projects.get("Meister"));
080                    put(YEAR, years.get("2012"));
081                }
082            });
083            MAP.put("MeisterInnen13", new HashMap<String, Long>() {
084                {
085                    put(PROJECT, projects.get("Meister"));
086                    put(YEAR, years.get("2013"));
087                }
088            });
089    
090            MAP.put("wortwedding", new HashMap<String, Long>() {
091                {
092                    put(PROJECT, projects.get("wortwedding"));
093                    put(AFFILIATION, affiliations.get("Publikum"));
094                }
095            });
096    
097            MAP.put("Poem Space Mobil", new HashMap<String, Long>() {
098                {
099                    put(PROJECT, projects.get("Poem Space Mobil"));
100                }
101            });
102    
103            MAP.put("Stiftungen", new HashMap<String, Long>() {
104                {
105                    put(AFFILIATION, affiliations.get("Förderer"));
106                }
107            });
108            MAP.put("Blogs", new HashMap<String, Long>() {
109                {
110                    put(PUBLIC, publics.get("Webseite"));
111                }
112            });
113    
114            for (Topic list : dms.getTopics(LIST, false, 0)) {
115                String listName = list.getSimpleValue().toString();
116                log.info("reassign members of list " + listName);
117                Map<String, Long> criteria = MAP.get(listName);
118                if (criteria != null) {
119                    // map composite value
120                    CompositeValueModel valueUpdate = new CompositeValueModel();
121                    for (String uri : criteria.keySet()) {
122                        valueUpdate.addRef(uri, criteria.get(uri));
123                    }
124    
125                    // update all related contacts
126                    for (String contactTypeUri : CONTACT_URIS) {
127                        TopicModel model = new TopicModel(contactTypeUri);
128                        model.setCompositeValue(valueUpdate);
129                        for (RelatedTopic contact : list.getRelatedTopics("dm4.core.association", //
130                                null, null, contactTypeUri, false, false, 0)) {
131                            log.info("update " + listName + " contact " + contact.getSimpleValue());
132                            model.setId(contact.getId());
133                            dms.updateTopic(model, null);
134                        }
135                    }
136    
137                    // delete distribution list
138                    dms.deleteTopic(list.getId());
139                }
140            }
141        }
142    }