From ac1fa530cf3dee4fdc6244d058c4226006e18dc8 Mon Sep 17 00:00:00 2001 From: matthew16550 Date: Tue, 23 Mar 2021 20:40:50 +1100 Subject: [PATCH] Extract common functionality to new ImageBuilder methods plainImageBuilder() plainPngBuilder() styledImageBuilder() and to PlainDiagram / PlainStringsDiagram classes. --- .../sourceforge/plantuml/AbstractPSystem.java | 5 + .../sourceforge/plantuml/PlainDiagram.java | 68 +++++++++ .../plantuml/PlainStringsDiagram.java | 57 +++++++ .../plantuml/SourceStringReader.java | 16 +- .../sourceforge/plantuml/TitledDiagram.java | 2 +- src/net/sourceforge/plantuml/UmlDiagram.java | 25 +--- .../activitydiagram3/ActivityDiagram3.java | 18 +-- .../plantuml/board/BoardDiagram.java | 22 +-- .../sourceforge/plantuml/bpm/BpmDiagram.java | 12 +- .../plantuml/braille/UGraphicBraille.java | 20 +-- .../plantuml/classdiagram/ClassDiagram.java | 11 +- .../plantuml/creole/legacy/PSystemCreole.java | 23 +-- .../dedication/PSystemDedication.java | 25 +--- .../definition/PSystemDefinition.java | 20 +-- .../plantuml/donors/PSystemDonors.java | 25 +--- .../donors/PSystemSkinparameterList.java | 25 +--- .../plantuml/eggs/PSystemAppleTwo.java | 43 +----- .../plantuml/eggs/PSystemCharlie.java | 28 ++-- .../plantuml/eggs/PSystemColors.java | 21 +-- .../sourceforge/plantuml/eggs/PSystemEgg.java | 47 +----- .../plantuml/eggs/PSystemLost.java | 36 +---- .../sourceforge/plantuml/eggs/PSystemRIP.java | 36 +---- .../plantuml/eggs/PSystemWelcome.java | 24 +-- .../plantuml/error/PSystemError.java | 32 ++-- .../plantuml/font/PSystemListFonts.java | 34 +---- .../plantuml/gitlog/GitDiagram.java | 18 +-- src/net/sourceforge/plantuml/help/Help.java | 19 +-- .../plantuml/jsondiagram/JsonDiagram.java | 17 +-- .../plantuml/math/ScientificEquationSafe.java | 28 ++-- .../plantuml/mindmap/MindMapDiagram.java | 17 +-- .../plantuml/nwdiag/NwDiagram.java | 17 +-- .../openiconic/PSystemListOpenIconic.java | 26 +--- .../openiconic/PSystemOpenIconic.java | 38 ++--- .../plantuml/oregon/PSystemOregon.java | 31 +--- .../plantuml/project/GanttDiagram.java | 16 +- .../plantuml/salt/PSystemSalt.java | 24 +-- .../sdot/CucaDiagramFileMakerSmetana.java | 17 +-- .../SequenceDiagramFileMakerPuma2.java | 15 +- .../teoz/SequenceDiagramFileMakerTeoz.java | 14 +- .../plantuml/sprite/ListSpriteDiagram.java | 13 +- .../sprite/PSystemListInternalSprites.java | 25 +--- .../plantuml/sprite/StdlibDiagram.java | 14 +- .../plantuml/stats/PSystemStats.java | 38 +---- .../svek/CucaDiagramFileMakerSvek.java | 29 ++-- .../plantuml/swing/ImageWindow2.java | 21 +-- .../plantuml/timingdiagram/TimingDiagram.java | 17 +-- .../plantuml/ugraphic/FontChecker.java | 20 +-- .../plantuml/ugraphic/ImageBuilder.java | 140 ++++++++++++++---- .../plantuml/ugraphic/ImageParameter.java | 64 ++------ .../plantuml/version/PSystemKeycheck.java | 25 +--- .../plantuml/version/PSystemKeygen.java | 25 +--- .../plantuml/version/PSystemLicense.java | 19 +-- .../plantuml/version/PSystemVersion.java | 33 +---- .../sourceforge/plantuml/wbs/WBSDiagram.java | 19 +-- .../plantuml/wire/WireDiagram.java | 20 +-- 55 files changed, 513 insertions(+), 981 deletions(-) create mode 100644 src/net/sourceforge/plantuml/PlainDiagram.java create mode 100644 src/net/sourceforge/plantuml/PlainStringsDiagram.java diff --git a/src/net/sourceforge/plantuml/AbstractPSystem.java b/src/net/sourceforge/plantuml/AbstractPSystem.java index bcf59fe38..3acf9f677 100644 --- a/src/net/sourceforge/plantuml/AbstractPSystem.java +++ b/src/net/sourceforge/plantuml/AbstractPSystem.java @@ -50,6 +50,7 @@ import net.sourceforge.plantuml.cucadiagram.DisplayPositionned; import net.sourceforge.plantuml.graphic.HorizontalAlignment; import net.sourceforge.plantuml.graphic.VerticalAlignment; import net.sourceforge.plantuml.stats.StatsUtilsIncrement; +import net.sourceforge.plantuml.style.ClockwiseTopRightBottomLeft; import net.sourceforge.plantuml.ugraphic.color.NoSuchColorException; import net.sourceforge.plantuml.version.License; import net.sourceforge.plantuml.version.Version; @@ -162,4 +163,8 @@ public abstract class AbstractPSystem implements Diagram { protected abstract ImageData exportDiagramNow(OutputStream os, int index, FileFormatOption fileFormatOption, long seed) throws IOException; + public ClockwiseTopRightBottomLeft getDefaultMargins() { + return ClockwiseTopRightBottomLeft.same(0); + } + } diff --git a/src/net/sourceforge/plantuml/PlainDiagram.java b/src/net/sourceforge/plantuml/PlainDiagram.java new file mode 100644 index 000000000..f6cd304a0 --- /dev/null +++ b/src/net/sourceforge/plantuml/PlainDiagram.java @@ -0,0 +1,68 @@ +/* ======================================================================== + * PlantUML : a free UML diagram generator + * ======================================================================== + * + * (C) Copyright 2009-2020, Arnaud Roques + * + * Project Info: http://plantuml.com + * + * 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 + * + * 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; + +import net.sourceforge.plantuml.core.ImageData; +import net.sourceforge.plantuml.graphic.UDrawable; +import net.sourceforge.plantuml.ugraphic.ImageBuilder; + +import java.io.IOException; +import java.io.OutputStream; + +import static net.sourceforge.plantuml.ugraphic.ImageBuilder.plainImageBuilder; + +// This class doesnt feel like a wonderful idea, just a stepping stone towards something +public abstract class PlainDiagram extends AbstractPSystem { + + @Override + protected ImageData exportDiagramNow(OutputStream os, int index, FileFormatOption fileFormatOption, long seed) + throws IOException { + + final UDrawable drawable = getRootDrawable(fileFormatOption); + + final ImageBuilder builder = plainImageBuilder(drawable, fileFormatOption, seed) + .margin(getDefaultMargins()) + .metadata(fileFormatOption.isWithMetadata() ? getMetadata() : null); + + return adjustImageBuilder(builder).write(os); + } + + // kind of a kludge but good enough for now! + protected ImageBuilder adjustImageBuilder(ImageBuilder builder) { + return builder; + } + + protected abstract UDrawable getRootDrawable(FileFormatOption fileFormatOption) throws IOException; +} diff --git a/src/net/sourceforge/plantuml/PlainStringsDiagram.java b/src/net/sourceforge/plantuml/PlainStringsDiagram.java new file mode 100644 index 000000000..93f027671 --- /dev/null +++ b/src/net/sourceforge/plantuml/PlainStringsDiagram.java @@ -0,0 +1,57 @@ +/* ======================================================================== + * PlantUML : a free UML diagram generator + * ======================================================================== + * + * (C) Copyright 2009-2020, Arnaud Roques + * + * Project Info: http://plantuml.com + * + * 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 + * + * 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; + +import net.sourceforge.plantuml.graphic.GraphicPosition; +import net.sourceforge.plantuml.graphic.UDrawable; + +import java.awt.image.BufferedImage; +import java.util.ArrayList; +import java.util.List; + +import static net.sourceforge.plantuml.graphic.GraphicStrings.createBlackOnWhite; + +public abstract class PlainStringsDiagram extends PlainDiagram { + + protected BufferedImage image = null; + protected GraphicPosition imagePosition = null; + + protected final List strings = new ArrayList(); + + @Override + public UDrawable getRootDrawable(FileFormatOption fileFormatOption) { + return createBlackOnWhite(strings, image, imagePosition); + } +} diff --git a/src/net/sourceforge/plantuml/SourceStringReader.java b/src/net/sourceforge/plantuml/SourceStringReader.java index d4037945a..5af474fda 100644 --- a/src/net/sourceforge/plantuml/SourceStringReader.java +++ b/src/net/sourceforge/plantuml/SourceStringReader.java @@ -48,12 +48,9 @@ import net.sourceforge.plantuml.core.ImageData; import net.sourceforge.plantuml.graphic.GraphicStrings; import net.sourceforge.plantuml.preproc.Defines; import net.sourceforge.plantuml.security.SFile; -import net.sourceforge.plantuml.style.ClockwiseTopRightBottomLeft; import net.sourceforge.plantuml.svek.TextBlockBackcolored; -import net.sourceforge.plantuml.ugraphic.ImageBuilder; -import net.sourceforge.plantuml.ugraphic.ImageParameter; -import net.sourceforge.plantuml.ugraphic.color.ColorMapperIdentity; -import net.sourceforge.plantuml.ugraphic.color.HColor; + +import static net.sourceforge.plantuml.ugraphic.ImageBuilder.plainImageBuilder; public class SourceStringReader { @@ -228,12 +225,9 @@ public class SourceStringReader { public ImageData noStartumlFound(OutputStream os, FileFormatOption fileFormatOption, long seed) throws IOException { final TextBlockBackcolored error = GraphicStrings.createForError(Arrays.asList("No @startuml/@enduml found"), fileFormatOption.isUseRedForError()); - HColor backcolor = error.getBackcolor(); - final ImageParameter imageParameter = new ImageParameter(new ColorMapperIdentity(), false, null, null, - null, ClockwiseTopRightBottomLeft.none(), backcolor); - final ImageBuilder imageBuilder = ImageBuilder.build(imageParameter); - imageBuilder.setUDrawable(error); - return imageBuilder.writeImageTOBEMOVED(fileFormatOption, seed, os); + + return plainImageBuilder(error, fileFormatOption, seed) + .write(os); } public final List getBlocks() { diff --git a/src/net/sourceforge/plantuml/TitledDiagram.java b/src/net/sourceforge/plantuml/TitledDiagram.java index 93d9f5314..8d159ab28 100644 --- a/src/net/sourceforge/plantuml/TitledDiagram.java +++ b/src/net/sourceforge/plantuml/TitledDiagram.java @@ -212,7 +212,7 @@ public abstract class TitledDiagram extends AbstractPSystem implements Diagram, return useSmetana; } - // This is for backwards compatibility with earlier default margins + @Override public ClockwiseTopRightBottomLeft getDefaultMargins() { return ClockwiseTopRightBottomLeft.same(10); } diff --git a/src/net/sourceforge/plantuml/UmlDiagram.java b/src/net/sourceforge/plantuml/UmlDiagram.java index bd4add088..484fd6dbe 100644 --- a/src/net/sourceforge/plantuml/UmlDiagram.java +++ b/src/net/sourceforge/plantuml/UmlDiagram.java @@ -68,23 +68,20 @@ import net.sourceforge.plantuml.pdf.PdfConverter; import net.sourceforge.plantuml.security.ImageIO; import net.sourceforge.plantuml.security.SFile; import net.sourceforge.plantuml.security.SecurityUtils; -import net.sourceforge.plantuml.style.ClockwiseTopRightBottomLeft; import net.sourceforge.plantuml.style.NoStyleAvailableException; import net.sourceforge.plantuml.svek.EmptySvgException; import net.sourceforge.plantuml.svek.GraphvizCrash; import net.sourceforge.plantuml.svek.TextBlockBackcolored; import net.sourceforge.plantuml.ugraphic.AffineTransformType; -import net.sourceforge.plantuml.ugraphic.ImageBuilder; -import net.sourceforge.plantuml.ugraphic.ImageParameter; import net.sourceforge.plantuml.ugraphic.PixelImage; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UImage; import net.sourceforge.plantuml.ugraphic.UTranslate; -import net.sourceforge.plantuml.ugraphic.color.ColorMapperIdentity; import net.sourceforge.plantuml.ugraphic.color.HColor; -import net.sourceforge.plantuml.ugraphic.color.HColorUtils; import net.sourceforge.plantuml.version.Version; +import static net.sourceforge.plantuml.ugraphic.ImageBuilder.plainImageBuilder; + public abstract class UmlDiagram extends TitledDiagram implements Diagram, Annotated, WithSprite { private boolean rotation; @@ -184,11 +181,6 @@ public abstract class UmlDiagram extends TitledDiagram implements Diagram, Annot } strings.addAll(CommandExecutionResult.getStackTrace(exception)); - HColor backcolor = HColorUtils.WHITE; - final ImageParameter imageParameter = new ImageParameter(new ColorMapperIdentity(), false, null, metadata, - null, ClockwiseTopRightBottomLeft.none(), backcolor); - - final ImageBuilder imageBuilder = ImageBuilder.build(imageParameter); BufferedImage im2 = null; if (flash != null) { @@ -207,19 +199,18 @@ public abstract class UmlDiagram extends TitledDiagram implements Diagram, Annot final TextBlockBackcolored graphicStrings = GraphicStrings.createBlackOnWhite(strings, IconLoader.getRandom(), GraphicPosition.BACKGROUND_CORNER_TOP_RIGHT); - if (im == null) { - imageBuilder.setUDrawable(graphicStrings); - } else { - imageBuilder.setUDrawable(new UDrawable() { + final UDrawable drawable = (im == null) ? graphicStrings : new UDrawable() { public void drawU(UGraphic ug) { graphicStrings.drawU(ug); final double height = graphicStrings.calculateDimension(ug.getStringBounder()).getHeight(); ug = ug.apply(UTranslate.dy(height)); ug.draw(new UImage(new PixelImage(im, AffineTransformType.TYPE_NEAREST_NEIGHBOR)).scale(3)); } - }); - } - imageBuilder.writeImageTOBEMOVED(fileFormat, seed, os); + }; + + plainImageBuilder(drawable, fileFormat, seed) + .metadata(metadata) + .write(os); } private static void exportDiagramErrorText(OutputStream os, Throwable exception, List strings) { diff --git a/src/net/sourceforge/plantuml/activitydiagram3/ActivityDiagram3.java b/src/net/sourceforge/plantuml/activitydiagram3/ActivityDiagram3.java index ec2efebad..bb0a050c1 100644 --- a/src/net/sourceforge/plantuml/activitydiagram3/ActivityDiagram3.java +++ b/src/net/sourceforge/plantuml/activitydiagram3/ActivityDiagram3.java @@ -38,9 +38,7 @@ package net.sourceforge.plantuml.activitydiagram3; import java.io.IOException; import java.io.OutputStream; -import net.sourceforge.plantuml.AnnotatedWorker; import net.sourceforge.plantuml.FileFormatOption; -import net.sourceforge.plantuml.ISkinParam; import net.sourceforge.plantuml.ISkinSimple; import net.sourceforge.plantuml.UmlDiagram; import net.sourceforge.plantuml.UmlDiagramType; @@ -60,12 +58,12 @@ import net.sourceforge.plantuml.graphic.USymbol; import net.sourceforge.plantuml.graphic.color.Colors; import net.sourceforge.plantuml.sequencediagram.NotePosition; import net.sourceforge.plantuml.sequencediagram.NoteType; -import net.sourceforge.plantuml.ugraphic.ImageBuilder; -import net.sourceforge.plantuml.ugraphic.ImageParameter; import net.sourceforge.plantuml.ugraphic.color.HColor; import net.sourceforge.plantuml.ugraphic.comp.CompressionMode; import net.sourceforge.plantuml.ugraphic.comp.CompressionXorYBuilder; +import static net.sourceforge.plantuml.ugraphic.ImageBuilder.styledImageBuilder; + public class ActivityDiagram3 extends UmlDiagram { enum SwimlaneStrategy { @@ -207,16 +205,8 @@ public class ActivityDiagram3 extends UmlDiagram { result = CompressionXorYBuilder.build(CompressionMode.ON_Y, result, stringBounder); result = new TextBlockRecentred(result); - final ISkinParam skinParam = getSkinParam(); - result = new AnnotatedWorker(this, skinParam, stringBounder).addAdd(result); - - final ImageParameter imageParameter = new ImageParameter(this, fileFormatOption); - - final ImageBuilder imageBuilder = ImageBuilder.build(imageParameter); - imageBuilder.setUDrawable(result); - - return imageBuilder.writeImageTOBEMOVED(seed(), os); - + return styledImageBuilder(this, result, index, fileFormatOption, seed()) + .write(os); } public void fork() { diff --git a/src/net/sourceforge/plantuml/board/BoardDiagram.java b/src/net/sourceforge/plantuml/board/BoardDiagram.java index 8f13cf47a..8d42e6a04 100644 --- a/src/net/sourceforge/plantuml/board/BoardDiagram.java +++ b/src/net/sourceforge/plantuml/board/BoardDiagram.java @@ -42,10 +42,8 @@ import java.io.OutputStream; import java.util.ArrayList; import java.util.List; -import net.sourceforge.plantuml.AnnotatedWorker; import net.sourceforge.plantuml.Dimension2DDouble; import net.sourceforge.plantuml.FileFormatOption; -import net.sourceforge.plantuml.ISkinParam; import net.sourceforge.plantuml.UmlDiagram; import net.sourceforge.plantuml.UmlDiagramType; import net.sourceforge.plantuml.command.CommandExecutionResult; @@ -53,10 +51,7 @@ import net.sourceforge.plantuml.core.DiagramDescription; import net.sourceforge.plantuml.core.ImageData; import net.sourceforge.plantuml.graphic.InnerStrategy; import net.sourceforge.plantuml.graphic.StringBounder; -import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.svek.TextBlockBackcolored; -import net.sourceforge.plantuml.ugraphic.ImageBuilder; -import net.sourceforge.plantuml.ugraphic.ImageParameter; import net.sourceforge.plantuml.ugraphic.MinMax; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; @@ -65,6 +60,8 @@ import net.sourceforge.plantuml.ugraphic.UTranslate; import net.sourceforge.plantuml.ugraphic.color.HColor; import net.sourceforge.plantuml.ugraphic.color.HColorUtils; +import static net.sourceforge.plantuml.ugraphic.ImageBuilder.styledImageBuilder; + public class BoardDiagram extends UmlDiagram { private final List activities = new ArrayList(); @@ -81,19 +78,8 @@ public class BoardDiagram extends UmlDiagram { protected ImageData exportDiagramInternal(OutputStream os, int index, FileFormatOption fileFormatOption) throws IOException { - final ISkinParam skinParam = getSkinParam(); - - final ImageParameter imageParameter = new ImageParameter(this, fileFormatOption); - - final ImageBuilder imageBuilder = ImageBuilder.build(imageParameter); - - TextBlock result = getTextBlock(); - - result = new AnnotatedWorker(this, skinParam, fileFormatOption.getDefaultStringBounder(getSkinParam())) - .addAdd(result); - imageBuilder.setUDrawable(result); - - return imageBuilder.writeImageTOBEMOVED(seed(), os); + return styledImageBuilder(this, getTextBlock(), index, fileFormatOption, seed()) + .write(os); } private TextBlockBackcolored getTextBlock() { diff --git a/src/net/sourceforge/plantuml/bpm/BpmDiagram.java b/src/net/sourceforge/plantuml/bpm/BpmDiagram.java index 4c30ab601..6103bd2dd 100644 --- a/src/net/sourceforge/plantuml/bpm/BpmDiagram.java +++ b/src/net/sourceforge/plantuml/bpm/BpmDiagram.java @@ -49,8 +49,8 @@ import net.sourceforge.plantuml.command.CommandExecutionResult; import net.sourceforge.plantuml.core.DiagramDescription; import net.sourceforge.plantuml.core.ImageData; import net.sourceforge.plantuml.graphic.UDrawable; -import net.sourceforge.plantuml.ugraphic.ImageBuilder; -import net.sourceforge.plantuml.ugraphic.ImageParameter; + +import static net.sourceforge.plantuml.ugraphic.ImageBuilder.styledImageBuilder; public class BpmDiagram extends UmlDiagram { @@ -81,12 +81,10 @@ public class BpmDiagram extends UmlDiagram { @Override protected ImageData exportDiagramInternal(OutputStream os, int index, FileFormatOption fileFormatOption) throws IOException { - final ImageParameter imageParameter = new ImageParameter(this, fileFormatOption); - - final ImageBuilder imageBuilder = ImageBuilder.build(imageParameter); - imageBuilder.setUDrawable(getUDrawable()); - return imageBuilder.writeImageTOBEMOVED(seed(), os); + return styledImageBuilder(this, getUDrawable(), index, fileFormatOption, seed()) + .annotations(false) + .write(os); } private UDrawable getUDrawable() { diff --git a/src/net/sourceforge/plantuml/braille/UGraphicBraille.java b/src/net/sourceforge/plantuml/braille/UGraphicBraille.java index 53442eb4f..d209410b4 100644 --- a/src/net/sourceforge/plantuml/braille/UGraphicBraille.java +++ b/src/net/sourceforge/plantuml/braille/UGraphicBraille.java @@ -38,16 +38,12 @@ import java.io.IOException; import java.io.OutputStream; import net.sourceforge.plantuml.FileFormat; -import net.sourceforge.plantuml.FileFormatOption; import net.sourceforge.plantuml.TikzFontDistortion; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.posimo.DotPath; -import net.sourceforge.plantuml.style.ClockwiseTopRightBottomLeft; import net.sourceforge.plantuml.ugraphic.AbstractCommonUGraphic; import net.sourceforge.plantuml.ugraphic.AbstractUGraphic; import net.sourceforge.plantuml.ugraphic.ClipContainer; -import net.sourceforge.plantuml.ugraphic.ImageBuilder; -import net.sourceforge.plantuml.ugraphic.ImageParameter; import net.sourceforge.plantuml.ugraphic.UCenteredCharacter; import net.sourceforge.plantuml.ugraphic.UEllipse; import net.sourceforge.plantuml.ugraphic.UGraphic2; @@ -58,9 +54,8 @@ import net.sourceforge.plantuml.ugraphic.UPolygon; import net.sourceforge.plantuml.ugraphic.URectangle; import net.sourceforge.plantuml.ugraphic.UText; import net.sourceforge.plantuml.ugraphic.color.ColorMapper; -import net.sourceforge.plantuml.ugraphic.color.ColorMapperIdentity; -import net.sourceforge.plantuml.ugraphic.color.HColor; -import net.sourceforge.plantuml.ugraphic.color.HColorUtils; + +import static net.sourceforge.plantuml.ugraphic.ImageBuilder.plainPngBuilder; // https://www.branah.com/braille-translator public class UGraphicBraille extends AbstractUGraphic implements ClipContainer, UGraphic2 { @@ -127,13 +122,8 @@ public class UGraphicBraille extends AbstractUGraphic implements Cl } public void writeImageTOBEMOVED(OutputStream os, String metadata, int dpi) throws IOException { - HColor backcolor = HColorUtils.WHITE; - final ImageParameter imageParameter = new ImageParameter(new ColorMapperIdentity(), false, null, metadata, - null, ClockwiseTopRightBottomLeft.none(), backcolor); - final ImageBuilder imageBuilder = ImageBuilder.build(imageParameter); - imageBuilder.setUDrawable(new BrailleDrawer(getGraphicObject())); - - imageBuilder.writeImageTOBEMOVED(new FileFormatOption(FileFormat.PNG), 42, os); - + plainPngBuilder(new BrailleDrawer(getGraphicObject())) + .metadata(metadata) + .write(os); } } diff --git a/src/net/sourceforge/plantuml/classdiagram/ClassDiagram.java b/src/net/sourceforge/plantuml/classdiagram/ClassDiagram.java index 26145a015..5ee57541c 100644 --- a/src/net/sourceforge/plantuml/classdiagram/ClassDiagram.java +++ b/src/net/sourceforge/plantuml/classdiagram/ClassDiagram.java @@ -56,8 +56,8 @@ import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.graphic.USymbol; import net.sourceforge.plantuml.objectdiagram.AbstractClassOrObjectDiagram; import net.sourceforge.plantuml.svek.image.EntityImageClass; -import net.sourceforge.plantuml.ugraphic.ImageBuilder; -import net.sourceforge.plantuml.ugraphic.ImageParameter; + +import static net.sourceforge.plantuml.ugraphic.ImageBuilder.styledImageBuilder; public class ClassDiagram extends AbstractClassOrObjectDiagram { @@ -198,10 +198,9 @@ public class ClassDiagram extends AbstractClassOrObjectDiagram { final RowLayout rawLayout = getRawLayout(i); fullLayout.addRowLayout(rawLayout); } - final ImageParameter imageParameter = new ImageParameter(this, fileFormatOption); - final ImageBuilder imageBuilder = ImageBuilder.build(imageParameter); - imageBuilder.setUDrawable(fullLayout); - return imageBuilder.writeImageTOBEMOVED(seed(), os); + return styledImageBuilder(this, fullLayout, index, fileFormatOption, seed()) + .annotations(false) // Backwards compatibility - this only applies when "layout_new_line" is used + .write(os); } private RowLayout getRawLayout(int raw) { diff --git a/src/net/sourceforge/plantuml/creole/legacy/PSystemCreole.java b/src/net/sourceforge/plantuml/creole/legacy/PSystemCreole.java index 6c54bcddc..f5c85f69a 100644 --- a/src/net/sourceforge/plantuml/creole/legacy/PSystemCreole.java +++ b/src/net/sourceforge/plantuml/creole/legacy/PSystemCreole.java @@ -35,18 +35,15 @@ */ package net.sourceforge.plantuml.creole.legacy; -import java.io.IOException; -import java.io.OutputStream; import java.util.ArrayList; import java.util.List; -import net.sourceforge.plantuml.AbstractPSystem; import net.sourceforge.plantuml.FileFormatOption; import net.sourceforge.plantuml.LineBreakStrategy; +import net.sourceforge.plantuml.PlainDiagram; import net.sourceforge.plantuml.SkinParam; import net.sourceforge.plantuml.UmlDiagramType; import net.sourceforge.plantuml.core.DiagramDescription; -import net.sourceforge.plantuml.core.ImageData; import net.sourceforge.plantuml.creole.CreoleMode; import net.sourceforge.plantuml.creole.Parser; import net.sourceforge.plantuml.creole.Sheet; @@ -54,13 +51,10 @@ import net.sourceforge.plantuml.creole.SheetBlock1; import net.sourceforge.plantuml.cucadiagram.Display; import net.sourceforge.plantuml.graphic.FontConfiguration; import net.sourceforge.plantuml.graphic.HorizontalAlignment; -import net.sourceforge.plantuml.style.ClockwiseTopRightBottomLeft; -import net.sourceforge.plantuml.ugraphic.ImageBuilder; -import net.sourceforge.plantuml.ugraphic.ImageParameter; +import net.sourceforge.plantuml.graphic.UDrawable; import net.sourceforge.plantuml.ugraphic.UFont; -import net.sourceforge.plantuml.ugraphic.color.ColorMapperIdentity; -public class PSystemCreole extends AbstractPSystem { +public class PSystemCreole extends PlainDiagram { private final List lines = new ArrayList(); @@ -76,20 +70,13 @@ public class PSystemCreole extends AbstractPSystem { } @Override - final protected ImageData exportDiagramNow(OutputStream os, int num, FileFormatOption fileFormat, long seed) - throws IOException { + protected UDrawable getRootDrawable(FileFormatOption fileFormatOption) { final Display display = Display.create(lines); final UFont font = UFont.serif(14); final FontConfiguration fontConfiguration = FontConfiguration.blackBlueTrue(font); final Sheet sheet = Parser.build(fontConfiguration, HorizontalAlignment.LEFT, SkinParam.create(UmlDiagramType.SEQUENCE), CreoleMode.FULL).createSheet(display); - final SheetBlock1 sheetBlock = new SheetBlock1(sheet, LineBreakStrategy.NONE, 0); - final ImageParameter imageParameter = new ImageParameter(new ColorMapperIdentity(), false, null, null, - null, ClockwiseTopRightBottomLeft.none(), null); - - final ImageBuilder builder = ImageBuilder.build(imageParameter); - builder.setUDrawable(sheetBlock); - return builder.writeImageTOBEMOVED(fileFormat, seed, os); + return new SheetBlock1(sheet, LineBreakStrategy.NONE, 0); // final Dimension2D dim = TextBlockUtils.getDimension(sheetBlock); // final UGraphic2 ug = fileFormat.createUGraphic(new ColorMapperIdentity(), 1, diff --git a/src/net/sourceforge/plantuml/dedication/PSystemDedication.java b/src/net/sourceforge/plantuml/dedication/PSystemDedication.java index 61e3af339..2c0acd8aa 100644 --- a/src/net/sourceforge/plantuml/dedication/PSystemDedication.java +++ b/src/net/sourceforge/plantuml/dedication/PSystemDedication.java @@ -36,26 +36,17 @@ package net.sourceforge.plantuml.dedication; import java.awt.image.BufferedImage; -import java.io.IOException; -import java.io.OutputStream; -import net.sourceforge.plantuml.AbstractPSystem; import net.sourceforge.plantuml.FileFormatOption; +import net.sourceforge.plantuml.PlainDiagram; import net.sourceforge.plantuml.core.DiagramDescription; -import net.sourceforge.plantuml.core.ImageData; import net.sourceforge.plantuml.graphic.UDrawable; -import net.sourceforge.plantuml.style.ClockwiseTopRightBottomLeft; import net.sourceforge.plantuml.ugraphic.AffineTransformType; -import net.sourceforge.plantuml.ugraphic.ImageBuilder; -import net.sourceforge.plantuml.ugraphic.ImageParameter; import net.sourceforge.plantuml.ugraphic.PixelImage; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UImage; -import net.sourceforge.plantuml.ugraphic.color.ColorMapperIdentity; -import net.sourceforge.plantuml.ugraphic.color.HColor; -import net.sourceforge.plantuml.ugraphic.color.HColorUtils; -public class PSystemDedication extends AbstractPSystem { +public class PSystemDedication extends PlainDiagram { private final Dedication dedication; private final String keepLetter; @@ -66,21 +57,15 @@ public class PSystemDedication extends AbstractPSystem { } @Override - final protected ImageData exportDiagramNow(OutputStream os, int num, FileFormatOption fileFormat, long seed) - throws IOException { - HColor backcolor = HColorUtils.WHITE; - final ImageParameter imageParameter = new ImageParameter(new ColorMapperIdentity(), false, null, - getMetadata(), null, ClockwiseTopRightBottomLeft.none(), backcolor); - final ImageBuilder imageBuilder = ImageBuilder.build(imageParameter); - imageBuilder.setUDrawable(new UDrawable() { + protected UDrawable getRootDrawable(FileFormatOption fileFormatOption) { + return new UDrawable() { public void drawU(UGraphic ug) { final BufferedImage bufferedImage = dedication.getBufferedImage(keepLetter); if (bufferedImage != null) { ug.draw(new UImage(new PixelImage(bufferedImage, AffineTransformType.TYPE_BILINEAR))); } } - }); - return imageBuilder.writeImageTOBEMOVED(fileFormat, seed, os); + }; } public DiagramDescription getDescription() { diff --git a/src/net/sourceforge/plantuml/definition/PSystemDefinition.java b/src/net/sourceforge/plantuml/definition/PSystemDefinition.java index 6c7fed01a..6bd3f1175 100644 --- a/src/net/sourceforge/plantuml/definition/PSystemDefinition.java +++ b/src/net/sourceforge/plantuml/definition/PSystemDefinition.java @@ -36,28 +36,22 @@ package net.sourceforge.plantuml.definition; import java.io.IOException; -import java.io.OutputStream; import java.util.ArrayList; import java.util.List; -import net.sourceforge.plantuml.AbstractPSystem; import net.sourceforge.plantuml.FileFormatOption; +import net.sourceforge.plantuml.PlainDiagram; import net.sourceforge.plantuml.SpriteContainerEmpty; import net.sourceforge.plantuml.core.DiagramDescription; -import net.sourceforge.plantuml.core.ImageData; import net.sourceforge.plantuml.cucadiagram.Display; import net.sourceforge.plantuml.graphic.FontConfiguration; import net.sourceforge.plantuml.graphic.HorizontalAlignment; import net.sourceforge.plantuml.graphic.UDrawable; -import net.sourceforge.plantuml.style.ClockwiseTopRightBottomLeft; -import net.sourceforge.plantuml.ugraphic.ImageBuilder; -import net.sourceforge.plantuml.ugraphic.ImageParameter; import net.sourceforge.plantuml.ugraphic.UFont; import net.sourceforge.plantuml.ugraphic.UGraphic; -import net.sourceforge.plantuml.ugraphic.color.ColorMapperIdentity; import net.sourceforge.plantuml.ugraphic.color.HColorUtils; -public class PSystemDefinition extends AbstractPSystem implements UDrawable { +public class PSystemDefinition extends PlainDiagram implements UDrawable { private final List lines = new ArrayList(); private final String startLine; @@ -71,14 +65,8 @@ public class PSystemDefinition extends AbstractPSystem implements UDrawable { } @Override - final protected ImageData exportDiagramNow(OutputStream os, int num, FileFormatOption fileFormatOption, long seed) - throws IOException { - final ImageParameter imageParameter = new ImageParameter(new ColorMapperIdentity(), false, null, "", "", - ClockwiseTopRightBottomLeft.none(), null); - final ImageBuilder imageBuilder = ImageBuilder.build(imageParameter); - imageBuilder.setUDrawable(this); - - return imageBuilder.writeImageTOBEMOVED(fileFormatOption, seed, os); + protected UDrawable getRootDrawable(FileFormatOption fileFormatOption) throws IOException { + return this; } public void drawU(UGraphic ug) { diff --git a/src/net/sourceforge/plantuml/donors/PSystemDonors.java b/src/net/sourceforge/plantuml/donors/PSystemDonors.java index dd233a94f..d4c4dc1c5 100644 --- a/src/net/sourceforge/plantuml/donors/PSystemDonors.java +++ b/src/net/sourceforge/plantuml/donors/PSystemDonors.java @@ -37,15 +37,14 @@ package net.sourceforge.plantuml.donors; import java.awt.geom.Dimension2D; import java.io.IOException; -import java.io.OutputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.StringTokenizer; -import net.sourceforge.plantuml.AbstractPSystem; import net.sourceforge.plantuml.BackSlash; import net.sourceforge.plantuml.FileFormatOption; +import net.sourceforge.plantuml.PlainDiagram; import net.sourceforge.plantuml.code.AsciiEncoder; import net.sourceforge.plantuml.code.CompressionBrotli; import net.sourceforge.plantuml.code.NoPlantumlCompressionException; @@ -53,26 +52,19 @@ import net.sourceforge.plantuml.code.StringCompressorNone; import net.sourceforge.plantuml.code.Transcoder; import net.sourceforge.plantuml.code.TranscoderImpl; import net.sourceforge.plantuml.core.DiagramDescription; -import net.sourceforge.plantuml.core.ImageData; import net.sourceforge.plantuml.graphic.GraphicStrings; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.graphic.UDrawable; -import net.sourceforge.plantuml.style.ClockwiseTopRightBottomLeft; import net.sourceforge.plantuml.svek.TextBlockBackcolored; import net.sourceforge.plantuml.ugraphic.AffineTransformType; -import net.sourceforge.plantuml.ugraphic.ImageBuilder; -import net.sourceforge.plantuml.ugraphic.ImageParameter; import net.sourceforge.plantuml.ugraphic.PixelImage; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UImage; import net.sourceforge.plantuml.ugraphic.UTranslate; -import net.sourceforge.plantuml.ugraphic.color.ColorMapperIdentity; -import net.sourceforge.plantuml.ugraphic.color.HColor; -import net.sourceforge.plantuml.ugraphic.color.HColorUtils; import net.sourceforge.plantuml.version.PSystemVersion; -public class PSystemDonors extends AbstractPSystem { +public class PSystemDonors extends PlainDiagram { private static final int COLS = 6; private static final int FREE_LINES = 6; @@ -107,18 +99,7 @@ public class PSystemDonors extends AbstractPSystem { */ @Override - final protected ImageData exportDiagramNow(OutputStream os, int num, FileFormatOption fileFormat, long seed) - throws IOException { - final UDrawable result = getGraphicStrings(); - HColor backcolor = HColorUtils.WHITE; - final ImageParameter imageParameter = new ImageParameter(new ColorMapperIdentity(), false, null, - getMetadata(), null, ClockwiseTopRightBottomLeft.none(), backcolor); - final ImageBuilder imageBuilder = ImageBuilder.build(imageParameter); - imageBuilder.setUDrawable(result); - return imageBuilder.writeImageTOBEMOVED(fileFormat, seed, os); - } - - private UDrawable getGraphicStrings() throws IOException { + protected UDrawable getRootDrawable(FileFormatOption fileFormatOption) throws IOException { final List cols = getCols(getDonors(), COLS, FREE_LINES); return new UDrawable() { public void drawU(UGraphic ug) { diff --git a/src/net/sourceforge/plantuml/donors/PSystemSkinparameterList.java b/src/net/sourceforge/plantuml/donors/PSystemSkinparameterList.java index 9b83cff9e..59f636d9f 100644 --- a/src/net/sourceforge/plantuml/donors/PSystemSkinparameterList.java +++ b/src/net/sourceforge/plantuml/donors/PSystemSkinparameterList.java @@ -37,43 +37,24 @@ package net.sourceforge.plantuml.donors; import java.awt.geom.Dimension2D; import java.io.IOException; -import java.io.OutputStream; import java.util.ArrayList; import java.util.List; -import net.sourceforge.plantuml.AbstractPSystem; import net.sourceforge.plantuml.FileFormatOption; +import net.sourceforge.plantuml.PlainDiagram; import net.sourceforge.plantuml.SkinParam; import net.sourceforge.plantuml.core.DiagramDescription; -import net.sourceforge.plantuml.core.ImageData; import net.sourceforge.plantuml.graphic.GraphicStrings; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.graphic.UDrawable; -import net.sourceforge.plantuml.style.ClockwiseTopRightBottomLeft; -import net.sourceforge.plantuml.ugraphic.ImageBuilder; -import net.sourceforge.plantuml.ugraphic.ImageParameter; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UTranslate; -import net.sourceforge.plantuml.ugraphic.color.ColorMapperIdentity; -import net.sourceforge.plantuml.ugraphic.color.HColor; -import net.sourceforge.plantuml.ugraphic.color.HColorUtils; -public class PSystemSkinparameterList extends AbstractPSystem { +public class PSystemSkinparameterList extends PlainDiagram { @Override - final protected ImageData exportDiagramNow(OutputStream os, int num, FileFormatOption fileFormat, long seed) - throws IOException { - final UDrawable result = getGraphicStrings(); - HColor backcolor = HColorUtils.WHITE; - final ImageParameter imageParameter = new ImageParameter(new ColorMapperIdentity(), false, null, - getMetadata(), null, ClockwiseTopRightBottomLeft.none(), backcolor); - final ImageBuilder imageBuilder = ImageBuilder.build(imageParameter); - imageBuilder.setUDrawable(result); - return imageBuilder.writeImageTOBEMOVED(fileFormat, seed, os); - } - - private UDrawable getGraphicStrings() throws IOException { + protected UDrawable getRootDrawable(FileFormatOption fileFormatOption) throws IOException { final List cols = getCols(getDonors(), 5); return new UDrawable() { public void drawU(UGraphic ug) { diff --git a/src/net/sourceforge/plantuml/eggs/PSystemAppleTwo.java b/src/net/sourceforge/plantuml/eggs/PSystemAppleTwo.java index d3201e170..217ed4107 100644 --- a/src/net/sourceforge/plantuml/eggs/PSystemAppleTwo.java +++ b/src/net/sourceforge/plantuml/eggs/PSystemAppleTwo.java @@ -35,58 +35,21 @@ */ package net.sourceforge.plantuml.eggs; -import java.awt.image.BufferedImage; import java.io.IOException; -import java.io.OutputStream; -import java.util.ArrayList; -import java.util.List; -import net.sourceforge.plantuml.AbstractPSystem; -import net.sourceforge.plantuml.FileFormatOption; +import net.sourceforge.plantuml.PlainStringsDiagram; import net.sourceforge.plantuml.core.DiagramDescription; -import net.sourceforge.plantuml.core.ImageData; import net.sourceforge.plantuml.graphic.GraphicPosition; -import net.sourceforge.plantuml.graphic.GraphicStrings; -import net.sourceforge.plantuml.style.ClockwiseTopRightBottomLeft; -import net.sourceforge.plantuml.svek.TextBlockBackcolored; -import net.sourceforge.plantuml.ugraphic.ImageBuilder; -import net.sourceforge.plantuml.ugraphic.ImageParameter; -import net.sourceforge.plantuml.ugraphic.color.ColorMapperIdentity; -import net.sourceforge.plantuml.ugraphic.color.HColor; import net.sourceforge.plantuml.version.PSystemVersion; -public class PSystemAppleTwo extends AbstractPSystem { - - private final List strings = new ArrayList(); - private final BufferedImage image; +public class PSystemAppleTwo extends PlainStringsDiagram { public PSystemAppleTwo() throws IOException { strings.add(" Apple //e for ever ! "); strings.add(" "); image = PSystemVersion.getApple2Image(); - } - - @Override - final protected ImageData exportDiagramNow(OutputStream os, int num, FileFormatOption fileFormat, long seed) - throws IOException { - final TextBlockBackcolored result = getGraphicStrings(); - HColor backcolor = result.getBackcolor(); - final ImageParameter imageParameter = new ImageParameter(new ColorMapperIdentity(), false, null, - getMetadata(), null, ClockwiseTopRightBottomLeft.none(), backcolor); - final ImageBuilder imageBuilder = ImageBuilder.build(imageParameter); - imageBuilder.setUDrawable(result); - return imageBuilder.writeImageTOBEMOVED(fileFormat, seed, os); - } - - private TextBlockBackcolored getGraphicStrings() throws IOException { - // final UFont font = new UFont("SansSerif", Font.PLAIN, 12); - final TextBlockBackcolored result = GraphicStrings.createBlackOnWhite(strings, image, GraphicPosition.BOTTOM); - // final GraphicStrings result = new GraphicStrings(strings, font, - // HtmlColorUtils.BLACK, HtmlColorUtils.WHITE, - // image, GraphicPosition.BOTTOM); - // result.setMinWidth(200); - return result; + imagePosition = GraphicPosition.BOTTOM; } public DiagramDescription getDescription() { diff --git a/src/net/sourceforge/plantuml/eggs/PSystemCharlie.java b/src/net/sourceforge/plantuml/eggs/PSystemCharlie.java index f49c732bc..d0d2d107b 100644 --- a/src/net/sourceforge/plantuml/eggs/PSystemCharlie.java +++ b/src/net/sourceforge/plantuml/eggs/PSystemCharlie.java @@ -35,27 +35,19 @@ package net.sourceforge.plantuml.eggs; import java.awt.image.BufferedImage; -import java.io.IOException; -import java.io.OutputStream; -import net.sourceforge.plantuml.AbstractPSystem; import net.sourceforge.plantuml.FileFormatOption; +import net.sourceforge.plantuml.PlainDiagram; import net.sourceforge.plantuml.core.DiagramDescription; -import net.sourceforge.plantuml.core.ImageData; import net.sourceforge.plantuml.graphic.UDrawable; -import net.sourceforge.plantuml.style.ClockwiseTopRightBottomLeft; import net.sourceforge.plantuml.ugraphic.AffineTransformType; import net.sourceforge.plantuml.ugraphic.ImageBuilder; -import net.sourceforge.plantuml.ugraphic.ImageParameter; import net.sourceforge.plantuml.ugraphic.PixelImage; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UImage; -import net.sourceforge.plantuml.ugraphic.color.ColorMapperIdentity; -import net.sourceforge.plantuml.ugraphic.color.HColor; -import net.sourceforge.plantuml.ugraphic.color.HColorUtils; import net.sourceforge.plantuml.version.PSystemVersion; -public class PSystemCharlie extends AbstractPSystem { +public class PSystemCharlie extends PlainDiagram { private BufferedImage image; @@ -64,20 +56,18 @@ public class PSystemCharlie extends AbstractPSystem { } @Override - final protected ImageData exportDiagramNow(OutputStream os, int num, FileFormatOption fileFormat, long seed) - throws IOException { - HColor backcolor = HColorUtils.BLACK; - final ImageParameter imageParameter = new ImageParameter(new ColorMapperIdentity(), false, null, - getMetadata(), null, ClockwiseTopRightBottomLeft.none(), backcolor); - final ImageBuilder imageBuilder = ImageBuilder.build(imageParameter); - imageBuilder.setUDrawable(new UDrawable() { + protected ImageBuilder adjustImageBuilder(ImageBuilder builder) { + return builder.blackBackcolor(); + } + @Override + public UDrawable getRootDrawable(FileFormatOption fileFormatOption) { + return new UDrawable() { public void drawU(UGraphic ug) { final UImage im = new UImage(new PixelImage(image, AffineTransformType.TYPE_BILINEAR)); ug.draw(im); } - }); - return imageBuilder.writeImageTOBEMOVED(fileFormat, seed, os); + }; } public DiagramDescription getDescription() { diff --git a/src/net/sourceforge/plantuml/eggs/PSystemColors.java b/src/net/sourceforge/plantuml/eggs/PSystemColors.java index 937186aae..a81581e62 100644 --- a/src/net/sourceforge/plantuml/eggs/PSystemColors.java +++ b/src/net/sourceforge/plantuml/eggs/PSystemColors.java @@ -37,8 +37,6 @@ package net.sourceforge.plantuml.eggs; import java.awt.geom.Dimension2D; import java.awt.geom.Point2D; -import java.io.IOException; -import java.io.OutputStream; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -46,34 +44,29 @@ import java.util.Comparator; import java.util.Iterator; import java.util.List; -import net.sourceforge.plantuml.AbstractPSystem; import net.sourceforge.plantuml.BackSlash; import net.sourceforge.plantuml.FileFormatOption; +import net.sourceforge.plantuml.PlainDiagram; import net.sourceforge.plantuml.SpriteContainerEmpty; import net.sourceforge.plantuml.core.DiagramDescription; -import net.sourceforge.plantuml.core.ImageData; import net.sourceforge.plantuml.cucadiagram.Display; import net.sourceforge.plantuml.graphic.FontConfiguration; import net.sourceforge.plantuml.graphic.HorizontalAlignment; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.graphic.UDrawable; -import net.sourceforge.plantuml.style.ClockwiseTopRightBottomLeft; -import net.sourceforge.plantuml.ugraphic.ImageBuilder; -import net.sourceforge.plantuml.ugraphic.ImageParameter; import net.sourceforge.plantuml.ugraphic.UFont; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UPolygon; import net.sourceforge.plantuml.ugraphic.URectangle; import net.sourceforge.plantuml.ugraphic.UTranslate; -import net.sourceforge.plantuml.ugraphic.color.ColorMapperIdentity; import net.sourceforge.plantuml.ugraphic.color.HColor; import net.sourceforge.plantuml.ugraphic.color.HColorSet; import net.sourceforge.plantuml.ugraphic.color.HColorSimple; import net.sourceforge.plantuml.ugraphic.color.HColorUtils; // http://www.redblobgames.com/grids/hexagons/ -public class PSystemColors extends AbstractPSystem implements UDrawable { +public class PSystemColors extends PlainDiagram implements UDrawable { private final double rectangleHeight = 28; private final double rectangleWidth = 175; @@ -90,14 +83,8 @@ public class PSystemColors extends AbstractPSystem implements UDrawable { } @Override - final protected ImageData exportDiagramNow(OutputStream os, int num, FileFormatOption fileFormat, long seed) - throws IOException { - HColor backcolor = HColorUtils.WHITE; - final ImageParameter imageParameter = new ImageParameter(new ColorMapperIdentity(), false, null, - getMetadata(), null, ClockwiseTopRightBottomLeft.none(), backcolor); - final ImageBuilder imageBuilder = ImageBuilder.build(imageParameter); - imageBuilder.setUDrawable(this); - return imageBuilder.writeImageTOBEMOVED(fileFormat, seed, os); + protected UDrawable getRootDrawable(FileFormatOption fileFormatOption) { + return this; } public DiagramDescription getDescription() { diff --git a/src/net/sourceforge/plantuml/eggs/PSystemEgg.java b/src/net/sourceforge/plantuml/eggs/PSystemEgg.java index bffb9cf0a..f640319eb 100644 --- a/src/net/sourceforge/plantuml/eggs/PSystemEgg.java +++ b/src/net/sourceforge/plantuml/eggs/PSystemEgg.java @@ -5,12 +5,12 @@ * (C) Copyright 2009-2020, Arnaud Roques * * Project Info: http://plantuml.com - * + * * 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 - * + * * This file is part of PlantUML. * * PlantUML is free software; you can redistribute it and/or modify it @@ -30,32 +30,17 @@ * * * Original Author: Arnaud Roques - * + * * */ package net.sourceforge.plantuml.eggs; -import java.io.IOException; -import java.io.OutputStream; -import java.util.ArrayList; -import java.util.List; +import net.sourceforge.plantuml.PlainStringsDiagram; +import net.sourceforge.plantuml.core.DiagramDescription; + import java.util.StringTokenizer; -import net.sourceforge.plantuml.AbstractPSystem; -import net.sourceforge.plantuml.FileFormatOption; -import net.sourceforge.plantuml.core.DiagramDescription; -import net.sourceforge.plantuml.core.ImageData; -import net.sourceforge.plantuml.graphic.GraphicStrings; -import net.sourceforge.plantuml.style.ClockwiseTopRightBottomLeft; -import net.sourceforge.plantuml.svek.TextBlockBackcolored; -import net.sourceforge.plantuml.ugraphic.ImageBuilder; -import net.sourceforge.plantuml.ugraphic.ImageParameter; -import net.sourceforge.plantuml.ugraphic.color.ColorMapperIdentity; -import net.sourceforge.plantuml.ugraphic.color.HColor; - -public class PSystemEgg extends AbstractPSystem { - - private final List strings = new ArrayList(); +public class PSystemEgg extends PlainStringsDiagram { PSystemEgg(String sentence) { final StringTokenizer st = new StringTokenizer(sentence, "|"); @@ -64,22 +49,6 @@ public class PSystemEgg extends AbstractPSystem { } } - @Override - final protected ImageData exportDiagramNow(OutputStream os, int num, FileFormatOption fileFormat, long seed) - throws IOException { - final TextBlockBackcolored result = getGraphicStrings(); - HColor backcolor = result.getBackcolor(); - final ImageParameter imageParameter = new ImageParameter(new ColorMapperIdentity(), false, null, - getMetadata(), null, ClockwiseTopRightBottomLeft.none(), backcolor); - final ImageBuilder imageBuilder = ImageBuilder.build(imageParameter); - imageBuilder.setUDrawable(result); - return imageBuilder.writeImageTOBEMOVED(fileFormat, seed, os); - } - - private TextBlockBackcolored getGraphicStrings() throws IOException { - return GraphicStrings.createBlackOnWhite(strings); - } - public DiagramDescription getDescription() { return new DiagramDescription("(Easter Eggs)"); } diff --git a/src/net/sourceforge/plantuml/eggs/PSystemLost.java b/src/net/sourceforge/plantuml/eggs/PSystemLost.java index 3e83bfd86..ec6d2d45e 100644 --- a/src/net/sourceforge/plantuml/eggs/PSystemLost.java +++ b/src/net/sourceforge/plantuml/eggs/PSystemLost.java @@ -35,47 +35,15 @@ */ package net.sourceforge.plantuml.eggs; -import java.io.IOException; -import java.io.OutputStream; -import java.util.ArrayList; -import java.util.List; - -import net.sourceforge.plantuml.AbstractPSystem; -import net.sourceforge.plantuml.FileFormatOption; +import net.sourceforge.plantuml.PlainStringsDiagram; import net.sourceforge.plantuml.core.DiagramDescription; -import net.sourceforge.plantuml.core.ImageData; -import net.sourceforge.plantuml.graphic.GraphicStrings; -import net.sourceforge.plantuml.style.ClockwiseTopRightBottomLeft; -import net.sourceforge.plantuml.svek.TextBlockBackcolored; -import net.sourceforge.plantuml.ugraphic.ImageBuilder; -import net.sourceforge.plantuml.ugraphic.ImageParameter; -import net.sourceforge.plantuml.ugraphic.color.ColorMapperIdentity; -import net.sourceforge.plantuml.ugraphic.color.HColor; -public class PSystemLost extends AbstractPSystem { - - private final List strings = new ArrayList(); +public class PSystemLost extends PlainStringsDiagram { public PSystemLost() { strings.add("Thank you for choosing Oceanic Airlines."); } - @Override - final protected ImageData exportDiagramNow(OutputStream os, int num, FileFormatOption fileFormat, long seed) - throws IOException { - final TextBlockBackcolored result = getGraphicStrings(); - HColor backcolor = result.getBackcolor(); - final ImageParameter imageParameter = new ImageParameter(new ColorMapperIdentity(), false, null, - getMetadata(), null, ClockwiseTopRightBottomLeft.none(), backcolor); - final ImageBuilder imageBuilder = ImageBuilder.build(imageParameter); - imageBuilder.setUDrawable(result); - return imageBuilder.writeImageTOBEMOVED(fileFormat, seed, os); - } - - private TextBlockBackcolored getGraphicStrings() throws IOException { - return GraphicStrings.createBlackOnWhite(strings); - } - public DiagramDescription getDescription() { return new DiagramDescription("(Lost)"); } diff --git a/src/net/sourceforge/plantuml/eggs/PSystemRIP.java b/src/net/sourceforge/plantuml/eggs/PSystemRIP.java index f9fd923c5..c8a18c474 100644 --- a/src/net/sourceforge/plantuml/eggs/PSystemRIP.java +++ b/src/net/sourceforge/plantuml/eggs/PSystemRIP.java @@ -35,32 +35,16 @@ */ package net.sourceforge.plantuml.eggs; -import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; -import java.io.OutputStream; -import java.util.ArrayList; -import java.util.List; -import net.sourceforge.plantuml.AbstractPSystem; -import net.sourceforge.plantuml.FileFormatOption; +import net.sourceforge.plantuml.PlainStringsDiagram; import net.sourceforge.plantuml.core.DiagramDescription; -import net.sourceforge.plantuml.core.ImageData; import net.sourceforge.plantuml.graphic.GraphicPosition; -import net.sourceforge.plantuml.graphic.GraphicStrings; import net.sourceforge.plantuml.security.ImageIO; -import net.sourceforge.plantuml.style.ClockwiseTopRightBottomLeft; -import net.sourceforge.plantuml.svek.TextBlockBackcolored; -import net.sourceforge.plantuml.ugraphic.ImageBuilder; -import net.sourceforge.plantuml.ugraphic.ImageParameter; -import net.sourceforge.plantuml.ugraphic.color.ColorMapperIdentity; -import net.sourceforge.plantuml.ugraphic.color.HColor; -public class PSystemRIP extends AbstractPSystem { - - private final List strings = new ArrayList(); - private final BufferedImage image; +public class PSystemRIP extends PlainStringsDiagram { public PSystemRIP() throws IOException { strings.add(" To my Grandfather,"); @@ -77,22 +61,8 @@ public class PSystemRIP extends AbstractPSystem { final InputStream is = new ByteArrayInputStream(imm); image = ImageIO.read(is); is.close(); - } - @Override - final protected ImageData exportDiagramNow(OutputStream os, int num, FileFormatOption fileFormat, long seed) - throws IOException { - final TextBlockBackcolored result = getGraphicStrings(); - HColor backcolor = result.getBackcolor(); - final ImageParameter imageParameter = new ImageParameter(new ColorMapperIdentity(), false, null, - getMetadata(), null, ClockwiseTopRightBottomLeft.none(), backcolor); - final ImageBuilder imageBuilder = ImageBuilder.build(imageParameter); - imageBuilder.setUDrawable(result); - return imageBuilder.writeImageTOBEMOVED(fileFormat, seed, os); - } - - private TextBlockBackcolored getGraphicStrings() throws IOException { - return GraphicStrings.createBlackOnWhite(strings, image, GraphicPosition.BOTTOM); + imagePosition = GraphicPosition.BOTTOM; } public DiagramDescription getDescription() { diff --git a/src/net/sourceforge/plantuml/eggs/PSystemWelcome.java b/src/net/sourceforge/plantuml/eggs/PSystemWelcome.java index e0b762fef..567565416 100644 --- a/src/net/sourceforge/plantuml/eggs/PSystemWelcome.java +++ b/src/net/sourceforge/plantuml/eggs/PSystemWelcome.java @@ -36,25 +36,19 @@ package net.sourceforge.plantuml.eggs; import java.io.IOException; -import java.io.OutputStream; import java.util.ArrayList; import java.util.List; -import net.sourceforge.plantuml.AbstractPSystem; import net.sourceforge.plantuml.FileFormatOption; +import net.sourceforge.plantuml.PlainDiagram; import net.sourceforge.plantuml.core.DiagramDescription; -import net.sourceforge.plantuml.core.ImageData; import net.sourceforge.plantuml.graphic.GraphicPosition; import net.sourceforge.plantuml.graphic.GraphicStrings; -import net.sourceforge.plantuml.style.ClockwiseTopRightBottomLeft; +import net.sourceforge.plantuml.graphic.UDrawable; import net.sourceforge.plantuml.svek.TextBlockBackcolored; -import net.sourceforge.plantuml.ugraphic.ImageBuilder; -import net.sourceforge.plantuml.ugraphic.ImageParameter; -import net.sourceforge.plantuml.ugraphic.color.ColorMapperIdentity; -import net.sourceforge.plantuml.ugraphic.color.HColor; import net.sourceforge.plantuml.version.PSystemVersion; -public class PSystemWelcome extends AbstractPSystem { +public class PSystemWelcome extends PlainDiagram { private final List strings = new ArrayList(); private final GraphicPosition position; @@ -85,16 +79,8 @@ public class PSystemWelcome extends AbstractPSystem { } @Override - final protected ImageData exportDiagramNow(OutputStream os, int num, FileFormatOption fileFormat, long seed) - throws IOException { - final TextBlockBackcolored result = getGraphicStrings(); - HColor backcolor = result.getBackcolor(); - final ImageParameter imageParameter = new ImageParameter(new ColorMapperIdentity(), false, null, - getMetadata(), null, ClockwiseTopRightBottomLeft.none(), backcolor); - final ImageBuilder imageBuilder = ImageBuilder.build(imageParameter); - imageBuilder.setUDrawable(result); - // imageBuilder.setUDrawable(TextBlockUtils.withMargin(result, 4, 4)); - return imageBuilder.writeImageTOBEMOVED(fileFormat, seed, os); + protected UDrawable getRootDrawable(FileFormatOption fileFormatOption) throws IOException { + return getGraphicStrings(); } public TextBlockBackcolored getGraphicStrings() throws IOException { diff --git a/src/net/sourceforge/plantuml/error/PSystemError.java b/src/net/sourceforge/plantuml/error/PSystemError.java index 0b6dd4d0f..3b588cf76 100644 --- a/src/net/sourceforge/plantuml/error/PSystemError.java +++ b/src/net/sourceforge/plantuml/error/PSystemError.java @@ -46,7 +46,6 @@ import java.util.Collection; import java.util.Collections; import java.util.List; -import net.sourceforge.plantuml.AbstractPSystem; import net.sourceforge.plantuml.BackSlash; import net.sourceforge.plantuml.Dimension2DDouble; import net.sourceforge.plantuml.ErrorUml; @@ -54,9 +53,9 @@ import net.sourceforge.plantuml.FileFormat; import net.sourceforge.plantuml.FileFormatOption; import net.sourceforge.plantuml.FileImageData; import net.sourceforge.plantuml.LineLocation; +import net.sourceforge.plantuml.PlainDiagram; import net.sourceforge.plantuml.SpriteContainerEmpty; import net.sourceforge.plantuml.StringLocated; -import net.sourceforge.plantuml.api.ImageDataAbstract; import net.sourceforge.plantuml.api.ImageDataSimple; import net.sourceforge.plantuml.asciiart.UmlCharArea; import net.sourceforge.plantuml.core.DiagramDescription; @@ -74,21 +73,19 @@ import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.graphic.TextBlockRaw; import net.sourceforge.plantuml.graphic.TextBlockUtils; +import net.sourceforge.plantuml.graphic.UDrawable; import net.sourceforge.plantuml.graphic.VerticalAlignment; import net.sourceforge.plantuml.security.SecurityUtils; -import net.sourceforge.plantuml.style.ClockwiseTopRightBottomLeft; import net.sourceforge.plantuml.svek.GraphvizCrash; import net.sourceforge.plantuml.svek.TextBlockBackcolored; import net.sourceforge.plantuml.ugraphic.AffineTransformType; import net.sourceforge.plantuml.ugraphic.ImageBuilder; -import net.sourceforge.plantuml.ugraphic.ImageParameter; import net.sourceforge.plantuml.ugraphic.MinMax; import net.sourceforge.plantuml.ugraphic.PixelImage; import net.sourceforge.plantuml.ugraphic.UFont; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UImage; import net.sourceforge.plantuml.ugraphic.UTranslate; -import net.sourceforge.plantuml.ugraphic.color.ColorMapperIdentity; import net.sourceforge.plantuml.ugraphic.color.HColor; import net.sourceforge.plantuml.ugraphic.color.HColorSet; import net.sourceforge.plantuml.ugraphic.color.HColorSimple; @@ -98,11 +95,19 @@ import net.sourceforge.plantuml.version.LicenseInfo; import net.sourceforge.plantuml.version.PSystemVersion; import net.sourceforge.plantuml.version.Version; -public abstract class PSystemError extends AbstractPSystem { +public abstract class PSystemError extends PlainDiagram { protected List trace; protected ErrorUml singleError; + @Override + protected ImageBuilder adjustImageBuilder(ImageBuilder builder) { + return builder + .blackBackcolor() + .randomPixel() + .status(FileImageData.ERROR); + } + final protected StringLocated getLastLine() { return trace.get(trace.size() - 1); } @@ -227,14 +232,14 @@ public abstract class PSystemError extends AbstractPSystem { return new ImageDataSimple(1, 1); } + return super.exportDiagramNow(os, num, fileFormat, seed); + } + + @Override + protected UDrawable getRootDrawable(FileFormatOption fileFormatOption) throws IOException { final TextBlockBackcolored result = getGraphicalFormatted(); TextBlock udrawable; - HColor backcolor = result.getBackcolor(); - final ImageParameter imageParameter = new ImageParameter(new ColorMapperIdentity(), false, null, - getMetadata(), null, ClockwiseTopRightBottomLeft.none(), backcolor); - final ImageBuilder imageBuilder = ImageBuilder.build(imageParameter); - imageBuilder.setRandomPixel(true); if (getSource().getTotalLineCountLessThan5()) { udrawable = addWelcome(result); } else { @@ -251,10 +256,7 @@ public abstract class PSystemError extends AbstractPSystem { } else if (getSource().containsIgnoreCase("arecibo")) { udrawable = addMessageArecibo(udrawable); } - imageBuilder.setUDrawable(udrawable); - final ImageData imageData = imageBuilder.writeImageTOBEMOVED(fileFormat, seed(), os); - ((ImageDataAbstract) imageData).setStatus(FileImageData.ERROR); - return imageData; + return udrawable; } private void append(List result, LineLocation lineLocation) { diff --git a/src/net/sourceforge/plantuml/font/PSystemListFonts.java b/src/net/sourceforge/plantuml/font/PSystemListFonts.java index cdbf6614f..74b3e7ae7 100644 --- a/src/net/sourceforge/plantuml/font/PSystemListFonts.java +++ b/src/net/sourceforge/plantuml/font/PSystemListFonts.java @@ -36,26 +36,12 @@ package net.sourceforge.plantuml.font; import java.awt.GraphicsEnvironment; -import java.io.IOException; -import java.io.OutputStream; -import java.util.ArrayList; -import java.util.List; -import net.sourceforge.plantuml.AbstractPSystem; -import net.sourceforge.plantuml.FileFormatOption; +import net.sourceforge.plantuml.PlainStringsDiagram; import net.sourceforge.plantuml.core.DiagramDescription; -import net.sourceforge.plantuml.core.ImageData; -import net.sourceforge.plantuml.graphic.GraphicStrings; -import net.sourceforge.plantuml.style.ClockwiseTopRightBottomLeft; -import net.sourceforge.plantuml.svek.TextBlockBackcolored; -import net.sourceforge.plantuml.ugraphic.ImageBuilder; -import net.sourceforge.plantuml.ugraphic.ImageParameter; -import net.sourceforge.plantuml.ugraphic.color.ColorMapperIdentity; -import net.sourceforge.plantuml.ugraphic.color.HColor; -public class PSystemListFonts extends AbstractPSystem { - private final List strings = new ArrayList(); +public class PSystemListFonts extends PlainStringsDiagram { public PSystemListFonts(String text) { strings.add(" Fonts available:"); @@ -74,22 +60,6 @@ public class PSystemListFonts extends AbstractPSystem { } - @Override - final protected ImageData exportDiagramNow(OutputStream os, int num, FileFormatOption fileFormat, long seed) - throws IOException { - final TextBlockBackcolored result = getGraphicStrings(); - HColor backcolor = result.getBackcolor(); - final ImageParameter imageParameter = new ImageParameter(new ColorMapperIdentity(), false, null, - getMetadata(), null, ClockwiseTopRightBottomLeft.none(), backcolor); - final ImageBuilder imageBuilder = ImageBuilder.build(imageParameter); - imageBuilder.setUDrawable(result); - return imageBuilder.writeImageTOBEMOVED(fileFormat, seed, os); - } - - private TextBlockBackcolored getGraphicStrings() throws IOException { - return GraphicStrings.createBlackOnWhite(strings); - } - public DiagramDescription getDescription() { return new DiagramDescription("(List fonts)"); } diff --git a/src/net/sourceforge/plantuml/gitlog/GitDiagram.java b/src/net/sourceforge/plantuml/gitlog/GitDiagram.java index 59fe66f9a..e57614083 100644 --- a/src/net/sourceforge/plantuml/gitlog/GitDiagram.java +++ b/src/net/sourceforge/plantuml/gitlog/GitDiagram.java @@ -40,23 +40,20 @@ import java.io.IOException; import java.io.OutputStream; import java.util.Collection; -import net.sourceforge.plantuml.AnnotatedWorker; import net.sourceforge.plantuml.FileFormatOption; -import net.sourceforge.plantuml.ISkinParam; import net.sourceforge.plantuml.UmlDiagram; import net.sourceforge.plantuml.UmlDiagramType; import net.sourceforge.plantuml.core.DiagramDescription; import net.sourceforge.plantuml.core.ImageData; import net.sourceforge.plantuml.graphic.InnerStrategy; import net.sourceforge.plantuml.graphic.StringBounder; -import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.svek.TextBlockBackcolored; -import net.sourceforge.plantuml.ugraphic.ImageBuilder; -import net.sourceforge.plantuml.ugraphic.ImageParameter; import net.sourceforge.plantuml.ugraphic.MinMax; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.color.HColor; +import static net.sourceforge.plantuml.ugraphic.ImageBuilder.styledImageBuilder; + public class GitDiagram extends UmlDiagram { private final Collection gnodes; @@ -76,15 +73,8 @@ public class GitDiagram extends UmlDiagram { protected ImageData exportDiagramInternal(OutputStream os, int index, FileFormatOption fileFormatOption) throws IOException { - final ISkinParam skinParam = getSkinParam(); - final ImageParameter imageParameter = new ImageParameter(this, fileFormatOption); - final ImageBuilder imageBuilder = ImageBuilder.build(imageParameter); - TextBlock result = getTextBlock(); - result = new AnnotatedWorker(this, skinParam, fileFormatOption.getDefaultStringBounder(getSkinParam())) - .addAdd(result); - imageBuilder.setUDrawable(result); - - return imageBuilder.writeImageTOBEMOVED(fileFormatOption, 0, os); + return styledImageBuilder(this, getTextBlock(), index, fileFormatOption, 0) + .write(os); } private void drawInternal(UGraphic ug) { diff --git a/src/net/sourceforge/plantuml/help/Help.java b/src/net/sourceforge/plantuml/help/Help.java index 566555882..15b3f5cc1 100644 --- a/src/net/sourceforge/plantuml/help/Help.java +++ b/src/net/sourceforge/plantuml/help/Help.java @@ -53,10 +53,9 @@ import net.sourceforge.plantuml.cucadiagram.Display; import net.sourceforge.plantuml.graphic.FontConfiguration; import net.sourceforge.plantuml.graphic.HorizontalAlignment; import net.sourceforge.plantuml.style.ClockwiseTopRightBottomLeft; -import net.sourceforge.plantuml.ugraphic.ImageBuilder; -import net.sourceforge.plantuml.ugraphic.ImageParameter; import net.sourceforge.plantuml.ugraphic.UFont; -import net.sourceforge.plantuml.ugraphic.color.ColorMapperIdentity; + +import static net.sourceforge.plantuml.ugraphic.ImageBuilder.styledImageBuilder; public class Help extends UmlDiagram { @@ -79,16 +78,18 @@ public class Help extends UmlDiagram { final Sheet sheet = Parser.build(fontConfiguration, HorizontalAlignment.LEFT, getSkinParam(), CreoleMode.FULL) .createSheet(display); final SheetBlock1 sheetBlock = new SheetBlock1(sheet, LineBreakStrategy.NONE, 0); - final ImageParameter imageParameter = new ImageParameter(new ColorMapperIdentity(), false, null, null, - null, ClockwiseTopRightBottomLeft.none(), null); - - final ImageBuilder builder = ImageBuilder.build(imageParameter); - builder.setUDrawable(sheetBlock); - return builder.writeImageTOBEMOVED(fileFormat, 0, os); + return styledImageBuilder(this, sheetBlock, 1, fileFormat, 0) + .annotations(false) + .write(os); } public void add(CharSequence line) { this.lines.add(line); } + @Override + public ClockwiseTopRightBottomLeft getDefaultMargins() { + return ClockwiseTopRightBottomLeft.same(0); + } + } diff --git a/src/net/sourceforge/plantuml/jsondiagram/JsonDiagram.java b/src/net/sourceforge/plantuml/jsondiagram/JsonDiagram.java index d7a131857..b6a066e63 100644 --- a/src/net/sourceforge/plantuml/jsondiagram/JsonDiagram.java +++ b/src/net/sourceforge/plantuml/jsondiagram/JsonDiagram.java @@ -40,9 +40,7 @@ import java.io.IOException; import java.io.OutputStream; import java.util.List; -import net.sourceforge.plantuml.AnnotatedWorker; import net.sourceforge.plantuml.FileFormatOption; -import net.sourceforge.plantuml.ISkinParam; import net.sourceforge.plantuml.TitledDiagram; import net.sourceforge.plantuml.UmlDiagramType; import net.sourceforge.plantuml.core.DiagramDescription; @@ -57,13 +55,13 @@ import net.sourceforge.plantuml.graphic.TextBlockUtils; import net.sourceforge.plantuml.json.JsonArray; import net.sourceforge.plantuml.json.JsonValue; import net.sourceforge.plantuml.svek.TextBlockBackcolored; -import net.sourceforge.plantuml.ugraphic.ImageBuilder; -import net.sourceforge.plantuml.ugraphic.ImageParameter; import net.sourceforge.plantuml.ugraphic.MinMax; import net.sourceforge.plantuml.ugraphic.UFont; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.color.HColor; +import static net.sourceforge.plantuml.ugraphic.ImageBuilder.styledImageBuilder; + public class JsonDiagram extends TitledDiagram { private final JsonValue root; @@ -91,15 +89,8 @@ public class JsonDiagram extends TitledDiagram { protected ImageData exportDiagramNow(OutputStream os, int index, FileFormatOption fileFormatOption, long seed) throws IOException { - final ISkinParam skinParam = getSkinParam(); - final ImageParameter imageParameter = new ImageParameter(this, fileFormatOption); - final ImageBuilder imageBuilder = ImageBuilder.build(imageParameter); - TextBlock result = getTextBlock(); - result = new AnnotatedWorker(this, skinParam, fileFormatOption.getDefaultStringBounder(getSkinParam())) - .addAdd(result); - imageBuilder.setUDrawable(result); - - return imageBuilder.writeImageTOBEMOVED(0, os); + return styledImageBuilder(this, getTextBlock(), index, fileFormatOption, 0) + .write(os); } private void drawInternal(UGraphic ug) { diff --git a/src/net/sourceforge/plantuml/math/ScientificEquationSafe.java b/src/net/sourceforge/plantuml/math/ScientificEquationSafe.java index 4ce30742d..537a1da15 100644 --- a/src/net/sourceforge/plantuml/math/ScientificEquationSafe.java +++ b/src/net/sourceforge/plantuml/math/ScientificEquationSafe.java @@ -50,16 +50,15 @@ import net.sourceforge.plantuml.api.ImageDataSimple; import net.sourceforge.plantuml.core.ImageData; import net.sourceforge.plantuml.eps.EpsGraphics; import net.sourceforge.plantuml.graphic.GraphicStrings; -import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.security.ImageIO; -import net.sourceforge.plantuml.style.ClockwiseTopRightBottomLeft; +import net.sourceforge.plantuml.svek.TextBlockBackcolored; import net.sourceforge.plantuml.ugraphic.AffineTransformType; -import net.sourceforge.plantuml.ugraphic.ImageBuilder; -import net.sourceforge.plantuml.ugraphic.ImageParameter; import net.sourceforge.plantuml.ugraphic.MutableImage; import net.sourceforge.plantuml.ugraphic.PixelImage; import net.sourceforge.plantuml.ugraphic.UImageSvg; -import net.sourceforge.plantuml.ugraphic.color.ColorMapperIdentity; + +import static net.sourceforge.plantuml.ugraphic.ImageBuilder.plainImageBuilder; +import static net.sourceforge.plantuml.ugraphic.ImageBuilder.plainPngBuilder; public class ScientificEquationSafe { @@ -100,10 +99,10 @@ public class ScientificEquationSafe { return svg; } catch (Exception e) { printTrace(e); - final ImageBuilder imageBuilder = getRollback(); final ByteArrayOutputStream baos = new ByteArrayOutputStream(); try { - dimSvg = imageBuilder.writeImageTOBEMOVED(new FileFormatOption(FileFormat.SVG), 42, baos); + dimSvg = plainImageBuilder(getRollback(), new FileFormatOption(FileFormat.SVG), 42) + .write(baos); } catch (IOException e1) { return null; } @@ -116,11 +115,9 @@ public class ScientificEquationSafe { return equation.getImage(foregroundColor, backgroundColor); } catch (Exception e) { printTrace(e); - final ImageBuilder imageBuilder = getRollback(); - final ByteArrayOutputStream baos = new ByteArrayOutputStream(); try { - imageBuilder.writeImageTOBEMOVED(new FileFormatOption(FileFormat.PNG), 42, baos); - return new PixelImage(ImageIO.read(new ByteArrayInputStream(baos.toByteArray())), + final byte[] bytes = plainPngBuilder(getRollback()).writeByteArray(); + return new PixelImage(ImageIO.read(new ByteArrayInputStream(bytes)), AffineTransformType.TYPE_BILINEAR); } catch (IOException e1) { return null; @@ -136,13 +133,8 @@ public class ScientificEquationSafe { e.printStackTrace(); } - private ImageBuilder getRollback() { - final TextBlock block = GraphicStrings.createBlackOnWhiteMonospaced(Arrays.asList(formula)); - final ImageParameter imageParameter = new ImageParameter(new ColorMapperIdentity(), false, null, null, - null, ClockwiseTopRightBottomLeft.none(), null); - final ImageBuilder imageBuilder = ImageBuilder.build(imageParameter); - imageBuilder.setUDrawable(block); - return imageBuilder; + private TextBlockBackcolored getRollback() { + return GraphicStrings.createBlackOnWhiteMonospaced(Arrays.asList(formula)); } public ImageData export(OutputStream os, FileFormatOption fileFormat, float scale, Color foregroundColor, diff --git a/src/net/sourceforge/plantuml/mindmap/MindMapDiagram.java b/src/net/sourceforge/plantuml/mindmap/MindMapDiagram.java index 8dcf49302..34aee8cf0 100644 --- a/src/net/sourceforge/plantuml/mindmap/MindMapDiagram.java +++ b/src/net/sourceforge/plantuml/mindmap/MindMapDiagram.java @@ -40,7 +40,6 @@ import java.awt.geom.Rectangle2D; import java.io.IOException; import java.io.OutputStream; -import net.sourceforge.plantuml.AnnotatedWorker; import net.sourceforge.plantuml.Dimension2DDouble; import net.sourceforge.plantuml.Direction; import net.sourceforge.plantuml.FileFormatOption; @@ -52,17 +51,16 @@ import net.sourceforge.plantuml.core.ImageData; import net.sourceforge.plantuml.cucadiagram.Display; import net.sourceforge.plantuml.graphic.InnerStrategy; import net.sourceforge.plantuml.graphic.StringBounder; -import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.style.NoStyleAvailableException; import net.sourceforge.plantuml.style.StyleBuilder; import net.sourceforge.plantuml.svek.TextBlockBackcolored; -import net.sourceforge.plantuml.ugraphic.ImageBuilder; -import net.sourceforge.plantuml.ugraphic.ImageParameter; import net.sourceforge.plantuml.ugraphic.MinMax; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UTranslate; import net.sourceforge.plantuml.ugraphic.color.HColor; +import static net.sourceforge.plantuml.ugraphic.ImageBuilder.styledImageBuilder; + public class MindMapDiagram extends UmlDiagram { private Branch left = new Branch(); @@ -86,15 +84,8 @@ public class MindMapDiagram extends UmlDiagram { protected ImageData exportDiagramInternal(OutputStream os, int index, FileFormatOption fileFormatOption) throws IOException { - final ImageParameter imageParameter = new ImageParameter(this, fileFormatOption); - final ImageBuilder imageBuilder = ImageBuilder.build(imageParameter); - - TextBlock result = getTextBlock(); - result = new AnnotatedWorker(this, getSkinParam(), fileFormatOption.getDefaultStringBounder(getSkinParam())) - .addAdd(result); - imageBuilder.setUDrawable(result); - - return imageBuilder.writeImageTOBEMOVED(seed(), os); + return styledImageBuilder(this, getTextBlock(), index, fileFormatOption, seed()) + .write(os); } private TextBlockBackcolored getTextBlock() { diff --git a/src/net/sourceforge/plantuml/nwdiag/NwDiagram.java b/src/net/sourceforge/plantuml/nwdiag/NwDiagram.java index 3a4c74c48..d960c908c 100644 --- a/src/net/sourceforge/plantuml/nwdiag/NwDiagram.java +++ b/src/net/sourceforge/plantuml/nwdiag/NwDiagram.java @@ -46,10 +46,8 @@ import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; -import net.sourceforge.plantuml.AnnotatedWorker; import net.sourceforge.plantuml.ColorParam; import net.sourceforge.plantuml.FileFormatOption; -import net.sourceforge.plantuml.ISkinParam; import net.sourceforge.plantuml.SpriteContainerEmpty; import net.sourceforge.plantuml.UmlDiagram; import net.sourceforge.plantuml.UmlDiagramType; @@ -66,8 +64,6 @@ import net.sourceforge.plantuml.graphic.TextBlockUtils; import net.sourceforge.plantuml.graphic.UDrawable; import net.sourceforge.plantuml.style.ClockwiseTopRightBottomLeft; import net.sourceforge.plantuml.svek.TextBlockBackcolored; -import net.sourceforge.plantuml.ugraphic.ImageBuilder; -import net.sourceforge.plantuml.ugraphic.ImageParameter; import net.sourceforge.plantuml.ugraphic.MinMax; import net.sourceforge.plantuml.ugraphic.UEmpty; import net.sourceforge.plantuml.ugraphic.UFont; @@ -76,6 +72,8 @@ import net.sourceforge.plantuml.ugraphic.UTranslate; import net.sourceforge.plantuml.ugraphic.color.HColor; import net.sourceforge.plantuml.ugraphic.color.HColorUtils; +import static net.sourceforge.plantuml.ugraphic.ImageBuilder.styledImageBuilder; + public class NwDiagram extends UmlDiagram { private boolean initDone; @@ -217,15 +215,8 @@ public class NwDiagram extends UmlDiagram { protected ImageData exportDiagramInternal(OutputStream os, int index, FileFormatOption fileFormatOption) throws IOException { - final ISkinParam skinParam = getSkinParam(); - final ImageParameter imageParameter = new ImageParameter(this, fileFormatOption); - final ImageBuilder imageBuilder = ImageBuilder.build(imageParameter); - TextBlock result = getTextBlock(); - result = new AnnotatedWorker(this, skinParam, fileFormatOption.getDefaultStringBounder(getSkinParam())) - .addAdd(result); - imageBuilder.setUDrawable(result); - - return imageBuilder.writeImageTOBEMOVED(0, os); + return styledImageBuilder(this, getTextBlock(), index, fileFormatOption, 0) + .write(os); } private TextBlockBackcolored getTextBlock() { diff --git a/src/net/sourceforge/plantuml/openiconic/PSystemListOpenIconic.java b/src/net/sourceforge/plantuml/openiconic/PSystemListOpenIconic.java index 75534cc12..8b59b59a8 100644 --- a/src/net/sourceforge/plantuml/openiconic/PSystemListOpenIconic.java +++ b/src/net/sourceforge/plantuml/openiconic/PSystemListOpenIconic.java @@ -39,43 +39,23 @@ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; -import java.io.OutputStream; import java.util.ArrayList; import java.util.List; -import net.sourceforge.plantuml.AbstractPSystem; import net.sourceforge.plantuml.FileFormatOption; +import net.sourceforge.plantuml.PlainDiagram; import net.sourceforge.plantuml.core.DiagramDescription; -import net.sourceforge.plantuml.core.ImageData; import net.sourceforge.plantuml.donors.PSystemDonors; import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.graphic.TextBlockHorizontal; import net.sourceforge.plantuml.graphic.UDrawable; import net.sourceforge.plantuml.graphic.VerticalAlignment; import net.sourceforge.plantuml.openiconic.data.DummyIcon; -import net.sourceforge.plantuml.style.ClockwiseTopRightBottomLeft; -import net.sourceforge.plantuml.ugraphic.ImageBuilder; -import net.sourceforge.plantuml.ugraphic.ImageParameter; -import net.sourceforge.plantuml.ugraphic.color.ColorMapperIdentity; -import net.sourceforge.plantuml.ugraphic.color.HColor; -import net.sourceforge.plantuml.ugraphic.color.HColorUtils; -public class PSystemListOpenIconic extends AbstractPSystem { +public class PSystemListOpenIconic extends PlainDiagram { @Override - final protected ImageData exportDiagramNow(OutputStream os, int num, FileFormatOption fileFormat, long seed) - throws IOException { - final UDrawable result = getGraphicStrings(); - HColor backcolor = HColorUtils.WHITE; - final String metadata = fileFormat.isWithMetadata() ? getMetadata() : null; - final ImageParameter imageParameter = new ImageParameter(new ColorMapperIdentity(), false, null, metadata, - null, ClockwiseTopRightBottomLeft.none(), backcolor); - final ImageBuilder imageBuilder = ImageBuilder.build(imageParameter); - imageBuilder.setUDrawable(result); - return imageBuilder.writeImageTOBEMOVED(fileFormat, seed, os); - } - - private UDrawable getGraphicStrings() throws IOException { + protected UDrawable getRootDrawable(FileFormatOption fileFormatOption) throws IOException { final List lines = new ArrayList(); lines.add("List Open Iconic"); lines.add("Credit to"); diff --git a/src/net/sourceforge/plantuml/openiconic/PSystemOpenIconic.java b/src/net/sourceforge/plantuml/openiconic/PSystemOpenIconic.java index 98204719e..df037e186 100644 --- a/src/net/sourceforge/plantuml/openiconic/PSystemOpenIconic.java +++ b/src/net/sourceforge/plantuml/openiconic/PSystemOpenIconic.java @@ -35,22 +35,14 @@ */ package net.sourceforge.plantuml.openiconic; -import java.io.IOException; -import java.io.OutputStream; - -import net.sourceforge.plantuml.AbstractPSystem; import net.sourceforge.plantuml.FileFormatOption; -import net.sourceforge.plantuml.SkinParam; -import net.sourceforge.plantuml.UseStyle; +import net.sourceforge.plantuml.PlainDiagram; import net.sourceforge.plantuml.core.DiagramDescription; -import net.sourceforge.plantuml.core.ImageData; +import net.sourceforge.plantuml.graphic.UDrawable; import net.sourceforge.plantuml.style.ClockwiseTopRightBottomLeft; -import net.sourceforge.plantuml.ugraphic.ImageBuilder; -import net.sourceforge.plantuml.ugraphic.ImageParameter; -import net.sourceforge.plantuml.ugraphic.color.ColorMapperIdentity; import net.sourceforge.plantuml.ugraphic.color.HColorUtils; -public class PSystemOpenIconic extends AbstractPSystem { +public class PSystemOpenIconic extends PlainDiagram { private final String iconName; private final double factor; @@ -61,26 +53,11 @@ public class PSystemOpenIconic extends AbstractPSystem { } @Override - final protected ImageData exportDiagramNow(OutputStream os, int num, FileFormatOption fileFormat, long seed) - throws IOException { + protected UDrawable getRootDrawable(FileFormatOption fileFormatOption) { final OpenIcon icon = OpenIcon.retrieve(iconName); // final Dimension2D dim = new Dimension2DDouble(100, 100); - final int margin1; - final int margin2; - if (UseStyle.useBetaStyle()) { - margin1 = SkinParam.zeroMargin(5); - margin2 = SkinParam.zeroMargin(5); - } else { - margin1 = 5; - margin2 = 5; - } - final ClockwiseTopRightBottomLeft margins = ClockwiseTopRightBottomLeft.margin1margin2(margin1, margin2); - final ImageParameter imageParameter = new ImageParameter(new ColorMapperIdentity(), false, null, null, - null, margins, null); - final ImageBuilder imageBuilder = ImageBuilder.build(imageParameter); - imageBuilder.setUDrawable(icon.asTextBlock(HColorUtils.BLACK, factor)); - return imageBuilder.writeImageTOBEMOVED(fileFormat, seed, os); + return icon.asTextBlock(HColorUtils.BLACK, factor); // UGraphic2 ug = fileFormat.createUGraphic(dim); // ug = (UGraphic2) ug.apply(new UTranslate(10, 10)); @@ -103,4 +80,9 @@ public class PSystemOpenIconic extends AbstractPSystem { return new DiagramDescription("(Open iconic)"); } + @Override + public ClockwiseTopRightBottomLeft getDefaultMargins() { + return ClockwiseTopRightBottomLeft.same(5); + } + } diff --git a/src/net/sourceforge/plantuml/oregon/PSystemOregon.java b/src/net/sourceforge/plantuml/oregon/PSystemOregon.java index f94e711c5..5bbf51c16 100644 --- a/src/net/sourceforge/plantuml/oregon/PSystemOregon.java +++ b/src/net/sourceforge/plantuml/oregon/PSystemOregon.java @@ -36,24 +36,18 @@ package net.sourceforge.plantuml.oregon; import java.io.IOException; -import java.io.OutputStream; import java.util.ArrayList; import java.util.List; -import net.sourceforge.plantuml.AbstractPSystem; import net.sourceforge.plantuml.FileFormatOption; +import net.sourceforge.plantuml.PlainDiagram; import net.sourceforge.plantuml.StringUtils; import net.sourceforge.plantuml.core.DiagramDescription; -import net.sourceforge.plantuml.core.ImageData; -import net.sourceforge.plantuml.graphic.GraphicStrings; -import net.sourceforge.plantuml.style.ClockwiseTopRightBottomLeft; -import net.sourceforge.plantuml.svek.TextBlockBackcolored; -import net.sourceforge.plantuml.ugraphic.ImageBuilder; -import net.sourceforge.plantuml.ugraphic.ImageParameter; -import net.sourceforge.plantuml.ugraphic.color.ColorMapperIdentity; -import net.sourceforge.plantuml.ugraphic.color.HColor; +import net.sourceforge.plantuml.graphic.UDrawable; -public class PSystemOregon extends AbstractPSystem { +import static net.sourceforge.plantuml.graphic.GraphicStrings.createGreenOnBlackMonospaced; + +public class PSystemOregon extends PlainDiagram { private Screen screen; private List inputs; @@ -98,19 +92,8 @@ public class PSystemOregon extends AbstractPSystem { } @Override - final protected ImageData exportDiagramNow(OutputStream os, int num, FileFormatOption fileFormat, long seed) - throws IOException { - final TextBlockBackcolored result = getGraphicStrings(); - HColor backcolor = result.getBackcolor(); - final ImageParameter imageParameter = new ImageParameter(new ColorMapperIdentity(), false, null, - getMetadata(), null, ClockwiseTopRightBottomLeft.none(), backcolor); - final ImageBuilder imageBuilder = ImageBuilder.build(imageParameter); - imageBuilder.setUDrawable(result); - return imageBuilder.writeImageTOBEMOVED(fileFormat, seed, os); - } - - private TextBlockBackcolored getGraphicStrings() throws IOException { - return GraphicStrings.createGreenOnBlackMonospaced(getScreen().getLines()); + protected UDrawable getRootDrawable(FileFormatOption fileFormatOption) throws IOException { + return createGreenOnBlackMonospaced(getScreen().getLines()); } public DiagramDescription getDescription() { diff --git a/src/net/sourceforge/plantuml/project/GanttDiagram.java b/src/net/sourceforge/plantuml/project/GanttDiagram.java index db7321735..be3a1d785 100644 --- a/src/net/sourceforge/plantuml/project/GanttDiagram.java +++ b/src/net/sourceforge/plantuml/project/GanttDiagram.java @@ -49,7 +49,6 @@ import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; -import net.sourceforge.plantuml.AnnotatedWorker; import net.sourceforge.plantuml.Dimension2DDouble; import net.sourceforge.plantuml.FileFormatOption; import net.sourceforge.plantuml.TitledDiagram; @@ -61,7 +60,6 @@ import net.sourceforge.plantuml.core.ImageData; import net.sourceforge.plantuml.cucadiagram.Display; import net.sourceforge.plantuml.graphic.InnerStrategy; import net.sourceforge.plantuml.graphic.StringBounder; -import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.project.core.Moment; import net.sourceforge.plantuml.project.core.MomentImpl; import net.sourceforge.plantuml.project.core.PrintScale; @@ -93,8 +91,6 @@ import net.sourceforge.plantuml.style.SName; import net.sourceforge.plantuml.style.Style; import net.sourceforge.plantuml.style.StyleSignature; import net.sourceforge.plantuml.svek.TextBlockBackcolored; -import net.sourceforge.plantuml.ugraphic.ImageBuilder; -import net.sourceforge.plantuml.ugraphic.ImageParameter; import net.sourceforge.plantuml.ugraphic.MinMax; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UTranslate; @@ -102,6 +98,8 @@ import net.sourceforge.plantuml.ugraphic.color.HColor; import net.sourceforge.plantuml.ugraphic.color.HColorSet; import net.sourceforge.plantuml.ugraphic.color.HColorUtils; +import static net.sourceforge.plantuml.ugraphic.ImageBuilder.styledImageBuilder; + public class GanttDiagram extends TitledDiagram implements ToTaskDraw, WithSprite { private final Map draws = new LinkedHashMap(); @@ -167,15 +165,9 @@ public class GanttDiagram extends TitledDiagram implements ToTaskDraw, WithSprit @Override protected ImageData exportDiagramNow(OutputStream os, int index, FileFormatOption fileFormatOption, long seed) throws IOException { - final ImageParameter imageParameter = new ImageParameter(this, fileFormatOption); - final ImageBuilder imageBuilder = ImageBuilder.build(imageParameter); - final StringBounder stringBounder = fileFormatOption.getDefaultStringBounder(getSkinParam()); - TextBlock result = getTextBlock(stringBounder); - result = new AnnotatedWorker(this, getSkinParam(), stringBounder).addAdd(result); - imageBuilder.setUDrawable(result); - - return imageBuilder.writeImageTOBEMOVED(seed, os); + return styledImageBuilder(this, getTextBlock(stringBounder), index, fileFormatOption, seed()) + .write(os); } public void setPrintScale(PrintScale printScale) { diff --git a/src/net/sourceforge/plantuml/salt/PSystemSalt.java b/src/net/sourceforge/plantuml/salt/PSystemSalt.java index 624a7da30..126a1bd14 100644 --- a/src/net/sourceforge/plantuml/salt/PSystemSalt.java +++ b/src/net/sourceforge/plantuml/salt/PSystemSalt.java @@ -44,10 +44,8 @@ import java.util.Collection; import java.util.Iterator; import java.util.List; -import net.sourceforge.plantuml.AnnotatedWorker; import net.sourceforge.plantuml.Dimension2DDouble; import net.sourceforge.plantuml.FileFormatOption; -import net.sourceforge.plantuml.ISkinParam; import net.sourceforge.plantuml.Log; import net.sourceforge.plantuml.ScaleSimple; import net.sourceforge.plantuml.TitledDiagram; @@ -63,7 +61,6 @@ import net.sourceforge.plantuml.core.DiagramDescription; import net.sourceforge.plantuml.core.ImageData; import net.sourceforge.plantuml.graphic.InnerStrategy; import net.sourceforge.plantuml.graphic.StringBounder; -import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.salt.element.Element; import net.sourceforge.plantuml.salt.factory.AbstractElementFactoryComplex; import net.sourceforge.plantuml.salt.factory.ElementFactory; @@ -87,14 +84,14 @@ import net.sourceforge.plantuml.salt.factory.ElementFactoryTree; import net.sourceforge.plantuml.sprite.Sprite; import net.sourceforge.plantuml.style.ClockwiseTopRightBottomLeft; import net.sourceforge.plantuml.svek.TextBlockBackcolored; -import net.sourceforge.plantuml.ugraphic.ImageBuilder; -import net.sourceforge.plantuml.ugraphic.ImageParameter; import net.sourceforge.plantuml.ugraphic.MinMax; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.color.HColor; import net.sourceforge.plantuml.ugraphic.color.HColorUtils; import net.sourceforge.plantuml.ugraphic.color.NoSuchColorException; +import static net.sourceforge.plantuml.ugraphic.ImageBuilder.styledImageBuilder; + public class PSystemSalt extends TitledDiagram implements WithSprite { private final List data; @@ -115,25 +112,14 @@ public class PSystemSalt extends TitledDiagram implements WithSprite { } @Override - final protected ImageData exportDiagramNow(OutputStream os, int num, FileFormatOption fileFormatOption, long seed) + final protected ImageData exportDiagramNow(OutputStream os, int index, FileFormatOption fileFormatOption, long seed) throws IOException { try { final Element salt = createElement(manageSprite()); - final StringBounder stringBounder = fileFormatOption.getDefaultStringBounder(getSkinParam()); final Dimension2D size = salt.getPreferredDimension(stringBounder, 0, 0); - - final ISkinParam skinParam = getSkinParam(); - final ImageParameter imageParameter = new ImageParameter(this, fileFormatOption); - - final ImageBuilder imageBuilder = ImageBuilder.build(imageParameter); - - TextBlock result = getTextBlock(salt, size); - - result = new AnnotatedWorker(this, skinParam, stringBounder).addAdd(result); - imageBuilder.setUDrawable(result); - - return imageBuilder.writeImageTOBEMOVED(seed(), os); + return styledImageBuilder(this, getTextBlock(salt, size), index, fileFormatOption, seed()) + .write(os); } catch (Exception e) { e.printStackTrace(); UmlDiagram.exportDiagramError(os, e, fileFormatOption, seed, getMetadata(), "none", diff --git a/src/net/sourceforge/plantuml/sdot/CucaDiagramFileMakerSmetana.java b/src/net/sourceforge/plantuml/sdot/CucaDiagramFileMakerSmetana.java index 0f435ec42..b7f1d7211 100644 --- a/src/net/sourceforge/plantuml/sdot/CucaDiagramFileMakerSmetana.java +++ b/src/net/sourceforge/plantuml/sdot/CucaDiagramFileMakerSmetana.java @@ -42,6 +42,7 @@ import static gen.lib.cgraph.node__c.agnode; import static gen.lib.cgraph.subg__c.agsubg; import static gen.lib.gvc.gvc__c.gvContext; import static gen.lib.gvc.gvlayout__c.gvLayoutJobs; +import static net.sourceforge.plantuml.ugraphic.ImageBuilder.styledImageBuilder; import java.awt.geom.Dimension2D; import java.awt.geom.Point2D; @@ -63,7 +64,6 @@ import h.ST_Agraphinfo_t; import h.ST_Agrec_s; import h.ST_GVC_s; import h.ST_boxf; -import net.sourceforge.plantuml.AnnotatedWorker; import net.sourceforge.plantuml.FileFormatOption; import net.sourceforge.plantuml.FontParam; import net.sourceforge.plantuml.ISkinParam; @@ -100,8 +100,6 @@ import net.sourceforge.plantuml.svek.GraphvizCrash; import net.sourceforge.plantuml.svek.IEntityImage; import net.sourceforge.plantuml.svek.SvekNode; import net.sourceforge.plantuml.svek.TextBlockBackcolored; -import net.sourceforge.plantuml.ugraphic.ImageBuilder; -import net.sourceforge.plantuml.ugraphic.ImageParameter; import net.sourceforge.plantuml.ugraphic.MinMax; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UStroke; @@ -448,19 +446,12 @@ public class CucaDiagramFileMakerSmetana implements CucaDiagramFileMaker { // DebugUtils.printDebugEdge(e); // } - final ImageParameter imageParameter = new ImageParameter(diagram, fileFormatOption); - - final ImageBuilder imageBuilder = ImageBuilder.build(imageParameter); - final MinMax minMax = TextBlockUtils.getMinMax(new Drawing(null, null), stringBounder, false); - final AnnotatedWorker annotatedWorker = new AnnotatedWorker(diagram, diagram.getSkinParam(), - fileFormatOption.getDefaultStringBounder(diagram.getSkinParam())); - // imageBuilder.setUDrawable(new Drawing(new YMirror(dim.getHeight()))); - imageBuilder.setUDrawable(annotatedWorker.addAdd(new Drawing(new YMirror(minMax.getMaxY()), minMax))); - - return imageBuilder.writeImageTOBEMOVED(diagram.seed(), os); + final TextBlock drawable = new Drawing(new YMirror(minMax.getMaxY()), minMax); + return styledImageBuilder(diagram, drawable, 1, fileFormatOption, diagram.seed()) + .write(os); } catch (Throwable e) { SmetanaDebug.printMe(); UmlDiagram.exportDiagramError(os, e, fileFormatOption, diagram.seed(), diagram.getMetadata(), diff --git a/src/net/sourceforge/plantuml/sequencediagram/graphic/SequenceDiagramFileMakerPuma2.java b/src/net/sourceforge/plantuml/sequencediagram/graphic/SequenceDiagramFileMakerPuma2.java index 7a3e43cdc..662811bb9 100644 --- a/src/net/sourceforge/plantuml/sequencediagram/graphic/SequenceDiagramFileMakerPuma2.java +++ b/src/net/sourceforge/plantuml/sequencediagram/graphic/SequenceDiagramFileMakerPuma2.java @@ -67,12 +67,12 @@ import net.sourceforge.plantuml.skin.rose.Rose; import net.sourceforge.plantuml.style.SName; import net.sourceforge.plantuml.style.Style; import net.sourceforge.plantuml.style.StyleSignature; -import net.sourceforge.plantuml.ugraphic.ImageBuilder; -import net.sourceforge.plantuml.ugraphic.ImageParameter; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UTranslate; import net.sourceforge.plantuml.ugraphic.color.HColor; +import static net.sourceforge.plantuml.ugraphic.ImageBuilder.styledImageBuilder; + public class SequenceDiagramFileMakerPuma2 implements FileMaker { private final SequenceDiagram diagram; @@ -186,10 +186,7 @@ public class SequenceDiagramFileMakerPuma2 implements FileMaker { final Dimension2D dimLegend = legendBlock.calculateDimension(stringBounder); area.setLegend(dimLegend, isLegendTop(), diagram.getLegend().getHorizontalAlignment()); - final ImageParameter imageParameter = new ImageParameter(diagram, fileFormatOption); - final ImageBuilder imageBuilder = ImageBuilder.build(imageParameter); - - imageBuilder.setUDrawable(new UDrawable() { + final UDrawable drawable = new UDrawable() { public void drawU(UGraphic ug) { double delta = 0; @@ -222,8 +219,10 @@ public class SequenceDiagramFileMakerPuma2 implements FileMaker { } } - }); - return imageBuilder.writeImageTOBEMOVED(diagram.seed(), os); + }; + return styledImageBuilder(diagram, drawable, index, fileFormatOption, diagram.seed()) + .annotations(false) // they are managed above + .write(os); } private void drawFooter(SequenceDiagramArea area, UGraphic ug, int page) { diff --git a/src/net/sourceforge/plantuml/sequencediagram/teoz/SequenceDiagramFileMakerTeoz.java b/src/net/sourceforge/plantuml/sequencediagram/teoz/SequenceDiagramFileMakerTeoz.java index 44fb65da9..df4b3ae95 100644 --- a/src/net/sourceforge/plantuml/sequencediagram/teoz/SequenceDiagramFileMakerTeoz.java +++ b/src/net/sourceforge/plantuml/sequencediagram/teoz/SequenceDiagramFileMakerTeoz.java @@ -68,13 +68,13 @@ import net.sourceforge.plantuml.skin.rose.Rose; import net.sourceforge.plantuml.style.SName; import net.sourceforge.plantuml.style.Style; import net.sourceforge.plantuml.style.StyleSignature; -import net.sourceforge.plantuml.ugraphic.ImageBuilder; -import net.sourceforge.plantuml.ugraphic.ImageParameter; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UTranslate; import net.sourceforge.plantuml.ugraphic.color.HColor; import net.sourceforge.plantuml.utils.MathUtils; +import static net.sourceforge.plantuml.ugraphic.ImageBuilder.styledImageBuilder; + public class SequenceDiagramFileMakerTeoz implements FileMaker { private final SequenceDiagram diagram; @@ -139,13 +139,9 @@ public class SequenceDiagramFileMakerTeoz implements FileMaker { if (this.index != index) { throw new IllegalStateException(); } - final ImageParameter imageParameter = new ImageParameter(diagram, fileFormatOption); - - final ImageBuilder imageBuilder = ImageBuilder.build(imageParameter); - - imageBuilder.setUDrawable(new Foo(index)); - return imageBuilder.writeImageTOBEMOVED(diagram.seed(), os); - + return styledImageBuilder(diagram, new Foo(index), index, fileFormatOption, diagram.seed()) + .annotations(false) // they are managed in drawInternal() + .write(os); } class Foo implements UDrawable { diff --git a/src/net/sourceforge/plantuml/sprite/ListSpriteDiagram.java b/src/net/sourceforge/plantuml/sprite/ListSpriteDiagram.java index 5382d2a12..2c50d86fc 100644 --- a/src/net/sourceforge/plantuml/sprite/ListSpriteDiagram.java +++ b/src/net/sourceforge/plantuml/sprite/ListSpriteDiagram.java @@ -53,13 +53,13 @@ import net.sourceforge.plantuml.graphic.HorizontalAlignment; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.graphic.TextBlockUtils; -import net.sourceforge.plantuml.ugraphic.ImageBuilder; -import net.sourceforge.plantuml.ugraphic.ImageParameter; import net.sourceforge.plantuml.ugraphic.UFont; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UTranslate; import net.sourceforge.plantuml.ugraphic.color.HColorUtils; +import static net.sourceforge.plantuml.ugraphic.ImageBuilder.styledImageBuilder; + public class ListSpriteDiagram extends UmlDiagram { public ListSpriteDiagram(ISkinSimple skinParam) { @@ -74,12 +74,9 @@ public class ListSpriteDiagram extends UmlDiagram { protected ImageData exportDiagramInternal(OutputStream os, int index, FileFormatOption fileFormatOption) throws IOException { - final TextBlock result = getTable(); - final ImageParameter imageParameter = new ImageParameter(this, fileFormatOption); - final ImageBuilder imageBuilder = ImageBuilder.build(imageParameter); - imageBuilder.setUDrawable(result); - - return imageBuilder.writeImageTOBEMOVED(seed(), os); + return styledImageBuilder(this, getTable(), index, fileFormatOption, seed()) + .annotations(false) + .write(os); } private TextBlock getTable() { diff --git a/src/net/sourceforge/plantuml/sprite/PSystemListInternalSprites.java b/src/net/sourceforge/plantuml/sprite/PSystemListInternalSprites.java index 6d2606b6a..8ebe60668 100644 --- a/src/net/sourceforge/plantuml/sprite/PSystemListInternalSprites.java +++ b/src/net/sourceforge/plantuml/sprite/PSystemListInternalSprites.java @@ -36,41 +36,22 @@ package net.sourceforge.plantuml.sprite; import java.io.IOException; -import java.io.OutputStream; import java.util.ArrayList; import java.util.List; -import net.sourceforge.plantuml.AbstractPSystem; import net.sourceforge.plantuml.FileFormatOption; +import net.sourceforge.plantuml.PlainDiagram; import net.sourceforge.plantuml.core.DiagramDescription; -import net.sourceforge.plantuml.core.ImageData; import net.sourceforge.plantuml.donors.PSystemDonors; import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.graphic.TextBlockHorizontal; import net.sourceforge.plantuml.graphic.UDrawable; import net.sourceforge.plantuml.graphic.VerticalAlignment; -import net.sourceforge.plantuml.style.ClockwiseTopRightBottomLeft; -import net.sourceforge.plantuml.ugraphic.ImageBuilder; -import net.sourceforge.plantuml.ugraphic.ImageParameter; -import net.sourceforge.plantuml.ugraphic.color.ColorMapperIdentity; -import net.sourceforge.plantuml.ugraphic.color.HColor; -import net.sourceforge.plantuml.ugraphic.color.HColorUtils; -public class PSystemListInternalSprites extends AbstractPSystem { +public class PSystemListInternalSprites extends PlainDiagram { @Override - final protected ImageData exportDiagramNow(OutputStream os, int num, FileFormatOption fileFormat, long seed) - throws IOException { - final UDrawable result = getGraphicStrings(); - HColor backcolor = HColorUtils.WHITE; - final ImageParameter imageParameter = new ImageParameter(new ColorMapperIdentity(), false, null, - getMetadata(), null, ClockwiseTopRightBottomLeft.none(), backcolor); - final ImageBuilder imageBuilder = ImageBuilder.build(imageParameter); - imageBuilder.setUDrawable(result); - return imageBuilder.writeImageTOBEMOVED(fileFormat, seed, os); - } - - private UDrawable getGraphicStrings() throws IOException { + protected UDrawable getRootDrawable(FileFormatOption fileFormatOption) throws IOException { final List lines = new ArrayList(); lines.add("List Current Sprites"); lines.add("Credit to"); diff --git a/src/net/sourceforge/plantuml/sprite/StdlibDiagram.java b/src/net/sourceforge/plantuml/sprite/StdlibDiagram.java index 5971f3511..316eeb93a 100644 --- a/src/net/sourceforge/plantuml/sprite/StdlibDiagram.java +++ b/src/net/sourceforge/plantuml/sprite/StdlibDiagram.java @@ -59,14 +59,14 @@ import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.graphic.TextBlockUtils; import net.sourceforge.plantuml.preproc.Stdlib; -import net.sourceforge.plantuml.ugraphic.ImageBuilder; -import net.sourceforge.plantuml.ugraphic.ImageParameter; import net.sourceforge.plantuml.ugraphic.UFont; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UTranslate; import net.sourceforge.plantuml.ugraphic.color.HColorUtils; import net.sourceforge.plantuml.ugraphic.color.NoSuchColorException; +import static net.sourceforge.plantuml.ugraphic.ImageBuilder.styledImageBuilder; + public class StdlibDiagram extends UmlDiagram { private static final int WIDTH = 1800; @@ -84,13 +84,9 @@ public class StdlibDiagram extends UmlDiagram { protected ImageData exportDiagramInternal(OutputStream os, int index, FileFormatOption fileFormatOption) throws IOException { - final TextBlock result = getTable(); - - final ImageParameter imageParameter = new ImageParameter(this, fileFormatOption); - final ImageBuilder imageBuilder = ImageBuilder.build(imageParameter); - imageBuilder.setUDrawable(result); - - return imageBuilder.writeImageTOBEMOVED(seed(), os); + return styledImageBuilder(this, getTable(), index, fileFormatOption, seed()) + .annotations(false) + .write(os); } private TextBlock getTable() { diff --git a/src/net/sourceforge/plantuml/stats/PSystemStats.java b/src/net/sourceforge/plantuml/stats/PSystemStats.java index 5e5a5df8f..35395b599 100644 --- a/src/net/sourceforge/plantuml/stats/PSystemStats.java +++ b/src/net/sourceforge/plantuml/stats/PSystemStats.java @@ -34,52 +34,22 @@ */ package net.sourceforge.plantuml.stats; -import java.io.IOException; -import java.io.OutputStream; -import java.util.ArrayList; -import java.util.List; - -import net.sourceforge.plantuml.AbstractPSystem; -import net.sourceforge.plantuml.FileFormatOption; +import net.sourceforge.plantuml.PlainStringsDiagram; import net.sourceforge.plantuml.core.DiagramDescription; -import net.sourceforge.plantuml.core.ImageData; -import net.sourceforge.plantuml.graphic.GraphicStrings; -import net.sourceforge.plantuml.style.ClockwiseTopRightBottomLeft; -import net.sourceforge.plantuml.svek.TextBlockBackcolored; -import net.sourceforge.plantuml.ugraphic.ImageBuilder; -import net.sourceforge.plantuml.ugraphic.ImageParameter; -import net.sourceforge.plantuml.ugraphic.color.ColorMapperIdentity; -import net.sourceforge.plantuml.ugraphic.color.HColor; -public class PSystemStats extends AbstractPSystem { +import java.io.IOException; - private final List strings = new ArrayList(); +public class PSystemStats extends PlainStringsDiagram { - PSystemStats() throws IOException { + PSystemStats() { final StatsImpl stats = (StatsImpl) StatsUtils.getStats(); strings.addAll(new CreoleConverter(stats).toCreole()); } - @Override - final protected ImageData exportDiagramNow(OutputStream os, int num, FileFormatOption fileFormat, long seed) - throws IOException { - final TextBlockBackcolored result = getGraphicStrings(); - HColor backcolor = result.getBackcolor(); - final ImageParameter imageParameter = new ImageParameter(new ColorMapperIdentity(), false, null, - getMetadata(), null, ClockwiseTopRightBottomLeft.none(), backcolor); - final ImageBuilder imageBuilder = ImageBuilder.build(imageParameter); - imageBuilder.setUDrawable(result); - return imageBuilder.writeImageTOBEMOVED(fileFormat, seed, os); - } - public static PSystemStats create() throws IOException { return new PSystemStats(); } - private TextBlockBackcolored getGraphicStrings() throws IOException { - return GraphicStrings.createBlackOnWhite(strings); - } - public DiagramDescription getDescription() { return new DiagramDescription("(Stats)"); } diff --git a/src/net/sourceforge/plantuml/svek/CucaDiagramFileMakerSvek.java b/src/net/sourceforge/plantuml/svek/CucaDiagramFileMakerSvek.java index a8d6a62c4..dc5b5c2ce 100644 --- a/src/net/sourceforge/plantuml/svek/CucaDiagramFileMakerSvek.java +++ b/src/net/sourceforge/plantuml/svek/CucaDiagramFileMakerSvek.java @@ -35,7 +35,6 @@ */ package net.sourceforge.plantuml.svek; -import java.awt.geom.Dimension2D; import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; @@ -46,7 +45,6 @@ import net.sourceforge.plantuml.BaseFile; import net.sourceforge.plantuml.FileFormatOption; import net.sourceforge.plantuml.NamedOutputStream; import net.sourceforge.plantuml.UmlDiagramType; -import net.sourceforge.plantuml.api.ImageDataAbstract; import net.sourceforge.plantuml.core.ImageData; import net.sourceforge.plantuml.cucadiagram.CucaDiagram; import net.sourceforge.plantuml.cucadiagram.Link; @@ -54,9 +52,8 @@ import net.sourceforge.plantuml.cucadiagram.dot.CucaDiagramSimplifierActivity; import net.sourceforge.plantuml.cucadiagram.dot.CucaDiagramSimplifierState; import net.sourceforge.plantuml.cucadiagram.dot.DotData; import net.sourceforge.plantuml.graphic.StringBounder; -import net.sourceforge.plantuml.ugraphic.ImageBuilder; -import net.sourceforge.plantuml.ugraphic.ImageParameter; -import net.sourceforge.plantuml.ugraphic.color.HColor; + +import static net.sourceforge.plantuml.ugraphic.ImageBuilder.styledImageBuilder; public final class CucaDiagramFileMakerSvek implements CucaDiagramFileMaker { @@ -109,9 +106,11 @@ public final class CucaDiagramFileMakerSvek implements CucaDiagramFileMaker { svek2 = createDotDataImageBuilder(DotMode.NO_LEFT_RIGHT_AND_XLABEL, stringBounder); result = svek2.buildImage(basefile, diagram.getDotStringSkek()); } - final boolean isGraphvizCrash = result instanceof GraphvizCrash; + // TODO There is something strange with the left margin of mainframe, I think because AnnotatedWorker is used here + // It can be looked at in another PR result = new AnnotatedWorker(diagram, diagram.getSkinParam(), stringBounder).addAdd(result); + // TODO UmlDiagram.getWarningOrError() looks similar so this might be simplified? - will leave for a separate PR final String widthwarning = diagram.getSkinParam().getValue("widthwarning"); String warningOrError = null; if (widthwarning != null && widthwarning.matches("\\d+")) { @@ -121,19 +120,11 @@ public final class CucaDiagramFileMakerSvek implements CucaDiagramFileMaker { // Sorry about this hack. There is a side effect in SvekResult::calculateDimension() result.calculateDimension(stringBounder); // Ensure text near the margins is not cut off - final HColor backcolor = result.getBackcolor(); - final String metadata = fileFormatOption.isWithMetadata() ? diagram.getMetadata() : null; - - final ImageParameter imageParameter = new ImageParameter(diagram, fileFormatOption, metadata, - warningOrError, backcolor); - - final ImageBuilder imageBuilder = ImageBuilder.build(imageParameter); - imageBuilder.setUDrawable(result); - final ImageData imageData = imageBuilder.writeImageTOBEMOVED(diagram.seed(), os); - if (isGraphvizCrash) { - ((ImageDataAbstract) imageData).setStatus(503); - } - return imageData; + return styledImageBuilder(diagram, result, 1, fileFormatOption, diagram.seed()) + .annotations(false) // backwards compatibility (AnnotatedWorker is used above) + .status(result instanceof GraphvizCrash ? 503 : 0) + .warningOrError(warningOrError) + .write(os); } private List getOrderedLinks() { diff --git a/src/net/sourceforge/plantuml/swing/ImageWindow2.java b/src/net/sourceforge/plantuml/swing/ImageWindow2.java index 4bf213713..8cd5eda5d 100644 --- a/src/net/sourceforge/plantuml/swing/ImageWindow2.java +++ b/src/net/sourceforge/plantuml/swing/ImageWindow2.java @@ -51,7 +51,6 @@ import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.util.Arrays; @@ -68,21 +67,16 @@ import javax.swing.ListModel; import javax.swing.SwingUtilities; import javax.swing.WindowConstants; -import net.sourceforge.plantuml.FileFormat; -import net.sourceforge.plantuml.FileFormatOption; import net.sourceforge.plantuml.GeneratedImage; import net.sourceforge.plantuml.ImageSelection; import net.sourceforge.plantuml.graphic.GraphicStrings; import net.sourceforge.plantuml.security.ImageIO; import net.sourceforge.plantuml.security.SFile; -import net.sourceforge.plantuml.style.ClockwiseTopRightBottomLeft; import net.sourceforge.plantuml.svek.TextBlockBackcolored; -import net.sourceforge.plantuml.ugraphic.ImageBuilder; -import net.sourceforge.plantuml.ugraphic.ImageParameter; -import net.sourceforge.plantuml.ugraphic.color.ColorMapperIdentity; -import net.sourceforge.plantuml.ugraphic.color.HColor; import net.sourceforge.plantuml.version.PSystemVersion; +import static net.sourceforge.plantuml.ugraphic.ImageBuilder.plainPngBuilder; + class ImageWindow2 extends JFrame { private final static Preferences prefs = Preferences.userNodeForPackage(ImageWindow2.class); @@ -332,16 +326,9 @@ class ImageWindow2 extends JFrame { } catch (IOException ex) { final String msg = "Error reading file: " + ex.toString(); final TextBlockBackcolored error = GraphicStrings.createForError(Arrays.asList(msg), false); - HColor backcolor = error.getBackcolor(); - final ImageParameter imageParameter = new ImageParameter(new ColorMapperIdentity(), false, null, null, - null, ClockwiseTopRightBottomLeft.none(), backcolor); - final ImageBuilder imageBuilder = ImageBuilder.build(imageParameter); - imageBuilder.setUDrawable(error); - final ByteArrayOutputStream baos = new ByteArrayOutputStream(); try { - imageBuilder.writeImageTOBEMOVED(new FileFormatOption(FileFormat.PNG), 42, baos); - baos.close(); - image = ImageIO.read(new ByteArrayInputStream(baos.toByteArray())); + final byte[] bytes = plainPngBuilder(error).writeByteArray(); + image = ImageIO.read(new ByteArrayInputStream(bytes)); } catch (IOException e) { e.printStackTrace(); } diff --git a/src/net/sourceforge/plantuml/timingdiagram/TimingDiagram.java b/src/net/sourceforge/plantuml/timingdiagram/TimingDiagram.java index f80e6ab16..e04aa5e40 100644 --- a/src/net/sourceforge/plantuml/timingdiagram/TimingDiagram.java +++ b/src/net/sourceforge/plantuml/timingdiagram/TimingDiagram.java @@ -45,10 +45,8 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import net.sourceforge.plantuml.AnnotatedWorker; import net.sourceforge.plantuml.Dimension2DDouble; import net.sourceforge.plantuml.FileFormatOption; -import net.sourceforge.plantuml.ISkinParam; import net.sourceforge.plantuml.UmlDiagram; import net.sourceforge.plantuml.UmlDiagramType; import net.sourceforge.plantuml.command.CommandExecutionResult; @@ -62,8 +60,6 @@ import net.sourceforge.plantuml.graphic.color.Colors; import net.sourceforge.plantuml.svek.TextBlockBackcolored; import net.sourceforge.plantuml.timingdiagram.graphic.IntricatedPoint; import net.sourceforge.plantuml.timingdiagram.graphic.TimeArrow; -import net.sourceforge.plantuml.ugraphic.ImageBuilder; -import net.sourceforge.plantuml.ugraphic.ImageParameter; import net.sourceforge.plantuml.ugraphic.MinMax; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; @@ -72,6 +68,8 @@ import net.sourceforge.plantuml.ugraphic.UTranslate; import net.sourceforge.plantuml.ugraphic.color.HColor; import net.sourceforge.plantuml.ugraphic.color.HColorUtils; +import static net.sourceforge.plantuml.ugraphic.ImageBuilder.styledImageBuilder; + public class TimingDiagram extends UmlDiagram implements Clocks { public static final double marginX1 = 5; @@ -99,16 +97,9 @@ public class TimingDiagram extends UmlDiagram implements Clocks { @Override protected ImageData exportDiagramInternal(OutputStream os, int index, FileFormatOption fileFormatOption) throws IOException { - final ImageParameter imageParameter = new ImageParameter(this, fileFormatOption); - final ImageBuilder imageBuilder = ImageBuilder.build(imageParameter); - TextBlock result = getTextBlock(); - final ISkinParam skinParam = getSkinParam(); - result = new AnnotatedWorker(this, skinParam, fileFormatOption.getDefaultStringBounder(getSkinParam())) - .addAdd(result); - imageBuilder.setUDrawable(result); - - return imageBuilder.writeImageTOBEMOVED(seed(), os); + return styledImageBuilder(this, getTextBlock(), index, fileFormatOption, seed()) + .write(os); } private TextBlockBackcolored getTextBlock() { diff --git a/src/net/sourceforge/plantuml/ugraphic/FontChecker.java b/src/net/sourceforge/plantuml/ugraphic/FontChecker.java index e20157ecd..64575c2fb 100644 --- a/src/net/sourceforge/plantuml/ugraphic/FontChecker.java +++ b/src/net/sourceforge/plantuml/ugraphic/FontChecker.java @@ -52,19 +52,17 @@ import java.util.Set; import javax.xml.transform.TransformerException; import net.sourceforge.plantuml.Dimension2DDouble; -import net.sourceforge.plantuml.FileFormat; -import net.sourceforge.plantuml.FileFormatOption; import net.sourceforge.plantuml.graphic.FontConfiguration; import net.sourceforge.plantuml.graphic.TextBlockUtils; import net.sourceforge.plantuml.graphic.UDrawable; import net.sourceforge.plantuml.security.ImageIO; import net.sourceforge.plantuml.security.SFile; -import net.sourceforge.plantuml.style.ClockwiseTopRightBottomLeft; import net.sourceforge.plantuml.svg.LengthAdjust; import net.sourceforge.plantuml.svg.SvgGraphics; -import net.sourceforge.plantuml.ugraphic.color.ColorMapperIdentity; import net.sourceforge.plantuml.ugraphic.color.HColorUtils; +import static net.sourceforge.plantuml.ugraphic.ImageBuilder.plainPngBuilder; + public class FontChecker { final private UFont font; @@ -172,11 +170,9 @@ public class FontChecker { public BufferedImage getBufferedImage(final char c) throws IOException { assert c != '\t'; - final ImageParameter imageParameter = new ImageParameter(new ColorMapperIdentity(), false, null, null, - null, ClockwiseTopRightBottomLeft.none(), null); - final ImageBuilder imageBuilder = ImageBuilder.build(imageParameter); + final double dim = 20; - imageBuilder.setUDrawable(new UDrawable() { + final UDrawable drawable = new UDrawable() { public void drawU(UGraphic ug) { ug = ug.apply(HColorUtils.BLACK); ug.draw(new URectangle(dim - 1, dim - 1)); @@ -186,11 +182,9 @@ public class FontChecker { ug.draw(text); } } - }); - final ByteArrayOutputStream os = new ByteArrayOutputStream(); - imageBuilder.writeImageTOBEMOVED(new FileFormatOption(FileFormat.PNG), 42, os); - os.close(); - return ImageIO.read(new ByteArrayInputStream(os.toByteArray())); + }; + final byte[] bytes = plainPngBuilder(drawable).writeByteArray(); + return ImageIO.read(new ByteArrayInputStream(bytes)); } // public BufferedImage getBufferedImageOld(char c) throws IOException { diff --git a/src/net/sourceforge/plantuml/ugraphic/ImageBuilder.java b/src/net/sourceforge/plantuml/ugraphic/ImageBuilder.java index 658bc5fc9..3cc768b0a 100644 --- a/src/net/sourceforge/plantuml/ugraphic/ImageBuilder.java +++ b/src/net/sourceforge/plantuml/ugraphic/ImageBuilder.java @@ -51,25 +51,32 @@ import java.util.Set; import javax.swing.ImageIcon; import net.sourceforge.plantuml.AnimatedGifEncoder; +import net.sourceforge.plantuml.AnnotatedWorker; import net.sourceforge.plantuml.CMapData; import net.sourceforge.plantuml.Dimension2DDouble; import net.sourceforge.plantuml.EmptyImageBuilder; import net.sourceforge.plantuml.FileFormat; import net.sourceforge.plantuml.FileFormatOption; import net.sourceforge.plantuml.FileUtils; +import net.sourceforge.plantuml.ISkinParam; +import net.sourceforge.plantuml.TitledDiagram; import net.sourceforge.plantuml.Url; import net.sourceforge.plantuml.anim.AffineTransformation; import net.sourceforge.plantuml.anim.Animation; +import net.sourceforge.plantuml.api.ImageDataAbstract; import net.sourceforge.plantuml.api.ImageDataComplex; import net.sourceforge.plantuml.api.ImageDataSimple; import net.sourceforge.plantuml.braille.UGraphicBraille; import net.sourceforge.plantuml.core.ImageData; import net.sourceforge.plantuml.eps.EpsStrategy; import net.sourceforge.plantuml.graphic.StringBounder; +import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.graphic.UDrawable; import net.sourceforge.plantuml.mjpeg.MJPEGGenerator; import net.sourceforge.plantuml.security.ImageIO; import net.sourceforge.plantuml.security.SFile; +import net.sourceforge.plantuml.style.ClockwiseTopRightBottomLeft; +import net.sourceforge.plantuml.svek.TextBlockBackcolored; import net.sourceforge.plantuml.svg.LengthAdjust; import net.sourceforge.plantuml.ugraphic.color.ColorMapper; import net.sourceforge.plantuml.ugraphic.color.HColor; @@ -87,38 +94,124 @@ import net.sourceforge.plantuml.ugraphic.tikz.UGraphicTikz; import net.sourceforge.plantuml.ugraphic.txt.UGraphicTxt; import net.sourceforge.plantuml.ugraphic.visio.UGraphicVdx; +import static net.sourceforge.plantuml.ugraphic.ImageParameter.calculateDiagramMargin; +import static net.sourceforge.plantuml.ugraphic.ImageParameter.getBackgroundColor; + public class ImageBuilder { private final ImageParameter param; - private final double top; - private final double right; - private final double bottom; - private final double left; + private double top; + private double right; + private double bottom; + private double left; + private boolean annotations; + private HColor backcolor = HColorUtils.WHITE; + private final TitledDiagram titledDiagram; private UDrawable udrawable; + private final FileFormatOption fileFormatOption; + private final long seed; + private int status = 0; + private String metadata; private boolean randomPixel; + private String warningOrError; - public static ImageBuilder build(ImageParameter imageParameter) { - return new ImageBuilder(imageParameter); + public static ImageBuilder plainImageBuilder(UDrawable drawable, FileFormatOption fileFormatOption, long seed) { + return new ImageBuilder(drawable, null, fileFormatOption, seed, new ImageParameter()); } - private ImageBuilder(ImageParameter imageParameter) { - this.param = imageParameter; - - this.top = imageParameter.getMargins().getTop(); - this.right = imageParameter.getMargins().getRight(); - this.bottom = imageParameter.getMargins().getBottom(); - this.left = imageParameter.getMargins().getLeft(); - + public static ImageBuilder plainPngBuilder(UDrawable drawable) { + return plainImageBuilder(drawable, new FileFormatOption(FileFormat.PNG), 42); } - public void setUDrawable(UDrawable udrawable) { - this.udrawable = udrawable; + // TODO do something with "index" + public static ImageBuilder styledImageBuilder(TitledDiagram diagram, UDrawable drawable, int index, + FileFormatOption fileFormatOption, long seed) { + return new ImageBuilder(drawable, diagram, fileFormatOption, seed, new ImageParameter(diagram)) + .annotations(true) + .backcolor(getBackgroundColor(diagram)) + .margin(calculateDiagramMargin(diagram)) + .metadata(fileFormatOption.isWithMetadata() ? diagram.getMetadata() : null) + .warningOrError(diagram.getWarningOrError()); + } + + private ImageBuilder(UDrawable drawable, TitledDiagram titledDiagram, FileFormatOption fileFormatOption, long seed, ImageParameter param) { + this.udrawable = drawable; + this.titledDiagram = titledDiagram; + this.fileFormatOption = fileFormatOption; + this.seed = seed; + this.param = param; + + if (drawable instanceof TextBlockBackcolored) { + backcolor = ((TextBlockBackcolored) drawable).getBackcolor(); + } + } + + public ImageBuilder annotations(boolean annotations) { + this.annotations = annotations; + return this; + } + + public ImageBuilder backcolor(HColor backcolor) { + this.backcolor = backcolor; + return this; + } + + public ImageBuilder blackBackcolor() { + return backcolor(HColorUtils.BLACK); + } + + public ImageBuilder margin(ClockwiseTopRightBottomLeft margin) { + this.top = margin.getTop(); + this.right = margin.getRight(); + this.bottom = margin.getBottom(); + this.left = margin.getLeft(); + return this; + } + + public ImageBuilder metadata(String metadata) { + this.metadata = metadata; + return this; + } + + public ImageBuilder randomPixel() { + this.randomPixel = true; + return this; + } + + public ImageBuilder status(int status) { + this.status = status; + return this; + } + + public ImageBuilder warningOrError(String warningOrError) { + this.warningOrError = warningOrError; + return this; + } + + public ImageData write(OutputStream os) throws IOException { + if (annotations && titledDiagram != null) { + if (!(udrawable instanceof TextBlock)) throw new IllegalStateException("udrawable is not a TextBlock"); + final ISkinParam skinParam = titledDiagram.getSkinParam(); + final StringBounder stringBounder = fileFormatOption.getDefaultStringBounder(skinParam); + final AnnotatedWorker annotatedWorker = new AnnotatedWorker(titledDiagram, skinParam, stringBounder); + udrawable = annotatedWorker.addAdd((TextBlock) udrawable); + } + final ImageData imageData = writeImageTOBEMOVED(fileFormatOption, seed, os); + ((ImageDataAbstract) imageData).setStatus(status); + return imageData; + } + + public byte[] writeByteArray() throws IOException { + try (final ByteArrayOutputStream baos = new ByteArrayOutputStream()) { + write(baos); + return baos.toByteArray(); + } } public ImageData writeImageTOBEMOVED(long seed, OutputStream os) throws IOException { - return writeImageTOBEMOVED(param.getFileFormatOption(), seed, os); + return writeImageTOBEMOVED(fileFormatOption, seed, os); } public ImageData writeImageTOBEMOVED(FileFormatOption fileFormatOption, long seed, OutputStream os) @@ -163,14 +256,14 @@ public class ImageBuilder { final UGraphic ugDecored = handwritten(ug2); udrawable.drawU(ugDecored); ugDecored.flushUg(); - ug.writeImageTOBEMOVED(os, param.getMetadata(), 96); + ug.writeImageTOBEMOVED(os, metadata, 96); os.flush(); if (ug instanceof UGraphicG2d) { final Set urls = ((UGraphicG2d) ug).getAllUrlsEncountered(); if (urls.size() > 0) { final CMapData cmap = CMapData.cmapString(urls, param.getDpi()); - return new ImageDataComplex(dim, cmap, param.getWarningOrError()); + return new ImageDataComplex(dim, cmap, warningOrError); } } return new ImageDataSimple(dim); @@ -285,10 +378,10 @@ public class ImageBuilder { final FileFormat fileFormat = option.getFileFormat(); switch (fileFormat) { case PNG: - return createUGraphicPNG(colorMapper, scaleFactor, dim, param.getBackcolor(), animationArg, dx, dy, + return createUGraphicPNG(colorMapper, scaleFactor, dim, backcolor, animationArg, dx, dy, option.getWatermark()); case SVG: - return createUGraphicSVG(colorMapper, scaleFactor, dim, param.getBackcolor(), option.getSvgLinkTarget(), + return createUGraphicSVG(colorMapper, scaleFactor, dim, backcolor, option.getSvgLinkTarget(), option.getHoverColor(), seed, option.getPreserveAspectRatio(), param.getlengthAdjust()); case EPS: return new UGraphicEps(colorMapper, EpsStrategy.getDefault2()); @@ -363,9 +456,4 @@ public class ImageBuilder { return ug; } - public void setRandomPixel(boolean randomPixel) { - this.randomPixel = randomPixel; - - } - } diff --git a/src/net/sourceforge/plantuml/ugraphic/ImageParameter.java b/src/net/sourceforge/plantuml/ugraphic/ImageParameter.java index 51692793a..35ebd2b8a 100644 --- a/src/net/sourceforge/plantuml/ugraphic/ImageParameter.java +++ b/src/net/sourceforge/plantuml/ugraphic/ImageParameter.java @@ -37,7 +37,6 @@ package net.sourceforge.plantuml.ugraphic; import net.sourceforge.plantuml.ColorParam; import net.sourceforge.plantuml.CornerParam; -import net.sourceforge.plantuml.FileFormatOption; import net.sourceforge.plantuml.ISkinParam; import net.sourceforge.plantuml.LineParam; import net.sourceforge.plantuml.Scale; @@ -53,9 +52,11 @@ import net.sourceforge.plantuml.style.Style; import net.sourceforge.plantuml.style.StyleSignature; import net.sourceforge.plantuml.svg.LengthAdjust; import net.sourceforge.plantuml.ugraphic.color.ColorMapper; +import net.sourceforge.plantuml.ugraphic.color.ColorMapperIdentity; import net.sourceforge.plantuml.ugraphic.color.HColor; import net.sourceforge.plantuml.ugraphic.color.HColorUtils; +// TODO merge these fields into ImageBuilder public class ImageParameter { private final ColorMapper colorMapper; @@ -63,10 +64,6 @@ public class ImageParameter { private final Animation animation; private final Scale scale; private int dpi; - private final String metadata; - private final String warningOrError; - private final ClockwiseTopRightBottomLeft margins; - private final HColor backcolor; private final boolean svgDimensionStyle; private final SvgCharSizeHack svgCharSizeHack; private final LengthAdjust lengthAdjust; @@ -74,19 +71,13 @@ public class ImageParameter { private final UStroke borderStroke; private final HColor borderColor; private final double borderCorner; - private final FileFormatOption fileFormatOption; - public ImageParameter(ColorMapper colorMapper, boolean useHandwritten, Animation animation, - String metadata, String warningOrError, ClockwiseTopRightBottomLeft margins, HColor backcolor) { - this.colorMapper = colorMapper; - this.useHandwritten = useHandwritten; - this.animation = animation; + public ImageParameter() { + this.colorMapper = new ColorMapperIdentity(); + this.useHandwritten = false; + this.animation = null; this.scale = null; this.dpi = 96; - this.metadata = metadata; - this.warningOrError = warningOrError; - this.margins = margins; - this.backcolor = backcolor; this.svgDimensionStyle = true; this.borderColor = null; @@ -94,20 +85,9 @@ public class ImageParameter { this.borderStroke = null; this.svgCharSizeHack = SvgCharSizeHack.NO_HACK; this.lengthAdjust = LengthAdjust.defaultValue(); - this.fileFormatOption = null; } - public ImageParameter(TitledDiagram diagram, FileFormatOption fileFormatOption) { - this( - diagram, - fileFormatOption, - fileFormatOption.isWithMetadata() ? diagram.getMetadata() : null, - diagram.getWarningOrError(), - getBackgroundColor(diagram) - ); - } - - private static HColor getBackgroundColor(TitledDiagram diagram) { + public static HColor getBackgroundColor(TitledDiagram diagram) { if (UseStyle.useBetaStyle()) { final Style style = StyleSignature .of(SName.root, SName.document, diagram.getUmlDiagramType().getStyleName()) @@ -124,19 +104,13 @@ public class ImageParameter { return diagram.getSkinParam().getBackgroundColor(false); } - public ImageParameter(TitledDiagram diagram, FileFormatOption fileFormatOption, String metadata, - String warningOrError, HColor backcolor) { + public ImageParameter(TitledDiagram diagram) { final ISkinParam skinParam = diagram.getSkinParam(); - this.fileFormatOption = fileFormatOption; this.colorMapper = skinParam.getColorMapper(); this.useHandwritten = skinParam.handwritten(); this.animation = diagram.getAnimation(); this.scale = diagram.getScale(); this.dpi = skinParam.getDpi(); - this.metadata = metadata; - this.warningOrError = warningOrError; - this.margins = calculateDiagramMargin(diagram); - this.backcolor = backcolor; this.svgDimensionStyle = skinParam.svgDimensionStyle(); final Rose rose = new Rose(); @@ -174,22 +148,6 @@ public class ImageParameter { return dpi; } - public final String getMetadata() { - return metadata; - } - - public final String getWarningOrError() { - return warningOrError; - } - - public final ClockwiseTopRightBottomLeft getMargins() { - return margins; - } - - public final HColor getBackcolor() { - return backcolor; - } - public final boolean isSvgDimensionStyle() { return svgDimensionStyle; } @@ -214,11 +172,7 @@ public class ImageParameter { return lengthAdjust; } - public FileFormatOption getFileFormatOption() { - return fileFormatOption; - } - - private static ClockwiseTopRightBottomLeft calculateDiagramMargin(TitledDiagram diagram) { + public static ClockwiseTopRightBottomLeft calculateDiagramMargin(TitledDiagram diagram) { if (UseStyle.useBetaStyle()) { final Style style = StyleSignature.of(SName.root, SName.document) .getMergedStyle(diagram.getSkinParam().getCurrentStyleBuilder()); diff --git a/src/net/sourceforge/plantuml/version/PSystemKeycheck.java b/src/net/sourceforge/plantuml/version/PSystemKeycheck.java index d1bbc3862..3f1ea489b 100644 --- a/src/net/sourceforge/plantuml/version/PSystemKeycheck.java +++ b/src/net/sourceforge/plantuml/version/PSystemKeycheck.java @@ -37,35 +37,27 @@ package net.sourceforge.plantuml.version; import java.awt.Color; import java.awt.image.BufferedImage; import java.io.IOException; -import java.io.OutputStream; import java.security.NoSuchAlgorithmException; import java.security.spec.InvalidKeySpecException; import java.util.ArrayList; import java.util.List; -import net.sourceforge.plantuml.AbstractPSystem; import net.sourceforge.plantuml.FileFormatOption; +import net.sourceforge.plantuml.PlainDiagram; import net.sourceforge.plantuml.SignatureUtils; import net.sourceforge.plantuml.core.DiagramDescription; -import net.sourceforge.plantuml.core.ImageData; import net.sourceforge.plantuml.flashcode.FlashCodeFactory; import net.sourceforge.plantuml.flashcode.FlashCodeUtils; import net.sourceforge.plantuml.graphic.GraphicStrings; import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.graphic.UDrawable; -import net.sourceforge.plantuml.style.ClockwiseTopRightBottomLeft; import net.sourceforge.plantuml.ugraphic.AffineTransformType; -import net.sourceforge.plantuml.ugraphic.ImageBuilder; -import net.sourceforge.plantuml.ugraphic.ImageParameter; import net.sourceforge.plantuml.ugraphic.PixelImage; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UImage; import net.sourceforge.plantuml.ugraphic.UTranslate; -import net.sourceforge.plantuml.ugraphic.color.ColorMapperIdentity; -import net.sourceforge.plantuml.ugraphic.color.HColor; -import net.sourceforge.plantuml.ugraphic.color.HColorUtils; -public class PSystemKeycheck extends AbstractPSystem { +public class PSystemKeycheck extends PlainDiagram { final private String key; final private String sig; @@ -76,14 +68,8 @@ public class PSystemKeycheck extends AbstractPSystem { } @Override - final protected ImageData exportDiagramNow(OutputStream os, int num, FileFormatOption fileFormat, long seed) - throws IOException { - HColor backcolor = HColorUtils.WHITE; - final ImageParameter imageParameter = new ImageParameter(new ColorMapperIdentity(), false, null, - getMetadata(), null, ClockwiseTopRightBottomLeft.none(), backcolor); - final ImageBuilder imageBuilder = ImageBuilder.build(imageParameter); - - imageBuilder.setUDrawable(new UDrawable() { + protected UDrawable getRootDrawable(FileFormatOption fileFormatOption) { + return new UDrawable() { public void drawU(UGraphic ug) { try { drawInternal(ug); @@ -91,8 +77,7 @@ public class PSystemKeycheck extends AbstractPSystem { e.printStackTrace(); } } - }); - return imageBuilder.writeImageTOBEMOVED(fileFormat, seed, os); + }; } public DiagramDescription getDescription() { diff --git a/src/net/sourceforge/plantuml/version/PSystemKeygen.java b/src/net/sourceforge/plantuml/version/PSystemKeygen.java index baf3be187..3c14612b1 100644 --- a/src/net/sourceforge/plantuml/version/PSystemKeygen.java +++ b/src/net/sourceforge/plantuml/version/PSystemKeygen.java @@ -37,35 +37,27 @@ package net.sourceforge.plantuml.version; import java.awt.Color; import java.awt.image.BufferedImage; import java.io.IOException; -import java.io.OutputStream; import java.util.ArrayList; import java.util.List; import java.util.prefs.BackingStoreException; -import net.sourceforge.plantuml.AbstractPSystem; import net.sourceforge.plantuml.FileFormatOption; +import net.sourceforge.plantuml.PlainDiagram; import net.sourceforge.plantuml.SignatureUtils; import net.sourceforge.plantuml.core.DiagramDescription; -import net.sourceforge.plantuml.core.ImageData; import net.sourceforge.plantuml.flashcode.FlashCodeFactory; import net.sourceforge.plantuml.flashcode.FlashCodeUtils; import net.sourceforge.plantuml.graphic.GraphicStrings; import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.graphic.UDrawable; import net.sourceforge.plantuml.security.SFile; -import net.sourceforge.plantuml.style.ClockwiseTopRightBottomLeft; import net.sourceforge.plantuml.ugraphic.AffineTransformType; -import net.sourceforge.plantuml.ugraphic.ImageBuilder; -import net.sourceforge.plantuml.ugraphic.ImageParameter; import net.sourceforge.plantuml.ugraphic.PixelImage; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UImage; import net.sourceforge.plantuml.ugraphic.UTranslate; -import net.sourceforge.plantuml.ugraphic.color.ColorMapperIdentity; -import net.sourceforge.plantuml.ugraphic.color.HColor; -import net.sourceforge.plantuml.ugraphic.color.HColorUtils; -public class PSystemKeygen extends AbstractPSystem { +public class PSystemKeygen extends PlainDiagram { final private String key; @@ -74,14 +66,8 @@ public class PSystemKeygen extends AbstractPSystem { } @Override - final protected ImageData exportDiagramNow(OutputStream os, int num, FileFormatOption fileFormat, long seed) - throws IOException { - HColor backcolor = HColorUtils.WHITE; - final ImageParameter imageParameter = new ImageParameter(new ColorMapperIdentity(), false, null, - getMetadata(), null, ClockwiseTopRightBottomLeft.none(), backcolor); - final ImageBuilder imageBuilder = ImageBuilder.build(imageParameter); - - imageBuilder.setUDrawable(new UDrawable() { + protected UDrawable getRootDrawable(FileFormatOption fileFormatOption) { + return new UDrawable() { public void drawU(UGraphic ug) { try { drawInternal(ug); @@ -89,8 +75,7 @@ public class PSystemKeygen extends AbstractPSystem { e.printStackTrace(); } } - }); - return imageBuilder.writeImageTOBEMOVED(fileFormat, seed, os); + }; } public DiagramDescription getDescription() { diff --git a/src/net/sourceforge/plantuml/version/PSystemLicense.java b/src/net/sourceforge/plantuml/version/PSystemLicense.java index 206811764..04f95e2d7 100644 --- a/src/net/sourceforge/plantuml/version/PSystemLicense.java +++ b/src/net/sourceforge/plantuml/version/PSystemLicense.java @@ -36,37 +36,26 @@ package net.sourceforge.plantuml.version; import java.awt.image.BufferedImage; import java.io.IOException; -import java.io.OutputStream; import java.util.ArrayList; import java.util.List; -import net.sourceforge.plantuml.AbstractPSystem; import net.sourceforge.plantuml.FileFormatOption; +import net.sourceforge.plantuml.PlainDiagram; import net.sourceforge.plantuml.core.DiagramDescription; -import net.sourceforge.plantuml.core.ImageData; import net.sourceforge.plantuml.graphic.GraphicStrings; import net.sourceforge.plantuml.graphic.UDrawable; -import net.sourceforge.plantuml.style.ClockwiseTopRightBottomLeft; import net.sourceforge.plantuml.svek.TextBlockBackcolored; import net.sourceforge.plantuml.ugraphic.AffineTransformType; -import net.sourceforge.plantuml.ugraphic.ImageBuilder; -import net.sourceforge.plantuml.ugraphic.ImageParameter; import net.sourceforge.plantuml.ugraphic.PixelImage; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UImage; import net.sourceforge.plantuml.ugraphic.UTranslate; -import net.sourceforge.plantuml.ugraphic.color.ColorMapperIdentity; -public class PSystemLicense extends AbstractPSystem implements UDrawable { +public class PSystemLicense extends PlainDiagram implements UDrawable { @Override - final protected ImageData exportDiagramNow(OutputStream os, int num, FileFormatOption fileFormat, long seed) - throws IOException { - final ImageParameter imageParameter = new ImageParameter(new ColorMapperIdentity(), false, null, - getMetadata(), null, ClockwiseTopRightBottomLeft.none(), null); - final ImageBuilder imageBuilder = ImageBuilder.build(imageParameter); - imageBuilder.setUDrawable(this); - return imageBuilder.writeImageTOBEMOVED(fileFormat, seed, os); + protected UDrawable getRootDrawable(FileFormatOption fileFormatOption) { + return this; } public static PSystemLicense create() throws IOException { diff --git a/src/net/sourceforge/plantuml/version/PSystemVersion.java b/src/net/sourceforge/plantuml/version/PSystemVersion.java index 86ccc916f..8f57cca90 100644 --- a/src/net/sourceforge/plantuml/version/PSystemVersion.java +++ b/src/net/sourceforge/plantuml/version/PSystemVersion.java @@ -37,22 +37,17 @@ package net.sourceforge.plantuml.version; import java.awt.image.BufferedImage; import java.io.IOException; import java.io.InputStream; -import java.io.OutputStream; import java.util.ArrayList; import java.util.Collections; import java.util.List; -import net.sourceforge.plantuml.AbstractPSystem; -import net.sourceforge.plantuml.FileFormatOption; import net.sourceforge.plantuml.OptionFlags; import net.sourceforge.plantuml.OptionPrint; +import net.sourceforge.plantuml.PlainStringsDiagram; import net.sourceforge.plantuml.Run; import net.sourceforge.plantuml.core.DiagramDescription; -import net.sourceforge.plantuml.core.ImageData; import net.sourceforge.plantuml.cucadiagram.dot.GraphvizUtils; import net.sourceforge.plantuml.dedication.Dedication; -import net.sourceforge.plantuml.graphic.GraphicPosition; -import net.sourceforge.plantuml.graphic.GraphicStrings; import net.sourceforge.plantuml.preproc.ImportedFiles; import net.sourceforge.plantuml.preproc.Stdlib; import net.sourceforge.plantuml.preproc2.PreprocessorUtils; @@ -60,29 +55,24 @@ import net.sourceforge.plantuml.security.ImageIO; import net.sourceforge.plantuml.security.SFile; import net.sourceforge.plantuml.security.SecurityProfile; import net.sourceforge.plantuml.security.SecurityUtils; -import net.sourceforge.plantuml.style.ClockwiseTopRightBottomLeft; import net.sourceforge.plantuml.svek.GraphvizCrash; -import net.sourceforge.plantuml.svek.TextBlockBackcolored; -import net.sourceforge.plantuml.ugraphic.ImageBuilder; -import net.sourceforge.plantuml.ugraphic.ImageParameter; -import net.sourceforge.plantuml.ugraphic.color.ColorMapperIdentity; -import net.sourceforge.plantuml.ugraphic.color.HColor; -public class PSystemVersion extends AbstractPSystem { +import static net.sourceforge.plantuml.graphic.GraphicPosition.BACKGROUND_CORNER_BOTTOM_RIGHT; - private final List strings = new ArrayList(); - private BufferedImage image; +public class PSystemVersion extends PlainStringsDiagram { PSystemVersion(boolean withImage, List args) { this.strings.addAll(args); if (withImage) { this.image = getPlantumlImage(); + this.imagePosition = BACKGROUND_CORNER_BOTTOM_RIGHT; } } private PSystemVersion(List args, BufferedImage image) { this.strings.addAll(args); this.image = image; + this.imagePosition = BACKGROUND_CORNER_BOTTOM_RIGHT; } public static BufferedImage getPlantumlImage() { @@ -167,19 +157,6 @@ public class PSystemVersion extends AbstractPSystem { return transparentIcon; } - @Override - final protected ImageData exportDiagramNow(OutputStream os, int num, FileFormatOption fileFormat, long seed) - throws IOException { - final TextBlockBackcolored result = GraphicStrings.createBlackOnWhite(strings, image, - GraphicPosition.BACKGROUND_CORNER_BOTTOM_RIGHT); - HColor backcolor = result.getBackcolor(); - final ImageParameter imageParameter = new ImageParameter(new ColorMapperIdentity(), false, null, - getMetadata(), null, ClockwiseTopRightBottomLeft.none(), backcolor); - final ImageBuilder imageBuilder = ImageBuilder.build(imageParameter); - imageBuilder.setUDrawable(result); - return imageBuilder.writeImageTOBEMOVED(fileFormat, seed, os); - } - public static PSystemVersion createShowVersion() { final List strings = new ArrayList(); strings.add("PlantUML version " + Version.versionString() + " (" + Version.compileTimeString() + ")"); diff --git a/src/net/sourceforge/plantuml/wbs/WBSDiagram.java b/src/net/sourceforge/plantuml/wbs/WBSDiagram.java index 515a79b68..db2fb49c8 100644 --- a/src/net/sourceforge/plantuml/wbs/WBSDiagram.java +++ b/src/net/sourceforge/plantuml/wbs/WBSDiagram.java @@ -40,10 +40,8 @@ import java.awt.geom.Rectangle2D; import java.io.IOException; import java.io.OutputStream; -import net.sourceforge.plantuml.AnnotatedWorker; import net.sourceforge.plantuml.Direction; import net.sourceforge.plantuml.FileFormatOption; -import net.sourceforge.plantuml.ISkinParam; import net.sourceforge.plantuml.UmlDiagram; import net.sourceforge.plantuml.UmlDiagramType; import net.sourceforge.plantuml.command.CommandExecutionResult; @@ -59,12 +57,12 @@ import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.mindmap.IdeaShape; import net.sourceforge.plantuml.style.NoStyleAvailableException; import net.sourceforge.plantuml.svek.TextBlockBackcolored; -import net.sourceforge.plantuml.ugraphic.ImageBuilder; -import net.sourceforge.plantuml.ugraphic.ImageParameter; import net.sourceforge.plantuml.ugraphic.MinMax; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.color.HColor; +import static net.sourceforge.plantuml.ugraphic.ImageBuilder.styledImageBuilder; + public class WBSDiagram extends UmlDiagram { public DiagramDescription getDescription() { @@ -79,17 +77,8 @@ public class WBSDiagram extends UmlDiagram { protected ImageData exportDiagramInternal(OutputStream os, int index, FileFormatOption fileFormatOption) throws IOException { - final ISkinParam skinParam = getSkinParam(); - final ImageParameter imageParameter = new ImageParameter(this, fileFormatOption); - - final ImageBuilder imageBuilder = ImageBuilder.build(imageParameter); - TextBlock result = getTextBlock(); - - result = new AnnotatedWorker(this, skinParam, fileFormatOption.getDefaultStringBounder(getSkinParam())) - .addAdd(result); - imageBuilder.setUDrawable(result); - - return imageBuilder.writeImageTOBEMOVED(seed(), os); + return styledImageBuilder(this, getTextBlock(), index, fileFormatOption, seed()) + .write(os); } private TextBlockBackcolored getTextBlock() { diff --git a/src/net/sourceforge/plantuml/wire/WireDiagram.java b/src/net/sourceforge/plantuml/wire/WireDiagram.java index 9db3d344a..e1602410e 100644 --- a/src/net/sourceforge/plantuml/wire/WireDiagram.java +++ b/src/net/sourceforge/plantuml/wire/WireDiagram.java @@ -42,10 +42,8 @@ import java.io.OutputStream; import java.util.ArrayList; import java.util.List; -import net.sourceforge.plantuml.AnnotatedWorker; import net.sourceforge.plantuml.FileFormat; import net.sourceforge.plantuml.FileFormatOption; -import net.sourceforge.plantuml.ISkinParam; import net.sourceforge.plantuml.TikzFontDistortion; import net.sourceforge.plantuml.UmlDiagram; import net.sourceforge.plantuml.UmlDiagramType; @@ -55,15 +53,14 @@ import net.sourceforge.plantuml.core.ImageData; import net.sourceforge.plantuml.cucadiagram.Display; import net.sourceforge.plantuml.graphic.InnerStrategy; import net.sourceforge.plantuml.graphic.StringBounder; -import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.svek.TextBlockBackcolored; -import net.sourceforge.plantuml.ugraphic.ImageBuilder; -import net.sourceforge.plantuml.ugraphic.ImageParameter; import net.sourceforge.plantuml.ugraphic.MinMax; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UTranslate; import net.sourceforge.plantuml.ugraphic.color.HColor; +import static net.sourceforge.plantuml.ugraphic.ImageBuilder.styledImageBuilder; + public class WireDiagram extends UmlDiagram { private final WBlock root = new WBlock("", new UTranslate(), 0, 0, null); @@ -83,17 +80,8 @@ public class WireDiagram extends UmlDiagram { protected ImageData exportDiagramInternal(OutputStream os, int index, FileFormatOption fileFormatOption) throws IOException { - final ISkinParam skinParam = getSkinParam(); - final ImageParameter imageParameter = new ImageParameter(this, fileFormatOption); - - final ImageBuilder imageBuilder = ImageBuilder.build(imageParameter); - TextBlock result = getTextBlock(); - - result = new AnnotatedWorker(this, skinParam, fileFormatOption.getDefaultStringBounder(getSkinParam())) - .addAdd(result); - imageBuilder.setUDrawable(result); - - return imageBuilder.writeImageTOBEMOVED(seed(), os); + return styledImageBuilder(this, getTextBlock(), index, fileFormatOption, seed()) + .write(os); } private TextBlockBackcolored getTextBlock() {