/* * Copyright 2000-2011 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 com.intellij.openapi.roots.ui.configuration.artifacts; import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.ui.ComboBox; import com.intellij.openapi.util.Comparing; import com.intellij.packaging.artifacts.Artifact; import com.intellij.packaging.artifacts.ArtifactType; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; /** * @author nik */ public class ArtifactConfigurable extends ArtifactConfigurableBase { private boolean myIsInUpdateName; public ArtifactConfigurable(Artifact originalArtifact, ArtifactsStructureConfigurableContextImpl artifactsStructureContext, final Runnable updateTree) { super(originalArtifact, artifactsStructureContext, updateTree, true); } @Override public void setDisplayName(String name) { final String oldName = getArtifact().getName(); if (name != null && !name.equals(oldName) && !myIsInUpdateName) { myArtifactsStructureContext.getOrCreateModifiableArtifactModel().getOrCreateModifiableArtifact(myOriginalArtifact).setName(name); getEditor().updateOutputPath(oldName, name); } } @Override public void updateName() { myIsInUpdateName = true; try { super.updateName(); } finally { myIsInUpdateName = false; } } @Override public JComponent createOptionsPanel() { return getEditor().createMainComponent(); } @Override protected JComponent createTopRightComponent() { final ComboBox artifactTypeBox = new ComboBox(); for (ArtifactType type : ArtifactType.getAllTypes()) { artifactTypeBox.addItem(type); } artifactTypeBox.setRenderer(new ArtifactTypeCellRenderer(artifactTypeBox.getRenderer())); artifactTypeBox.setSelectedItem(getArtifact().getArtifactType()); artifactTypeBox.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { final ArtifactType selected = (ArtifactType)artifactTypeBox.getSelectedItem(); if (selected != null && !Comparing.equal(selected, getArtifact().getArtifactType())) { getEditor().setArtifactType(selected); } } }); final JPanel panel = new JPanel(new FlowLayout()); panel.add(new JLabel("Type: ")); panel.add(artifactTypeBox); return panel; } @Override public boolean isModified() { return getEditor().isModified(); } @Override public void apply() throws ConfigurationException { getEditor().apply(); } @Override public void reset() { } @Override public String getHelpTopic() { return getEditor().getHelpTopic(); } private ArtifactEditorImpl getEditor() { return myArtifactsStructureContext.getOrCreateEditor(myOriginalArtifact); } }