LaunchConfigComparator.java
package com.codeaffine.extras.launch.internal.dialog;
import static java.util.Arrays.asList;
import static java.util.Objects.requireNonNull;
import java.util.Comparator;
import java.util.List;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchMode;
import org.eclipse.debug.ui.DebugUITools;
import org.eclipse.debug.ui.ILaunchGroup;
public class LaunchConfigComparator implements Comparator<ILaunchConfiguration> {
private final List<Object> launchConfigHistory;
private final ILaunchMode launchMode;
public LaunchConfigComparator( LaunchConfigSelectionHistory launchConfigHistory, ILaunchMode launchMode ) {
requireNonNull( launchConfigHistory );
this.launchConfigHistory = asList( launchConfigHistory.getHistoryItems() );
this.launchMode = launchMode;
}
@Override
public int compare( ILaunchConfiguration launchConfig1, ILaunchConfiguration launchConfig2 ) {
requireNonNull( launchConfig1, "launchConfig1" );
requireNonNull( launchConfig2, "launchConfig2" );
int result;
if( isHistoryElement( launchConfig1 ) && isHistoryElement( launchConfig2 ) ) {
result = compareHistoryElements( launchConfig1, launchConfig2 );
} else {
result = launchConfig1.getName().compareTo( launchConfig2.getName() );
}
return result;
}
private int compareHistoryElements( ILaunchConfiguration launchConfig1, ILaunchConfiguration launchConfig2 ) {
int result;
if( isLastLaunchedConfig( launchConfig1 ) ) {
result = -1;
} else if( isLastLaunchedConfig( launchConfig2 ) ) {
result = 1;
} else {
result = launchConfigHistory.indexOf( launchConfig1 ) - launchConfigHistory.indexOf( launchConfig2 );
}
return result;
}
private boolean isLastLaunchedConfig( ILaunchConfiguration launchConfig ) {
ILaunchConfiguration lastLaunchedConfig = getLastLaunchConfig( launchConfig );
return launchConfig.equals( lastLaunchedConfig );
}
private ILaunchConfiguration getLastLaunchConfig( ILaunchConfiguration launchConfig ) {
ILaunchConfiguration result = null;
if( launchMode != null ) {
ILaunchGroup launchGroup = DebugUITools.getLaunchGroup( launchConfig, launchMode.getIdentifier() );
if( launchGroup != null ) {
result = DebugUITools.getLastLaunch( launchGroup.getIdentifier() );
}
}
return result;
}
private boolean isHistoryElement( ILaunchConfiguration launchConfig ) {
return launchConfigHistory.contains( launchConfig );
}
}