mirror of
https://github.com/octoleo/plantuml-server.git
synced 2024-12-22 08:48:54 +00:00
update + restructure pom and add missing javadoc
This commit is contained in:
parent
098e630a28
commit
deda3c2256
2
.github/workflows/main.yml
vendored
2
.github/workflows/main.yml
vendored
@ -1,4 +1,5 @@
|
|||||||
name: Main
|
name: Main
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
tags:
|
tags:
|
||||||
@ -11,6 +12,7 @@ jobs:
|
|||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- uses: actions/setup-java@v2
|
- uses: actions/setup-java@v2
|
||||||
with:
|
with:
|
||||||
distribution: "adopt"
|
distribution: "adopt"
|
||||||
|
34
.github/workflows/pages.yml
vendored
Normal file
34
.github/workflows/pages.yml
vendored
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
name: Pages
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
workflow_run:
|
||||||
|
workflows:
|
||||||
|
- Main
|
||||||
|
types:
|
||||||
|
- completed
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
pages:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: github.event_name == 'workflow_dispatch' || github.event.workflow_run.conclusion == 'success'
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- uses: actions/setup-java@v2
|
||||||
|
with:
|
||||||
|
distribution: "adopt"
|
||||||
|
java-version: "8"
|
||||||
|
check-latest: true
|
||||||
|
cache: "maven"
|
||||||
|
|
||||||
|
- name: Create GitHub Pages
|
||||||
|
run: mvn site
|
||||||
|
|
||||||
|
- name: Deploy GitHub Pages
|
||||||
|
uses: peaceiris/actions-gh-pages@v3
|
||||||
|
with:
|
||||||
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
publish_dir: ./target/site
|
141
.github/workflows/tests.yml
vendored
Normal file
141
.github/workflows/tests.yml
vendored
Normal file
@ -0,0 +1,141 @@
|
|||||||
|
name: Tests
|
||||||
|
|
||||||
|
on:
|
||||||
|
- push
|
||||||
|
- pull_request
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test-mvn-livecycle:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- uses: actions/setup-java@v2
|
||||||
|
with:
|
||||||
|
distribution: "adopt"
|
||||||
|
java-version: "8"
|
||||||
|
check-latest: true
|
||||||
|
cache: "maven"
|
||||||
|
|
||||||
|
- name: Lifecycle - Step 1/8 - mvn clean
|
||||||
|
run: mvn clean
|
||||||
|
|
||||||
|
- name: Lifecycle - Step 2/8 - mvn validate
|
||||||
|
run: mvn validate
|
||||||
|
|
||||||
|
- name: Lifecycle - Step 3/8 - mvn compile
|
||||||
|
run: mvn compile
|
||||||
|
|
||||||
|
- name: Lifecycle - Step 4/8 - mvn test (with skipTests=true)
|
||||||
|
run: mvn test
|
||||||
|
|
||||||
|
- name: Lifecycle - Step 5/8 - mvn package
|
||||||
|
run: mvn package
|
||||||
|
|
||||||
|
- name: Lifecycle - Step 6/8 - mvn verify
|
||||||
|
run: mvn verify
|
||||||
|
|
||||||
|
- name: Lifecycle - Step 7/8 - mvn install
|
||||||
|
run: mvn install
|
||||||
|
|
||||||
|
- name: Lifecycle - Step 8/8 - mvn site
|
||||||
|
run: mvn site
|
||||||
|
|
||||||
|
# test-embedded:
|
||||||
|
# runs-on: ubuntu-latest
|
||||||
|
# needs: test-mvn-livecycle
|
||||||
|
# steps:
|
||||||
|
# - uses: actions/checkout@v2
|
||||||
|
# with:
|
||||||
|
# fetch-depth: 0
|
||||||
|
|
||||||
|
# - uses: actions/setup-java@v2
|
||||||
|
# with:
|
||||||
|
# distribution: "adopt"
|
||||||
|
# java-version: "8"
|
||||||
|
# check-latest: true
|
||||||
|
# cache: "maven"
|
||||||
|
|
||||||
|
# - name: Prepare embedded tests - Step 1/3 - mvn clean
|
||||||
|
# run: mvn clean
|
||||||
|
|
||||||
|
# - name: Prepare embedded tests - Step 2/3 - mvn compile
|
||||||
|
# run: mvn compile
|
||||||
|
|
||||||
|
# - name: Prepare embedded tests - Step 3/3 - mvn test (with skipTests=true)
|
||||||
|
# run: mvn test
|
||||||
|
|
||||||
|
# - name: Run tests against jetty embedded server
|
||||||
|
# run: mvn test -DskipTests=false
|
||||||
|
|
||||||
|
test-jetty:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: test-mvn-livecycle
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- uses: actions/setup-java@v2
|
||||||
|
with:
|
||||||
|
distribution: "adopt"
|
||||||
|
java-version: "8"
|
||||||
|
check-latest: true
|
||||||
|
cache: "maven"
|
||||||
|
|
||||||
|
- name: Prepare external tests - Step 1/3 - mvn clean
|
||||||
|
run: mvn clean
|
||||||
|
|
||||||
|
- name: Prepare external tests - Step 2/3 - mvn compile
|
||||||
|
run: mvn compile
|
||||||
|
|
||||||
|
- name: Prepare external tests - Step 3/3 - mvn test (with skipTests=true)
|
||||||
|
run: mvn test
|
||||||
|
|
||||||
|
- name: Build the jetty docker stack
|
||||||
|
run: |
|
||||||
|
docker image build -f Dockerfile.jetty -t plantuml-server:local .
|
||||||
|
docker run -d -p 8080:8080 -e BASE_URL=plantuml plantuml-server:local
|
||||||
|
|
||||||
|
- name: Check running containers
|
||||||
|
run: docker ps
|
||||||
|
|
||||||
|
- name: run tests against jetty docker image
|
||||||
|
run: mvn test -DskipTests=false -DargLine="-Dsystem.test.server=http://localhost:8080/plantuml"
|
||||||
|
|
||||||
|
test-tomcat:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: test-mvn-livecycle
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- uses: actions/setup-java@v2
|
||||||
|
with:
|
||||||
|
distribution: "adopt"
|
||||||
|
java-version: "8"
|
||||||
|
check-latest: true
|
||||||
|
cache: "maven"
|
||||||
|
|
||||||
|
- name: Prepare external tests - Step 1/3 - mvn clean
|
||||||
|
run: mvn clean
|
||||||
|
|
||||||
|
- name: Prepare external tests - Step 2/3 - mvn compile
|
||||||
|
run: mvn compile
|
||||||
|
|
||||||
|
- name: Prepare external tests - Step 3/3 - mvn test (with skipTests=true)
|
||||||
|
run: mvn test
|
||||||
|
|
||||||
|
- name: Build the tomcat docker stack
|
||||||
|
run: |
|
||||||
|
docker image build -f Dockerfile.tomcat -t plantuml-server:local .
|
||||||
|
docker run -d -p 8080:8080 -e BASE_URL=plantuml plantuml-server:local
|
||||||
|
|
||||||
|
- name: Check running containers
|
||||||
|
run: docker ps
|
||||||
|
|
||||||
|
- name: run tests against tomcat docker image
|
||||||
|
run: mvn test -DskipTests=false -DargLine="-Dsystem.test.server=http://localhost:8080/plantuml"
|
3
.vscode/settings.json
vendored
3
.vscode/settings.json
vendored
@ -13,7 +13,8 @@
|
|||||||
"servlet",
|
"servlet",
|
||||||
"servlets",
|
"servlets",
|
||||||
"startditaa",
|
"startditaa",
|
||||||
"startuml"
|
"startuml",
|
||||||
|
"utxt"
|
||||||
],
|
],
|
||||||
"cSpell.allowCompoundWords": true
|
"cSpell.allowCompoundWords": true
|
||||||
}
|
}
|
18
README.md
18
README.md
@ -1,7 +1,13 @@
|
|||||||
# PlantUML Server
|
# PlantUML Server
|
||||||
|
|
||||||
![workflow status](https://github.com/plantuml/plantuml-server/actions/workflows/main.yml/badge.svg)
|
[![GNU GENERAL PUBLIC LICENSE, Version 3, 29 June 2007](https://img.shields.io/github/license/plantuml/plantuml-server.svg?color=blue)](https://www.gnu.org/licenses/gpl-3.0)
|
||||||
[![docker pulls](https://img.shields.io/docker/pulls/plantuml/plantuml-server.svg)](https://hub.docker.com/r/plantuml/plantuml-server)
|
[![latest tag](https://img.shields.io/github/v/tag/plantuml/plantuml-server)](https://github.com/plantuml/plantuml-server/tags)
|
||||||
|
![workflow status (Main)](https://github.com/plantuml/plantuml-server/actions/workflows/main.yml/badge.svg)
|
||||||
|
![workflow status (Tests)](https://github.com/plantuml/plantuml-server/actions/workflows/tests.yml/badge.svg)
|
||||||
|
![workflow status (Pages)](https://github.com/plantuml/plantuml-server/actions/workflows/pages.yml/badge.svg)
|
||||||
|
[![docker pulls](https://img.shields.io/docker/pulls/plantuml/plantuml-server.svg?color=blue)](https://hub.docker.com/r/plantuml/plantuml-server)
|
||||||
|
![Docker Image Size (Jetty)](https://img.shields.io/docker/image-size/plantuml/plantuml-server/jetty?label=jetty%20image%20size)
|
||||||
|
![Docker Image Size (Tomcat)](https://img.shields.io/docker/image-size/plantuml/plantuml-server/tomcat?label=tomcat%20image%20size)
|
||||||
|
|
||||||
PlantUML Server is a web application to generate UML diagrams on-the-fly.
|
PlantUML Server is a web application to generate UML diagrams on-the-fly.
|
||||||
|
|
||||||
@ -84,12 +90,12 @@ docker run -d -p 8080:8080 -e THE_ENV_VARIABLE=THE_ENV_VALUE plantuml/plantuml-s
|
|||||||
|
|
||||||
You can set all the following variables:
|
You can set all the following variables:
|
||||||
|
|
||||||
|
* `BASE_URL`
|
||||||
|
* PlantUML Base URL path
|
||||||
|
* Default value: `ROOT`
|
||||||
* `PLANTUML_LIMIT_SIZE`
|
* `PLANTUML_LIMIT_SIZE`
|
||||||
* Limits image width and height
|
* Limits image width and height
|
||||||
* Default value: `4096`
|
* Default value: `4096`
|
||||||
* `GRAPHVIZ_DOT`
|
|
||||||
* Link to 'dot' executable
|
|
||||||
* Default value: `/usr/local/bin/dot` or `/usr/bin/dot`
|
|
||||||
* `PLANTUML_STATS`
|
* `PLANTUML_STATS`
|
||||||
* Set it to `on` to enable [statistics report](https://plantuml.com/statistics-report)
|
* Set it to `on` to enable [statistics report](https://plantuml.com/statistics-report)
|
||||||
* Default value: `off`
|
* Default value: `off`
|
||||||
@ -112,7 +118,7 @@ So, you can use following command to create a self-contained docker image that w
|
|||||||
docker image build -t plantuml-server:local .
|
docker image build -t plantuml-server:local .
|
||||||
docker run -d -p 8080:8080 plantuml-server:local
|
docker run -d -p 8080:8080 plantuml-server:local
|
||||||
```
|
```
|
||||||
The server is now listening to [http://localhost:8080/plantuml](http://localhost:8080/plantuml).
|
The server is now listening to [http://localhost:8080](http://localhost:8080).
|
||||||
|
|
||||||
You may specify the port in `-p` Docker command line argument.
|
You may specify the port in `-p` Docker command line argument.
|
||||||
|
|
||||||
|
415
pom.xml
415
pom.xml
@ -1,25 +1,208 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
<project
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
|
||||||
|
>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
<groupId>org.sourceforge.plantuml</groupId>
|
<groupId>org.sourceforge.plantuml</groupId>
|
||||||
<artifactId>plantumlservlet</artifactId>
|
<artifactId>plantumlservlet</artifactId>
|
||||||
<version>1-SNAPSHOT</version>
|
<version>1-SNAPSHOT</version>
|
||||||
<name>PlantUML Servlet</name>
|
|
||||||
<packaging>war</packaging>
|
<packaging>war</packaging>
|
||||||
|
|
||||||
|
<name>PlantUML Servlet</name>
|
||||||
|
<url>https://plantuml.github.io/plantuml-server/index.html</url>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<java.version>8</java.version>
|
||||||
|
<maven.compiler.source>${java.version}</maven.compiler.source>
|
||||||
|
<maven.compiler.target>${java.version}</maven.compiler.target>
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Skip tests by default.
|
||||||
|
Run tests manually:
|
||||||
|
- mvn test -DskipTests=false
|
||||||
|
- mvn test -DskipTests=false -DargLine="-Dsystem.test.server=http://localhost:8080/plantuml"
|
||||||
|
-->
|
||||||
|
<skipTests>true</skipTests>
|
||||||
|
|
||||||
|
<maven.build.timestamp.format>yyyyMMdd-HHmm</maven.build.timestamp.format>
|
||||||
|
<timestamp>${maven.build.timestamp}</timestamp>
|
||||||
|
|
||||||
|
<wtp.version>1.5</wtp.version>
|
||||||
|
<wtp.contextName>plantuml</wtp.contextName>
|
||||||
|
|
||||||
|
<jetty.port>8080</jetty.port>
|
||||||
|
<jetty.contextpath>/${wtp.contextName}</jetty.contextpath>
|
||||||
|
|
||||||
|
<!-- main versions -->
|
||||||
|
<plantuml.version>1.2021.12</plantuml.version>
|
||||||
|
<jetty.version>8.0.4.v20111024</jetty.version>
|
||||||
|
<codemirror.version>5.63.0</codemirror.version>
|
||||||
|
|
||||||
|
<!-- dependencies -->
|
||||||
|
<jstl.version>1.2</jstl.version>
|
||||||
|
<servlet-api.version>2.5</servlet-api.version>
|
||||||
|
<batik-all.version>1.14</batik-all.version>
|
||||||
|
<!-- jlatexmath -->
|
||||||
|
<jlatexmath.version>1.0.7</jlatexmath.version>
|
||||||
|
<jlatexmath-font-greek.version>${jlatexmath.version}</jlatexmath-font-greek.version>
|
||||||
|
<jlatexmath-font-cyrillic.version>${jlatexmath.version}</jlatexmath-font-cyrillic.version>
|
||||||
|
<!-- Testing -->
|
||||||
|
<junit.version>4.13.2</junit.version>
|
||||||
|
<htmlunit.version>2.53.0</htmlunit.version>
|
||||||
|
|
||||||
|
<!-- build plugin management -->
|
||||||
|
<!-- lock down plugins versions to avoid using Maven defaults -->
|
||||||
|
<maven-clean-plugin.version>3.1.0</maven-clean-plugin.version>
|
||||||
|
<maven-dependency-plugin.version>3.2.0</maven-dependency-plugin.version>
|
||||||
|
<maven-resources-plugin.version>3.2.0</maven-resources-plugin.version>
|
||||||
|
<maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
|
||||||
|
<versions-maven-plugin.version>2.8.1</versions-maven-plugin.version>
|
||||||
|
<maven-surefire-plugin.version>2.22.2</maven-surefire-plugin.version>
|
||||||
|
<maven-war-plugin.version>3.3.2</maven-war-plugin.version>
|
||||||
|
<maven-install-plugin.version>2.5.2</maven-install-plugin.version>
|
||||||
|
<maven-deploy-plugin.version>2.8.2</maven-deploy-plugin.version>
|
||||||
|
<maven-site-plugin.version>3.9.1</maven-site-plugin.version>
|
||||||
|
<maven-project-info-reports-plugin.version>3.1.2</maven-project-info-reports-plugin.version>
|
||||||
|
<maven-checkstyle-plugin.version>3.1.2</maven-checkstyle-plugin.version>
|
||||||
|
<checkstyle.version>9.0.1</checkstyle.version>
|
||||||
|
|
||||||
|
<!-- plugins -->
|
||||||
|
<maven-eclipse-plugin.version>2.10</maven-eclipse-plugin.version>
|
||||||
|
<!-- <jetty-runner.version>${jetty.version}</jetty-runner.version> -->
|
||||||
|
<jetty-runner.version>8.1.9.v20130131</jetty-runner.version>
|
||||||
|
<jetty-maven-plugin.version>${jetty.version}</jetty-maven-plugin.version>
|
||||||
|
<maven-javadoc-plugin.version>3.3.1</maven-javadoc-plugin.version>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>net.sourceforge.plantuml</groupId>
|
||||||
|
<artifactId>plantuml</artifactId>
|
||||||
|
<version>${plantuml.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>javax.servlet</groupId>
|
||||||
|
<artifactId>jstl</artifactId>
|
||||||
|
<version>${jstl.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.webjars.npm</groupId>
|
||||||
|
<artifactId>codemirror</artifactId>
|
||||||
|
<version>${codemirror.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>javax.servlet</groupId>
|
||||||
|
<artifactId>servlet-api</artifactId>
|
||||||
|
<version>${servlet-api.version}</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.xmlgraphics</groupId>
|
||||||
|
<artifactId>batik-all</artifactId>
|
||||||
|
<version>${batik-all.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<!-- jlatexmath -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.scilab.forge</groupId>
|
||||||
|
<artifactId>jlatexmath</artifactId>
|
||||||
|
<version>${jlatexmath.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.scilab.forge</groupId>
|
||||||
|
<artifactId>jlatexmath-font-greek</artifactId>
|
||||||
|
<version>${jlatexmath-font-greek.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.scilab.forge</groupId>
|
||||||
|
<artifactId>jlatexmath-font-cyrillic</artifactId>
|
||||||
|
<version>${jlatexmath-font-cyrillic.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<!-- Testing -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>junit</groupId>
|
||||||
|
<artifactId>junit</artifactId>
|
||||||
|
<version>${junit.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>net.sourceforge.htmlunit</groupId>
|
||||||
|
<artifactId>htmlunit</artifactId>
|
||||||
|
<version>${htmlunit.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.eclipse.jetty.aggregate</groupId>
|
||||||
|
<artifactId>jetty-all</artifactId>
|
||||||
|
<version>${jetty.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.mortbay.jetty</groupId>
|
||||||
|
<artifactId>jsp-2.1-glassfish</artifactId>
|
||||||
|
<version>2.1.v20100127</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
<finalName>plantuml</finalName>
|
<finalName>plantuml</finalName>
|
||||||
|
|
||||||
<pluginManagement>
|
<pluginManagement>
|
||||||
<plugins>
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<artifactId>maven-clean-plugin</artifactId>
|
||||||
|
<version>${maven-clean-plugin.version}</version>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<artifactId>maven-dependency-plugin</artifactId>
|
||||||
|
<version>${maven-dependency-plugin.version}</version>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<artifactId>maven-resources-plugin</artifactId>
|
||||||
|
<version>${maven-resources-plugin.version}</version>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<version>${maven-compiler-plugin.version}</version>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
|
<version>${maven-surefire-plugin.version}</version>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<artifactId>maven-war-plugin</artifactId>
|
||||||
|
<version>${maven-war-plugin.version}</version>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<artifactId>maven-install-plugin</artifactId>
|
||||||
|
<version>${maven-install-plugin.version}</version>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<artifactId>maven-deploy-plugin</artifactId>
|
||||||
|
<version>${maven-deploy-plugin.version}</version>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<artifactId>maven-site-plugin</artifactId>
|
||||||
|
<version>${maven-site-plugin.version}</version>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<artifactId>maven-project-info-reports-plugin</artifactId>
|
||||||
|
<version>${maven-project-info-reports-plugin.version}</version>
|
||||||
|
</plugin>
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-checkstyle-plugin</artifactId>
|
<artifactId>maven-checkstyle-plugin</artifactId>
|
||||||
<version>3.1.2</version>
|
<version>${maven-checkstyle-plugin.version}</version>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.puppycrawl.tools</groupId>
|
<groupId>com.puppycrawl.tools</groupId>
|
||||||
<artifactId>checkstyle</artifactId>
|
<artifactId>checkstyle</artifactId>
|
||||||
<version>9.0.1</version>
|
<version>${checkstyle.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<configuration>
|
<configuration>
|
||||||
@ -29,29 +212,91 @@
|
|||||||
<failsOnError>true</failsOnError>
|
<failsOnError>true</failsOnError>
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.codehaus.mojo</groupId>
|
||||||
|
<artifactId>versions-maven-plugin</artifactId>
|
||||||
|
<version>${versions-maven-plugin.version}</version>
|
||||||
|
<configuration>
|
||||||
|
<outputFile>${project.build.directory}/outdated-dependencies.txt</outputFile>
|
||||||
|
<rulesUri>file:///${basedir}/src/main/config/rules.xml</rulesUri>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
</plugins>
|
</plugins>
|
||||||
</pluginManagement>
|
</pluginManagement>
|
||||||
|
|
||||||
<plugins>
|
<plugins>
|
||||||
<plugin>
|
<plugin>
|
||||||
<artifactId>maven-eclipse-plugin</artifactId>
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
<version>2.8</version>
|
<version>${maven-compiler-plugin.version}</version>
|
||||||
<configuration>
|
<configuration>
|
||||||
<wtpversion>1.5</wtpversion>
|
<source>${maven.compiler.source}</source>
|
||||||
<wtpContextName>plantuml</wtpContextName>
|
<target>${maven.compiler.target}</target>
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
<plugin>
|
<plugin>
|
||||||
<artifactId>maven-compiler-plugin</artifactId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<version>2.3.2</version>
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
|
<version>${maven-surefire-plugin.version}</version>
|
||||||
<configuration>
|
<configuration>
|
||||||
<source>1.7</source>
|
<skipTests>${skipTests}</skipTests>
|
||||||
<target>1.7</target>
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-site-plugin</artifactId>
|
||||||
|
<version>${maven-site-plugin.version}</version>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-checkstyle-plugin</artifactId>
|
||||||
|
<version>${maven-checkstyle-plugin.version}</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<?m2e execute onConfiguration,onIncremental?>
|
||||||
|
<phase>validate</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>check</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.codehaus.mojo</groupId>
|
||||||
|
<artifactId>versions-maven-plugin</artifactId>
|
||||||
|
<version>${versions-maven-plugin.version}</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<phase>validate</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>display-property-updates</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-javadoc-plugin</artifactId>
|
||||||
|
<version>${maven-javadoc-plugin.version}</version>
|
||||||
|
<configuration>
|
||||||
|
<show>private</show>
|
||||||
|
<nohelp>true</nohelp>
|
||||||
|
<source>${java.version}</source>
|
||||||
|
<failOnWarnings>true</failOnWarnings>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-eclipse-plugin</artifactId>
|
||||||
|
<version>${maven-eclipse-plugin.version}</version>
|
||||||
|
<configuration>
|
||||||
|
<wtpversion>${wtp.version}</wtpversion>
|
||||||
|
<wtpContextName>${wtp.contextName}</wtpContextName>
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.mortbay.jetty</groupId>
|
<groupId>org.mortbay.jetty</groupId>
|
||||||
<artifactId>jetty-maven-plugin</artifactId>
|
<artifactId>jetty-maven-plugin</artifactId>
|
||||||
<version>${jetty.version}</version>
|
<version>${jetty-maven-plugin.version}</version>
|
||||||
<configuration>
|
<configuration>
|
||||||
<scanIntervalSeconds>5</scanIntervalSeconds>
|
<scanIntervalSeconds>5</scanIntervalSeconds>
|
||||||
<webApp>
|
<webApp>
|
||||||
@ -68,17 +313,19 @@
|
|||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-dependency-plugin</artifactId>
|
<artifactId>maven-dependency-plugin</artifactId>
|
||||||
<version>2.3</version>
|
<version>${maven-dependency-plugin.version}</version>
|
||||||
<executions>
|
<executions>
|
||||||
<execution>
|
<execution>
|
||||||
<phase>package</phase>
|
<phase>package</phase>
|
||||||
<goals><goal>copy</goal></goals>
|
<goals>
|
||||||
|
<goal>copy</goal>
|
||||||
|
</goals>
|
||||||
<configuration>
|
<configuration>
|
||||||
<artifactItems>
|
<artifactItems>
|
||||||
<artifactItem>
|
<artifactItem>
|
||||||
<groupId>org.mortbay.jetty</groupId>
|
<groupId>org.mortbay.jetty</groupId>
|
||||||
<artifactId>jetty-runner</artifactId>
|
<artifactId>jetty-runner</artifactId>
|
||||||
<version>8.1.9.v20130131</version>
|
<version>${jetty-runner.version}</version>
|
||||||
<destFileName>jetty-runner.jar</destFileName>
|
<destFileName>jetty-runner.jar</destFileName>
|
||||||
</artifactItem>
|
</artifactItem>
|
||||||
</artifactItems>
|
</artifactItems>
|
||||||
@ -89,7 +336,7 @@
|
|||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-war-plugin</artifactId>
|
<artifactId>maven-war-plugin</artifactId>
|
||||||
<version>2.3</version>
|
<version>${maven-war-plugin.version}</version>
|
||||||
<configuration>
|
<configuration>
|
||||||
<webResources>
|
<webResources>
|
||||||
<resource>
|
<resource>
|
||||||
@ -102,58 +349,42 @@
|
|||||||
</webResources>
|
</webResources>
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-surefire-plugin</artifactId>
|
|
||||||
<version>2.14.1</version>
|
|
||||||
<configuration>
|
|
||||||
<skipTests>${skipTests}</skipTests>
|
|
||||||
</configuration>
|
|
||||||
</plugin>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-site-plugin</artifactId>
|
|
||||||
<version>3.0-beta-3</version>
|
|
||||||
</plugin>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-checkstyle-plugin</artifactId>
|
|
||||||
<version>3.1.2</version>
|
|
||||||
<executions>
|
|
||||||
<execution>
|
|
||||||
<?m2e execute onConfiguration,onIncremental?>
|
|
||||||
<phase>validate</phase>
|
|
||||||
<goals>
|
|
||||||
<goal>check</goal>
|
|
||||||
</goals>
|
|
||||||
</execution>
|
|
||||||
</executions>
|
|
||||||
</plugin>
|
|
||||||
</plugins>
|
</plugins>
|
||||||
</build>
|
</build>
|
||||||
|
|
||||||
<reporting>
|
<reporting>
|
||||||
<plugins>
|
<plugins>
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-project-info-reports-plugin</artifactId>
|
<artifactId>maven-project-info-reports-plugin</artifactId>
|
||||||
<version>2.6</version>
|
<version>${maven-project-info-reports-plugin.version}</version>
|
||||||
<reportSets>
|
<reportSets>
|
||||||
<reportSet>
|
<reportSet>
|
||||||
<reports><!-- select reports -->
|
<reports>
|
||||||
<report>index</report>
|
<report>index</report>
|
||||||
<report>dependencies</report>
|
<report>dependencies</report>
|
||||||
</reports>
|
</reports>
|
||||||
</reportSet>
|
</reportSet>
|
||||||
</reportSets>
|
</reportSets>
|
||||||
</plugin>
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.codehaus.mojo</groupId>
|
||||||
|
<artifactId>versions-maven-plugin</artifactId>
|
||||||
|
<version>${versions-maven-plugin.version}</version>
|
||||||
|
<reportSets>
|
||||||
|
<reportSet>
|
||||||
|
<reports>
|
||||||
|
<!-- <report>dependency-updates-report</report> -->
|
||||||
|
<!-- <report>plugin-updates-report</report> -->
|
||||||
|
<report>property-updates-report</report>
|
||||||
|
</reports>
|
||||||
|
</reportSet>
|
||||||
|
</reportSets>
|
||||||
|
</plugin>
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-javadoc-plugin</artifactId>
|
<artifactId>maven-javadoc-plugin</artifactId>
|
||||||
<version>3.3.1</version>
|
<version>${maven-javadoc-plugin.version}</version>
|
||||||
<configuration>
|
|
||||||
<show>private</show>
|
|
||||||
<nohelp>true</nohelp>
|
|
||||||
</configuration>
|
|
||||||
<reportSets>
|
<reportSets>
|
||||||
<reportSet>
|
<reportSet>
|
||||||
<id>html</id>
|
<id>html</id>
|
||||||
@ -166,7 +397,7 @@
|
|||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-checkstyle-plugin</artifactId>
|
<artifactId>maven-checkstyle-plugin</artifactId>
|
||||||
<version>3.1.2</version>
|
<version>${maven-checkstyle-plugin.version}</version>
|
||||||
<reportSets>
|
<reportSets>
|
||||||
<reportSet>
|
<reportSet>
|
||||||
<reports>
|
<reports>
|
||||||
@ -178,82 +409,4 @@
|
|||||||
</plugin>
|
</plugin>
|
||||||
</plugins>
|
</plugins>
|
||||||
</reporting>
|
</reporting>
|
||||||
<properties>
|
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
|
||||||
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
|
||||||
<jetty.version>8.0.4.v20111024</jetty.version>
|
|
||||||
<jetty.port>8080</jetty.port>
|
|
||||||
<jetty.contextpath>/plantuml</jetty.contextpath>
|
|
||||||
<maven.build.timestamp.format>yyyyMMdd-HHmm
|
|
||||||
</maven.build.timestamp.format>
|
|
||||||
<timestamp>${maven.build.timestamp}</timestamp>
|
|
||||||
<skipTests>true</skipTests>
|
|
||||||
</properties>
|
|
||||||
<dependencies>
|
|
||||||
<dependency>
|
|
||||||
<groupId>net.sourceforge.plantuml</groupId>
|
|
||||||
<artifactId>plantuml</artifactId>
|
|
||||||
<version>1.2021.12</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>javax.servlet</groupId>
|
|
||||||
<artifactId>jstl</artifactId>
|
|
||||||
<version>1.2</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.webjars</groupId>
|
|
||||||
<artifactId>codemirror</artifactId>
|
|
||||||
<version>3.21</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>javax.servlet</groupId>
|
|
||||||
<artifactId>servlet-api</artifactId>
|
|
||||||
<version>2.5</version>
|
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>junit</groupId>
|
|
||||||
<artifactId>junit</artifactId>
|
|
||||||
<version>4.13.2</version>
|
|
||||||
<scope>test</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>net.sourceforge.htmlunit</groupId>
|
|
||||||
<artifactId>htmlunit</artifactId>
|
|
||||||
<version>2.53.0</version>
|
|
||||||
<scope>test</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.eclipse.jetty.aggregate</groupId>
|
|
||||||
<artifactId>jetty-all</artifactId>
|
|
||||||
<version>${jetty.version}</version>
|
|
||||||
<scope>test</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.mortbay.jetty</groupId>
|
|
||||||
<artifactId>jsp-2.1-glassfish</artifactId>
|
|
||||||
<version>2.1.v20100127</version>
|
|
||||||
<scope>test</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.scilab.forge</groupId>
|
|
||||||
<artifactId>jlatexmath</artifactId>
|
|
||||||
<version>1.0.7</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.scilab.forge</groupId>
|
|
||||||
<artifactId>jlatexmath-font-greek</artifactId>
|
|
||||||
<version>1.0.7</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.scilab.forge</groupId>
|
|
||||||
<artifactId>jlatexmath-font-cyrillic</artifactId>
|
|
||||||
<version>1.0.7</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.apache.xmlgraphics</groupId>
|
|
||||||
<artifactId>batik-all</artifactId>
|
|
||||||
<version>1.12</version>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
</project>
|
</project>
|
||||||
|
26
src/main/config/rules.xml
Normal file
26
src/main/config/rules.xml
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ruleset
|
||||||
|
comparisonMethod="maven"
|
||||||
|
xmlns="http://mojo.codehaus.org/versions-maven-plugin/rule/2.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://mojo.codehaus.org/versions-maven-plugin/rule/2.0.0 https://www.mojohaus.org/versions-maven-plugin/xsd/rule-2.0.0.xsd"
|
||||||
|
>
|
||||||
|
<ignoreVersions>
|
||||||
|
<!-- Ignore Alpha's, Beta's, release candidates and milestones -->
|
||||||
|
<ignoreVersion type="regex">(?i).*Alpha(?:-?\d+)?</ignoreVersion>
|
||||||
|
<ignoreVersion type="regex">(?i).*a(?:-?\d+)?</ignoreVersion>
|
||||||
|
<ignoreVersion type="regex">(?i).*Beta(?:-?\d+)?</ignoreVersion>
|
||||||
|
<ignoreVersion type="regex">(?i).*-B(?:-?\d+)?</ignoreVersion>
|
||||||
|
<ignoreVersion type="regex">(?i).*RC(?:-?\d+)?</ignoreVersion>
|
||||||
|
<ignoreVersion type="regex">(?i).*CR(?:-?\d+)?</ignoreVersion>
|
||||||
|
<ignoreVersion type="regex">(?i).*M(?:-?\d+)?</ignoreVersion>
|
||||||
|
</ignoreVersions>
|
||||||
|
<rules>
|
||||||
|
<rule groupId="net.sourceforge.plantuml" artifactId="plantuml" comparisonMethod="maven">
|
||||||
|
<ignoreVersions>
|
||||||
|
<!-- allow only version like this: 1.20XX.X* -->
|
||||||
|
<ignoreVersion type="regex"><![CDATA[^(.(?<!1\.20.{2}\.\d))*?$]]></ignoreVersion>
|
||||||
|
</ignoreVersions>
|
||||||
|
</rule>
|
||||||
|
</rules>
|
||||||
|
</ruleset>
|
@ -48,41 +48,69 @@ import net.sourceforge.plantuml.version.Version;
|
|||||||
import net.sourceforge.plantuml.error.PSystemError;
|
import net.sourceforge.plantuml.error.PSystemError;
|
||||||
import net.sourceforge.plantuml.ErrorUml;
|
import net.sourceforge.plantuml.ErrorUml;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Delegates the diagram generation from the UML source and the filling of the HTTP response with the diagram in the
|
* Delegates the diagram generation from the UML source and the filling of the HTTP response with the diagram in the
|
||||||
* right format. Its own responsibility is to produce the right HTTP headers.
|
* right format. Its own responsibility is to produce the right HTTP headers.
|
||||||
*/
|
*/
|
||||||
public class DiagramResponse {
|
public class DiagramResponse {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@link FileFormat} to http content type mapping.
|
||||||
|
*/
|
||||||
|
private static final Map<FileFormat, String> CONTENT_TYPE;
|
||||||
|
/**
|
||||||
|
* X-Powered-By http header value included in every response by default.
|
||||||
|
*/
|
||||||
private static final String POWERED_BY = "PlantUML Version " + Version.versionString();
|
private static final String POWERED_BY = "PlantUML Version " + Version.versionString();
|
||||||
|
|
||||||
private HttpServletResponse response;
|
|
||||||
private FileFormat format;
|
|
||||||
private HttpServletRequest request;
|
|
||||||
private static final Map<FileFormat, String> CONTENT_TYPE;
|
|
||||||
static {
|
|
||||||
Map<FileFormat, String> map = new HashMap<FileFormat, String>();
|
|
||||||
map.put(FileFormat.PNG, "image/png");
|
|
||||||
map.put(FileFormat.SVG, "image/svg+xml");
|
|
||||||
map.put(FileFormat.EPS, "application/postscript");
|
|
||||||
map.put(FileFormat.UTXT, "text/plain;charset=UTF-8");
|
|
||||||
map.put(FileFormat.BASE64, "text/plain; charset=x-user-defined");
|
|
||||||
CONTENT_TYPE = Collections.unmodifiableMap(map);
|
|
||||||
}
|
|
||||||
static {
|
static {
|
||||||
OptionFlags.ALLOW_INCLUDE = false;
|
OptionFlags.ALLOW_INCLUDE = false;
|
||||||
if ("true".equalsIgnoreCase(System.getenv("ALLOW_PLANTUML_INCLUDE"))) {
|
if ("true".equalsIgnoreCase(System.getenv("ALLOW_PLANTUML_INCLUDE"))) {
|
||||||
OptionFlags.ALLOW_INCLUDE = true;
|
OptionFlags.ALLOW_INCLUDE = true;
|
||||||
}
|
}
|
||||||
|
CONTENT_TYPE = Collections.unmodifiableMap(new HashMap<FileFormat, String>() {{
|
||||||
|
put(FileFormat.PNG, "image/png");
|
||||||
|
put(FileFormat.SVG, "image/svg+xml");
|
||||||
|
put(FileFormat.EPS, "application/postscript");
|
||||||
|
put(FileFormat.UTXT, "text/plain;charset=UTF-8");
|
||||||
|
put(FileFormat.BASE64, "text/plain; charset=x-user-defined");
|
||||||
|
}});
|
||||||
}
|
}
|
||||||
|
|
||||||
public DiagramResponse(HttpServletResponse r, FileFormat f, HttpServletRequest rq) {
|
/**
|
||||||
response = r;
|
* Response format.
|
||||||
format = f;
|
*/
|
||||||
request = rq;
|
private FileFormat format;
|
||||||
|
/**
|
||||||
|
* Http request.
|
||||||
|
*/
|
||||||
|
private HttpServletRequest request;
|
||||||
|
/**
|
||||||
|
* Http response.
|
||||||
|
*/
|
||||||
|
private HttpServletResponse response;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create new diagram response instance.
|
||||||
|
*
|
||||||
|
* @param res http response
|
||||||
|
* @param fmt target file format
|
||||||
|
* @param req http request
|
||||||
|
*/
|
||||||
|
public DiagramResponse(HttpServletResponse res, FileFormat fmt, HttpServletRequest req) {
|
||||||
|
response = res;
|
||||||
|
format = fmt;
|
||||||
|
request = req;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Render and send a specific uml diagram.
|
||||||
|
*
|
||||||
|
* @param uml textual UML diagram(s) source
|
||||||
|
* @param idx diagram index of {@code uml} to send
|
||||||
|
*
|
||||||
|
* @throws IOException if an input or output exception occurred
|
||||||
|
*/
|
||||||
public void sendDiagram(String uml, int idx) throws IOException {
|
public void sendDiagram(String uml, int idx) throws IOException {
|
||||||
response.addHeader("Access-Control-Allow-Origin", "*");
|
response.addHeader("Access-Control-Allow-Origin", "*");
|
||||||
response.setContentType(getContentType());
|
response.setContentType(getContentType());
|
||||||
@ -114,6 +142,13 @@ public class DiagramResponse {
|
|||||||
diagram.exportDiagram(response.getOutputStream(), idx, new FileFormatOption(format));
|
diagram.exportDiagram(response.getOutputStream(), idx, new FileFormatOption(format));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Is block uml unmodified?
|
||||||
|
*
|
||||||
|
* @param blockUml block uml
|
||||||
|
*
|
||||||
|
* @return true if unmodified; otherwise false
|
||||||
|
*/
|
||||||
private boolean notModified(BlockUml blockUml) {
|
private boolean notModified(BlockUml blockUml) {
|
||||||
final String ifNoneMatch = request.getHeader("If-None-Match");
|
final String ifNoneMatch = request.getHeader("If-None-Match");
|
||||||
final long ifModifiedSince = request.getDateHeader("If-Modified-Since");
|
final long ifModifiedSince = request.getDateHeader("If-Modified-Since");
|
||||||
@ -127,7 +162,13 @@ public class DiagramResponse {
|
|||||||
return ifNoneMatch.contains(etag);
|
return ifNoneMatch.contains(etag);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Produce and send the image map of the uml diagram in HTML format.
|
||||||
|
*
|
||||||
|
* @param uml textual UML diagram source
|
||||||
|
*
|
||||||
|
* @throws IOException if an input or output exception occurred
|
||||||
|
*/
|
||||||
public void sendMap(String uml) throws IOException {
|
public void sendMap(String uml) throws IOException {
|
||||||
response.setContentType(getContentType());
|
response.setContentType(getContentType());
|
||||||
SourceStringReader reader = new SourceStringReader(uml);
|
SourceStringReader reader = new SourceStringReader(uml);
|
||||||
@ -145,15 +186,29 @@ public class DiagramResponse {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check the syntax of the diagram and send a report in TEXT format.
|
||||||
|
*
|
||||||
|
* @param uml textual UML diagram source
|
||||||
|
*
|
||||||
|
* @throws IOException if an input or output exception occurred
|
||||||
|
*/
|
||||||
public void sendCheck(String uml) throws IOException {
|
public void sendCheck(String uml) throws IOException {
|
||||||
response.setContentType(getContentType());
|
response.setContentType(getContentType());
|
||||||
SourceStringReader reader = new SourceStringReader(uml);
|
SourceStringReader reader = new SourceStringReader(uml);
|
||||||
DiagramDescription desc = reader.outputImage(
|
DiagramDescription desc = reader.outputImage(
|
||||||
new NullOutputStream(), new FileFormatOption(FileFormat.PNG, false));
|
new NullOutputStream(),
|
||||||
|
new FileFormatOption(FileFormat.PNG, false)
|
||||||
|
);
|
||||||
PrintWriter httpOut = response.getWriter();
|
PrintWriter httpOut = response.getWriter();
|
||||||
httpOut.print(desc.getDescription());
|
httpOut.print(desc.getDescription());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add default header including cache headers to response.
|
||||||
|
*
|
||||||
|
* @param blockUml response block uml
|
||||||
|
*/
|
||||||
private void addHeaderForCache(BlockUml blockUml) {
|
private void addHeaderForCache(BlockUml blockUml) {
|
||||||
long today = System.currentTimeMillis();
|
long today = System.currentTimeMillis();
|
||||||
// Add http headers to force the browser to cache the image
|
// Add http headers to force the browser to cache the image
|
||||||
@ -177,12 +232,22 @@ public class DiagramResponse {
|
|||||||
addHeaders(response);
|
addHeaders(response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add default headers to response.
|
||||||
|
*
|
||||||
|
* @param response http response
|
||||||
|
*/
|
||||||
public static void addHeaders(HttpServletResponse response) {
|
public static void addHeaders(HttpServletResponse response) {
|
||||||
response.addHeader("X-Powered-By", POWERED_BY);
|
response.addHeader("X-Powered-By", POWERED_BY);
|
||||||
response.addHeader("X-Patreon", "Support us on https://plantuml.com/patreon");
|
response.addHeader("X-Patreon", "Support us on https://plantuml.com/patreon");
|
||||||
response.addHeader("X-Donate", "https://plantuml.com/paypal");
|
response.addHeader("X-Donate", "https://plantuml.com/paypal");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get response content type.
|
||||||
|
*
|
||||||
|
* @return response content type
|
||||||
|
*/
|
||||||
private String getContentType() {
|
private String getContentType() {
|
||||||
return CONTENT_TYPE.get(format);
|
return CONTENT_TYPE.get(format);
|
||||||
}
|
}
|
||||||
|
@ -32,7 +32,6 @@ import javax.servlet.http.HttpServletRequest;
|
|||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
import net.sourceforge.plantuml.FileFormat;
|
import net.sourceforge.plantuml.FileFormat;
|
||||||
|
|
||||||
import net.sourceforge.plantuml.servlet.utility.UmlExtractor;
|
import net.sourceforge.plantuml.servlet.utility.UmlExtractor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -58,6 +57,13 @@ public class MapServlet extends HttpServlet {
|
|||||||
dr = null;
|
dr = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extract UML source from URI.
|
||||||
|
*
|
||||||
|
* @param uri the complete URI as returned by `request.getRequestURI()`
|
||||||
|
*
|
||||||
|
* @return the encoded UML text
|
||||||
|
*/
|
||||||
public String getSource(String uri) {
|
public String getSource(String uri) {
|
||||||
String[] result = uri.split("/map/", 2);
|
String[] result = uri.split("/map/", 2);
|
||||||
if (result.length != 2) {
|
if (result.length != 2) {
|
||||||
|
@ -48,8 +48,10 @@ import net.sourceforge.plantuml.SourceStringReader;
|
|||||||
@SuppressWarnings("SERIAL")
|
@SuppressWarnings("SERIAL")
|
||||||
public class OldProxyServlet extends HttpServlet {
|
public class OldProxyServlet extends HttpServlet {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Proxy request URI regex pattern.
|
||||||
|
*/
|
||||||
private static final Pattern PROXY_PATTERN = Pattern.compile("/\\w+/proxy/((\\d+)/)?((\\w+)/)?(https?://.*)");
|
private static final Pattern PROXY_PATTERN = Pattern.compile("/\\w+/proxy/((\\d+)/)?((\\w+)/)?(https?://.*)");
|
||||||
private String format;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
|
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
|
||||||
@ -64,20 +66,44 @@ public class OldProxyServlet extends HttpServlet {
|
|||||||
}
|
}
|
||||||
|
|
||||||
String num = proxyMatcher.group(2); // Optional number of the diagram source
|
String num = proxyMatcher.group(2); // Optional number of the diagram source
|
||||||
format = proxyMatcher.group(4); // Expected format of the generated diagram
|
String format = proxyMatcher.group(4); // Expected format of the generated diagram
|
||||||
String sourceURL = proxyMatcher.group(5);
|
String sourceURL = proxyMatcher.group(5);
|
||||||
handleImageProxy(response, num, sourceURL);
|
handleImageProxy(response, num, format, sourceURL);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleImageProxy(HttpServletResponse response, String num, String source) throws IOException {
|
/**
|
||||||
|
* Handle image proxy request.
|
||||||
|
*
|
||||||
|
* @param response http response
|
||||||
|
* @param num image number/index of uml {@code source}
|
||||||
|
* @param format file format name
|
||||||
|
* @param source diagram source URL
|
||||||
|
*
|
||||||
|
* @throws IOException if an input or output exception occurred
|
||||||
|
*/
|
||||||
|
private void handleImageProxy(
|
||||||
|
HttpServletResponse response,
|
||||||
|
String num,
|
||||||
|
String format,
|
||||||
|
String source
|
||||||
|
) throws IOException {
|
||||||
SourceStringReader reader = new SourceStringReader(getSource(source));
|
SourceStringReader reader = new SourceStringReader(getSource(source));
|
||||||
int n = num == null ? 0 : Integer.parseInt(num);
|
int n = num == null ? 0 : Integer.parseInt(num);
|
||||||
|
|
||||||
FileFormat fileFormat = getOutputFormat();
|
FileFormat fileFormat = getOutputFormat(format);
|
||||||
response.addHeader("Content-Type", fileFormat.getMimeType());
|
response.addHeader("Content-Type", fileFormat.getMimeType());
|
||||||
reader.outputImage(response.getOutputStream(), n, new FileFormatOption(fileFormat, false));
|
reader.outputImage(response.getOutputStream(), n, new FileFormatOption(fileFormat, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get textual diagram source from URL.
|
||||||
|
*
|
||||||
|
* @param uri diagram source URL
|
||||||
|
*
|
||||||
|
* @return textual diagram source
|
||||||
|
*
|
||||||
|
* @throws IOException if an input or output exception occurred
|
||||||
|
*/
|
||||||
private String getSource(final String uri) throws IOException {
|
private String getSource(final String uri) throws IOException {
|
||||||
final URL url = new URL(uri);
|
final URL url = new URL(uri);
|
||||||
try (
|
try (
|
||||||
@ -95,7 +121,15 @@ public class OldProxyServlet extends HttpServlet {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private FileFormat getOutputFormat() {
|
/**
|
||||||
|
* Get {@link FileFormat} instance from string.
|
||||||
|
*
|
||||||
|
* @param format file format name
|
||||||
|
*
|
||||||
|
* @return corresponding file format instance,
|
||||||
|
* if {@code format} is null or unknown the default {@link FileFormat#PNG} will be returned
|
||||||
|
*/
|
||||||
|
private FileFormat getOutputFormat(String format) {
|
||||||
if (format == null) {
|
if (format == null) {
|
||||||
return FileFormat.PNG;
|
return FileFormat.PNG;
|
||||||
}
|
}
|
||||||
|
@ -44,7 +44,7 @@ import net.sourceforge.plantuml.code.TranscoderUtil;
|
|||||||
import net.sourceforge.plantuml.png.MetadataTag;
|
import net.sourceforge.plantuml.png.MetadataTag;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Original idea from Achim Abeling for Confluence macro
|
* Original idea from Achim Abeling for Confluence macro.
|
||||||
*
|
*
|
||||||
* This class is the old all-in-one historic implementation of the PlantUml server.
|
* This class is the old all-in-one historic implementation of the PlantUml server.
|
||||||
* See package.html for the new design. It's a work in progress.
|
* See package.html for the new design. It's a work in progress.
|
||||||
@ -56,10 +56,19 @@ import net.sourceforge.plantuml.png.MetadataTag;
|
|||||||
@SuppressWarnings("SERIAL")
|
@SuppressWarnings("SERIAL")
|
||||||
public class PlantUmlServlet extends HttpServlet {
|
public class PlantUmlServlet extends HttpServlet {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default encoded uml text.
|
||||||
|
* Bob -> Alice : hello
|
||||||
|
*/
|
||||||
private static final String DEFAULT_ENCODED_TEXT = "SyfFKj2rKt3CoKnELR1Io4ZDoSa70000";
|
private static final String DEFAULT_ENCODED_TEXT = "SyfFKj2rKt3CoKnELR1Io4ZDoSa70000";
|
||||||
|
|
||||||
// Last part of the URL
|
/**
|
||||||
public static final Pattern URL_PATTERN = Pattern.compile("^.*[^a-zA-Z0-9\\-\\_]([a-zA-Z0-9\\-\\_]+)");
|
* Regex pattern to fetch last part of the URL.
|
||||||
|
*/
|
||||||
|
private static final Pattern URL_PATTERN = Pattern.compile("^.*[^a-zA-Z0-9\\-\\_]([a-zA-Z0-9\\-\\_]+)");
|
||||||
|
/**
|
||||||
|
* Regex pattern to fetch encoded uml text from an "uml" URL.
|
||||||
|
*/
|
||||||
private static final Pattern RECOVER_UML_PATTERN = Pattern.compile("/uml/(.*)");
|
private static final Pattern RECOVER_UML_PATTERN = Pattern.compile("/uml/(.*)");
|
||||||
|
|
||||||
static {
|
static {
|
||||||
@ -134,36 +143,75 @@ public class PlantUmlServlet extends HttpServlet {
|
|||||||
redirectNow(request, response, encoded);
|
redirectNow(request, response, encoded);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get textual diagram source from URL.
|
||||||
|
*
|
||||||
|
* @param request http request which contains the source URL
|
||||||
|
* @param text fallback textual diagram source
|
||||||
|
*
|
||||||
|
* @return if successful textual diagram source from URL; otherwise fallback {@code text}
|
||||||
|
*
|
||||||
|
* @throws IOException if an input or output exception occurred
|
||||||
|
*/
|
||||||
private String getTextFromUrl(HttpServletRequest request, String text) throws IOException {
|
private String getTextFromUrl(HttpServletRequest request, String text) throws IOException {
|
||||||
String url = request.getParameter("url");
|
final Matcher recoverUml = RECOVER_UML_PATTERN.matcher(
|
||||||
final Matcher recoverUml = RECOVER_UML_PATTERN.matcher(request.getRequestURI().substring(
|
request.getRequestURI().substring(request.getContextPath().length())
|
||||||
request.getContextPath().length()));
|
);
|
||||||
// the URL form has been submitted
|
// the URL form has been submitted
|
||||||
if (recoverUml.matches()) {
|
if (recoverUml.matches()) {
|
||||||
final String data = recoverUml.group(1);
|
final String data = recoverUml.group(1);
|
||||||
text = getTranscoder().decode(data);
|
return getTranscoder().decode(data);
|
||||||
} else if (url != null && !url.trim().isEmpty()) {
|
}
|
||||||
|
String url = request.getParameter("url");
|
||||||
|
if (url != null && !url.trim().isEmpty()) {
|
||||||
// Catch the last part of the URL if necessary
|
// Catch the last part of the URL if necessary
|
||||||
final Matcher m1 = URL_PATTERN.matcher(url);
|
final Matcher matcher = URL_PATTERN.matcher(url);
|
||||||
if (m1.find()) {
|
if (matcher.find()) {
|
||||||
url = m1.group(1);
|
url = matcher.group(1);
|
||||||
}
|
}
|
||||||
text = getTranscoder().decode(url);
|
return getTranscoder().decode(url);
|
||||||
}
|
}
|
||||||
|
// fallback
|
||||||
return text;
|
return text;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void redirectNow(HttpServletRequest request, HttpServletResponse response, String encoded)
|
/**
|
||||||
throws IOException {
|
* Send redirect response to encoded uml text.
|
||||||
|
*
|
||||||
|
* @param request http request
|
||||||
|
* @param response http response
|
||||||
|
* @param encoded encoded uml text
|
||||||
|
*
|
||||||
|
* @throws IOException if an input or output exception occurred
|
||||||
|
*/
|
||||||
|
private void redirectNow(
|
||||||
|
HttpServletRequest request,
|
||||||
|
HttpServletResponse response,
|
||||||
|
String encoded
|
||||||
|
) throws IOException {
|
||||||
final String result = request.getContextPath() + "/uml/" + encoded;
|
final String result = request.getContextPath() + "/uml/" + encoded;
|
||||||
response.sendRedirect(result);
|
response.sendRedirect(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get PlantUML transcoder.
|
||||||
|
*
|
||||||
|
* @return transcoder instance
|
||||||
|
*/
|
||||||
private Transcoder getTranscoder() {
|
private Transcoder getTranscoder() {
|
||||||
return TranscoderUtil.getDefaultTranscoder();
|
return TranscoderUtil.getDefaultTranscoder();
|
||||||
}
|
}
|
||||||
|
|
||||||
static private HttpURLConnection getConnection(URL url) throws IOException {
|
/**
|
||||||
|
* Get open http connection from URL.
|
||||||
|
*
|
||||||
|
* @param url URL to open connection
|
||||||
|
*
|
||||||
|
* @return open http connection
|
||||||
|
*
|
||||||
|
* @throws IOException if an input or output exception occurred
|
||||||
|
*/
|
||||||
|
private static HttpURLConnection getConnection(URL url) throws IOException {
|
||||||
if (url.getProtocol().startsWith("https")) {
|
if (url.getProtocol().startsWith("https")) {
|
||||||
HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
|
HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
|
||||||
con.setRequestMethod("GET");
|
con.setRequestMethod("GET");
|
||||||
@ -180,7 +228,16 @@ public class PlantUmlServlet extends HttpServlet {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static public InputStream getImage(URL url) throws IOException {
|
/**
|
||||||
|
* Get image input stream from URL.
|
||||||
|
*
|
||||||
|
* @param url URL to open connection
|
||||||
|
*
|
||||||
|
* @return response input stream from URL
|
||||||
|
*
|
||||||
|
* @throws IOException if an input or output exception occurred
|
||||||
|
*/
|
||||||
|
private static InputStream getImage(URL url) throws IOException {
|
||||||
InputStream is = null;
|
InputStream is = null;
|
||||||
HttpURLConnection con = getConnection(url);
|
HttpURLConnection con = getConnection(url);
|
||||||
is = con.getInputStream();
|
is = con.getInputStream();
|
||||||
|
@ -102,6 +102,15 @@ public class ProxyServlet extends HttpServlet {
|
|||||||
dr = null;
|
dr = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get textual uml diagram source from URL.
|
||||||
|
*
|
||||||
|
* @param url source URL
|
||||||
|
*
|
||||||
|
* @return textual uml diagram source
|
||||||
|
*
|
||||||
|
* @throws IOException if an input or output exception occurred
|
||||||
|
*/
|
||||||
private String getSource(final URL url) throws IOException {
|
private String getSource(final URL url) throws IOException {
|
||||||
String line;
|
String line;
|
||||||
BufferedReader rd;
|
BufferedReader rd;
|
||||||
@ -124,6 +133,14 @@ public class ProxyServlet extends HttpServlet {
|
|||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get {@link FileFormat} instance from string.
|
||||||
|
*
|
||||||
|
* @param format file format name
|
||||||
|
*
|
||||||
|
* @return corresponding file format instance,
|
||||||
|
* if {@code format} is null or unknown the default {@link FileFormat#PNG} will be returned
|
||||||
|
*/
|
||||||
private FileFormat getOutputFormat(String format) {
|
private FileFormat getOutputFormat(String format) {
|
||||||
if (format == null) {
|
if (format == null) {
|
||||||
return FileFormat.PNG;
|
return FileFormat.PNG;
|
||||||
@ -143,6 +160,15 @@ public class ProxyServlet extends HttpServlet {
|
|||||||
return FileFormat.PNG;
|
return FileFormat.PNG;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get open http connection from URL.
|
||||||
|
*
|
||||||
|
* @param url URL to open connection
|
||||||
|
*
|
||||||
|
* @return open http connection
|
||||||
|
*
|
||||||
|
* @throws IOException if an input or output exception occurred
|
||||||
|
*/
|
||||||
private HttpURLConnection getConnection(final URL url) throws IOException {
|
private HttpURLConnection getConnection(final URL url) throws IOException {
|
||||||
final HttpURLConnection con = (HttpURLConnection) url.openConnection();
|
final HttpURLConnection con = (HttpURLConnection) url.openConnection();
|
||||||
//if (con instanceof HttpsURLConnection) {
|
//if (con instanceof HttpsURLConnection) {
|
||||||
@ -159,7 +185,8 @@ public class ProxyServlet extends HttpServlet {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Debug method used to dump the certificate info
|
* Debug method used to dump the certificate info.
|
||||||
|
*
|
||||||
* @param con the https connection
|
* @param con the https connection
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
|
@ -43,6 +43,11 @@ import java.util.regex.Pattern;
|
|||||||
@SuppressWarnings("SERIAL")
|
@SuppressWarnings("SERIAL")
|
||||||
public abstract class UmlDiagramService extends HttpServlet {
|
public abstract class UmlDiagramService extends HttpServlet {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Regex pattern to fetch encoded uml text from an URL.
|
||||||
|
*/
|
||||||
|
private static final Pattern RECOVER_UML_PATTERN = Pattern.compile("/\\w+/(\\d+/)?(.*)");
|
||||||
|
|
||||||
static {
|
static {
|
||||||
OptionFlags.ALLOW_INCLUDE = false;
|
OptionFlags.ALLOW_INCLUDE = false;
|
||||||
if ("true".equalsIgnoreCase(System.getenv("ALLOW_PLANTUML_INCLUDE"))) {
|
if ("true".equalsIgnoreCase(System.getenv("ALLOW_PLANTUML_INCLUDE"))) {
|
||||||
@ -52,7 +57,6 @@ public abstract class UmlDiagramService extends HttpServlet {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
|
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
|
||||||
|
|
||||||
// build the UML source from the compressed request parameter
|
// build the UML source from the compressed request parameter
|
||||||
final String[] sourceAndIdx = getSourceAndIdx(request);
|
final String[] sourceAndIdx = getSourceAndIdx(request);
|
||||||
final int idx = Integer.parseInt(sourceAndIdx[1]);
|
final int idx = Integer.parseInt(sourceAndIdx[1]);
|
||||||
@ -70,7 +74,6 @@ public abstract class UmlDiagramService extends HttpServlet {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
|
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
|
||||||
|
|
||||||
// build the UML source from the compressed request parameter
|
// build the UML source from the compressed request parameter
|
||||||
final String[] sourceAndIdx = getSourceAndIdx(request);
|
final String[] sourceAndIdx = getSourceAndIdx(request);
|
||||||
final int idx = Integer.parseInt(sourceAndIdx[1]);
|
final int idx = Integer.parseInt(sourceAndIdx[1]);
|
||||||
@ -88,13 +91,22 @@ public abstract class UmlDiagramService extends HttpServlet {
|
|||||||
doDiagramResponse(request, response, uml.toString(), idx);
|
doDiagramResponse(request, response, uml.toString(), idx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send diagram response.
|
||||||
|
*
|
||||||
|
* @param request html request
|
||||||
|
* @param response html response
|
||||||
|
* @param uml textual UML diagram(s) source
|
||||||
|
* @param idx diagram index of {@code uml} to send
|
||||||
|
*
|
||||||
|
* @throws IOException if an input or output exception occurred
|
||||||
|
*/
|
||||||
private void doDiagramResponse(
|
private void doDiagramResponse(
|
||||||
HttpServletRequest request,
|
HttpServletRequest request,
|
||||||
HttpServletResponse response,
|
HttpServletResponse response,
|
||||||
String uml,
|
String uml,
|
||||||
int idx)
|
int idx
|
||||||
throws IOException {
|
) throws IOException {
|
||||||
|
|
||||||
// generate the response
|
// generate the response
|
||||||
DiagramResponse dr = new DiagramResponse(response, getOutputFormat(), request);
|
DiagramResponse dr = new DiagramResponse(response, getOutputFormat(), request);
|
||||||
try {
|
try {
|
||||||
@ -103,11 +115,8 @@ public abstract class UmlDiagramService extends HttpServlet {
|
|||||||
// Browser has closed the connection, so the HTTP OutputStream is closed
|
// Browser has closed the connection, so the HTTP OutputStream is closed
|
||||||
// Silently catch the exception to avoid annoying log
|
// Silently catch the exception to avoid annoying log
|
||||||
}
|
}
|
||||||
dr = null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final Pattern RECOVER_UML_PATTERN = Pattern.compile("/\\w+/(\\d+/)?(.*)");
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Extracts the UML source text and its index from the HTTP request.
|
* Extracts the UML source text and its index from the HTTP request.
|
||||||
*
|
*
|
||||||
|
@ -28,13 +28,22 @@ import java.io.InputStream;
|
|||||||
|
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shared PlantUML Server configuration.
|
||||||
|
*/
|
||||||
public final class Configuration {
|
public final class Configuration {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Singleton configuration instance.
|
||||||
|
*/
|
||||||
private static Configuration instance;
|
private static Configuration instance;
|
||||||
|
/**
|
||||||
|
* Configuration properties.
|
||||||
|
*/
|
||||||
private Properties config;
|
private Properties config;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Singleton constructor
|
* Singleton constructor.
|
||||||
*/
|
*/
|
||||||
private Configuration() {
|
private Configuration() {
|
||||||
config = new Properties();
|
config = new Properties();
|
||||||
@ -57,7 +66,7 @@ public final class Configuration {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the configuration
|
* Get the configuration.
|
||||||
*
|
*
|
||||||
* @return the complete configuration
|
* @return the complete configuration
|
||||||
*/
|
*/
|
||||||
@ -69,7 +78,9 @@ public final class Configuration {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a boolean configuration value
|
* Get a boolean configuration value.
|
||||||
|
*
|
||||||
|
* @param key config property key
|
||||||
*
|
*
|
||||||
* @return true if the value is "on"
|
* @return true if the value is "on"
|
||||||
*/
|
*/
|
||||||
|
@ -26,29 +26,19 @@ package net.sourceforge.plantuml.servlet.utility;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This output stream ignores everything and writes nothing.
|
||||||
|
*/
|
||||||
public class NullOutputStream extends OutputStream {
|
public class NullOutputStream extends OutputStream {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Writes to nowhere
|
* Writes to nowhere.
|
||||||
|
*
|
||||||
|
* @param b anything
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void write(int b) throws IOException {
|
public void write(int b) throws IOException {
|
||||||
// Do nothing silently
|
// Do nothing silently
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Overridden for performance reason
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void write(byte[] b) throws IOException {
|
|
||||||
// Do nothing silently
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Overridden for performance reason
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void write(byte[] b, int off, int len) throws IOException {
|
|
||||||
// Do nothing silently
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -35,7 +35,7 @@ import net.sourceforge.plantuml.code.TranscoderUtil;
|
|||||||
* Utility class to extract the UML source from the compressed UML source contained in the end part
|
* Utility class to extract the UML source from the compressed UML source contained in the end part
|
||||||
* of the requested URI.
|
* of the requested URI.
|
||||||
*/
|
*/
|
||||||
public class UmlExtractor {
|
public abstract class UmlExtractor {
|
||||||
|
|
||||||
static {
|
static {
|
||||||
OptionFlags.ALLOW_INCLUDE = false;
|
OptionFlags.ALLOW_INCLUDE = false;
|
||||||
@ -49,6 +49,7 @@ public class UmlExtractor {
|
|||||||
* HTTP URI.
|
* HTTP URI.
|
||||||
*
|
*
|
||||||
* @param source the last part of the URI containing the compressed UML
|
* @param source the last part of the URI containing the compressed UML
|
||||||
|
*
|
||||||
* @return the textual UML source
|
* @return the textual UML source
|
||||||
*/
|
*/
|
||||||
static public String getUmlSource(String source) {
|
static public String getUmlSource(String source) {
|
||||||
@ -83,9 +84,4 @@ public class UmlExtractor {
|
|||||||
return uml;
|
return uml;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected UmlExtractor() {
|
|
||||||
// prevents calls from subclass
|
|
||||||
throw new UnsupportedOperationException();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -28,9 +28,8 @@
|
|||||||
<link rel="icon" href="${hostpath}/favicon.ico" type="image/x-icon"/>
|
<link rel="icon" href="${hostpath}/favicon.ico" type="image/x-icon"/>
|
||||||
<link rel="shortcut icon" href="${hostpath}/favicon.ico" type="image/x-icon"/>
|
<link rel="shortcut icon" href="${hostpath}/favicon.ico" type="image/x-icon"/>
|
||||||
<link rel="stylesheet" href="${hostpath}/plantuml.css" />
|
<link rel="stylesheet" href="${hostpath}/plantuml.css" />
|
||||||
<link rel="stylesheet" href="${hostpath}/webjars/codemirror/3.21/lib/codemirror.css" />
|
<link rel="stylesheet" href="${hostpath}/webjars/codemirror/5.63.0/lib/codemirror.css" />
|
||||||
<script src="${hostpath}/webjars/codemirror/3.21/lib/codemirror.js"></script>
|
<script src="${hostpath}/webjars/codemirror/5.63.0/lib/codemirror.js"></script>
|
||||||
<!-- <script src="mode/plantuml.js"></script> -->
|
|
||||||
<script>
|
<script>
|
||||||
window.onload = function() {
|
window.onload = function() {
|
||||||
document.myCodeMirror = CodeMirror.fromTextArea(
|
document.myCodeMirror = CodeMirror.fromTextArea(
|
||||||
|
@ -6,16 +6,16 @@ package net.sourceforge.plantuml.servlet;
|
|||||||
*/
|
*/
|
||||||
public abstract class TestUtils {
|
public abstract class TestUtils {
|
||||||
|
|
||||||
/*
|
//
|
||||||
* Theses strings are the compressed form of a PlantUML diagram.
|
// Theses strings are the compressed form of a PlantUML diagram.
|
||||||
*/
|
//
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* version
|
* version
|
||||||
*/
|
*/
|
||||||
public static final String VERSION = "AqijAixCpmC0";
|
public static final String VERSION = "AqijAixCpmC0";
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Bob -> Alice : hello
|
* Bob -> Alice : hello
|
||||||
*/
|
*/
|
||||||
public static final String SEQBOB = "SyfFKj2rKt3CoKnELR1Io4ZDoSa70000";
|
public static final String SEQBOB = "SyfFKj2rKt3CoKnELR1Io4ZDoSa70000";
|
||||||
|
Loading…
Reference in New Issue
Block a user