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