blob: c46b39917f98270b365798419361ad96dfdd0725 [file] [log] [blame]
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);
}
}