/* * RapidMiner * * Copyright (C) 2001-2011 by Rapid-I and the contributors * * Complete list of developers available at our web site: * * http://rapid-i.com * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see http://www.gnu.org/licenses/. */ package com.rapidminer.tools.documentation; import java.util.Collections; import java.util.LinkedList; import java.util.List; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import com.rapidminer.Process; import com.rapidminer.io.process.XMLTools; /** The operator documentation, currently consisting of a short synopsis, * a long help text plus examples. None of the getters returns null. If no long description * is given, the synopsis will be returned. * * Setting properties of instances of this class will, as a side effect, also * modify the original DOM element used to create this instance, so the DOM * is always in sync with the data. * * @author Simon Fischer * */ public class OperatorDocumentation { /** * */ private final OperatorDocBundle operatorDocBundle; //private String key; private String name; private String shortName; private String synopsis; private String documentation; private String deprecation; private final Element element; private final List<ExampleProcess> exampleProcesses = new LinkedList<ExampleProcess>(); public OperatorDocumentation(String name) { this.name = this.shortName = name; this.documentation = this.synopsis = null; this.element = null; this.operatorDocBundle = null; } OperatorDocumentation(OperatorDocBundle operatorDocBundle, Element element) { this.operatorDocBundle = operatorDocBundle; this.name = XMLTools.getTagContents(element, "name"); this.shortName = XMLTools.getTagContents(element, "shortName"); this.synopsis = XMLTools.getTagContents(element, "synopsis"); this.documentation = XMLTools.getTagContents(element, "help"); this.deprecation = XMLTools.getTagContents(element, "deprecation"); this.element = element; if (synopsis == null) { synopsis = ""; } if (documentation == null) { documentation = synopsis; } NodeList exampleNodes = element.getElementsByTagName("example"); for (int i = 0; i < exampleNodes.getLength(); i++) { exampleProcesses.add(new ExampleProcess((Element)exampleNodes.item(i))); } } // /** @deprecated Remove after operator renaming. */ // @Deprecated // public void setKey(String key) { // this.operatorDocBundle.operatorKeyDescriptionMap.remove(this.key); // this.key = key; // XMLTools.setTagContents(element, "key", key); // this.operatorDocBundle.operatorKeyDescriptionMap.put(key, this); // } public String getName() { if (name != null) { return name; } else { return ""; } } public void setName(String name) { this.name= name; if (element != null) XMLTools.setTagContents(element, "name", name); } public String getShortName() { if (shortName != null) { return shortName; } else { return name; } } public void setShortName(String shortName) { this.shortName = shortName; if (element != null) { XMLTools.setTagContents(element, "shortName", shortName); } } public String getSynopsis() { return synopsis; } public String getDocumentation() { return documentation; } public void setDocumentation(String text) { this.documentation = text; if (element != null) { XMLTools.setTagContents(element, "help", documentation); } } public void setSynopsis(String text) { this.synopsis = text; if (element != null) { XMLTools.setTagContents(element, "synopsis", text); } } public String getDeprecation() { return deprecation; } public void setDeprecation(String deprecation) { if (deprecation != null) { deprecation = deprecation.trim(); if (deprecation.isEmpty()) { deprecation = null; } } this.deprecation = deprecation; if (element != null) { XMLTools.setTagContents(element, "deprecation", deprecation); } } public void addExample(Process process, String comment) { Element exampleElement = element != null ? element.getOwnerDocument().createElement("example") : null; ExampleProcess exampleProcess = new ExampleProcess(exampleElement); exampleProcess.setProcessXML(process.getRootOperator().getXML(true)); if (comment != null) { exampleProcess.setComment(comment); } if (element != null) { element.appendChild(exampleElement); } exampleProcesses.add(exampleProcess); } public List<ExampleProcess> getExamples() { return Collections.unmodifiableList(exampleProcesses); } public void removeExample(int index) { ExampleProcess process = exampleProcesses.get(index); if (element != null) { element.removeChild(process.getElement()); } exampleProcesses.remove(index); } public OperatorDocBundle getBundle() { return this.operatorDocBundle; } }