// Copyright 2016 Pants project contributors (see CONTRIBUTORS.md).
// Licensed under the Apache License, Version 2.0 (see LICENSE).
package com.twitter.intellij.pants.execution;
import com.intellij.execution.actions.ConfigurationContext;
import com.intellij.execution.actions.RunConfigurationProducer;
import com.intellij.openapi.externalSystem.model.execution.ExternalSystemTaskExecutionSettings;
import com.intellij.openapi.externalSystem.service.execution.ExternalSystemRunConfiguration;
import com.intellij.openapi.util.Ref;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.PsiElement;
import com.twitter.intellij.pants.util.PantsConstants;
import org.jetbrains.annotations.NotNull;
public abstract class PantsTestRunConfigurationProducer extends RunConfigurationProducer<ExternalSystemRunConfiguration> {
protected PantsTestRunConfigurationProducer() {
super(PantsExternalTaskConfigurationType.getInstance());
}
@Override
protected abstract boolean setupConfigurationFromContext(
@NotNull ExternalSystemRunConfiguration configuration,
@NotNull ConfigurationContext context,
@NotNull Ref<PsiElement> sourceElement
);
@Override
public boolean isConfigurationFromContext(
@NotNull ExternalSystemRunConfiguration configuration,
@NotNull ConfigurationContext context
) {
final ExternalSystemRunConfiguration tempConfig = new ExternalSystemRunConfiguration(
PantsConstants.SYSTEM_ID, context.getProject(), configuration.getFactory(), configuration.getName()
);
final Ref<PsiElement> locationRef = new Ref<PsiElement>(context.getPsiLocation());
setupConfigurationFromContext(tempConfig, context, locationRef);
return compareSettings(configuration.getSettings(), tempConfig.getSettings());
}
private boolean compareSettings(ExternalSystemTaskExecutionSettings settings1, ExternalSystemTaskExecutionSettings settings2) {
return settings1.equals(settings2) &&
StringUtil.equalsIgnoreWhitespaces(settings1.getScriptParameters(), settings2.getScriptParameters()) &&
StringUtil.equals(settings1.getExecutionName(), settings2.getExecutionName());
}
}