mirror of
https://github.com/octoleo/plantuml.git
synced 2024-11-22 04:55:10 +00:00
Version 5911
This commit is contained in:
parent
9005abef50
commit
a8bf09d279
@ -39,6 +39,7 @@ import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import net.sourceforge.plantuml.activitydiagram.ActivityDiagramFactory;
|
||||
import net.sourceforge.plantuml.activitydiagram2.ActivityDiagramFactory2;
|
||||
import net.sourceforge.plantuml.classdiagram.ClassDiagramFactory;
|
||||
import net.sourceforge.plantuml.componentdiagram.ComponentDiagramFactory;
|
||||
import net.sourceforge.plantuml.compositediagram.CompositeDiagramFactory;
|
||||
@ -63,9 +64,11 @@ public class PSystemBuilder {
|
||||
factories.add(new SequenceDiagramFactory());
|
||||
factories.add(new ClassDiagramFactory());
|
||||
factories.add(new ActivityDiagramFactory());
|
||||
factories.add(new ActivityDiagramFactory2());
|
||||
factories.add(new UsecaseDiagramFactory());
|
||||
factories.add(new ComponentDiagramFactory());
|
||||
factories.add(new StateDiagramFactory());
|
||||
factories.add(new ActivityDiagramFactory2());
|
||||
factories.add(new CompositeDiagramFactory());
|
||||
factories.add(new ObjectDiagramFactory());
|
||||
factories.add(new PrintSkinFactory());
|
||||
|
@ -28,7 +28,7 @@
|
||||
*
|
||||
* Original Author: Arnaud Roques
|
||||
*
|
||||
* Revision $Revision: 5794 $
|
||||
* Revision $Revision: 5898 $
|
||||
*/
|
||||
package net.sourceforge.plantuml;
|
||||
|
||||
@ -59,20 +59,39 @@ public class PSystemError extends AbstractPSystem {
|
||||
this.errorsUml.addAll(errorUml);
|
||||
this.setSource(source);
|
||||
|
||||
final Collection<ErrorUml> executions = getErrors(ErrorUmlType.EXECUTION_ERROR);
|
||||
if (executions.size() > 0) {
|
||||
higherErrorPosition = getHigherErrorPosition(ErrorUmlType.EXECUTION_ERROR);
|
||||
errs = getErrorsAt(higherErrorPosition, ErrorUmlType.EXECUTION_ERROR);
|
||||
appendSource(higherErrorPosition, errs);
|
||||
} else {
|
||||
higherErrorPosition = getHigherErrorPosition(ErrorUmlType.SYNTAX_ERROR);
|
||||
errs = getErrorsAt(higherErrorPosition, ErrorUmlType.SYNTAX_ERROR);
|
||||
if (errs.size() != 1) {
|
||||
throw new UnsupportedOperationException(errs.toString());
|
||||
}
|
||||
appendSource(higherErrorPosition, errs);
|
||||
final int higherErrorPositionExecution = getHigherErrorPosition(ErrorUmlType.EXECUTION_ERROR);
|
||||
final int higherErrorPositionSyntax = getHigherErrorPosition(ErrorUmlType.SYNTAX_ERROR);
|
||||
|
||||
if (higherErrorPositionExecution == Integer.MIN_VALUE && higherErrorPositionSyntax == Integer.MIN_VALUE) {
|
||||
throw new IllegalStateException();
|
||||
}
|
||||
|
||||
if (higherErrorPositionExecution >= higherErrorPositionSyntax) {
|
||||
higherErrorPosition = higherErrorPositionExecution;
|
||||
errs = getErrorsAt(higherErrorPositionExecution, ErrorUmlType.EXECUTION_ERROR);
|
||||
} else {
|
||||
assert higherErrorPositionSyntax > higherErrorPositionExecution;
|
||||
higherErrorPosition = higherErrorPositionSyntax;
|
||||
errs = getErrorsAt(higherErrorPositionSyntax, ErrorUmlType.SYNTAX_ERROR);
|
||||
}
|
||||
appendSource(higherErrorPosition, errs);
|
||||
|
||||
|
||||
|
||||
// final Collection<ErrorUml> executions = getErrors(ErrorUmlType.EXECUTION_ERROR);
|
||||
// if (executions.size() > 0) {
|
||||
// higherErrorPosition = getHigherErrorPosition(ErrorUmlType.EXECUTION_ERROR);
|
||||
// errs = getErrorsAt(higherErrorPosition, ErrorUmlType.EXECUTION_ERROR);
|
||||
// appendSource(higherErrorPosition, errs);
|
||||
// } else {
|
||||
// higherErrorPosition = getHigherErrorPosition(ErrorUmlType.SYNTAX_ERROR);
|
||||
// errs = getErrorsAt(higherErrorPosition, ErrorUmlType.SYNTAX_ERROR);
|
||||
// if (errs.size() != 1) {
|
||||
// throw new UnsupportedOperationException(errs.toString());
|
||||
// }
|
||||
// appendSource(higherErrorPosition, errs);
|
||||
// }
|
||||
|
||||
}
|
||||
|
||||
public PSystemError(UmlSource source, ErrorUml... errorUml) {
|
||||
@ -154,9 +173,9 @@ public class PSystemError extends AbstractPSystem {
|
||||
max = error.getPosition();
|
||||
}
|
||||
}
|
||||
if (max == Integer.MIN_VALUE) {
|
||||
throw new IllegalStateException();
|
||||
}
|
||||
// if (max == Integer.MIN_VALUE) {
|
||||
// throw new IllegalStateException();
|
||||
// }
|
||||
return max;
|
||||
}
|
||||
|
||||
|
@ -28,7 +28,7 @@
|
||||
*
|
||||
* Original Author: Arnaud Roques
|
||||
*
|
||||
* Revision $Revision: 5847 $
|
||||
* Revision $Revision: 5890 $
|
||||
*
|
||||
*/
|
||||
package net.sourceforge.plantuml.activitydiagram;
|
||||
@ -37,7 +37,6 @@ import net.sourceforge.plantuml.activitydiagram.command.CommandElse;
|
||||
import net.sourceforge.plantuml.activitydiagram.command.CommandEndPartition;
|
||||
import net.sourceforge.plantuml.activitydiagram.command.CommandEndif;
|
||||
import net.sourceforge.plantuml.activitydiagram.command.CommandIf;
|
||||
import net.sourceforge.plantuml.activitydiagram.command.CommandInnerConcurrent;
|
||||
import net.sourceforge.plantuml.activitydiagram.command.CommandLinkActivity;
|
||||
import net.sourceforge.plantuml.activitydiagram.command.CommandLinkLongActivity;
|
||||
import net.sourceforge.plantuml.activitydiagram.command.CommandMultilinesNoteActivity;
|
||||
|
@ -54,42 +54,32 @@ import net.sourceforge.plantuml.cucadiagram.Stereotype;
|
||||
public class CommandLinkActivity extends SingleLineCommand2<ActivityDiagram> {
|
||||
|
||||
public CommandLinkActivity(ActivityDiagram diagram) {
|
||||
super(
|
||||
diagram, getRegexConcat());
|
||||
super(diagram, getRegexConcat());
|
||||
}
|
||||
|
||||
|
||||
static RegexConcat getRegexConcat() {
|
||||
return new RegexConcat(new RegexLeaf("^"),
|
||||
new RegexOr("FIRST", true,
|
||||
new RegexLeaf("STAR", "(\\(\\*\\))"),
|
||||
new RegexLeaf("CODE", "([\\p{L}0-9_.]+)"),
|
||||
new RegexLeaf("BAR", "(?:==+)\\s*([\\p{L}0-9_.]+)\\s*(?:==+)"),
|
||||
new RegexLeaf("QUOTED", "\"([^\"]+)\"(?:\\s+as\\s+([\\p{L}0-9_.]+))?")),
|
||||
new RegexLeaf("\\s*"),
|
||||
new RegexLeaf("STEREOTYPE", "(\\<\\<.*\\>\\>)?"),
|
||||
new RegexLeaf("\\s*"),
|
||||
new RegexLeaf("BACKCOLOR", "(#\\w+)?"),
|
||||
new RegexLeaf("\\s*"),
|
||||
new RegexLeaf("ARROW", "([=-]+(?:left|right|up|down|le?|ri?|up?|do?)?[=-]*\\>)"),
|
||||
new RegexLeaf("\\s*"),
|
||||
new RegexLeaf("BRACKET", "(?:\\[([^\\]*]+[^\\]]*)\\])?"),
|
||||
new RegexLeaf("\\s*"),
|
||||
new RegexOr("FIRST2",
|
||||
new RegexLeaf("STAR2", "(\\(\\*\\))"),
|
||||
new RegexLeaf("OPENBRACKET2", "(\\{)"),
|
||||
new RegexLeaf("CODE2", "([\\p{L}0-9_.]+)"),
|
||||
new RegexLeaf("BAR2", "(?:==+)\\s*([\\p{L}0-9_.]+)\\s*(?:==+)"),
|
||||
new RegexLeaf("QUOTED2", "\"([^\"]+)\"(?:\\s+as\\s+([\\p{L}0-9_.]+))?")),
|
||||
new RegexLeaf("\\s*"),
|
||||
new RegexLeaf("STEREOTYPE2", "(\\<\\<.*\\>\\>)?"),
|
||||
new RegexLeaf("\\s*"),
|
||||
new RegexLeaf("BACKCOLOR2", "(#\\w+)?"),
|
||||
new RegexLeaf("$"));
|
||||
return new RegexConcat(new RegexLeaf("^"), new RegexOr("FIRST", true, new RegexLeaf("STAR", "(\\(\\*\\))"),
|
||||
new RegexLeaf("CODE", "([\\p{L}0-9_.]+)"), new RegexLeaf("BAR",
|
||||
"(?:==+)\\s*([\\p{L}0-9_.]+)\\s*(?:==+)"), new RegexLeaf("QUOTED",
|
||||
"\"([^\"]+)\"(?:\\s+as\\s+([\\p{L}0-9_.]+))?")), new RegexLeaf("\\s*"), new RegexLeaf(
|
||||
"STEREOTYPE", "(\\<\\<.*\\>\\>)?"), new RegexLeaf("\\s*"), new RegexLeaf("BACKCOLOR", "(#\\w+)?"),
|
||||
new RegexLeaf("\\s*"),
|
||||
new RegexLeaf("ARROW", "([=-]+(?:left|right|up|down|le?|ri?|up?|do?)?[=-]*\\>)"),
|
||||
new RegexLeaf("\\s*"), new RegexLeaf("BRACKET", "(?:\\[([^\\]*]+[^\\]]*)\\])?"), new RegexLeaf("\\s*"),
|
||||
new RegexOr("FIRST2", new RegexLeaf("STAR2", "(\\(\\*\\))"), new RegexLeaf("OPENBRACKET2", "(\\{)"),
|
||||
new RegexLeaf("CODE2", "([\\p{L}0-9_.]+)"), new RegexLeaf("BAR2",
|
||||
"(?:==+)\\s*([\\p{L}0-9_.]+)\\s*(?:==+)"), new RegexLeaf("QUOTED2",
|
||||
"\"([^\"]+)\"(?:\\s+as\\s+([\\p{L}0-9_.]+))?")), new RegexLeaf("\\s*"), new RegexLeaf(
|
||||
"STEREOTYPE2", "(\\<\\<.*\\>\\>)?"), new RegexLeaf("\\s*"), new RegexLeaf("BACKCOLOR2",
|
||||
"(#\\w+)?"), new RegexLeaf("$"));
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(Map<String, RegexPartialMatch> arg2) {
|
||||
final IEntity entity1 = getEntity(getSystem(), arg2, true);
|
||||
if (entity1 == null) {
|
||||
return CommandExecutionResult.error("No such activity");
|
||||
}
|
||||
if (arg2.get("STEREOTYPE").get(0) != null) {
|
||||
entity1.setStereotype(new Stereotype(arg2.get("STEREOTYPE").get(0)));
|
||||
}
|
||||
@ -98,6 +88,9 @@ public class CommandLinkActivity extends SingleLineCommand2<ActivityDiagram> {
|
||||
}
|
||||
|
||||
final IEntity entity2 = getEntity(getSystem(), arg2, false);
|
||||
if (entity2 == null) {
|
||||
return CommandExecutionResult.error("No such activity");
|
||||
}
|
||||
if (arg2.get("BACKCOLOR2").get(0) != null) {
|
||||
entity2.setSpecificBackcolor(arg2.get("BACKCOLOR2").get(0));
|
||||
}
|
||||
@ -122,14 +115,11 @@ public class CommandLinkActivity extends SingleLineCommand2<ActivityDiagram> {
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
static IEntity getEntity(ActivityDiagram system, Map<String, RegexPartialMatch> arg, final boolean start) {
|
||||
final String suf = start ? "" : "2";
|
||||
|
||||
final RegexPartialMatch openBracket = arg.get("OPENBRACKET" + suf);
|
||||
if (openBracket!=null && openBracket.get(0) != null) {
|
||||
if (openBracket != null && openBracket.get(0) != null) {
|
||||
return system.createInnerActivity();
|
||||
}
|
||||
if (arg.get("STAR" + suf).get(0) != null) {
|
||||
@ -149,8 +139,7 @@ public class CommandLinkActivity extends SingleLineCommand2<ActivityDiagram> {
|
||||
final RegexPartialMatch quoted = arg.get("QUOTED" + suf);
|
||||
if (quoted.get(0) != null) {
|
||||
final String quotedCode = quoted.get(1) == null ? quoted.get(0) : quoted.get(1);
|
||||
return system.getOrCreate(quotedCode, quoted.get(0), getTypeIfExisting(system,
|
||||
quotedCode));
|
||||
return system.getOrCreate(quotedCode, quoted.get(0), getTypeIfExisting(system, quotedCode));
|
||||
}
|
||||
final String first = arg.get("FIRST" + suf).get(0);
|
||||
if (first == null) {
|
||||
@ -158,7 +147,6 @@ public class CommandLinkActivity extends SingleLineCommand2<ActivityDiagram> {
|
||||
}
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
|
||||
static EntityType getTypeIfExisting(ActivityDiagram system, String code) {
|
||||
if (system.entityExist(code)) {
|
||||
@ -169,7 +157,7 @@ public class CommandLinkActivity extends SingleLineCommand2<ActivityDiagram> {
|
||||
}
|
||||
return EntityType.ACTIVITY;
|
||||
}
|
||||
|
||||
|
||||
static EntityType getTypeFromString(String type, final EntityType circle) {
|
||||
if (type == null) {
|
||||
return EntityType.ACTIVITY;
|
||||
@ -183,5 +171,4 @@ public class CommandLinkActivity extends SingleLineCommand2<ActivityDiagram> {
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,106 @@
|
||||
/* ========================================================================
|
||||
* PlantUML : a free UML diagram generator
|
||||
* ========================================================================
|
||||
*
|
||||
* (C) Copyright 2009, Arnaud Roques
|
||||
*
|
||||
* Project Info: http://plantuml.sourceforge.net
|
||||
*
|
||||
* 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 Lesser 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.
|
||||
*
|
||||
* [Java is a trademark or registered trademark of Sun Microsystems, Inc.
|
||||
* in the United States and other countries.]
|
||||
*
|
||||
* Original Author: Arnaud Roques
|
||||
*
|
||||
* Revision $Revision: 5721 $
|
||||
*
|
||||
*/
|
||||
package net.sourceforge.plantuml.activitydiagram2;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import net.sourceforge.plantuml.Direction;
|
||||
import net.sourceforge.plantuml.UmlDiagramType;
|
||||
import net.sourceforge.plantuml.UniqueSequence;
|
||||
import net.sourceforge.plantuml.activitydiagram.ConditionalContext;
|
||||
import net.sourceforge.plantuml.cucadiagram.CucaDiagram;
|
||||
import net.sourceforge.plantuml.cucadiagram.Entity;
|
||||
import net.sourceforge.plantuml.cucadiagram.EntityType;
|
||||
import net.sourceforge.plantuml.cucadiagram.IEntity;
|
||||
import net.sourceforge.plantuml.cucadiagram.Link;
|
||||
import net.sourceforge.plantuml.cucadiagram.LinkDecor;
|
||||
import net.sourceforge.plantuml.cucadiagram.LinkType;
|
||||
|
||||
public class ActivityDiagram2 extends CucaDiagram {
|
||||
|
||||
private IEntity last;
|
||||
private ConditionalContext currentContext;
|
||||
|
||||
final protected List<String> getDotStrings() {
|
||||
return Arrays.asList("nodesep=.20;", "ranksep=0.4;", "edge [fontsize=11,labelfontsize=11];",
|
||||
"node [fontsize=11];");
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return "(" + entities().size() + " activities)";
|
||||
}
|
||||
|
||||
@Override
|
||||
public UmlDiagramType getUmlDiagramType() {
|
||||
return UmlDiagramType.ACTIVITY;
|
||||
}
|
||||
|
||||
public void newActivity(String display) {
|
||||
if (last == null) {
|
||||
throw new IllegalStateException();
|
||||
}
|
||||
final Entity act = createEntity(getAutoCode(), display, EntityType.ACTIVITY);
|
||||
this.addLink(new Link(last, act, new LinkType(LinkDecor.ARROW, LinkDecor.NONE), null, 2));
|
||||
last = act;
|
||||
|
||||
}
|
||||
|
||||
private String getAutoCode() {
|
||||
return "ac" + UniqueSequence.getValue();
|
||||
}
|
||||
|
||||
public void start() {
|
||||
if (last != null) {
|
||||
throw new IllegalStateException();
|
||||
}
|
||||
last = createEntity("start", "start", EntityType.CIRCLE_START);
|
||||
}
|
||||
|
||||
public void startIf(String test) {
|
||||
final IEntity br = createEntity(getAutoCode(), "", EntityType.BRANCH);
|
||||
currentContext = new ConditionalContext(currentContext, br, Direction.DOWN);
|
||||
this.addLink(new Link(last, br, new LinkType(LinkDecor.ARROW, LinkDecor.NONE), null, 2));
|
||||
last = br;
|
||||
}
|
||||
|
||||
public IEntity getLastEntityConsulted() {
|
||||
return last;
|
||||
}
|
||||
|
||||
public void endif() {
|
||||
currentContext = currentContext.getParent();
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,75 @@
|
||||
/* ========================================================================
|
||||
* PlantUML : a free UML diagram generator
|
||||
* ========================================================================
|
||||
*
|
||||
* (C) Copyright 2009, Arnaud Roques
|
||||
*
|
||||
* Project Info: http://plantuml.sourceforge.net
|
||||
*
|
||||
* 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 Lesser 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.
|
||||
*
|
||||
* [Java is a trademark or registered trademark of Sun Microsystems, Inc.
|
||||
* in the United States and other countries.]
|
||||
*
|
||||
* Original Author: Arnaud Roques
|
||||
*
|
||||
* Revision $Revision: 5847 $
|
||||
*
|
||||
*/
|
||||
package net.sourceforge.plantuml.activitydiagram2;
|
||||
|
||||
import net.sourceforge.plantuml.activitydiagram2.command.CommandIf2;
|
||||
import net.sourceforge.plantuml.activitydiagram2.command.CommandNewActivity;
|
||||
import net.sourceforge.plantuml.activitydiagram2.command.CommandStart;
|
||||
import net.sourceforge.plantuml.command.AbstractUmlSystemCommandFactory;
|
||||
|
||||
public class ActivityDiagramFactory2 extends AbstractUmlSystemCommandFactory {
|
||||
|
||||
private ActivityDiagram2 system;
|
||||
|
||||
public ActivityDiagram2 getSystem() {
|
||||
return system;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initCommands() {
|
||||
system = new ActivityDiagram2();
|
||||
|
||||
addCommonCommands(system);
|
||||
addCommand(new CommandStart(system));
|
||||
addCommand(new CommandNewActivity(system));
|
||||
addCommand(new CommandIf2(system));
|
||||
|
||||
// addCommand(new CommandLinkActivity(system));
|
||||
// addCommand(new CommandPartition(system));
|
||||
// addCommand(new CommandEndPartition(system));
|
||||
// addCommand(new CommandLinkLongActivity(system));
|
||||
//
|
||||
// addCommand(new CommandNoteActivity(system));
|
||||
// addCommand(new CommandMultilinesNoteActivity(system));
|
||||
//
|
||||
// addCommand(new CommandNoteOnActivityLink(system));
|
||||
// addCommand(new CommandMultilinesNoteActivityLink(system));
|
||||
//
|
||||
// addCommand(new CommandIf(system));
|
||||
// addCommand(new CommandElse(system));
|
||||
// addCommand(new CommandEndif(system));
|
||||
// addCommand(new CommandInnerConcurrent(system));
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,68 @@
|
||||
/* ========================================================================
|
||||
* PlantUML : a free UML diagram generator
|
||||
* ========================================================================
|
||||
*
|
||||
* (C) Copyright 2009, Arnaud Roques
|
||||
*
|
||||
* Project Info: http://plantuml.sourceforge.net
|
||||
*
|
||||
* 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 Lesser 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.
|
||||
*
|
||||
* [Java is a trademark or registered trademark of Sun Microsystems, Inc.
|
||||
* in the United States and other countries.]
|
||||
*
|
||||
* Original Author: Arnaud Roques
|
||||
*
|
||||
* Revision $Revision: 4762 $
|
||||
*
|
||||
*/
|
||||
package net.sourceforge.plantuml.activitydiagram2.command;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import net.sourceforge.plantuml.activitydiagram2.ActivityDiagram2;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
import net.sourceforge.plantuml.command.SingleLineCommand2;
|
||||
import net.sourceforge.plantuml.command.regex.RegexConcat;
|
||||
import net.sourceforge.plantuml.command.regex.RegexLeaf;
|
||||
import net.sourceforge.plantuml.command.regex.RegexPartialMatch;
|
||||
|
||||
public class CommandEndif2 extends SingleLineCommand2<ActivityDiagram2> {
|
||||
|
||||
public CommandEndif2(ActivityDiagram2 diagram) {
|
||||
super(diagram, getRegexConcat());
|
||||
}
|
||||
|
||||
static RegexConcat getRegexConcat() {
|
||||
return new RegexConcat(new RegexLeaf("^"),
|
||||
new RegexLeaf("endif"),
|
||||
new RegexLeaf("$"));
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(Map<String, RegexPartialMatch> arg) {
|
||||
if (getSystem().getLastEntityConsulted() == null) {
|
||||
return CommandExecutionResult.error("No if for this endif");
|
||||
}
|
||||
getSystem().endif();
|
||||
|
||||
return CommandExecutionResult.ok();
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,90 @@
|
||||
/* ========================================================================
|
||||
* PlantUML : a free UML diagram generator
|
||||
* ========================================================================
|
||||
*
|
||||
* (C) Copyright 2009, Arnaud Roques
|
||||
*
|
||||
* Project Info: http://plantuml.sourceforge.net
|
||||
*
|
||||
* 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 Lesser 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.
|
||||
*
|
||||
* [Java is a trademark or registered trademark of Sun Microsystems, Inc.
|
||||
* in the United States and other countries.]
|
||||
*
|
||||
* Original Author: Arnaud Roques
|
||||
*
|
||||
* Revision $Revision: 4762 $
|
||||
*
|
||||
*/
|
||||
package net.sourceforge.plantuml.activitydiagram2.command;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import net.sourceforge.plantuml.activitydiagram2.ActivityDiagram2;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
import net.sourceforge.plantuml.command.SingleLineCommand2;
|
||||
import net.sourceforge.plantuml.command.regex.RegexConcat;
|
||||
import net.sourceforge.plantuml.command.regex.RegexLeaf;
|
||||
import net.sourceforge.plantuml.command.regex.RegexPartialMatch;
|
||||
|
||||
public class CommandIf2 extends SingleLineCommand2<ActivityDiagram2> {
|
||||
|
||||
public CommandIf2(ActivityDiagram2 diagram) {
|
||||
super(diagram, getRegexConcat());
|
||||
}
|
||||
|
||||
static RegexConcat getRegexConcat() {
|
||||
return new RegexConcat(new RegexLeaf("^"),
|
||||
new RegexLeaf("if"),
|
||||
new RegexLeaf("\\s*"),
|
||||
new RegexLeaf("TEST", "\"([^\"]+)\""),
|
||||
new RegexLeaf("\\s*"),
|
||||
new RegexLeaf("then"),
|
||||
new RegexLeaf("$"));
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(Map<String, RegexPartialMatch> arg) {
|
||||
//
|
||||
getSystem().startIf(arg.get("TEST").get(0));
|
||||
//
|
||||
// int lenght = 2;
|
||||
//
|
||||
// if (arg.get("ARROW").get(0) != null) {
|
||||
// final String arrow = StringUtils.manageArrowForCuca(arg.get("ARROW").get(0));
|
||||
// lenght = arrow.length() - 1;
|
||||
// }
|
||||
//
|
||||
// final IEntity branch = getSystem().getCurrentContext().getBranch();
|
||||
//
|
||||
// Link link = new Link(entity1, branch, new LinkType(LinkDecor.ARROW, LinkDecor.NONE), arg.get("BRACKET").get(0),
|
||||
// lenght, null, arg.get("IF").get(0), getSystem().getLabeldistance(), getSystem().getLabelangle());
|
||||
// if (arg.get("ARROW").get(0) != null) {
|
||||
// final Direction direction = StringUtils.getArrowDirection(arg.get("ARROW").get(0));
|
||||
// if (direction == Direction.LEFT || direction == Direction.UP) {
|
||||
// link = link.getInv();
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// getSystem().addLink(link);
|
||||
|
||||
return CommandExecutionResult.ok();
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
/* ========================================================================
|
||||
* PlantUML : a free UML diagram generator
|
||||
* ========================================================================
|
||||
*
|
||||
* (C) Copyright 2009, Arnaud Roques
|
||||
*
|
||||
* Project Info: http://plantuml.sourceforge.net
|
||||
*
|
||||
* 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 Lesser 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.
|
||||
*
|
||||
* [Java is a trademark or registered trademark of Sun Microsystems, Inc.
|
||||
* in the United States and other countries.]
|
||||
*
|
||||
* Original Author: Arnaud Roques
|
||||
*
|
||||
* Revision $Revision: 4762 $
|
||||
*
|
||||
*/
|
||||
package net.sourceforge.plantuml.activitydiagram2.command;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import net.sourceforge.plantuml.activitydiagram2.ActivityDiagram2;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
import net.sourceforge.plantuml.command.SingleLineCommand;
|
||||
|
||||
public class CommandNewActivity extends SingleLineCommand<ActivityDiagram2> {
|
||||
|
||||
public CommandNewActivity(ActivityDiagram2 diagram) {
|
||||
super(diagram, "(?i)^\"([^\"]+)\"$");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(List<String> arg) {
|
||||
if (getSystem().entities().size() == 0) {
|
||||
return CommandExecutionResult.error("Missing start keyword");
|
||||
}
|
||||
getSystem().newActivity(arg.get(0));
|
||||
return CommandExecutionResult.ok();
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
/* ========================================================================
|
||||
* PlantUML : a free UML diagram generator
|
||||
* ========================================================================
|
||||
*
|
||||
* (C) Copyright 2009, Arnaud Roques
|
||||
*
|
||||
* Project Info: http://plantuml.sourceforge.net
|
||||
*
|
||||
* 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 Lesser 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.
|
||||
*
|
||||
* [Java is a trademark or registered trademark of Sun Microsystems, Inc.
|
||||
* in the United States and other countries.]
|
||||
*
|
||||
* Original Author: Arnaud Roques
|
||||
*
|
||||
* Revision $Revision: 4762 $
|
||||
*
|
||||
*/
|
||||
package net.sourceforge.plantuml.activitydiagram2.command;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import net.sourceforge.plantuml.activitydiagram2.ActivityDiagram2;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
import net.sourceforge.plantuml.command.SingleLineCommand;
|
||||
|
||||
public class CommandStart extends SingleLineCommand<ActivityDiagram2> {
|
||||
|
||||
public CommandStart(ActivityDiagram2 diagram) {
|
||||
super(diagram, "(?i)^start$");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(List<String> arg) {
|
||||
if (getSystem().entities().size() > 0) {
|
||||
return CommandExecutionResult.error("Cannot start this here");
|
||||
}
|
||||
getSystem().start();
|
||||
return CommandExecutionResult.ok();
|
||||
}
|
||||
|
||||
}
|
@ -28,7 +28,7 @@
|
||||
*
|
||||
* Original Author: Arnaud Roques
|
||||
*
|
||||
* Revision $Revision: 5616 $
|
||||
* Revision $Revision: 5895 $
|
||||
*
|
||||
*/
|
||||
package net.sourceforge.plantuml.classdiagram;
|
||||
@ -48,7 +48,7 @@ public class ClassDiagram extends AbstractClassOrObjectDiagram {
|
||||
public IEntity getOrCreateEntity(String code, EntityType defaultType) {
|
||||
assert defaultType == EntityType.ABSTRACT_CLASS || defaultType == EntityType.CLASS
|
||||
|| defaultType == EntityType.INTERFACE || defaultType == EntityType.ENUM
|
||||
|| defaultType == EntityType.LOLLIPOP;
|
||||
|| defaultType == EntityType.LOLLIPOP || defaultType == EntityType.POINT_FOR_ASSOCIATION;
|
||||
code = getFullyQualifiedCode(code);
|
||||
if (super.entityExist(code)) {
|
||||
return super.getOrCreateEntity(code, defaultType);
|
||||
|
@ -1,418 +0,0 @@
|
||||
/* ========================================================================
|
||||
* PlantUML : a free UML diagram generator
|
||||
* ========================================================================
|
||||
*
|
||||
* (C) Copyright 2009, Arnaud Roques
|
||||
*
|
||||
* Project Info: http://plantuml.sourceforge.net
|
||||
*
|
||||
* 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 Lesser 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.
|
||||
*
|
||||
* [Java is a trademark or registered trademark of Sun Microsystems, Inc.
|
||||
* in the United States and other countries.]
|
||||
*
|
||||
* Original Author: Arnaud Roques
|
||||
*
|
||||
* Revision $Revision: 5848 $
|
||||
*
|
||||
*/
|
||||
package net.sourceforge.plantuml.classdiagram.command;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import net.sourceforge.plantuml.Direction;
|
||||
import net.sourceforge.plantuml.StringUtils;
|
||||
import net.sourceforge.plantuml.UmlDiagramType;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
import net.sourceforge.plantuml.command.SingleLineCommand;
|
||||
import net.sourceforge.plantuml.cucadiagram.Entity;
|
||||
import net.sourceforge.plantuml.cucadiagram.EntityType;
|
||||
import net.sourceforge.plantuml.cucadiagram.Group;
|
||||
import net.sourceforge.plantuml.cucadiagram.IEntity;
|
||||
import net.sourceforge.plantuml.cucadiagram.Link;
|
||||
import net.sourceforge.plantuml.cucadiagram.LinkDecor;
|
||||
import net.sourceforge.plantuml.cucadiagram.LinkType;
|
||||
import net.sourceforge.plantuml.objectdiagram.AbstractClassOrObjectDiagram;
|
||||
|
||||
final public class CommandLinkClass extends SingleLineCommand<AbstractClassOrObjectDiagram> {
|
||||
|
||||
private static final int OFFSET = 1;
|
||||
|
||||
private static final int FIRST_TYPE_AND_CLASS = 0 + OFFSET;
|
||||
private static final int FIRST_TYPE = 1 + OFFSET;
|
||||
private static final int FIRST_CLASS = 2 + OFFSET;
|
||||
private static final int FIRST_LABEL = 3 + OFFSET;
|
||||
private static final int LEFT_TO_RIGHT = 4 + OFFSET;
|
||||
private static final int LEFT_TO_RIGHT_QUEUE = 5 + OFFSET;
|
||||
private static final int LEFT_TO_RIGHT_HEAD = 6 + OFFSET;
|
||||
private static final int RIGHT_TO_LEFT = 7 + OFFSET;
|
||||
private static final int RIGHT_TO_LEFT_HEAD = 8 + OFFSET;
|
||||
private static final int RIGHT_TO_LEFT_QUEUE = 9 + OFFSET;
|
||||
private static final int NAV_AGREG_OR_COMPO_INV = 10 + OFFSET;
|
||||
private static final int NAV_AGREG_OR_COMPO_INV_QUEUE = 11 + OFFSET;
|
||||
private static final int NAV_AGREG_OR_COMPO_INV_HEAD = 12 + OFFSET;
|
||||
private static final int NAV_AGREG_OR_COMPO = 13 + OFFSET;
|
||||
private static final int NAV_AGREG_OR_COMPO_HEAD = 14 + OFFSET;
|
||||
private static final int NAV_AGREG_OR_COMPO_QUEUE = 15 + OFFSET;
|
||||
private static final int SECOND_LABEL = 16 + OFFSET;
|
||||
private static final int SECOND_TYPE_AND_CLASS = 17 + OFFSET;
|
||||
private static final int SECOND_TYPE = 18 + OFFSET;
|
||||
private static final int SECOND_CLASS = 19 + OFFSET;
|
||||
private static final int LINK_LABEL = 20 + OFFSET;
|
||||
|
||||
private final Pattern patternAssociationPoint = Pattern
|
||||
.compile("\\(\\s*(\\.?[\\p{L}0-9_]+(?:\\.[\\p{L}0-9_]+)*)\\s*,\\s*(\\.?[\\p{L}0-9_]+(?:\\.[\\p{L}0-9_]+)*)\\s*\\)");
|
||||
|
||||
// [\\p{L}0-9_.]+
|
||||
// \\.?[\\p{L}0-9_]+(?:\\.[\\p{L}0-9_]+)*
|
||||
|
||||
public CommandLinkClass(AbstractClassOrObjectDiagram diagram) {
|
||||
super(
|
||||
diagram,
|
||||
"(?i)^(?:@([\\d.]+)\\s+)?((?:"
|
||||
+ optionalKeywords(diagram.getUmlDiagramType())
|
||||
+ "\\s+)?"
|
||||
+ "(\\.?[\\p{L}0-9_]+(?:\\.[\\p{L}0-9_]+)*)|\\(\\s*\\.?[\\p{L}0-9_]+(?:\\.[\\p{L}0-9_]+)*\\s*,\\s*\\.?[\\p{L}0-9_]+(?:\\.[\\p{L}0-9_]+)*\\s*\\)"
|
||||
+ ")\\s*(?:\"([^\"]+)\")?\\s*"
|
||||
// split here
|
||||
+ "(?:"
|
||||
+ "(([-=.]+(?:left|right|up|down|le?|ri?|up?|do?)?[-=.]*)(o +|[\\]>*+]|\\|[>\\]])?)"
|
||||
+ "|"
|
||||
+ "(( +o|[\\[<*+]|[<\\[]\\|)?([-=.]*(?:left|right|up|down|le?|ri?|up?|do?)?[-=.]+))"
|
||||
+ "|"
|
||||
+ "(\\<([-=.]*(?:left|right|up|down|le?|ri?|up?|do?[-=.]+)?[-=.]+)(o +|\\*))"
|
||||
+ "|"
|
||||
+ "(( +o|\\*)([-=.]+(?:left|right|up|down|le?|ri?|up?|do?)?[-=.]*)\\>)"
|
||||
+ ")"
|
||||
// split here
|
||||
+ "\\s*(?:\"([^\"]+)\")?\\s*((?:"
|
||||
+ optionalKeywords(diagram.getUmlDiagramType())
|
||||
+ "\\s+)?"
|
||||
+ "(\\.?[\\p{L}0-9_]+(?:\\.[\\p{L}0-9_]+)*)|\\(\\s*\\.?[\\p{L}0-9_]+(?:\\.[\\p{L}0-9_]+)*\\s*,\\s*\\.?[\\p{L}0-9_]+(?:\\.[\\p{L}0-9_]+)*\\s*\\)"
|
||||
+ ")\\s*(?::\\s*([^\"]+))?$");
|
||||
// "(?i)^(?:@(\\d+)\\s+)?((?:(interface|enum|abstract\\s+class|abstract|class)\\s+)?(\\.?[\\p{L}0-9_]+(?:\\.[\\p{L}0-9_]+)*)|\\(\\s*\\.?[\\p{L}0-9_]+(?:\\.[\\p{L}0-9_]+)*\\s*,\\s*\\.?[\\p{L}0-9_]+(?:\\.[\\p{L}0-9_]+)*\\s*\\))\\s*(?:\"([^\"]+)\")?\\s*"
|
||||
// +
|
||||
// "(?:(([-=.]+)([\\]>o*+]|\\|[>\\]])?)|(([\\[<o*+]|[<\\[]\\|)?([-=.]+))|(\\<([-=.]+)([o*]))|(([o*])([-=.]+)\\>))"
|
||||
// +
|
||||
// "\\s*(?:\"([^\"]+)\")?\\s*((?:(interface|enum|abstract\\s+class|abstract|class)\\s+)?(\\.?[\\p{L}0-9_]+(?:\\.[\\p{L}0-9_]+)*)|\\(\\s*\\.?[\\p{L}0-9_]+(?:\\.[\\p{L}0-9_]+)*\\s*,\\s*\\.?[\\p{L}0-9_]+(?:\\.[\\p{L}0-9_]+)*\\s*\\))\\s*(?::\\s*([^\"]+))?$");
|
||||
}
|
||||
|
||||
private static String optionalKeywords(UmlDiagramType type) {
|
||||
if (type == UmlDiagramType.CLASS) {
|
||||
return "(interface|enum|abstract\\s+class|abstract|class)";
|
||||
}
|
||||
if (type == UmlDiagramType.OBJECT) {
|
||||
return "(object)";
|
||||
}
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CommandExecutionResult executeArg(List<String> arg) {
|
||||
if (arg.get(FIRST_TYPE_AND_CLASS).startsWith("(")) {
|
||||
return executeArgSpecial1(arg);
|
||||
}
|
||||
if (arg.get(SECOND_TYPE_AND_CLASS).startsWith("(")) {
|
||||
return executeArgSpecial2(arg);
|
||||
}
|
||||
if (getSystem().isGroup(arg.get(FIRST_CLASS)) && getSystem().isGroup(arg.get(SECOND_CLASS))) {
|
||||
return executePackageLink(arg);
|
||||
}
|
||||
if (getSystem().isGroup(arg.get(FIRST_CLASS)) || getSystem().isGroup(arg.get(SECOND_CLASS))) {
|
||||
return CommandExecutionResult.error("Package can be only linked to other package");
|
||||
}
|
||||
|
||||
final Entity cl1 = (Entity) getSystem().getOrCreateClass(arg.get(FIRST_CLASS));
|
||||
final Entity cl2 = (Entity) getSystem().getOrCreateClass(arg.get(SECOND_CLASS));
|
||||
|
||||
if (arg.get(FIRST_TYPE) != null) {
|
||||
final EntityType type = EntityType.getEntityType(arg.get(FIRST_TYPE));
|
||||
if (type != EntityType.OBJECT) {
|
||||
cl1.muteToType(type);
|
||||
}
|
||||
}
|
||||
if (arg.get(SECOND_TYPE) != null) {
|
||||
final EntityType type = EntityType.getEntityType(arg.get(SECOND_TYPE));
|
||||
if (type != EntityType.OBJECT) {
|
||||
cl2.muteToType(type);
|
||||
}
|
||||
}
|
||||
|
||||
final LinkType linkType = getLinkType(arg);
|
||||
final String queueRaw = getQueue(arg);
|
||||
final String queue = StringUtils.manageQueueForCuca(queueRaw);
|
||||
|
||||
Link link = new Link(cl1, cl2, linkType, arg.get(LINK_LABEL), queue.length(), arg.get(FIRST_LABEL), arg
|
||||
.get(SECOND_LABEL), getSystem().getLabeldistance(), getSystem().getLabelangle());
|
||||
|
||||
if (queueRaw.matches(".*\\w.*")) {
|
||||
if (arg.get(LEFT_TO_RIGHT) != null) {
|
||||
Direction direction = StringUtils.getQueueDirection(arg.get(LEFT_TO_RIGHT_QUEUE));
|
||||
if (linkType.isExtendsOrAgregationOrCompositionOrPlus()) {
|
||||
direction = direction.getInv();
|
||||
}
|
||||
if (direction == Direction.LEFT || direction == Direction.UP) {
|
||||
link = link.getInv();
|
||||
}
|
||||
}
|
||||
if (arg.get(RIGHT_TO_LEFT) != null) {
|
||||
Direction direction = StringUtils.getQueueDirection(arg.get(RIGHT_TO_LEFT_QUEUE));
|
||||
if (linkType.isExtendsOrAgregationOrCompositionOrPlus()) {
|
||||
direction = direction.getInv();
|
||||
}
|
||||
if (direction == Direction.RIGHT || direction == Direction.DOWN) {
|
||||
link = link.getInv();
|
||||
}
|
||||
}
|
||||
if (arg.get(NAV_AGREG_OR_COMPO) != null) {
|
||||
Direction direction = StringUtils.getQueueDirection(arg.get(NAV_AGREG_OR_COMPO_QUEUE));
|
||||
if (linkType.isExtendsOrAgregationOrCompositionOrPlus()) {
|
||||
direction = direction.getInv();
|
||||
}
|
||||
if (direction == Direction.RIGHT || direction == Direction.DOWN) {
|
||||
link = link.getInv();
|
||||
}
|
||||
}
|
||||
if (arg.get(NAV_AGREG_OR_COMPO_INV) != null) {
|
||||
Direction direction = StringUtils.getQueueDirection(arg.get(NAV_AGREG_OR_COMPO_INV_QUEUE));
|
||||
if (linkType.isExtendsOrAgregationOrCompositionOrPlus()) {
|
||||
direction = direction.getInv();
|
||||
}
|
||||
if (direction == Direction.LEFT || direction == Direction.UP) {
|
||||
link = link.getInv();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
getSystem().resetPragmaLabel();
|
||||
addLink(link, arg.get(0));
|
||||
|
||||
return CommandExecutionResult.ok();
|
||||
}
|
||||
|
||||
private void addLink(Link link, String arg0) {
|
||||
getSystem().addLink(link);
|
||||
if (arg0 == null) {
|
||||
final LinkType type = link.getType();
|
||||
// --|> highest
|
||||
// --*, -->, --o normal
|
||||
// ..*, ..>, ..o lowest
|
||||
// if (type.isDashed() == false) {
|
||||
// if (type.contains(LinkDecor.EXTENDS)) {
|
||||
// link.setWeight(3);
|
||||
// }
|
||||
// if (type.contains(LinkDecor.ARROW) ||
|
||||
// type.contains(LinkDecor.COMPOSITION)
|
||||
// || type.contains(LinkDecor.AGREGATION)) {
|
||||
// link.setWeight(2);
|
||||
// }
|
||||
// }
|
||||
} else {
|
||||
link.setWeight(Double.parseDouble(arg0));
|
||||
}
|
||||
}
|
||||
|
||||
private CommandExecutionResult executePackageLink(List<String> arg) {
|
||||
final Group cl1 = getSystem().getGroup(arg.get(FIRST_CLASS));
|
||||
final Group cl2 = getSystem().getGroup(arg.get(SECOND_CLASS));
|
||||
|
||||
final LinkType linkType = getLinkType(arg);
|
||||
final String queue = getQueue(arg);
|
||||
|
||||
final Link link = new Link(cl1.getEntityCluster(), cl2.getEntityCluster(), linkType, arg.get(LINK_LABEL), queue
|
||||
.length(), arg.get(FIRST_LABEL), arg.get(SECOND_LABEL), getSystem().getLabeldistance(), getSystem()
|
||||
.getLabelangle());
|
||||
getSystem().resetPragmaLabel();
|
||||
addLink(link, arg.get(0));
|
||||
return CommandExecutionResult.ok();
|
||||
}
|
||||
|
||||
private CommandExecutionResult executeArgSpecial1(List<String> arg) {
|
||||
final Matcher m = patternAssociationPoint.matcher(arg.get(FIRST_TYPE_AND_CLASS));
|
||||
if (m.matches() == false) {
|
||||
throw new IllegalStateException();
|
||||
}
|
||||
final String clName1 = m.group(1);
|
||||
final String clName2 = m.group(2);
|
||||
if (getSystem().entityExist(clName1) == false) {
|
||||
return CommandExecutionResult.error("No class " + clName1);
|
||||
}
|
||||
if (getSystem().entityExist(clName2) == false) {
|
||||
return CommandExecutionResult.error("No class " + clName2);
|
||||
}
|
||||
final IEntity entity1 = getSystem().getOrCreateClass(clName1);
|
||||
final IEntity entity2 = getSystem().getOrCreateClass(clName2);
|
||||
|
||||
final Entity node = getSystem().createEntity(arg.get(FIRST_TYPE_AND_CLASS), "node",
|
||||
EntityType.POINT_FOR_ASSOCIATION);
|
||||
|
||||
getSystem().insertBetween(entity1, entity2, node);
|
||||
final IEntity cl2 = getSystem().getOrCreateClass(arg.get(SECOND_CLASS));
|
||||
|
||||
final LinkType linkType = getLinkType(arg);
|
||||
final String queue = getQueue(arg);
|
||||
|
||||
final Link link = new Link(node, cl2, linkType, arg.get(LINK_LABEL), queue.length());
|
||||
addLink(link, arg.get(0));
|
||||
|
||||
return CommandExecutionResult.ok();
|
||||
}
|
||||
|
||||
private CommandExecutionResult executeArgSpecial2(List<String> arg) {
|
||||
final Matcher m = patternAssociationPoint.matcher(arg.get(SECOND_TYPE_AND_CLASS));
|
||||
if (m.matches() == false) {
|
||||
throw new IllegalStateException();
|
||||
}
|
||||
final String clName1 = m.group(1);
|
||||
final String clName2 = m.group(2);
|
||||
if (getSystem().entityExist(clName1) == false) {
|
||||
return CommandExecutionResult.error("No class " + clName1);
|
||||
}
|
||||
if (getSystem().entityExist(clName2) == false) {
|
||||
return CommandExecutionResult.error("No class " + clName2);
|
||||
}
|
||||
final IEntity entity1 = getSystem().getOrCreateClass(clName1);
|
||||
final IEntity entity2 = getSystem().getOrCreateClass(clName2);
|
||||
|
||||
final IEntity node = getSystem().createEntity(arg.get(SECOND_TYPE_AND_CLASS), "node",
|
||||
EntityType.POINT_FOR_ASSOCIATION);
|
||||
|
||||
getSystem().insertBetween(entity1, entity2, node);
|
||||
final IEntity cl1 = getSystem().getOrCreateClass(arg.get(FIRST_TYPE_AND_CLASS));
|
||||
|
||||
final LinkType linkType = getLinkType(arg);
|
||||
final String queue = getQueue(arg);
|
||||
|
||||
final Link link = new Link(cl1, node, linkType, arg.get(LINK_LABEL), queue.length());
|
||||
addLink(link, arg.get(0));
|
||||
|
||||
return CommandExecutionResult.ok();
|
||||
}
|
||||
|
||||
private LinkType getLinkTypeNormal(List<String> arg) {
|
||||
final String queue = arg.get(LEFT_TO_RIGHT_QUEUE).trim();
|
||||
String key = arg.get(LEFT_TO_RIGHT_HEAD);
|
||||
if (key != null) {
|
||||
key = key.trim();
|
||||
}
|
||||
LinkType linkType = getLinkTypeFromKey(key);
|
||||
|
||||
if (queue.startsWith(".")) {
|
||||
linkType = linkType.getDashed();
|
||||
}
|
||||
return linkType;
|
||||
}
|
||||
|
||||
private LinkType getLinkTypeInv(List<String> arg) {
|
||||
final String queue = arg.get(RIGHT_TO_LEFT_QUEUE).trim();
|
||||
String key = arg.get(RIGHT_TO_LEFT_HEAD);
|
||||
if (key != null) {
|
||||
key = key.trim();
|
||||
}
|
||||
LinkType linkType = getLinkTypeFromKey(key);
|
||||
|
||||
if (queue.startsWith(".")) {
|
||||
linkType = linkType.getDashed();
|
||||
}
|
||||
return linkType.getInv();
|
||||
}
|
||||
|
||||
private LinkType getLinkType(List<String> arg) {
|
||||
if (arg.get(LEFT_TO_RIGHT) != null) {
|
||||
return getLinkTypeNormal(arg);
|
||||
}
|
||||
if (arg.get(RIGHT_TO_LEFT) != null) {
|
||||
return getLinkTypeInv(arg);
|
||||
}
|
||||
if (arg.get(NAV_AGREG_OR_COMPO_INV) != null) {
|
||||
final String type = arg.get(NAV_AGREG_OR_COMPO_INV_HEAD).trim();
|
||||
final String queue = arg.get(NAV_AGREG_OR_COMPO_INV_QUEUE).trim();
|
||||
LinkType result;
|
||||
if (type.equals("*")) {
|
||||
result = new LinkType(LinkDecor.COMPOSITION, LinkDecor.ARROW);
|
||||
} else if (type.equals("o")) {
|
||||
result = new LinkType(LinkDecor.AGREGATION, LinkDecor.ARROW);
|
||||
} else {
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
if (queue.startsWith(".")) {
|
||||
result = result.getDashed();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
if (arg.get(NAV_AGREG_OR_COMPO) != null) {
|
||||
final String type = arg.get(NAV_AGREG_OR_COMPO_HEAD).trim();
|
||||
final String queue = arg.get(NAV_AGREG_OR_COMPO_QUEUE).trim();
|
||||
LinkType result;
|
||||
if (type.equals("*")) {
|
||||
result = new LinkType(LinkDecor.ARROW, LinkDecor.COMPOSITION);
|
||||
} else if (type.equals("o")) {
|
||||
result = new LinkType(LinkDecor.ARROW, LinkDecor.AGREGATION);
|
||||
} else {
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
if (queue.startsWith(".")) {
|
||||
result = result.getDashed();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
|
||||
private String getQueue(List<String> arg) {
|
||||
if (arg.get(LEFT_TO_RIGHT) != null) {
|
||||
return arg.get(LEFT_TO_RIGHT_QUEUE).trim();
|
||||
}
|
||||
if (arg.get(RIGHT_TO_LEFT) != null) {
|
||||
return arg.get(RIGHT_TO_LEFT_QUEUE).trim();
|
||||
}
|
||||
if (arg.get(NAV_AGREG_OR_COMPO_INV) != null) {
|
||||
return arg.get(NAV_AGREG_OR_COMPO_INV_QUEUE).trim();
|
||||
}
|
||||
if (arg.get(NAV_AGREG_OR_COMPO) != null) {
|
||||
return arg.get(NAV_AGREG_OR_COMPO_QUEUE).trim();
|
||||
}
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
|
||||
private LinkType getLinkTypeFromKey(String k) {
|
||||
if (k == null) {
|
||||
return new LinkType(LinkDecor.NONE, LinkDecor.NONE);
|
||||
}
|
||||
if (k.equals("+")) {
|
||||
return new LinkType(LinkDecor.PLUS, LinkDecor.NONE);
|
||||
}
|
||||
if (k.equals("*")) {
|
||||
return new LinkType(LinkDecor.COMPOSITION, LinkDecor.NONE);
|
||||
}
|
||||
if (k.equalsIgnoreCase("o")) {
|
||||
return new LinkType(LinkDecor.AGREGATION, LinkDecor.NONE);
|
||||
}
|
||||
if (k.equals("<") || k.equals(">")) {
|
||||
return new LinkType(LinkDecor.ARROW, LinkDecor.NONE);
|
||||
}
|
||||
if (k.equals("<|") || k.equals("|>")) {
|
||||
return new LinkType(LinkDecor.EXTENDS, LinkDecor.NONE);
|
||||
}
|
||||
// return null;
|
||||
throw new IllegalArgumentException(k);
|
||||
}
|
||||
|
||||
}
|
@ -39,6 +39,7 @@ import net.sourceforge.plantuml.Direction;
|
||||
import net.sourceforge.plantuml.FontParam;
|
||||
import net.sourceforge.plantuml.StringUtils;
|
||||
import net.sourceforge.plantuml.UmlDiagramType;
|
||||
import net.sourceforge.plantuml.UniqueSequence;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
import net.sourceforge.plantuml.command.SingleLineCommand2;
|
||||
import net.sourceforge.plantuml.command.regex.RegexConcat;
|
||||
@ -136,12 +137,16 @@ final public class CommandLinkClass2 extends SingleLineCommand2<AbstractClassOrO
|
||||
}
|
||||
}
|
||||
if (arg.get("ENT1").get(2) != null) {
|
||||
cl1.setStereotype(new Stereotype(arg.get("ENT1").get(2), getSystem().getSkinParam().getCircledCharacterRadius(),
|
||||
getSystem().getSkinParam().getFont(FontParam.CIRCLED_CHARACTER, null)));
|
||||
cl1
|
||||
.setStereotype(new Stereotype(arg.get("ENT1").get(2), getSystem().getSkinParam()
|
||||
.getCircledCharacterRadius(), getSystem().getSkinParam().getFont(
|
||||
FontParam.CIRCLED_CHARACTER, null)));
|
||||
}
|
||||
if (arg.get("ENT2").get(2) != null) {
|
||||
cl2.setStereotype(new Stereotype(arg.get("ENT2").get(2), getSystem().getSkinParam().getCircledCharacterRadius(),
|
||||
getSystem().getSkinParam().getFont(FontParam.CIRCLED_CHARACTER, null)));
|
||||
cl2
|
||||
.setStereotype(new Stereotype(arg.get("ENT2").get(2), getSystem().getSkinParam()
|
||||
.getCircledCharacterRadius(), getSystem().getSkinParam().getFont(
|
||||
FontParam.CIRCLED_CHARACTER, null)));
|
||||
}
|
||||
|
||||
final LinkType linkType = getLinkType(arg);
|
||||
@ -163,15 +168,15 @@ final public class CommandLinkClass2 extends SingleLineCommand2<AbstractClassOrO
|
||||
link = link.getInv();
|
||||
}
|
||||
|
||||
// getSystem().resetPragmaLabel();
|
||||
// getSystem().resetPragmaLabel();
|
||||
addLink(link, arg.get("HEADER").get(0));
|
||||
|
||||
return CommandExecutionResult.ok();
|
||||
}
|
||||
|
||||
private void addLink(Link link, String arg0) {
|
||||
private void addLink(Link link, String weight) {
|
||||
getSystem().addLink(link);
|
||||
if (arg0 == null) {
|
||||
if (weight == null) {
|
||||
final LinkType type = link.getType();
|
||||
// --|> highest
|
||||
// --*, -->, --o normal
|
||||
@ -187,7 +192,7 @@ final public class CommandLinkClass2 extends SingleLineCommand2<AbstractClassOrO
|
||||
// }
|
||||
// }
|
||||
} else {
|
||||
link.setWeight(Double.parseDouble(arg0));
|
||||
link.setWeight(Double.parseDouble(weight));
|
||||
}
|
||||
}
|
||||
|
||||
@ -206,9 +211,9 @@ final public class CommandLinkClass2 extends SingleLineCommand2<AbstractClassOrO
|
||||
queue = getQueue(arg);
|
||||
}
|
||||
|
||||
Link link = new Link(cl1.getEntityCluster(), cl2.getEntityCluster(), linkType, arg.get("LABEL_LINK").get(
|
||||
0), queue.length(), arg.get("FIRST_LABEL").get(0), arg.get("SECOND_LABEL").get(0), getSystem()
|
||||
.getLabeldistance(), getSystem().getLabelangle());
|
||||
Link link = new Link(cl1.getEntityCluster(), cl2.getEntityCluster(), linkType, arg.get("LABEL_LINK").get(0),
|
||||
queue.length(), arg.get("FIRST_LABEL").get(0), arg.get("SECOND_LABEL").get(0), getSystem()
|
||||
.getLabeldistance(), getSystem().getLabelangle());
|
||||
if (dir == Direction.LEFT || dir == Direction.UP) {
|
||||
link = link.getInv();
|
||||
}
|
||||
@ -227,16 +232,19 @@ final public class CommandLinkClass2 extends SingleLineCommand2<AbstractClassOrO
|
||||
if (getSystem().entityExist(clName2) == false) {
|
||||
return CommandExecutionResult.error("No class " + clName2);
|
||||
}
|
||||
final Entity node = createAssociationPoint(clName1, clName2);
|
||||
|
||||
final String ent2 = arg.get("ENT2").get(1);
|
||||
final IEntity cl2 = getSystem().getOrCreateClass(ent2);
|
||||
|
||||
final LinkType linkType = getLinkType(arg);
|
||||
final String queue = getQueue(arg);
|
||||
final String label = arg.get("LABEL_LINK").get(0);
|
||||
final int length = getQueue(arg).length();
|
||||
final String weight = arg.get("HEADER").get(0);
|
||||
|
||||
final Link link = new Link(node, cl2, linkType, arg.get("LABEL_LINK").get(0), queue.length());
|
||||
addLink(link, arg.get("HEADER").get(0));
|
||||
final boolean result = getSystem().associationClass(1, clName1, clName2, cl2, linkType, label);
|
||||
if (result == false) {
|
||||
return CommandExecutionResult.error("Cannot have more than 2 assocications");
|
||||
}
|
||||
|
||||
return CommandExecutionResult.ok();
|
||||
}
|
||||
@ -250,30 +258,23 @@ final public class CommandLinkClass2 extends SingleLineCommand2<AbstractClassOrO
|
||||
if (getSystem().entityExist(clName2) == false) {
|
||||
return CommandExecutionResult.error("No class " + clName2);
|
||||
}
|
||||
final Entity node = createAssociationPoint(clName1, clName2);
|
||||
|
||||
final String ent1 = arg.get("ENT1").get(1);
|
||||
final IEntity cl1 = getSystem().getOrCreateClass(ent1);
|
||||
|
||||
final LinkType linkType = getLinkType(arg);
|
||||
final String queue = getQueue(arg);
|
||||
final String label = arg.get("LABEL_LINK").get(0);
|
||||
final int length = getQueue(arg).length();
|
||||
final String weight = arg.get("HEADER").get(0);
|
||||
|
||||
final Link link = new Link(cl1, node, linkType, arg.get("LABEL_LINK").get(0), queue.length());
|
||||
addLink(link, arg.get("HEADER").get(0));
|
||||
final boolean result = getSystem().associationClass(2, clName1, clName2, cl1, linkType, label);
|
||||
if (result == false) {
|
||||
return CommandExecutionResult.error("Cannot have more than 2 assocications");
|
||||
}
|
||||
|
||||
return CommandExecutionResult.ok();
|
||||
}
|
||||
|
||||
private Entity createAssociationPoint(final String clName1, final String clName2) {
|
||||
final IEntity entity1 = getSystem().getOrCreateClass(clName1);
|
||||
final IEntity entity2 = getSystem().getOrCreateClass(clName2);
|
||||
|
||||
final Entity node = getSystem().createEntity(clName1 + "," + clName2, "node", EntityType.POINT_FOR_ASSOCIATION);
|
||||
|
||||
getSystem().insertBetween(entity1, entity2, node);
|
||||
return node;
|
||||
}
|
||||
|
||||
private LinkType getLinkTypeNormal(RegexPartialMatch regexPartialMatch) {
|
||||
final String queue = regexPartialMatch.get(1).trim() + regexPartialMatch.get(3).trim();
|
||||
final String key = regexPartialMatch.get(4);
|
||||
|
@ -28,7 +28,7 @@
|
||||
*
|
||||
* Original Author: Arnaud Roques
|
||||
*
|
||||
* Revision $Revision: 5848 $
|
||||
* Revision $Revision: 5908 $
|
||||
*
|
||||
*/
|
||||
package net.sourceforge.plantuml.cucadiagram;
|
||||
@ -52,7 +52,7 @@ public class Link implements Imaged {
|
||||
final private LinkType type;
|
||||
final private String label;
|
||||
|
||||
final private int length;
|
||||
private int length;
|
||||
final private String qualifier1;
|
||||
final private String qualifier2;
|
||||
final private String uid = "LNK" + UniqueSequence.getValue();
|
||||
@ -169,6 +169,10 @@ public class Link implements Imaged {
|
||||
return length;
|
||||
}
|
||||
|
||||
public final void setLength(int length) {
|
||||
this.length = length;
|
||||
}
|
||||
|
||||
public String getQualifier1() {
|
||||
return qualifier1;
|
||||
}
|
||||
|
@ -147,4 +147,12 @@ public class LinkType {
|
||||
|| decor2 == LinkDecor.COMPOSITION;
|
||||
}
|
||||
|
||||
public LinkType getPart1() {
|
||||
return new LinkType(decor1, style, LinkDecor.NONE);
|
||||
}
|
||||
|
||||
public LinkType getPart2() {
|
||||
return new LinkType(LinkDecor.NONE, style, decor2);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -33,15 +33,22 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.objectdiagram;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import net.sourceforge.plantuml.UniqueSequence;
|
||||
import net.sourceforge.plantuml.classdiagram.AbstractEntityDiagram;
|
||||
import net.sourceforge.plantuml.cucadiagram.EntityType;
|
||||
import net.sourceforge.plantuml.cucadiagram.IEntity;
|
||||
import net.sourceforge.plantuml.cucadiagram.Link;
|
||||
import net.sourceforge.plantuml.cucadiagram.LinkDecor;
|
||||
import net.sourceforge.plantuml.cucadiagram.LinkType;
|
||||
|
||||
public abstract class AbstractClassOrObjectDiagram extends AbstractEntityDiagram {
|
||||
|
||||
// private Link last = null;
|
||||
// private IEntity lastNode = null;
|
||||
|
||||
final public boolean insertBetween(IEntity entity1, IEntity entity2, IEntity node) {
|
||||
final Link link = foundLink(entity1, entity2);
|
||||
if (link == null) {
|
||||
@ -85,4 +92,158 @@ public abstract class AbstractClassOrObjectDiagram extends AbstractEntityDiagram
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
// final public void insertBetweenNew(IEntity entity1, IEntity entity2,
|
||||
// IEntity node) {
|
||||
// Link link = foundLink(entity1, entity2);
|
||||
// if (link == null) {
|
||||
// link = last;
|
||||
// }
|
||||
// final Link l1 = new Link(entity1, node, link.getType(), link.getLabel(),
|
||||
// link.getLength(),
|
||||
// link.getQualifier1(), null, link.getLabeldistance(),
|
||||
// link.getLabelangle());
|
||||
// final Link l2 = new Link(node, entity2, link.getType(), link.getLabel(),
|
||||
// link.getLength(), null, link
|
||||
// .getQualifier2(), link.getLabeldistance(), link.getLabelangle());
|
||||
// addLink(l1);
|
||||
// addLink(l2);
|
||||
// if (last == null) {
|
||||
// removeLink(link);
|
||||
// } else {
|
||||
// final Link lnode = new Link(lastNode, node, link.getType(),
|
||||
// link.getLabel(), 1);
|
||||
// lnode.setInvis(true);
|
||||
// // lnode.setWeight(100);
|
||||
// addLink(lnode);
|
||||
// }
|
||||
// last = link;
|
||||
// lastNode = node;
|
||||
// // return true;
|
||||
// }
|
||||
|
||||
private final List<Association> assocations = new ArrayList<Association>();
|
||||
|
||||
public boolean associationClass(int mode, String clName1, String clName2, IEntity associed, LinkType linkType,
|
||||
String label) {
|
||||
final IEntity entity1 = getOrCreateClass(clName1);
|
||||
final IEntity entity2 = getOrCreateClass(clName2);
|
||||
final List<Association> same = new ArrayList<Association>();
|
||||
for (Association existing : assocations) {
|
||||
if (existing.sameCouple(entity1, entity2)) {
|
||||
same.add(existing);
|
||||
}
|
||||
}
|
||||
if (same.size() > 1) {
|
||||
return false;
|
||||
} else if (same.size() == 0) {
|
||||
final Association association = new Association(mode, entity1, entity2, associed);
|
||||
association.createNew(mode, linkType, label);
|
||||
|
||||
this.assocations.add(association);
|
||||
return true;
|
||||
}
|
||||
assert same.size() == 1;
|
||||
final Association association = same.get(0).createSecondAssociation(mode, associed, label);
|
||||
association.createInSecond(linkType, label);
|
||||
|
||||
this.assocations.add(association);
|
||||
return true;
|
||||
}
|
||||
|
||||
class Association {
|
||||
private IEntity entity1;
|
||||
private IEntity entity2;
|
||||
private IEntity associed;
|
||||
private IEntity point;
|
||||
|
||||
private Link existingLink;
|
||||
|
||||
private Link entity1ToPoint;
|
||||
private Link pointToEntity2;
|
||||
private Link pointToAssocied;
|
||||
|
||||
private Association other;
|
||||
|
||||
public Association(int mode, IEntity entity1, IEntity entity2, IEntity associed) {
|
||||
this.entity1 = entity1;
|
||||
this.entity2 = entity2;
|
||||
this.associed = associed;
|
||||
point = getOrCreateEntity("apoint" + UniqueSequence.getValue(), EntityType.POINT_FOR_ASSOCIATION);
|
||||
|
||||
}
|
||||
|
||||
public Association createSecondAssociation(int mode2, IEntity associed2, String label) {
|
||||
final Association result = new Association(mode2, entity1, entity2, associed2);
|
||||
result.existingLink = this.existingLink;
|
||||
result.other = this;
|
||||
|
||||
if (this.existingLink.getLength() == 1) {
|
||||
this.entity1ToPoint.setLength(2);
|
||||
this.pointToEntity2.setLength(2);
|
||||
this.pointToAssocied.setLength(1);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
void createNew(int mode, LinkType linkType, String label) {
|
||||
existingLink = foundLink(entity1, entity2);
|
||||
if (existingLink == null) {
|
||||
existingLink = new Link(entity1, entity2, new LinkType(LinkDecor.NONE, LinkDecor.NONE), null, 2);
|
||||
} else {
|
||||
removeLink(existingLink);
|
||||
}
|
||||
|
||||
entity1ToPoint = new Link(entity1, point, existingLink.getType().getPart2(), existingLink.getLabel(), existingLink
|
||||
.getLength(), existingLink.getQualifier1(), null, existingLink.getLabeldistance(), existingLink
|
||||
.getLabelangle());
|
||||
pointToEntity2 = new Link(point, entity2, existingLink.getType().getPart1(), existingLink.getLabel(), existingLink
|
||||
.getLength(), null, existingLink.getQualifier2(), existingLink.getLabeldistance(), existingLink
|
||||
.getLabelangle());
|
||||
addLink(entity1ToPoint);
|
||||
addLink(pointToEntity2);
|
||||
|
||||
int length = 1;
|
||||
if (existingLink.getLength() == 1) {
|
||||
length = 2;
|
||||
}
|
||||
|
||||
if (mode == 1) {
|
||||
pointToAssocied = new Link(point, associed, linkType, label, length);
|
||||
} else {
|
||||
pointToAssocied = new Link(associed, point, linkType, label, length);
|
||||
}
|
||||
addLink(pointToAssocied);
|
||||
}
|
||||
|
||||
void createInSecond(LinkType linkType, String label) {
|
||||
entity1ToPoint = new Link(entity1, point, existingLink.getType(), null, 2);
|
||||
pointToEntity2 = new Link(point, entity2, existingLink.getType(), null, 2);
|
||||
addLink(entity1ToPoint);
|
||||
addLink(pointToEntity2);
|
||||
if (other.pointToAssocied.getEntity1().getType() == EntityType.POINT_FOR_ASSOCIATION) {
|
||||
removeLink(other.pointToAssocied);
|
||||
other.pointToAssocied = other.pointToAssocied.getInv();
|
||||
addLink(other.pointToAssocied);
|
||||
}
|
||||
pointToAssocied = new Link(point, associed, linkType, label, 1);
|
||||
addLink(pointToAssocied);
|
||||
|
||||
final Link lnode = new Link(other.point, this.point, new LinkType(LinkDecor.NONE, LinkDecor.NONE), null, 1);
|
||||
lnode.setInvis(true);
|
||||
addLink(lnode);
|
||||
|
||||
}
|
||||
|
||||
boolean sameCouple(IEntity entity1, IEntity entity2) {
|
||||
if (this.entity1 == entity1 && this.entity2 == entity2) {
|
||||
return true;
|
||||
}
|
||||
if (this.entity1 == entity2 && this.entity2 == entity1) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -76,20 +76,22 @@ abstract class CommandExoArrowAny extends SingleLineCommand<SequenceDiagram> {
|
||||
return CommandExecutionResult.ok();
|
||||
}
|
||||
|
||||
final MessageExoType getMessageExoType(String arrow) {
|
||||
if (arrow.startsWith("[") && arrow.endsWith(">")) {
|
||||
return MessageExoType.FROM_LEFT;
|
||||
}
|
||||
if (arrow.startsWith("[<")) {
|
||||
return MessageExoType.TO_LEFT;
|
||||
}
|
||||
if (arrow.startsWith("<") && arrow.endsWith("]")) {
|
||||
return MessageExoType.FROM_RIGHT;
|
||||
}
|
||||
if (arrow.endsWith(">]")) {
|
||||
return MessageExoType.TO_RIGHT;
|
||||
}
|
||||
throw new IllegalArgumentException(arrow);
|
||||
}
|
||||
abstract MessageExoType getMessageExoType(String arrow);
|
||||
|
||||
// final MessageExoType getMessageExoType(String arrow) {
|
||||
// if (arrow.startsWith("[") && arrow.endsWith(">")) {
|
||||
// return MessageExoType.FROM_LEFT;
|
||||
// }
|
||||
// if (arrow.startsWith("[<")) {
|
||||
// return MessageExoType.TO_LEFT;
|
||||
// }
|
||||
// if (arrow.startsWith("<") && arrow.endsWith("]")) {
|
||||
// return MessageExoType.FROM_RIGHT;
|
||||
// }
|
||||
// if (arrow.endsWith(">]")) {
|
||||
// return MessageExoType.TO_RIGHT;
|
||||
// }
|
||||
// throw new IllegalArgumentException(arrow);
|
||||
// }
|
||||
|
||||
}
|
||||
|
@ -33,15 +33,25 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.sequencediagram.command;
|
||||
|
||||
import net.sourceforge.plantuml.sequencediagram.MessageExoType;
|
||||
import net.sourceforge.plantuml.sequencediagram.SequenceDiagram;
|
||||
|
||||
public class CommandExoArrowLeft extends CommandExoArrowAny {
|
||||
|
||||
public CommandExoArrowLeft(SequenceDiagram sequenceDiagram) {
|
||||
super(
|
||||
sequenceDiagram,
|
||||
"(?i)^(\\[[=-]+>{1,2}|\\[\\<{1,2}[=-]+)\\s*([\\p{L}0-9_.]+|\"[^\"]+\")\\s*(?::\\s*(.*))?$",
|
||||
0, 1);
|
||||
super(sequenceDiagram,
|
||||
"(?i)^(\\[?[=-]+>{1,2}|\\[?\\<{1,2}[=-]+)\\s*([\\p{L}0-9_.]+|\"[^\"]+\")\\s*(?::\\s*(.*))?$", 0, 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
MessageExoType getMessageExoType(String arrow) {
|
||||
if (arrow.contains(">")) {
|
||||
return MessageExoType.FROM_LEFT;
|
||||
}
|
||||
if (arrow.contains("<")) {
|
||||
return MessageExoType.TO_LEFT;
|
||||
}
|
||||
throw new IllegalArgumentException(arrow);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -33,6 +33,7 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.sequencediagram.command;
|
||||
|
||||
import net.sourceforge.plantuml.sequencediagram.MessageExoType;
|
||||
import net.sourceforge.plantuml.sequencediagram.SequenceDiagram;
|
||||
|
||||
public class CommandExoArrowRight extends CommandExoArrowAny {
|
||||
@ -40,8 +41,19 @@ public class CommandExoArrowRight extends CommandExoArrowAny {
|
||||
public CommandExoArrowRight(SequenceDiagram sequenceDiagram) {
|
||||
super(
|
||||
sequenceDiagram,
|
||||
"(?i)^([\\p{L}0-9_.]+|\"[^\"]+\")\\s*([=-]+>{1,2}\\]|\\<{1,2}[=-]+\\])\\s*(?::\\s*(.*))?$",
|
||||
"(?i)^([\\p{L}0-9_.]+|\"[^\"]+\")\\s*([=-]+>{1,2}\\]?|\\<{1,2}[=-]+\\]?)\\s*(?::\\s*(.*))?$",
|
||||
1, 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
MessageExoType getMessageExoType(String arrow) {
|
||||
if (arrow.contains("<")) {
|
||||
return MessageExoType.FROM_RIGHT;
|
||||
}
|
||||
if (arrow.contains(">")) {
|
||||
return MessageExoType.TO_RIGHT;
|
||||
}
|
||||
throw new IllegalArgumentException(arrow);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -28,7 +28,7 @@
|
||||
*
|
||||
* Original Author: Arnaud Roques
|
||||
*
|
||||
* Revision $Revision: 4258 $
|
||||
* Revision $Revision: 5889 $
|
||||
*
|
||||
*/
|
||||
package net.sourceforge.plantuml.skin.bluemodern;
|
||||
@ -128,8 +128,11 @@ public class ComponentBlueModernGroupingHeader extends AbstractTextualComponent
|
||||
ug.getParam().setColor(borderColor);
|
||||
ug.draw(0, 0, polygon);
|
||||
ug.draw(0, 0, new ULine(dimensionToUse.getWidth(), 0));
|
||||
ug.draw(dimensionToUse.getWidth(), 0, new ULine(0, dimensionToUse.getHeight()));
|
||||
ug.draw(0, textHeight, new ULine(0, dimensionToUse.getHeight()-textHeight));
|
||||
|
||||
final double heightWithoutPadding = dimensionToUse.getHeight() - getPaddingY();
|
||||
|
||||
ug.draw(dimensionToUse.getWidth(), 0, new ULine(0, heightWithoutPadding));
|
||||
ug.draw(0, textHeight, new ULine(0, heightWithoutPadding - textHeight));
|
||||
ug.getParam().setStroke(new UStroke());
|
||||
|
||||
getTextBlock().drawU(ug, getMarginX1(), getMarginY());
|
||||
|
@ -28,7 +28,7 @@
|
||||
*
|
||||
* Original Author: Arnaud Roques
|
||||
*
|
||||
* Revision $Revision: 4258 $
|
||||
* Revision $Revision: 5889 $
|
||||
*
|
||||
*/
|
||||
package net.sourceforge.plantuml.skin.rose;
|
||||
@ -133,9 +133,11 @@ public class ComponentRoseGroupingHeader extends AbstractTextualComponent {
|
||||
ug.getParam().setBackcolor(this.groupBackground);
|
||||
ug.draw(0, 0, polygon);
|
||||
|
||||
final double heightWithoutPadding = dimensionToUse.getHeight() - getPaddingY();
|
||||
|
||||
ug.draw(0, 0, new ULine(dimensionToUse.getWidth(), 0));
|
||||
ug.draw(dimensionToUse.getWidth(), 0, new ULine(0, dimensionToUse.getHeight()));
|
||||
ug.draw(0, textHeight, new ULine(0, dimensionToUse.getHeight()-textHeight));
|
||||
ug.draw(dimensionToUse.getWidth(), 0, new ULine(0, heightWithoutPadding));
|
||||
ug.draw(0, textHeight, new ULine(0, heightWithoutPadding-textHeight));
|
||||
ug.getParam().setStroke(new UStroke());
|
||||
|
||||
getTextBlock().drawU(ug, getMarginX1(), getMarginY());
|
||||
|
@ -28,7 +28,7 @@
|
||||
*
|
||||
* Original Author: Arnaud Roques
|
||||
*
|
||||
* Revision $Revision: 5879 $
|
||||
* Revision $Revision: 5912 $
|
||||
*
|
||||
*/
|
||||
package net.sourceforge.plantuml.version;
|
||||
@ -36,11 +36,11 @@ package net.sourceforge.plantuml.version;
|
||||
public class Version {
|
||||
|
||||
public static int version() {
|
||||
return 5878;
|
||||
return 5911;
|
||||
}
|
||||
|
||||
public static long compileTime() {
|
||||
return 1294177111625L;
|
||||
return 1294598580421L;
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user