package org.projectusus.autotestsuite.core.internal.config; import static com.google.common.base.Strings.isNullOrEmpty; import static com.google.common.collect.Iterables.toArray; import static com.google.common.collect.Iterables.transform; import static org.eclipse.jdt.internal.junit.launcher.JUnitLaunchConfigurationConstants.ATTR_KEEPRUNNING; import static org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME; import static org.projectusus.autotestsuite.AutoTestSuitePlugin.logStatusOf; import static org.projectusus.autotestsuite.core.internal.config.ExtendedJUnitLaunchConfigurationConstants.ATTR_CHECKED_PROJECTS; import static org.projectusus.autotestsuite.core.internal.config.ExtendedJUnitLaunchConfigurationConstants.CHECKED_PROJECTS_SEPARATOR; import static org.projectusus.autotestsuite.core.internal.config.ExtendedJUnitLaunchConfigurationConstants.DEFAULT_TEST_KIND_ID; import static org.projectusus.autotestsuite.core.internal.config.ExtendedJUnitLaunchConfigurationConstants.toProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.internal.junit.launcher.ITestKind; import org.eclipse.jdt.internal.junit.launcher.JUnitLaunchConfigurationConstants; import org.eclipse.jdt.internal.junit.launcher.TestKindRegistry; import com.google.common.base.Function; import com.google.common.base.Splitter; @SuppressWarnings( "restriction" ) public class ExtendedJUnitLaunchConfigurationReader { private final ILaunchConfiguration config; public ExtendedJUnitLaunchConfigurationReader( ILaunchConfiguration config ) { this.config = config; } public boolean isKeepRunning() { try { return config.getAttribute( ATTR_KEEPRUNNING, false ); } catch( CoreException exception ) { logStatusOf( exception ); } return false; } public ITestKind getTestKind() { ITestKind testKind = JUnitLaunchConfigurationConstants.getTestRunnerKind( config ); if( testKind.isNull() ) { testKind = TestKindRegistry.getDefault().getKind( DEFAULT_TEST_KIND_ID ); } return testKind; } public String getProjectName() { try { return config.getAttribute( ATTR_PROJECT_NAME, "" ); //$NON-NLS-1$ } catch( CoreException exception ) { logStatusOf( exception ); } return ""; } private IJavaProject[] loadCheckedProjects( Function<String, IJavaProject> converter ) throws CoreException { String value = config.getAttribute( ATTR_CHECKED_PROJECTS, "" ); if( isNullOrEmpty( value ) ) { return new IJavaProject[0]; } Iterable<String> split = Splitter.on( CHECKED_PROJECTS_SEPARATOR ).split( value ); Iterable<IJavaProject> projects = transform( split, converter ); return toArray( projects, IJavaProject.class ); } public IJavaProject[] getCheckedProjects() { return getCheckedProjects( new Function<String, IJavaProject>() { public IJavaProject apply( String name ) { return toProject( name ); } } ); } public IJavaProject[] getCheckedProjects( Function<String, IJavaProject> converter ) { try { return loadCheckedProjects( converter ); } catch( CoreException exception ) { logStatusOf( exception ); } return new IJavaProject[0]; } }