package org.mule.tooling.esb.actions;

import com.intellij.execution.Location;
import com.intellij.execution.actions.ConfigurationContext;
import com.intellij.execution.junit.JavaRunConfigurationProducerBase;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.util.Ref;
import com.intellij.psi.PsiElement;
import org.apache.commons.lang.StringUtils;
import org.mule.tooling.esb.launcher.configuration.MuleConfiguration;
import org.mule.tooling.esb.launcher.configuration.MuleConfigurationType;
import org.mule.tooling.esb.util.MuleConfigUtils;

public class MuleApplicationConfigurationProducer extends JavaRunConfigurationProducerBase<MuleConfiguration>
{
    protected MuleApplicationConfigurationProducer()
    {
        super(MuleConfigurationType.getInstance());
    }

    @Override
    protected boolean setupConfigurationFromContext(MuleConfiguration muleConfiguration, ConfigurationContext configurationContext, Ref<PsiElement> ref)
    {
        final Location location = configurationContext.getLocation();
        if (location != null)
        {
            final boolean muleFile = MuleConfigUtils.isMuleFile(location.getPsiElement().getContainingFile());
            final Module module = configurationContext.getModule();
            if (muleFile && module != null)
            {
                muleConfiguration.setModule(module);
                muleConfiguration.setName(StringUtils.capitalize(module.getName()));
                return true;
            }
        }
        return false;
    }

    @Override
    public boolean isConfigurationFromContext(MuleConfiguration muleConfiguration, ConfigurationContext configurationContext)
    {
        final Module module = configurationContext.getModule();
        if (module != null) {
            Module[] modules = muleConfiguration.getModules();
            for (Module m : modules) {
                if (module.equals(m))
                    return true;
            }
        }
        return false;
    }
}