/** * Copyright 2011 Intuit Inc. All Rights Reserved */ package com.intuit.tank.util; /* * #%L * JSF Support Beans * %% * Copyright (C) 2011 - 2015 Intuit Inc. * %% * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * #L% */ import java.util.HashMap; import java.util.List; import java.util.Map; import javax.inject.Named; import javax.persistence.EntityManager; import javax.persistence.Query; import com.intuit.tank.dao.ScriptGroupDao; import com.intuit.tank.dao.WorkloadDao; import com.intuit.tank.project.ScriptGroup; import com.intuit.tank.project.ScriptGroupStep; import com.intuit.tank.project.TestPlan; import com.intuit.tank.project.Workload; /** * ProductDaoTest * * @author dangleton * */ @Named public class UpdateScriptGroups { private ScriptGroupDao dao = new ScriptGroupDao(); private WorkloadDao workloadDao = new WorkloadDao(); private Map<Integer, Workload> workloadMap = new HashMap<Integer, Workload>(); private Map<Integer, List<ScriptGroup>> scriptGroupMap = new HashMap<Integer, List<ScriptGroup>>(); private static boolean running = false; public boolean isDisabled() { return running; } public synchronized void upgrade() { if (!running) { // running = true; EntityManager em = dao.getEM(); Query query = em .createNativeQuery("select id, workload_id from script_group where test_plan_id is null order by workload_id, position"); @SuppressWarnings("unchecked") List<Object[]> results = query.getResultList(); for (Object[] set : results) { Integer id = (Integer) set[0]; Integer workloadId = (Integer) set[1]; if (workloadId != null) { updateScriptGroup(id, workloadId); } else { deleteScriptGroup(id); } } for (Workload w : workloadMap.values()) { workloadDao.saveOrUpdate(w); } } } private void deleteScriptGroup(Integer id) { dao.delete(id); } private void updateScriptGroup(Integer id, Integer workloadId) { Workload workload = workloadMap.get(workloadId); if (workload == null) { workload = workloadDao.findById(workloadId); if (workload == null) { deleteScriptGroup(id); return; } workloadMap.put(workloadId, workload); } List<TestPlan> testPlans = workload.getTestPlans(); if (testPlans.isEmpty()) { // create a testPlan TestPlan plan = TestPlan.builder().name("Main").usersPercentage(100).build(); workload.addTestPlan(plan); } ScriptGroup scriptGroup = dao.findById(id); testPlans.get(0).addScriptGroup(copyGroup(scriptGroup)); deleteScriptGroup(id); } private ScriptGroup copyGroup(ScriptGroup copyFrom) { ScriptGroup sg = ScriptGroup.builder().name(copyFrom.getName()).loop(copyFrom.getLoop()).build(); for (ScriptGroupStep step : copyFrom.getScriptGroupSteps()) { sg.addScriptGroupStep(copyStep(step)); } return sg; } private ScriptGroupStep copyStep(ScriptGroupStep copyFrom) { ScriptGroupStep step = ScriptGroupStep.builder().loop(copyFrom.getLoop()).script(copyFrom.getScript()).build(); return step; } }