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; } }