package com.intellij.openapi.roots.ui.configuration.artifacts; import com.intellij.openapi.roots.libraries.Library; import com.intellij.openapi.roots.ui.configuration.projectRoot.daemon.LibraryProjectStructureElement; import com.intellij.openapi.roots.ui.configuration.projectRoot.daemon.PlaceInProjectStructure; import com.intellij.openapi.roots.ui.configuration.projectRoot.daemon.ProjectStructureElement; import com.intellij.openapi.roots.ui.configuration.projectRoot.daemon.ProjectStructureElementUsage; import com.intellij.packaging.artifacts.Artifact; import com.intellij.packaging.elements.PackagingElement; import com.intellij.packaging.elements.PackagingElementFactory; import org.jetbrains.annotations.Nullable; import javax.swing.*; /** * @author nik */ public class UsageInArtifact extends ProjectStructureElementUsage { private final Artifact myOriginalArtifact; private final ArtifactsStructureConfigurableContext myContext; private final ProjectStructureElement mySourceElement; private final ProjectStructureElement myContainingElement; private final String myParentPath; private final PackagingElement<?> myPackagingElement; public UsageInArtifact(Artifact originalArtifact, ArtifactsStructureConfigurableContext context, ProjectStructureElement sourceElement, ArtifactProjectStructureElement containingElement, String parentPath, PackagingElement<?> packagingElement) { myOriginalArtifact = originalArtifact; myContext = context; mySourceElement = sourceElement; myContainingElement = containingElement; myParentPath = parentPath; myPackagingElement = packagingElement; } @Override public ProjectStructureElement getSourceElement() { return mySourceElement; } @Override public ProjectStructureElement getContainingElement() { return myContainingElement; } public void removeElement() { getOrCreateEditor().removePackagingElement(myParentPath, myPackagingElement); } private ArtifactEditorEx getOrCreateEditor() { return (ArtifactEditorEx)myContext.getOrCreateEditor(myOriginalArtifact); } public void replaceElement(PackagingElement<?> replacement) { getOrCreateEditor().replacePackagingElement(myParentPath, myPackagingElement, replacement); } @Override public String getPresentableName() { return myOriginalArtifact.getName(); } @Override public PlaceInProjectStructure getPlace() { return new PlaceInArtifact(myOriginalArtifact, myContext, myParentPath, myPackagingElement); } @Override public int hashCode() { return myOriginalArtifact.hashCode(); } @Override public boolean equals(Object obj) { return obj instanceof UsageInArtifact && ((UsageInArtifact)obj).myOriginalArtifact.equals(myOriginalArtifact); } @Override public Icon getIcon() { return myOriginalArtifact.getArtifactType().getIcon(); } @Nullable @Override public String getPresentableLocationInElement() { return "[" + myParentPath + "]"; } @Override public void removeSourceElement() { removeElement(); } @Override public void replaceElement(final ProjectStructureElement newElement) { Library library = ((LibraryProjectStructureElement)newElement).getLibrary(); PackagingElement<?> newLibraryElement = PackagingElementFactory.getInstance().createLibraryFiles(library.getName(), library.getTable().getTableLevel(), null); replaceElement(newLibraryElement); } }