package update_database; import java.sql.Connection; import java.sql.DriverManager; import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Set; import update_database.dao.SigmahDAO; import update_database.entity.BudgetElement; import update_database.entity.FlexibleElement; import update_database.entity.LayoutConstraint; import update_database.entity.Value; import update_database.util.ConfigReader; public class Migrate{ private static String JDBC_DRIVER = "org.postgresql.Driver"; private static Set<FlexibleElement> flexibleElementSet = new HashSet<>(); public static void main(String[] args) throws Exception{ if(args.length != 1){ System.out.println("usage: java -jar migrate.jar 'Path Config File'"); System.out.println("ex: java -jar migrate.jar config.properties"); return; } String configFilePath = args[0]; String url = ConfigReader.getPropValues("db_url", configFilePath); String user = ConfigReader.getPropValues("db_user", configFilePath); String pwd = ConfigReader.getPropValues("db_psw", configFilePath); String spent_budget = ConfigReader.getPropValues("spent_budget", configFilePath); String planned_budget = ConfigReader.getPropValues("planned_budget", configFilePath); String budget_ratio = ConfigReader.getPropValues("budget_ratio", configFilePath); Class.forName(JDBC_DRIVER); Connection conn = DriverManager.getConnection(url,user,pwd); SigmahDAO sigmahDAO = new SigmahDAO(); sigmahDAO.setConnection(conn); if(!sigmahDAO.budgetRatioElementIsExiste()){ System.out.println("budget_ratio_element table is missing"); return; } List<BudgetElement> liste = sigmahDAO.findAllBudgetElement(); List<BudgetElement> liste2 = new ArrayList<>(); int cmp=1; for(BudgetElement b : liste){ LayoutConstraint layoutConstraint = sigmahDAO.findLayoutGroupByBudgetId(b.getId()); b.setLayoutGroupId(layoutConstraint.getLayoutGroup()); b.setLayoutOrder(layoutConstraint.getSortOrder()); b = sigmahDAO.findImportElement(b); List<Value> values = sigmahDAO.findValueByBudgetId(b.getId()); if(values.isEmpty()){ liste2.add(b); //System.out.println(cmp++ + "/ " + b); }else{ for(Value v : values) { String[] parts = v.getValue().split("~"); String divisor=null; String dividend=null; for(int i=0; i<parts.length; i++){ if(parts[i].startsWith(String.valueOf(b.getDividend()))){ dividend = parts[i].substring(parts[i].indexOf('%')+1); }else if(parts[i].startsWith(String.valueOf(b.getDivisor()))){ divisor = parts[i].substring(parts[i].indexOf('%')+1); } } BudgetElement be = new BudgetElement(b.getId(), b.getDivisor(), b.getDividend()); be.setProjetId(v.getProjectId()); be.setDividendVal(dividend); be.setDivisorVal(divisor); be.setLayoutGroupId(layoutConstraint.getLayoutGroup()); be.setLayoutOrder(layoutConstraint.getSortOrder()); be.setUserId(v.getUserId()); liste2.add(be); //System.out.println(cmp++ + "/ " + b); } } } sigmahDAO.removeBudgetSubConstrainte(); sigmahDAO.setNullBudgetSub(); sigmahDAO.truncateAllBudgetElement(); for(BudgetElement b : liste2){ System.out.println(cmp++ + "/ " + b); FlexibleElement flex = new FlexibleElement(b.getId()); if(!flexibleElementSet.contains(flex)){ //1-create dividend in flexible_element int dividendId = sigmahDAO.insertFlexibleElement("budget_spent", spent_budget); //2-create divisor in flexible_element int divisorId = sigmahDAO.insertFlexibleElement("budget_planned", planned_budget); //3-create budget_ratio in flexible_element int budgetRatioId = sigmahDAO.insertFlexibleElement(null, budget_ratio); //4-create budget_ratio_element //id_flexible_element & id_spent_field & id_planned_field sigmahDAO.insertBudgetRatioElement(budgetRatioId, dividendId, divisorId); //5-create texteare element sigmahDAO.insertTextArea(dividendId); sigmahDAO.insertTextArea(divisorId); //6-create layout_constrainte x3 (dividend & divisor & budget_ratio) sigmahDAO.insertLayoutConstraint(b.getLayoutOrder()+1, dividendId, b.getLayoutGroupId()); sigmahDAO.insertLayoutConstraint(b.getLayoutOrder()+2, divisorId, b.getLayoutGroupId()); sigmahDAO.insertLayoutConstraint(b.getLayoutOrder()+3, budgetRatioId, b.getLayoutGroupId()); //insert ds importation_scheme_variable_flexible_element if(b.getDividendSchModId() !=0 && b.getDividendVarId() !=0) sigmahDAO.insertImportFlexibleElement(dividendId, b.getDividendSchModId(), b.getDividendVarId()); if(b.getDivisorSchModId() !=0 && b.getDivisorVarId() !=0) sigmahDAO.insertImportFlexibleElement(divisorId, b.getDivisorSchModId(), b.getDivisorVarId()); //supprime de importation_scheme_variable_flexible_element sigmahDAO.deleteImportFlexibleElement(b.getDividend()); sigmahDAO.deleteImportFlexibleElement(b.getDivisor()); //7-remove old budget from layout_constrainte & value & flexible_element & history_token & importation_scheme_variable_flexible_element & default_flexible_element sigmahDAO.deleteLayoutConstraint(b.getId()); sigmahDAO.deleteValue(b.getId()); sigmahDAO.deleteImportationFlexibleElement(b.getId()); sigmahDAO.deleteDefaultFlexibleElement(b.getId()); sigmahDAO.deleteFlexibleElement(b.getId()); sigmahDAO.deleteHistoryToken(b.getId()); flex.setDividendId(dividendId); flex.setDivisorId(divisorId); flexibleElementSet.add(flex); }else{ flex = getflexibleElementFromSet(flex); } //8-create value x2 (dividend & divisor) if(b.getUserId() != 0){ sigmahDAO.insertValue(b.getProjetId(), b.getDividendVal(), flex.getDividendId(), b.getUserId()); sigmahDAO.insertValue(b.getProjetId(), b.getDivisorVal(), flex.getDivisorId(), b.getUserId()); } } sigmahDAO.closeSession(); System.out.println("migration is done"); } private static FlexibleElement getflexibleElementFromSet(FlexibleElement flex) throws Exception{ for (Iterator<FlexibleElement> it = flexibleElementSet.iterator(); it.hasNext(); ) { FlexibleElement f = it.next(); if (f.equals(flex)) return f; } throw new Exception("corrupted data"); } }