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