001    package de.deepamehta.plugins.accesscontrol.migrations;
002    
003    import de.deepamehta.core.Association;
004    import de.deepamehta.core.DeepaMehtaObject;
005    import de.deepamehta.core.Topic;
006    import de.deepamehta.core.service.Migration;
007    
008    import java.util.logging.Logger;
009    
010    
011    
012    public class Migration2 extends Migration {
013    
014        // ---------------------------------------------------------------------------------------------- Instance Variables
015    
016        private long count;
017    
018        private Logger logger = Logger.getLogger(getClass().getName());
019    
020        // -------------------------------------------------------------------------------------------------- Public Methods
021    
022        @Override
023        public void run() {
024            count = 0;
025            for (Topic topic : dms.getAllTopics()) {
026                migrateObject(topic, "topic");
027            }
028            count = 0;
029            for (Association assoc : dms.getAllAssociations()) {
030                migrateObject(assoc, "association");
031            }
032        }
033    
034        // ------------------------------------------------------------------------------------------------- Private Methods
035    
036        private void migrateObject(DeepaMehtaObject object, String type) {
037            try {
038                count++;
039                String info = "### Migrating " + type + " " + object.getId() + " (#" + count + ")";
040                if (object.hasProperty("creator")) {
041                    logger.info(info);
042                    renameProperty(object, "creator", "dm4.accesscontrol.creator", true);   // addToIndex=true
043                    renameProperty(object, "owner",   "dm4.accesscontrol.owner",   true);   // addToIndex=true
044                    renameProperty(object, "acl",     "dm4.accesscontrol.acl",     false);  // addToIndex=false
045                } else {
046                    logger.info(info + " ABORTED -- Access control information not availble");
047                }
048            } catch (Exception e) {
049                throw new RuntimeException("Migrating " + type + " " + object.getId() + " failed (" + object + ")", e);
050            }
051        }
052    
053        private void renameProperty(DeepaMehtaObject object, String oldPropUri, String newPropUri, boolean addToIndex) {
054            String propValue = (String) object.getProperty(oldPropUri);
055            object.setProperty(newPropUri, propValue, addToIndex);
056            object.removeProperty(oldPropUri);
057        }
058    }