/* * Copyright 2003-2017 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package jetbrains.mps.ide.findusages.view.treeholder.tree.nodedatatypes; import jetbrains.mps.ide.findusages.CantLoadSomethingException; import jetbrains.mps.ide.findusages.CantSaveSomethingException; import jetbrains.mps.ide.findusages.IExternalizeable; import jetbrains.mps.ide.findusages.view.treeholder.tree.TextOptions; import jetbrains.mps.ide.findusages.view.treeholder.treeview.path.PathItemRole; import jetbrains.mps.project.Project; import org.jdom.Element; import org.jetbrains.annotations.NotNull; import javax.swing.Icon; public abstract class BaseNodeData implements IExternalizeable { private static final String EXPANDED = "expanded"; private static final String CAPTION = "caption"; private static final String INFO = "info"; private static final String EXCLUDED = "excluded"; private static final String RESULTS_SECTION = "results_section"; private static final String ISRESULT = "isresult"; private static final String ROLE = "role"; private PathItemRole myRole; private String myCaption; private String myAdditionalInfo; private boolean myResultsSection; private boolean myIsExcluded; private boolean myIsExpanded; private boolean myIsPathTail; protected BaseNodeData() { } public BaseNodeData(Element element, Project project) throws CantLoadSomethingException { read(element, project); } public BaseNodeData(PathItemRole role, @NotNull String caption, String additionalInfo, boolean isExpanded, boolean isPathTail, boolean resultsSection) { myRole = role; myCaption = caption; myAdditionalInfo = additionalInfo; myResultsSection = resultsSection; myIsExcluded = false; myIsExpanded = isExpanded; myIsPathTail = isPathTail; } //----MAIN DATA STUFF---- //must be used only via DataTree public void setExcluded(boolean isExcluded) { myIsExcluded = isExcluded; } //must be used only via DataTree public void setExpanded(boolean isExpanded) { myIsExpanded = isExpanded; } public boolean isResultsSection() { return myResultsSection; } public boolean isExcluded() { return myIsExcluded; } public boolean isExpanded() { return myIsExpanded; } public PathItemRole getRole() { return myRole; } public String getText(TextOptions options) { String add = ""; if (options.myAdditionalInfo && !myAdditionalInfo.equals("")) { add = "(" + myAdditionalInfo + ")"; } return myCaption + add; } public String getPlainText() { return myCaption.replaceAll("<[^>]*>", ""); } public boolean isInvalid() { return getIdObject() == null; } public boolean isPathTail() { return myIsPathTail; } public boolean isResultNode() { return myIsPathTail && myResultsSection; } public void setIsPathTail_internal(boolean isResult) { myIsPathTail = isResult; } //----SAVE/LOAD STUFF---- @Override public void write(Element element, Project project) throws CantSaveSomethingException { element.setAttribute(CAPTION, myCaption); element.setAttribute(INFO, myAdditionalInfo); element.setAttribute(EXCLUDED, Boolean.toString(myIsExcluded)); element.setAttribute(EXPANDED, Boolean.toString(myIsExpanded)); element.setAttribute(ISRESULT, Boolean.toString(myIsPathTail)); element.setAttribute(RESULTS_SECTION, Boolean.toString(myResultsSection)); Element roleXML = new Element(ROLE); PathItemRole.write(myRole, roleXML); element.addContent(roleXML); } @Override public void read(Element element, Project project) throws CantLoadSomethingException { myCaption = element.getAttributeValue(CAPTION); myAdditionalInfo = element.getAttributeValue(INFO); myIsExcluded = Boolean.parseBoolean(element.getAttributeValue(EXCLUDED)); myIsExpanded = Boolean.parseBoolean(element.getAttributeValue(EXPANDED)); myIsPathTail = Boolean.parseBoolean(element.getAttributeValue(ISRESULT)); myResultsSection = Boolean.parseBoolean(element.getAttributeValue(RESULTS_SECTION)); Element roleXML = element.getChild(ROLE); myRole = PathItemRole.read(roleXML); } //----CONCRETE DATA TYPE STUFF---- public abstract Icon getIcon(PresentationContext presentationContext); public abstract Object getIdObject(); }