package jetbrains.mps.ide.findusages.view.optionseditor;
/*Generated by MPS */
import org.apache.log4j.Logger;
import org.apache.log4j.LogManager;
import java.util.HashMap;
import jetbrains.mps.ide.findusages.view.optionseditor.options.FindersOptions;
import jetbrains.mps.ide.findusages.view.optionseditor.options.ScopeOptions;
import jetbrains.mps.InternalFlag;
import jetbrains.mps.ide.findusages.view.optionseditor.options.ViewOptions;
import org.jdom.Element;
import jetbrains.mps.project.MPSProject;
import jetbrains.mps.ide.findusages.CantSaveSomethingException;
import jetbrains.mps.ide.findusages.CantLoadSomethingException;
public class DefaultOptionsContainer {
private static final String DEFAULT_SEARCH_OPTIONS = "default_search_options";
private static final String SEARCH_OPTION = "search_options";
private static final String FINDERS_OPTION = "finders_option";
private static final String NODE_ID = "node";
private static Logger LOG = LogManager.getLogger(DefaultSearchOptionsComponent.class);
private final HashMap<String, FindersOptions> myDefaultFinders = new HashMap<String, FindersOptions>();
private FindUsagesOptions myDefaultOptions = createDefaultSearchOptions();
public DefaultOptionsContainer() {
}
public FindUsagesOptions getDefaultSearchOptions(String concept) {
FindUsagesOptions result = myDefaultOptions.clone();
FindersOptions finders = myDefaultFinders.get(concept);
result.setFindersOptions((finders != null ? finders : createDefaultFindersOption()));
return result;
}
public void setDefaultSearchOptions(String concept, FindUsagesOptions defaultSearchOptions) {
myDefaultOptions = defaultSearchOptions.clone();
myDefaultFinders.put(concept, defaultSearchOptions.getFindersOptions());
}
private FindUsagesOptions createDefaultSearchOptions() {
ScopeOptions scopeOptions = new ScopeOptions(((InternalFlag.isInternalMode() ? ScopeOptions.ScopeType.GLOBAL : ScopeOptions.ScopeType.PROJECT)), ScopeOptions.DEFAULT_VALUE, ScopeOptions.DEFAULT_VALUE);
return new FindUsagesOptions(new FindersOptions(), scopeOptions, new ViewOptions());
}
private FindersOptions createDefaultFindersOption() {
return new FindersOptions("jetbrains.mps.lang.structure.findUsages.NodeUsages_Finder");
}
public Element writeOptions(MPSProject project) {
Element defaultFindOptionsXML = new Element(DEFAULT_SEARCH_OPTIONS);
try {
Element soXML = new Element(SEARCH_OPTION);
myDefaultOptions.write(soXML, project);
defaultFindOptionsXML.addContent(soXML);
for (String np : myDefaultFinders.keySet()) {
Element optionXML = new Element(FINDERS_OPTION);
optionXML.setAttribute(NODE_ID, np);
myDefaultFinders.get(np).write(optionXML, project);
defaultFindOptionsXML.addContent(optionXML);
}
} catch (CantSaveSomethingException e) {
LOG.error("error saving options", e);
}
return defaultFindOptionsXML;
}
public void readOptions(Element state, MPSProject project) {
try {
Element soXML = state.getChild(SEARCH_OPTION);
myDefaultOptions = new FindUsagesOptions(soXML, project);
myDefaultFinders.clear();
for (Element findersXML : state.getChildren(FINDERS_OPTION)) {
String np = findersXML.getAttributeValue(NODE_ID);
FindersOptions opt = new FindersOptions();
opt.read(findersXML, project);
myDefaultFinders.put(np, opt);
}
} catch (CantLoadSomethingException e) {
myDefaultOptions = createDefaultSearchOptions();
myDefaultFinders.clear();
LOG.error("error reading options", e);
}
}
}