package jetbrains.mps.workbench.dialogs.project.properties.project; /*Generated by MPS */ import java.util.List; import jetbrains.mps.project.structure.project.ModulePath; import java.util.ArrayList; import java.util.Collections; import jetbrains.mps.project.structure.project.ProjectDescriptor; import jetbrains.mps.project.StandaloneMPSProject; import java.util.Comparator; import jetbrains.mps.ide.ui.dialogs.properties.StateUtil; public final class ProjectProperties { private final List<ModulePath> myModule = new ArrayList<ModulePath>(); public ProjectProperties() { } public List<ModulePath> getModules() { return Collections.unmodifiableList(myModule); } /*package*/ int add(ModulePath p) { int ix = Collections.binarySearch(myModule, p, PATH_VALID_COMPARATOR); if (ix < 0) { ix = -ix - 1; } myModule.add(ix, p); return ix; } /*package*/ int remove(ModulePath p) { int ix = Collections.binarySearch(myModule, p, PATH_VALID_COMPARATOR); if (ix < 0) { return -1; } myModule.remove(ix); return ix; } public boolean isSame(ProjectDescriptor projectDescriptor) { List<ModulePath> paths = new ArrayList<ModulePath>(); paths.addAll(projectDescriptor.getModulePaths()); Collections.sort(paths, PATH_COMPARATOR); return paths.equals(myModule); } public void loadFrom(StandaloneMPSProject project) { ProjectDescriptor projectDescriptor = project.getProjectDescriptor(); myModule.clear(); myModule.addAll(projectDescriptor.getModulePaths()); // FIXME WHY DO WE CARE TO SORT WITH VALIDITY CHECK???? Collections.sort(myModule, PATH_VALID_COMPARATOR); } public void saveTo(StandaloneMPSProject project) { ProjectDescriptor projectDescriptor = new ProjectDescriptor(project.getName()); for (ModulePath path : myModule) { projectDescriptor.addModulePath(path); } project.setProjectDescriptor(projectDescriptor); } private final Comparator<ModulePath> PATH_COMPARATOR = new Comparator<ModulePath>() { private String getPathString(ModulePath path) { return ((path == null) ? "null" : path.getPath() + "#" + path.getVirtualFolder()); } @Override public int compare(ModulePath o1, ModulePath o2) { if (o1 == o2) { return 0; } String string1 = getPathString(o1); String string2 = getPathString(o2); return string1.compareTo(string2); } }; public final Comparator<ModulePath> PATH_VALID_COMPARATOR = new Comparator<ModulePath>() { @Override public int compare(ModulePath o1, ModulePath o2) { int result = StateUtil.compare(o1.getPath(), o2.getPath()); if (result != 0) { return result; } return PATH_COMPARATOR.compare(o1, o2); } }; }