package com.intellij.lang.javascript.flex.projectStructure.model.impl; import com.intellij.application.options.PathMacrosImpl; import com.intellij.application.options.ReplacePathToMacroMap; import com.intellij.lang.javascript.flex.projectStructure.model.*; import com.intellij.openapi.components.ExpandMacroToPathMap; import com.intellij.openapi.components.PersistentStateComponent; import com.intellij.openapi.module.Module; import com.intellij.openapi.util.SystemInfo; import com.intellij.util.ArrayUtil; import com.intellij.util.xmlb.SkipDefaultValuesSerializationFilters; import com.intellij.util.xmlb.XmlSerializer; import org.jdom.Element; import org.jetbrains.annotations.NotNull; public class ConversionHelper { private static class LightweightBuildConfigurationEntry implements BuildConfigurationEntry, ModifiableBuildConfigurationEntry, StatefulDependencyEntry { private final DependencyTypeImpl myDependencyType = new DependencyTypeImpl(); @NotNull private final String myModuleName; @NotNull private final String myBcName; private LightweightBuildConfigurationEntry(@NotNull String moduleName, @NotNull String bcName) { myModuleName = moduleName; myBcName = bcName; } @NotNull @Override public String getBcName() { return myBcName; } @NotNull @Override public String getModuleName() { return myModuleName; } @Override public Module findModule() { throw new UnsupportedOperationException(); } @Override public FlexBuildConfiguration findBuildConfiguration() { throw new UnsupportedOperationException(); } @NotNull @Override public ModifiableDependencyType getDependencyType() { return myDependencyType; } @Override public EntryState getState() { EntryState state = new EntryState(); state.MODULE_NAME = getModuleName(); state.BC_NAME = myBcName; state.DEPENDENCY_TYPE = myDependencyType.getState(); return state; } @Override public boolean isEqual(ModifiableDependencyEntry other) { if (!(other instanceof LightweightBuildConfigurationEntry)) return false; if (!myBcName.equals(((LightweightBuildConfigurationEntry)other).myBcName)) return false; if (!getModuleName().equals(((LightweightBuildConfigurationEntry)other).myModuleName)) return false; if (!myDependencyType.isEqual(((LightweightBuildConfigurationEntry)other).myDependencyType)) return false; return true; } } public static ModifiableBuildConfigurationEntry createBuildConfigurationEntry(String moduleName, String bcName) { return new LightweightBuildConfigurationEntry(moduleName, bcName); } public static FlexBuildConfigurationManagerImpl createBuildConfigurationManager() { FlexBuildConfigurationManagerImpl m = new FlexBuildConfigurationManagerImpl(null); m.setActiveBuildConfiguration(m.getBuildConfigurations()[0]); return m; } public static ModifiableFlexBuildConfiguration createBuildConfiguration(FlexBuildConfigurationManagerImpl m) { FlexBuildConfigurationImpl[] configurations = m.doGetBuildConfigurations(); FlexBuildConfigurationImpl result = new FlexBuildConfigurationImpl(); m.doSetBuildConfigurations(ArrayUtil.append(configurations, result)); return result; } public static ModifiableModuleLibraryEntry createModuleLibraryEntry(String libraryId) { return new ModuleLibraryEntryImpl(libraryId); } public static ModifiableSharedLibraryEntry createSharedLibraryEntry(final String libraryName, final String libraryLevel) { return new SharedLibraryEntryImpl(libraryName, libraryLevel); } //public static ModifiableFlexBuildConfiguration createConfigInstance(String name) { // FlexBuildConfigurationImpl c = new FlexBuildConfigurationImpl(); // c.setName(name); // return c; //} // public static Element serialize(PersistentStateComponent c) { Element element = XmlSerializer.serialize(c.getState(), new SkipDefaultValuesSerializationFilters()); collapsePaths(element); return element; } public static void collapsePaths(Element element) { ReplacePathToMacroMap map = new ReplacePathToMacroMap(); PathMacrosImpl.getInstanceEx().addMacroReplacements(map); map.substitute(element, SystemInfo.isFileSystemCaseSensitive, true); } public static void expandPaths(Element element) { ExpandMacroToPathMap map = new ExpandMacroToPathMap(); PathMacrosImpl.getInstanceEx().addMacroExpands(map); map.substitute(element, SystemInfo.isFileSystemCaseSensitive, true); } }