1
0
mirror of https://github.com/octoleo/plantuml.git synced 2024-06-02 08:30:49 +00:00
plantuml/src/net/sourceforge/plantuml/descdiagram/DescriptionDiagram.java

150 lines
5.3 KiB
Java
Raw Normal View History

2013-12-10 19:36:50 +00:00
/* ========================================================================
* PlantUML : a free UML diagram generator
* ========================================================================
*
2016-01-09 12:15:40 +00:00
* (C) Copyright 2009-2017, Arnaud Roques
2013-12-10 19:36:50 +00:00
*
2016-03-06 16:47:34 +00:00
* Project Info: http://plantuml.com
2013-12-10 19:36:50 +00:00
*
2017-03-15 19:13:31 +00:00
* If you like this project or if you find it useful, you can support us at:
*
* http://plantuml.com/patreon (only 1$ per month!)
* http://plantuml.com/paypal
*
2013-12-10 19:36:50 +00:00
* This file is part of PlantUML.
*
* PlantUML is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* PlantUML 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 General Public
* License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
* USA.
*
*
* Original Author: Arnaud Roques
*
*
*/
package net.sourceforge.plantuml.descdiagram;
2016-05-31 19:41:55 +00:00
import net.sourceforge.plantuml.StringUtils;
2013-12-10 19:36:50 +00:00
import net.sourceforge.plantuml.UmlDiagramType;
import net.sourceforge.plantuml.classdiagram.AbstractEntityDiagram;
import net.sourceforge.plantuml.cucadiagram.Code;
import net.sourceforge.plantuml.cucadiagram.ILeaf;
import net.sourceforge.plantuml.cucadiagram.LeafType;
import net.sourceforge.plantuml.graphic.USymbol;
public class DescriptionDiagram extends AbstractEntityDiagram {
2015-04-07 18:18:37 +00:00
private String namespaceSeparator = null;
2013-12-10 19:36:50 +00:00
@Override
2015-04-07 18:18:37 +00:00
public ILeaf getOrCreateLeaf(Code code, LeafType type, USymbol symbol) {
if (namespaceSeparator != null) {
code = code.withSeparator(namespaceSeparator);
}
if (namespaceSeparator != null && code.getFullName().contains(namespaceSeparator)) {
// System.err.println("code=" + code);
final Code fullyCode = code;
// final String namespace = fullyCode.getNamespace(getLeafs());
// System.err.println("namespace=" + namespace);
}
2013-12-10 19:36:50 +00:00
if (type == null) {
2015-04-07 18:18:37 +00:00
String code2 = code.getFullName();
2013-12-10 19:36:50 +00:00
if (code2.startsWith("[") && code2.endsWith("]")) {
2015-04-07 18:18:37 +00:00
final USymbol sym = getSkinParam().useUml2ForComponent() ? USymbol.COMPONENT2 : USymbol.COMPONENT1;
return getOrCreateLeafDefault(code.eventuallyRemoveStartingAndEndingDoubleQuote("\"([:"),
LeafType.DESCRIPTION, sym);
2013-12-10 19:36:50 +00:00
}
if (code2.startsWith(":") && code2.endsWith(":")) {
2015-04-07 18:18:37 +00:00
return getOrCreateLeafDefault(code.eventuallyRemoveStartingAndEndingDoubleQuote("\"([:"),
LeafType.DESCRIPTION, USymbol.ACTOR);
2013-12-10 19:36:50 +00:00
}
if (code2.startsWith("()")) {
2015-05-31 18:56:03 +00:00
code2 = StringUtils.trin(code2.substring(2));
2013-12-10 19:36:50 +00:00
code2 = StringUtils.eventuallyRemoveStartingAndEndingDoubleQuote(code2);
2015-04-07 18:18:37 +00:00
return getOrCreateLeafDefault(Code.of(code2), LeafType.DESCRIPTION, USymbol.INTERFACE);
2013-12-10 19:36:50 +00:00
}
2015-04-07 18:18:37 +00:00
code = code.eventuallyRemoveStartingAndEndingDoubleQuote("\"([:");
return getOrCreateLeafDefault(code, LeafType.STILL_UNKNOWN, symbol);
2013-12-10 19:36:50 +00:00
}
2015-04-07 18:18:37 +00:00
return getOrCreateLeafDefault(code, type, symbol);
2013-12-10 19:36:50 +00:00
}
2015-04-07 18:18:37 +00:00
// @Override
// public ILeaf createLeaf(Code code, List<? extends CharSequence> display, LeafType type) {
// if (type != LeafType.COMPONENT) {
// return super.createLeaf(code, display, type);
// }
// code = code.getFullyQualifiedCode(getCurrentGroup());
// if (super.leafExist(code)) {
// throw new IllegalArgumentException("Already known: " + code);
// }
// return createEntityWithNamespace(code, display, type);
// }
2013-12-10 19:36:50 +00:00
2015-04-07 18:18:37 +00:00
// private ILeaf createEntityWithNamespace(Code fullyCode, List<? extends CharSequence> display, LeafType type) {
// IGroup group = getCurrentGroup();
// final String namespace = fullyCode.getNamespace(getLeafs());
// if (namespace != null && (EntityUtils.groupRoot(group) || group.getCode().equals(namespace) == false)) {
// group = getOrCreateGroupInternal(Code.of(namespace), StringUtils.getWithNewlines(namespace), namespace,
// GroupType.PACKAGE, getRootGroup());
// }
// return createLeafInternal(fullyCode,
// display == null ? StringUtils.getWithNewlines(fullyCode.getShortName(getLeafs())) : display, type,
// group);
// }
2013-12-10 19:36:50 +00:00
private boolean isUsecase() {
2015-04-07 18:18:37 +00:00
for (ILeaf leaf : getLeafsvalues()) {
2017-04-05 17:37:42 +00:00
final LeafType type = leaf.getLeafType();
2013-12-10 19:36:50 +00:00
final USymbol usymbol = leaf.getUSymbol();
if (type == LeafType.USECASE || usymbol == USymbol.ACTOR) {
return true;
}
}
return false;
}
@Override
public void makeDiagramReady() {
2015-04-07 18:18:37 +00:00
super.makeDiagramReady();
final LeafType defaultType = isUsecase() ? LeafType.DESCRIPTION : LeafType.DESCRIPTION;
final USymbol defaultSymbol = isUsecase() ? USymbol.ACTOR : USymbol.INTERFACE;
for (ILeaf leaf : getLeafsvalues()) {
2017-04-05 17:37:42 +00:00
if (leaf.getLeafType() == LeafType.STILL_UNKNOWN) {
2015-04-07 18:18:37 +00:00
leaf.muteToType(defaultType, defaultSymbol);
2013-12-10 19:36:50 +00:00
}
}
}
2016-05-31 19:41:55 +00:00
@Override
public String checkFinalError() {
this.applySingleStrategy();
return super.checkFinalError();
}
2013-12-10 19:36:50 +00:00
@Override
public UmlDiagramType getUmlDiagramType() {
return UmlDiagramType.DESCRIPTION;
}
2015-04-07 18:18:37 +00:00
public void setNamespaceSeparator(String namespaceSeparator) {
this.namespaceSeparator = namespaceSeparator;
}
2016-05-31 19:41:55 +00:00
2015-04-07 18:18:37 +00:00
public String getNamespaceSeparator() {
return namespaceSeparator;
}
2013-12-10 19:36:50 +00:00
}