package org.testng.eclipse.util; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jface.preference.IPreferenceStore; import org.testng.TestNG; import org.testng.eclipse.TestNGPluginConstants; import java.io.File; import java.util.Random; /** * Utility methods to store and retrieve data in the preference store. * * XXX The whole preference store parts are used in wrong way, * need to be refactored to follow eclipse scoped preference story * which require to change both <code>ProjectPropertyPage</code> and * <code>WorkspacePreferencepage</code>, and also need to consider back compitability * * @author Cedric Beust <cedric@beust.com> */ public class PreferenceStoreUtil { private IPreferenceStore m_storage; public PreferenceStoreUtil(IPreferenceStore storage) { m_storage= storage; } /** * Saves the output directory information. */ public void storeOutputDir(String projectName, String outdir, boolean isAbsolute) { m_storage.setValue(projectName + TestNGPluginConstants.S_OUTDIR, outdir); m_storage.setValue(projectName + TestNGPluginConstants.S_ABSOLUTEPATH, isAbsolute); } public void storeDisabledListeners(String projectName, boolean selection) { m_storage.setValue(projectName + ".disabledListeners", selection); } public void storeXmlTemplateFile(String projectName, String xmlFile) { m_storage.setValue(projectName + TestNGPluginConstants.S_XML_TEMPLATE_FILE, xmlFile); } public void storePreDefinedListeners(String projectName, String listeners){ m_storage.setValue(projectName + TestNGPluginConstants.S_PRE_DEFINED_LISTENERS, listeners); } public String getExcludedStackTraces(String projectName) { return getString(projectName, false, TestNGPluginConstants.S_EXCLUDED_STACK_TRACES); } public File getTemporaryDirectory() { Random r = new Random(System.currentTimeMillis()); File result = new File(System.getProperty("java.io.tmpdir") + File.separatorChar + "testng-eclipse-" + r.nextInt()); return result; } public String getXmlTemplateFile(String projectName, boolean projectOnly) { return getString(projectName, projectOnly, TestNGPluginConstants.S_XML_TEMPLATE_FILE); } public String getPreDefinedListeners(String projectName, boolean projectOnly){ return getString(projectName, projectOnly, TestNGPluginConstants.S_PRE_DEFINED_LISTENERS); } public IPath getOutputDirectoryPath(IJavaProject project) { final String projectName= project.getElementName(); final String outdir= getOutputDir(projectName, false); boolean isAbsolute= isOutputAbsolutePath(projectName, false); return new Path(isAbsolute ? outdir : project.getPath().toOSString() + "/" + outdir); } public IPath getOutputAbsolutePath(IJavaProject project) { final String projectName= project.getElementName(); final String outdir= getOutputDir(projectName, false); boolean isAbsolute= isOutputAbsolutePath(projectName, false); return new Path(isAbsolute ? outdir : project.getProject().getLocation().toOSString() + "/" + outdir); } public String getOutputDir(String projectName, boolean projectOnly) { String result = getString(projectName, projectOnly, TestNGPluginConstants.S_OUTDIR); // Convert the deprecated property into the new one if (StringUtils.isEmptyString(result)) { if (m_storage.contains(TestNGPluginConstants.S_DEPRECATED_OUTPUT)) { m_storage.setValue(TestNGPluginConstants.S_DEPRECATED_OUTPUT, ""); m_storage.setValue(TestNGPluginConstants.S_OUTDIR, m_storage.getString(TestNGPluginConstants.S_DEPRECATED_OUTPUT)); } String outDir = m_storage.getString(TestNGPluginConstants.S_OUTDIR); result = !"".equals(outDir) ? outDir : TestNG.DEFAULT_OUTPUTDIR; } return result; } public boolean isOutputAbsolutePath(String projectName, boolean projectOnly) { if(projectOnly || m_storage.contains(projectName + TestNGPluginConstants.S_ABSOLUTEPATH)) { return m_storage.getBoolean(projectName + TestNGPluginConstants.S_ABSOLUTEPATH); } // backward compatibility 5.6.20070407 if(m_storage.contains(TestNGPluginConstants.S_DEPRECATED_ABSOLUTEPATH)) { m_storage.setValue(TestNGPluginConstants.S_DEPRECATED_ABSOLUTEPATH, false); m_storage.setValue(TestNGPluginConstants.S_ABSOLUTEPATH, m_storage.getBoolean(TestNGPluginConstants.S_DEPRECATED_ABSOLUTEPATH)); } return m_storage.getBoolean(TestNGPluginConstants.S_ABSOLUTEPATH); } private String getString(String projectName, boolean projectOnly, String prefName) { String result = ""; if (m_storage.contains(projectName + prefName)) { result = m_storage.getString(projectName + prefName); } if (StringUtils.isEmptyString(result) && ! projectOnly) { result = m_storage.getString(prefName); } return result; } // public String getReporters(String projectName, boolean projectOnly) { // return getString(projectName, projectOnly, TestNGPluginConstants.S_REPORTERS); // } // public String getParallel(String projectName, boolean projectOnly) { // String result = getString(projectName, projectOnly, TestNGPluginConstants.S_PARALLEL); // return Utils.isEmpty(result) ? "false" : result; // } public boolean hasDisabledListeners(String projectName, boolean projectOnly) { if(projectOnly || m_storage.contains(projectName + TestNGPluginConstants.S_DISABLEDLISTENERS)) { return m_storage.getBoolean(projectName + TestNGPluginConstants.S_DISABLEDLISTENERS); } else { return m_storage.getBoolean(TestNGPluginConstants.S_DISABLEDLISTENERS); } } public boolean getWatchResults(String projectName) { return m_storage.getBoolean(projectName + TestNGPluginConstants.S_WATCH_RESULTS); } public String getWatchResultDirectory(String projectName) { return m_storage.getString(projectName + TestNGPluginConstants.S_WATCH_RESULT_DIRECTORY); } public void storeWatchResults(String projectName, boolean selection) { m_storage.setValue(projectName + TestNGPluginConstants.S_WATCH_RESULTS, selection); } public void storeWatchResultLocation(String projectName, String text) { m_storage.setValue(projectName + TestNGPluginConstants.S_WATCH_RESULT_DIRECTORY, text); } public static enum SuiteMethodTreatment { REMOVE("Remove"), COMMENT_OUT("Comment out"), DONT_TOUCH("Don't touch"); private String m_label; private SuiteMethodTreatment(String label) { m_label = label; } public String getLabel() { return m_label; } }; public void storeSuiteMethodTreatement(int value) { m_storage.setValue(TestNGPluginConstants.S_SUITE_METHOD_TREATMENT, value); } public SuiteMethodTreatment getSuiteMethodTreatement() { int n = m_storage.getInt(TestNGPluginConstants.S_SUITE_METHOD_TREATMENT); SuiteMethodTreatment result = SuiteMethodTreatment.REMOVE; switch(n) { case 1: result = SuiteMethodTreatment.COMMENT_OUT; break; case 2: result = SuiteMethodTreatment.DONT_TOUCH; break; } return result; } }