/*
* Copyright (c) 2014.
*
* BaasBox - info-at-baasbox.com
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.baasbox.db;
import java.util.Collection;
import java.util.Iterator;
import java.util.NavigableMap;
import java.util.TreeMap;
import com.baasbox.configuration.Internal;
import com.baasbox.service.logging.BaasBoxLogger;
import com.orientechnologies.orient.core.db.record.ODatabaseRecordTx;
public class Evolutions {
private TreeMap<String,IEvolution> me = new TreeMap<String,IEvolution>();
/***
* Executes db evolutions from the given version (excluded) that is supposed to be the current one
* @param fromVersion
*/
public static void performEvolutions(ODatabaseRecordTx db,String fromVersion){
preEvolutionTasks(db);
Evolutions evs=new Evolutions();
Collection<IEvolution> evolutions = evs.getEvolutionsFromVersion(fromVersion);
BaasBoxLogger.info("Found " + evolutions.size() + " evolutions to apply");
Iterator<IEvolution> it = evolutions.iterator();
while (it.hasNext()){
IEvolution ev = it.next();
BaasBoxLogger.info("Applying evolution to " + ev.getFinalVersion());
ev.evolve(db);
BaasBoxLogger.info("DB version evolved to version " + ev.getFinalVersion());
Internal.DB_VERSION._setValue(ev.getFinalVersion());
}
postEvolutionTasks(db);
}
private static void preEvolutionTasks(ODatabaseRecordTx db){
BaasBoxLogger.info("Performing pre-evolutions tasks....");
//nothing todo at the moment
BaasBoxLogger.info("...end");
}
private static void postEvolutionTasks(ODatabaseRecordTx db){
BaasBoxLogger.info("Performing post-evolutions tasks....");
DbHelper.execMultiLineCommands(db,true,
"rebuild index *");
BaasBoxLogger.info("...end");
}
public Evolutions(){
IEvolution ev= (IEvolution)new Evolution_0_7_0();
me.put(ev.getFinalVersion(), ev);
ev= (IEvolution)new Evolution_0_7_3();
me.put(ev.getFinalVersion(), ev);
ev= (IEvolution)new Evolution_0_7_4();
me.put(ev.getFinalVersion(), ev);
ev= (IEvolution)new Evolution_0_8_0();
me.put(ev.getFinalVersion(), ev);
ev= (IEvolution)new Evolution_0_8_1();
me.put(ev.getFinalVersion(), ev);
ev= (IEvolution)new Evolution_0_8_3();
me.put(ev.getFinalVersion(), ev);
ev= (IEvolution)new Evolution_0_8_4();
me.put(ev.getFinalVersion(), ev);
ev = (IEvolution)new Evolution_0_9_0();
me.put(ev.getFinalVersion(),ev);
ev = (IEvolution)new Evolution_0_9_4();
me.put(ev.getFinalVersion(),ev);
ev = (IEvolution)new Evolution_1_0_0_M1();
me.put(ev.getFinalVersion(),ev);
}
public Collection<IEvolution> getEvolutions(){
return me.values();
}
public Collection<IEvolution> getEvolutionsFromVersion(String fromVersion){
NavigableMap<String, IEvolution> evolutions = me.tailMap(fromVersion, false);
return evolutions.values();
}
}