@NotNull public List<? extends PackagingElement<?>> createElements( @NotNull ArtifactEditorContext context) { return Collections.singletonList( PackagingElementFactory.getInstance() .createArtifactElement(myArtifact, context.getProject())); }
@Override public void addElementsToDirectory( @NotNull Artifact artifact, @NotNull String relativePath, @NotNull Collection<? extends PackagingElement<?>> elements) { final ModifiableArtifactModel model = createModifiableModel(); final CompositePackagingElement<?> root = model.getOrCreateModifiableArtifact(artifact).getRootElement(); PackagingElementFactory.getInstance() .getOrCreateDirectory(root, relativePath) .addOrFindChildren(elements); new WriteAction() { @Override protected void run(@NotNull final Result result) { model.commit(); } }.execute(); }
@NotNull private static Artifact findOrCreateWebArtifact(AppEngineFacet appEngineFacet) { Module module = appEngineFacet.getModule(); ArtifactType webArtifactType = AppEngineWebIntegration.getInstance().getAppEngineWebArtifactType(); final Collection<Artifact> artifacts = ArtifactUtil.getArtifactsContainingModuleOutput(module); for (Artifact artifact : artifacts) { if (webArtifactType.equals(artifact.getArtifactType())) { return artifact; } } ArtifactManager artifactManager = ArtifactManager.getInstance(module.getProject()); PackagingElementFactory elementFactory = PackagingElementFactory.getInstance(); ArtifactRootElement<?> root = elementFactory.createArtifactRootElement(); elementFactory .getOrCreateDirectory(root, "WEB-INF/classes") .addOrFindChild(elementFactory.createModuleOutput(module)); return artifactManager.addArtifact(module.getName(), webArtifactType, root); }
private <T> PackagingElement<T> deserializeElement(Element element) throws UnknownPackagingElementTypeException { final String id = element.getAttributeValue(TYPE_ID_ATTRIBUTE); PackagingElementType<?> type = PackagingElementFactory.getInstance().findElementType(id); if (type == null) { throw new UnknownPackagingElementTypeException(id); } PackagingElement<T> packagingElement = (PackagingElement<T>) type.createEmpty(myProject); T state = packagingElement.getState(); if (state != null) { XmlSerializer.deserializeInto(state, element); packagingElement.loadState(state); } final List children = element.getChildren(PACKAGING_ELEMENT_NAME); //noinspection unchecked for (Element child : (List<? extends Element>) children) { ((CompositePackagingElement<?>) packagingElement).addOrFindChild(deserializeElement(child)); } return packagingElement; }
private static CompositePackagingElement<?> getOrCreateModifiableParent( CompositePackagingElement<?> parentElement, PackagingElementNode<?> node) { PackagingElementNode<?> current = node; List<String> dirNames = new ArrayList<String>(); while (current != null && !(current instanceof ArtifactRootNode)) { final PackagingElement<?> packagingElement = current.getFirstElement(); if (!(packagingElement instanceof DirectoryPackagingElement)) { return parentElement; } dirNames.add(((DirectoryPackagingElement) packagingElement).getDirectoryName()); current = current.getParentNode(); } if (current == null) return parentElement; final PackagingElement<?> rootElement = current.getElementIfSingle(); if (!(rootElement instanceof CompositePackagingElement<?>)) return parentElement; Collections.reverse(dirNames); String path = StringUtil.join(dirNames, "/"); return PackagingElementFactory.getInstance() .getOrCreateDirectory((CompositePackagingElement<?>) rootElement, path); }
@NotNull @Override public CompositePackagingElement<?> createRootElement(@NotNull String artifactName) { return PackagingElementFactory.getInstance() .createArchive(ArtifactUtil.suggestArtifactFileName(artifactName) + ".apk"); }