package org.jetbrains.plugins.clojure.runner; import com.intellij.execution.Location; import com.intellij.execution.RunManager; import com.intellij.execution.RunnerAndConfigurationSettings; import com.intellij.execution.configurations.ConfigurationFactory; import com.intellij.execution.configurations.ConfigurationType; import com.intellij.openapi.module.ModuleUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiDirectory; import com.intellij.psi.PsiFile; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.plugins.clojure.ClojureIcons; import org.jetbrains.plugins.clojure.psi.api.ClojureFile; import javax.swing.*; import static com.intellij.execution.configurations.ConfigurationTypeUtil.findConfigurationType; /** * Created by IntelliJ IDEA. * User: peter * Date: Jan 7, 2009 * Time: 6:00:33 PM * Copyright 2007, 2008, 2009 Red Shark Technology * <p/> * http://www.apache.org/licenses/LICENSE-2.0 * <p/> * 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. */ public class ClojureScriptRunConfigurationType implements ConfigurationType { private ClojureScriptConfigurationFactory myConfigurationFactory; public ClojureScriptRunConfigurationType() { myConfigurationFactory = new ClojureScriptConfigurationFactory(this); } // this is the text that appears in the Add New Configurion... list public String getDisplayName() { return "Clojure Script"; } public String getConfigurationTypeDescription() { return "Clojure Script"; } public Icon getIcon() { return ClojureIcons.CLOJURE_ICON_16x16; } @NonNls @NotNull public String getId() { return "ClojureScriptRunConfiguration"; } public ConfigurationFactory[] getConfigurationFactories() { return new ConfigurationFactory[]{myConfigurationFactory}; } public RunnerAndConfigurationSettings createConfigurationByLocation(Location location) { PsiFile file = location.getPsiElement().getContainingFile(); if (file instanceof ClojureFile) { ClojureFile clojureFile = (ClojureFile) file; RunnerAndConfigurationSettings settings = RunManager.getInstance(location.getProject()). createRunConfiguration("", myConfigurationFactory); ClojureScriptRunConfiguration configuration = (ClojureScriptRunConfiguration) settings.getConfiguration(); PsiDirectory dir = clojureFile.getContainingDirectory(); assert dir != null; configuration.setWorkDir(dir.getVirtualFile().getPath()); VirtualFile vFile = clojureFile.getVirtualFile(); assert vFile != null; configuration.setScriptPath(vFile.getPath()); configuration.setName(vFile.getNameWithoutExtension()); configuration.setModule(ModuleUtil.findModuleForPsiElement(clojureFile)); return settings; } return null; } public static ClojureScriptRunConfigurationType getInstance() { return findConfigurationType(ClojureScriptRunConfigurationType.class); } }