From c9988849b665ed517272f164ac86db7487fdb2c6 Mon Sep 17 00:00:00 2001 From: nik Date: Wed, 3 Feb 2010 14:45:45 +0300 Subject: [PATCH] IDEA-25499: artifacts config: UI for easy configuration of exploded wars --- .../packaging/artifacts/ArtifactTemplate.java | 43 +++++++++++++++++++++- .../artifacts/ArtifactsStructureConfigurable.java | 21 ++++++++--- 2 files changed, 57 insertions(+), 7 deletions(-) diff --git a/java/compiler/openapi/src/com/intellij/packaging/artifacts/ArtifactTemplate.java b/java/compiler/openapi/src/com/intellij/packaging/artifacts/ArtifactTemplate.java index 342ceb5b74..b39bd8ac69 100644 --- a/java/compiler/openapi/src/com/intellij/packaging/artifacts/ArtifactTemplate.java +++ b/java/compiler/openapi/src/com/intellij/packaging/artifacts/ArtifactTemplate.java @@ -17,6 +17,7 @@ package com.intellij.packaging.artifacts; import com.intellij.packaging.elements.CompositePackagingElement; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; /** * @author nik @@ -25,10 +26,50 @@ public abstract class ArtifactTemplate { public abstract String getPresentableName(); - public abstract CompositePackagingElement createRootElement(@NotNull String artifactName); + /** + * @deprecated override {@link #createArtifact()} instead + */ + @Deprecated + public CompositePackagingElement createRootElement(@NotNull String artifactName) { + return null; + } + /** + * @deprecated override {@link #createArtifact()} instead + */ + @Deprecated @NotNull public String suggestArtifactName() { return "unnamed"; } + + @Nullable + public NewArtifactConfiguration createArtifact() { + final String name = suggestArtifactName(); + return new NewArtifactConfiguration(createRootElement(name), name, null); + } + + public static class NewArtifactConfiguration { + private final CompositePackagingElement myRootElement; + private final String myArtifactName; + private final ArtifactType myArtifactType; + + public NewArtifactConfiguration(CompositePackagingElement rootElement, String artifactName, ArtifactType artifactType) { + myRootElement = rootElement; + myArtifactName = artifactName; + myArtifactType = artifactType; + } + + public CompositePackagingElement getRootElement() { + return myRootElement; + } + + public String getArtifactName() { + return myArtifactName; + } + + public ArtifactType getArtifactType() { + return myArtifactType; + } + } } diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/ArtifactsStructureConfigurable.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/ArtifactsStructureConfigurable.java index 6dfdc7a276..750786171b 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/ArtifactsStructureConfigurable.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/ArtifactsStructureConfigurable.java @@ -38,7 +38,6 @@ import com.intellij.openapi.roots.ui.configuration.projectRoot.*; import com.intellij.openapi.roots.ui.configuration.projectRoot.daemon.ProjectStructureElement; import com.intellij.openapi.ui.MasterDetailsStateService; import com.intellij.packaging.artifacts.*; -import com.intellij.packaging.elements.CompositePackagingElement; import com.intellij.packaging.impl.artifacts.ArtifactUtil; import com.intellij.packaging.impl.artifacts.PackagingElementPath; import com.intellij.packaging.impl.artifacts.PackagingElementProcessor; @@ -245,10 +244,10 @@ public class ArtifactsStructureConfigurable extends BaseStructureConfigurable { } @Override - public CompositePackagingElement createRootElement(@NotNull String artifactName) { - return type.createRootElement(artifactName); + public NewArtifactConfiguration createArtifact() { + final String name = "unnamed"; + return new NewArtifactConfiguration(type.createRootElement(name), name, type); } - }; if (templates.isEmpty()) { @@ -265,14 +264,24 @@ public class ArtifactsStructureConfigurable extends BaseStructureConfigurable { } private void addArtifact(@NotNull ArtifactType type, @NotNull ArtifactTemplate artifactTemplate) { - final String baseName = artifactTemplate.suggestArtifactName(); + final ArtifactTemplate.NewArtifactConfiguration configuration = artifactTemplate.createArtifact(); + if (configuration == null) { + return; + } + + final String baseName = configuration.getArtifactName(); String name = baseName; int i = 2; while (myPackagingEditorContext.getArtifactModel().findArtifact(name) != null) { name = baseName + i; i++; } - final ModifiableArtifact artifact = myPackagingEditorContext.getOrCreateModifiableArtifactModel().addArtifact(name, type, artifactTemplate.createRootElement(name)); + + ArtifactType actualType = configuration.getArtifactType(); + if (actualType == null) { + actualType = type; + } + final ModifiableArtifact artifact = myPackagingEditorContext.getOrCreateModifiableArtifactModel().addArtifact(name, actualType, configuration.getRootElement()); selectNodeInTree(findNodeByObject(myRoot, artifact)); } -- 2.11.4.GIT