001package de.deepamehta.accesscontrol.migrations;
002
003import de.deepamehta.core.Association;
004import de.deepamehta.core.DeepaMehtaObject;
005import de.deepamehta.core.Topic;
006import de.deepamehta.core.service.Migration;
007
008import java.util.logging.Logger;
009
010
011
012public 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 : dm4.getAllTopics()) {
026            migrateObject(topic, "topic");
027        }
028        count = 0;
029        for (Association assoc : dm4.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}