blob: 3c1f63769c041f4976631685014372164a916a61 [file] [log] [blame]
package com.intellij.compiler.artifacts;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.libraries.Library;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.packaging.artifacts.Artifact;
import com.intellij.packaging.elements.CompositePackagingElement;
import com.intellij.packaging.elements.PackagingElement;
import com.intellij.packaging.elements.PackagingElementFactory;
/**
* @author nik
*/
public class TestPackagingElementBuilder {
private final CompositePackagingElement<?> myElement;
private final TestPackagingElementBuilder myParent;
private final Project myProject;
private TestPackagingElementBuilder(Project project, CompositePackagingElement<?> element, TestPackagingElementBuilder parent) {
myElement = element;
myParent = parent;
myProject = project;
}
public static TestPackagingElementBuilder root(Project project) {
return new TestPackagingElementBuilder(project, PackagingElementFactory.getInstance().createArtifactRootElement(), null);
}
public static TestPackagingElementBuilder archive(final Project project, String name) {
return new TestPackagingElementBuilder(project, PackagingElementFactory.getInstance().createArchive(name), null);
}
public CompositePackagingElement<?> build() {
TestPackagingElementBuilder builder = this;
while (builder.myParent != null) {
builder = builder.myParent;
}
return builder.myElement;
}
public TestPackagingElementBuilder file(VirtualFile file) {
return file(file.getPath());
}
public TestPackagingElementBuilder file(String path) {
myElement.addOrFindChild(getFactory().createFileCopyWithParentDirectories(path, "/"));
return this;
}
private static PackagingElementFactory getFactory() {
return PackagingElementFactory.getInstance();
}
public TestPackagingElementBuilder dirCopy(VirtualFile dir) {
return dirCopy(dir.getPath());
}
public TestPackagingElementBuilder dirCopy(String path) {
myElement.addOrFindChild(getFactory().createDirectoryCopyWithParentDirectories(path, "/"));
return this;
}
public TestPackagingElementBuilder extractedDir(String jarPath, String pathInJar) {
myElement.addOrFindChild(getFactory().createExtractedDirectoryWithParentDirectories(jarPath, pathInJar, "/"));
return this;
}
public TestPackagingElementBuilder module(Module module) {
myElement.addOrFindChild(getFactory().createModuleOutput(module));
return this;
}
public TestPackagingElementBuilder lib(Library library) {
myElement.addOrFindChildren(getFactory().createLibraryElements(library));
return this;
}
public TestPackagingElementBuilder artifact(Artifact artifact) {
myElement.addOrFindChild(getFactory().createArtifactElement(artifact, myProject));
return this;
}
public TestPackagingElementBuilder archive(String name) {
final CompositePackagingElement<?> archive = getFactory().createArchive(name);
return new TestPackagingElementBuilder(myProject, myElement.addOrFindChild(archive), this);
}
public TestPackagingElementBuilder dir(String name) {
return new TestPackagingElementBuilder(myProject, myElement.addOrFindChild(getFactory().createDirectory(name)), this);
}
public TestPackagingElementBuilder add(PackagingElement<?> element) {
myElement.addOrFindChild(element);
return this;
}
public TestPackagingElementBuilder end() {
return myParent;
}
}