/* * Copyright 2000-2015 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jetbrains.osgi.bnd.run; import com.intellij.execution.Location; import com.intellij.execution.actions.ConfigurationContext; import com.intellij.execution.actions.RunConfigurationProducer; import com.intellij.execution.configurations.ConfigurationFactory; import com.intellij.openapi.util.Ref; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiElement; import org.jetbrains.annotations.NotNull; import org.jetbrains.osgi.bnd.BndFileType; public abstract class BndRunConfigurationProducer extends RunConfigurationProducer<BndRunConfigurationBase> { protected BndRunConfigurationProducer(@NotNull ConfigurationFactory factory) { super(factory); } @Override protected boolean setupConfigurationFromContext(BndRunConfigurationBase configuration, ConfigurationContext context, Ref<PsiElement> source) { Location location = context.getLocation(); if (location != null) { VirtualFile file = location.getVirtualFile(); if (file != null && !file.isDirectory()) { String extension = file.getExtension(); if (BndFileType.BND_RUN_EXT.equals(extension) || BndFileType.BND_EXT.equals(extension)) { Boolean hasTestCases = BndLaunchUtil.hasTestCases(file.getPath()); if (hasTestCases == Boolean.FALSE && configuration instanceof BndRunConfigurationBase.Launch || hasTestCases == Boolean.TRUE && configuration instanceof BndRunConfigurationBase.Test) { configuration.setName(context.getModule().getName()); configuration.bndRunFile = file.getPath(); return true; } } } } return false; } @Override public boolean isConfigurationFromContext(BndRunConfigurationBase configuration, ConfigurationContext context) { if (getConfigurationFactory() == configuration.getFactory()) { Location location = context.getLocation(); if (location != null) { VirtualFile file = location.getVirtualFile(); return file != null && !file.isDirectory() && FileUtil.pathsEqual(file.getPath(), configuration.bndRunFile); } } return false; } public static class Launch extends BndRunConfigurationProducer { public Launch() { super(BndRunConfigurationType.getInstance().getConfigurationFactories()[0]); } } public static class Test extends BndRunConfigurationProducer { public Test() { super(BndRunConfigurationType.getInstance().getConfigurationFactories()[1]); } } }