package com.intellij.flex.uiDesigner; import com.intellij.flex.uiDesigner.io.AmfOutputStream; import com.intellij.flex.uiDesigner.io.AmfOutputable; import com.intellij.flex.uiDesigner.libraries.FlexLibrarySet; import com.intellij.flex.uiDesigner.libraries.LibrarySet; import com.intellij.openapi.Disposable; import com.intellij.openapi.module.Module; import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.io.Info; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class ModuleInfo extends Info<Module> implements Disposable { private List<LocalStyleHolder> localStyleHolders; private final LibrarySet librarySet; private final boolean app; public ModuleInfo(Module module, LibrarySet librarySet, boolean isApp) { super(module); this.librarySet = librarySet; app = isApp; } public LibrarySet getLibrarySet() { return librarySet; } public FlexLibrarySet getFlexLibrarySet() { return librarySet instanceof FlexLibrarySet ? (FlexLibrarySet)librarySet : (FlexLibrarySet)librarySet.getParent(); } public boolean isApp() { return app; } public Module getModule() { return element; } @Nullable public List<LocalStyleHolder> getLocalStyleHolders() { return localStyleHolders; } public void setLocalStyleHolders(@Nullable List<LocalStyleHolder> localStyleHolders) { this.localStyleHolders = localStyleHolders; } @Override public void dispose() { // need only for message bus connections } } class LocalStyleHolder implements AmfOutputable { final VirtualFile file; private byte[] data; LocalStyleHolder(VirtualFile file, byte[] data) { this.file = file; this.data = data; } public byte[] getData() { return data; } public void setData(byte[] data) { this.data = data; } @Override public void writeExternal(AmfOutputStream out) { Client.writeVirtualFile(file, out); out.writeAmfByteArray(data); writeUsers(out); } protected void writeUsers(AmfOutputStream out) { out.write(0); } @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (!(obj instanceof LocalStyleHolder)) { return false; } LocalStyleHolder other = (LocalStyleHolder)obj; return file.equals(other.file) && Arrays.equals(data, other.data); } } class ExternalLocalStyleHolder extends LocalStyleHolder { final List<VirtualFile> users; ExternalLocalStyleHolder(@NotNull VirtualFile file, @NotNull byte[] data, @NotNull VirtualFile user) { super(file, data); users = new ArrayList<>(5); users.add(user); } public void addUser(VirtualFile user) { users.add(user); } @Override protected void writeUsers(AmfOutputStream out) { out.write(users.size()); for (VirtualFile user : users) { Client.writeVirtualFile(user, out); } } }