/* * Copyright 2005-2010 Ignis Software Tools Ltd. All rights reserved. */ package jsystem.extensions.scenarionamehook; import jsystem.framework.FrameworkOptions; import jsystem.framework.JSystemProperties; import jsystem.framework.scenario.Scenario; import jsystem.framework.scenario.ScenariosManager; import jsystem.runner.loader.LoadersManager; import jsystem.utils.StringUtils; /** * * @author gderazon */ public class ScenarioNameHookManager { static public class HookData { public String projectName; public String scenarioId; } /** * Returns scenario name hook class instance. * If Scenario name hook is not defined, returns null. */ public static ScenarioNameHook getHookClass() throws Exception { String className = JSystemProperties.getInstance().getPreferenceOrDefault(FrameworkOptions.SCENARIO_NAME_HOOK); if (StringUtils.isEmpty(className)){ return null; } Object nameHook = LoadersManager.getInstance().getLoader().loadClass(className).newInstance(); if (!(nameHook instanceof ScenarioNameHook)){ throw new Exception("Scenario name hook must be an instance of ScenarioNameHook interface"); } return (ScenarioNameHook)nameHook; } public static HookData getNextScenarioData() throws Exception { ScenarioNameHook hook = getHookClass(); if (hook == null){ throw new Exception("name hook not defined"); } String scenarioId = hook.getScenarioId(); String projectName = hook.getProjectName(); HookData data = new HookData(); data.projectName = projectName; data.scenarioId = scenarioId; return data; } public static String getScenarioNameForHookData(HookData data,String baseName) { if (baseName.endsWith(".xml")){ return baseName.substring(0,baseName.length()-4) + data.scenarioId + ".xml"; } return baseName+data.scenarioId; } public static Scenario createScenarioWithNameHook(String name) throws Exception { ScenarioNameHook hook = getHookClass(); if (hook == null){ throw new Exception("name hook not defined"); } String scenarioId = hook.getScenarioId(); String projectName = hook.getProjectName(); Scenario s = new Scenario(ScenariosManager.getInstance().getScenariosDirectoryFiles(),name+scenarioId,scenarioId,projectName); return s; } public static void saveScenarioAsWithNameHook(Scenario scenario, String scenarioNameWithHook,HookData data) throws Exception { scenario.save(scenarioNameWithHook); scenario.setProjectName(data.projectName); scenario.setExternalId(data.scenarioId); scenario.save(); } }