1
0
mirror of https://github.com/octoleo/plantuml-server.git synced 2024-09-30 15:59:05 +00:00

Merge pull request #2 from plalloni/master

Build migrated to maven, tests self-contained, etc.
This commit is contained in:
Maxime Sinclair 2011-11-14 07:30:30 -08:00
commit b0c46ef805
48 changed files with 358 additions and 362 deletions

View File

@ -1,19 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="test/src"/>
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/>
<classpathentry kind="lib" path="test/lib/junit-3.8.1.jar"/>
<classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.eclipse.jst.server.tomcat.runtimeTarget/Apache Tomcat v6.0">
<attributes>
<attribute name="owner.project.facets" value="jst.web"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
<attributes>
<attribute name="owner.project.facets" value="java"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="test/lib/httpunit.jar"/>
<classpathentry kind="output" path="content/WEB-INF/classes"/>
</classpath>

7
.gitignore vendored
View File

@ -1,5 +1,2 @@
/user.property target
/content/WEB-INF/classes .*
/plantuml.war
/dist

View File

@ -1,31 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>plantumlservlet</name>
<comment></comment>
<projects>
<project>Servers</project>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.wst.common.project.facet.core.builder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.wst.validation.validationbuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
</natures>
</projectDescription>

View File

@ -1,5 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="content"/>
<classpathentry kind="output" path=""/>
</classpath>

View File

@ -1,3 +0,0 @@
#Thu Feb 17 12:10:42 CET 2011
eclipse.preferences.version=1
encoding/<project>=UTF-8

View File

@ -1,12 +0,0 @@
#Thu Feb 17 12:07:22 CET 2011
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=1.6
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.6

View File

@ -1,3 +0,0 @@
#Thu Feb 17 12:12:34 CET 2011
eclipse.preferences.version=1
org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false

View File

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project-modules id="moduleCoreId" project-version="1.5.0">
<wb-module deploy-name="plantumlservlet">
<wb-resource deploy-path="/" source-path="/content"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="/test/src"/>
<property name="java-output-path" value="/plantumlservlet/WEB-INF/classes"/>
<property name="context-root" value="plantuml"/>
</wb-module>
</project-modules>

View File

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<faceted-project>
<runtime name="Apache Tomcat v6.0"/>
<installed facet="java" version="1.6"/>
<installed facet="jst.web" version="2.4"/>
</faceted-project>

View File

@ -1 +0,0 @@
org.eclipse.wst.jsdt.launching.baseBrowserLibrary

View File

@ -1 +0,0 @@
Window

View File

@ -1,3 +0,0 @@
#Thu Feb 17 12:12:34 CET 2011
eclipse.preferences.version=1
org.eclipse.wst.ws.service.policy.projectEnabled=false

21
README
View File

@ -1,21 +0,0 @@
* PlantUMLServlet description
*****************************
PlantUMLServlet is a PlantUML extension to generate images on-the-fly.
To know more about PlantUML, please visit http://plantuml.sourceforge.net/
* How to build the project
**************************
To build the project you need to install the following components :
- java jdk 1.6.0 or above
- apache tomcat 6.0 or above
- apache ant 1.7 or above
If the tomcat home directory is not /tomcat, you have to create at
the root of the project a text file named user.property and
containing the following line:
tomcat-home=<your tomcat home dir>
For example, on a Windows environment, your user.property file can be:
tomcat-home=C:/tools/Tomcat6.0
To build the war, just run "ant" at the root directory of the project.

24
README.md Normal file
View File

@ -0,0 +1,24 @@
PlantUMLServlet description
===========================
PlantUMLServlet is a PlantUML extension to generate images on-the-fly.
To know more about PlantUML, please visit http://plantuml.sourceforge.net/.
How to build the project
========================
To build the project you need to install the following components:
* java jdk 1.6.0 or above
* apache maven 3.0.2 or above
To build the war, just run "mvn package" at the root directory of the project to produce
plantuml.war in the target/ directory.
How to testrun the project
==========================
To run the application deployed on an embedded jetty server run "mvn jetty:run-war"
and go to http://localhost:8080/plantuml with your favorite web browser (after it finishes
to start up).

View File

@ -1,88 +0,0 @@
<project default="main" basedir=".">
<target name="main" depends="clean,war">
</target>
<taskdef name="junit"
classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTask">
<classpath>
<pathelement location="test/lib/junit-3.8.1.jar" />
</classpath>
</taskdef>
<target name="init">
<!-- overwrite with your own values in a user.property file -->
<property file="user.property" />
<property name="target" value="dist" description="Target directory of the build"/>
<property name="tomcat-home" value="/tomcat" description="Home directory of Tomcat"/>
<property name="debug" value="false" />
<mkdir dir="${target}" />
<path id="project-classpath">
<fileset dir="content/WEB-INF/lib" includes="*.jar" />
<fileset dir="${tomcat-home}/lib" includes="*.jar" />
</path>
<path id="test-classpath">
<fileset dir="test/lib" includes="*.jar" />
<pathelement location="${target}"/>
</path>
</target>
<target name="clean" depends="init">
<delete file="${target}/plantuml.war" />
<delete>
<fileset dir="${target}" includes="**/*.class"/>
</delete>
<delete dir="${target}/root" />
<delete dir="content/WEB-INF/classes" />
<mkdir dir="content/WEB-INF/classes" />
</target>
<target name="compile" depends="init">
<javac srcdir="src" destdir="content/WEB-INF/classes" debug="${debug}" classpathref="project-classpath" />
</target>
<target name="prepare" depends="init">
<!-- So that we can use the ${TSTAMP}, ${DSTAMP} -->
<tstamp />
<filter token="timestamp" value="${DSTAMP}"/>
<copy todir="${target}/root" filtering="true" >
<fileset dir="content">
<include name="*.jsp*"/>
</fileset>
</copy>
<copy todir="${target}/root" filtering="false" >
<fileset dir="content">
<exclude name="*.jsp*"/>
<exclude name="*-INF/**"/>
</fileset>
</copy>
</target>
<target name="war" depends="prepare, compile">
<war destfile="${target}/plantuml.war" webxml="content/WEB-INF/web.xml">
<classes dir="content/WEB-INF/classes" />
<fileset dir="${target}/root" />
<lib dir="content/WEB-INF/lib" />
</war>
</target>
<target name="deploy" depends="main">
<copy file="${target}/plantuml.war" todir="${tomcat-home}/webapps" overwrite="true" />
</target>
<target name="test" depends="init">
<echo>
WARN - Test execution requires an running PlantUMLServer.
</echo>
<javac srcdir="test/src" destdir="${target}" debug="${debug}" classpathref="test-classpath" />
<junit showoutput="true" >
<classpath>
<path refid="test-classpath"/>
</classpath>
<formatter type="plain" usefile="false" />
<test name="net.sourceforge.plantuml.servlet.AllTests"/>
</junit>
</target>
</project>

Binary file not shown.

Binary file not shown.

View File

@ -1,68 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>plantuml</display-name>
<servlet>
<servlet-name>plantumlservlet</servlet-name>
<servlet-class>net.sourceforge.plantuml.servlet.PlantUmlServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>welcome</servlet-name>
<servlet-class>net.sourceforge.plantuml.servlet.Welcome</servlet-class>
</servlet>
<servlet>
<servlet-name>imgservlet</servlet-name>
<servlet-class>net.sourceforge.plantuml.servlet.ImgServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>svgservlet</servlet-name>
<servlet-class>net.sourceforge.plantuml.servlet.SvgServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>asciiservlet</servlet-name>
<servlet-class>net.sourceforge.plantuml.servlet.AsciiServlet</servlet-class>
</servlet>
<!-- Patterns of the servlet -->
<servlet-mapping>
<servlet-name>welcome</servlet-name>
<url-pattern>/welcome</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>plantumlservlet</servlet-name>
<url-pattern>/uml/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>plantumlservlet</servlet-name>
<url-pattern>/form</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>imgservlet</servlet-name>
<url-pattern>/img/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>svgservlet</servlet-name>
<url-pattern>/svg/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>asciiservlet</servlet-name>
<url-pattern>/txt/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>plantumlservlet</servlet-name>
<url-pattern>/start/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>plantumlservlet</servlet-name>
<url-pattern>/proxy/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>welcome</welcome-file>
</welcome-file-list>
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/error.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/error.jsp</location>
</error-page>
</web-app>

90
pom.xml Normal file
View File

@ -0,0 +1,90 @@
<project 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>
<groupId>org.sourceforge.plantuml</groupId>
<artifactId>plantumlservlet</artifactId>
<version>1-SNAPSHOT</version>
<name>PlantUML Servlet</name>
<packaging>war</packaging>
<build>
<finalName>plantuml</finalName>
<plugins>
<plugin>
<artifactId>maven-eclipse-plugin</artifactId>
<configuration>
<wtpversion>1.5</wtpversion>
<wtpContextName>plantuml</wtpContextName>
</configuration>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>${jetty.version}</version>
<configuration>
<scanIntervalSeconds>5</scanIntervalSeconds>
<webApp>
<contextPath>/plantuml</contextPath>
</webApp>
</configuration>
</plugin>
</plugins>
</build>
<properties>
<jetty.version>8.0.4.v20111024</jetty.version>
</properties>
<dependencies>
<dependency>
<groupId>net.sourceforge.plantuml</groupId>
<artifactId>plantuml</artifactId>
<version>7481</version>
</dependency>
<dependency>
<groupId>HTTPClient</groupId>
<artifactId>HTTPClient</artifactId>
<version>0.3-3</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>httpunit</groupId>
<artifactId>httpunit</artifactId>
<version>1.7</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>rhino</groupId>
<artifactId>js</artifactId>
<version>1.7R2</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>
</project>

View File

@ -3,7 +3,7 @@
* ======================================================================== * ========================================================================
* *
* Project Info: http://plantuml.sourceforge.net * Project Info: http://plantuml.sourceforge.net
* *
* This file is part of PlantUML. * This file is part of PlantUML.
* *
* PlantUML is free software; you can redistribute it and/or modify it * PlantUML is free software; you can redistribute it and/or modify it
@ -48,22 +48,23 @@ import HTTPClient.HTTPResponse;
import HTTPClient.ModuleException; import HTTPClient.ModuleException;
import HTTPClient.ParseException; import HTTPClient.ParseException;
/* /*
* Original idea from Achim Abeling for Confluence macro * Original idea from Achim Abeling for Confluence macro
* See http://www.banapple.de/display/BANAPPLE/plantuml+user+macro * See http://www.banapple.de/display/BANAPPLE/plantuml+user+macro
* *
* Modified by Arnaud Roques * Modified by Arnaud Roques
* Modified by Pablo Lalloni
* Packaged by Maxime Sinclair * Packaged by Maxime Sinclair
* *
*/ */
@SuppressWarnings("serial") @SuppressWarnings("serial")
public class PlantUmlServlet extends HttpServlet { public class PlantUmlServlet extends HttpServlet {
private static final Pattern startumlPattern = Pattern.compile("/\\w+/start/(.*)"); private static final Pattern startumlPattern = Pattern.compile("/\\w+/start/(.*)");
private static final Pattern proxyPattern = Pattern.compile("/\\w+/proxy/((\\d+)/)?(http://.*)"); private static final Pattern proxyPattern = Pattern.compile("/\\w+/proxy/((\\d+)/)?((\\w+)/)?(http://.*)");
private static final Pattern oldStartumlPattern = Pattern.compile("/\\w+/uml/startuml/(.*)"); private static final Pattern oldStartumlPattern = Pattern.compile("/\\w+/uml/startuml/(.*)");
private static final Pattern oldImagePattern = Pattern.compile("/\\w+/uml/image/(.*)"); private static final Pattern oldImagePattern = Pattern.compile("/\\w+/uml/image/(.*)");
private static final Pattern oldProxyPattern = Pattern.compile("/\\w+/uml/proxy/((\\d+)/)?(http://.*)"); private static final Pattern oldProxyPattern = Pattern.compile("/\\w+/uml/proxy/((\\d+)/)?((\\w+)/)?(http://.*)");
@Override @Override
public void doGet(HttpServletRequest request, HttpServletResponse response) public void doGet(HttpServletRequest request, HttpServletResponse response)
@ -80,8 +81,9 @@ public class PlantUmlServlet extends HttpServlet {
handleImage(response, source, uri); handleImage(response, source, uri);
} else if (proxyMatcher.matches()) { } else if (proxyMatcher.matches()) {
String num = proxyMatcher.group(2); String num = proxyMatcher.group(2);
String source = proxyMatcher.group(3); String format = proxyMatcher.group(4);
handleImageProxy(response, num, source, uri); String source = proxyMatcher.group(5);
handleImageProxy(response, num, source, format, uri);
} else if (oldStartumlMatcher.matches()) { } else if (oldStartumlMatcher.matches()) {
String source = oldStartumlMatcher.group(1); String source = oldStartumlMatcher.group(1);
handleImage(response, source, uri); handleImage(response, source, uri);
@ -90,8 +92,9 @@ public class PlantUmlServlet extends HttpServlet {
handleImageDecompress(response, source, uri); handleImageDecompress(response, source, uri);
} else if (oldProxyMatcher.matches()) { } else if (oldProxyMatcher.matches()) {
String num = oldProxyMatcher.group(2); String num = oldProxyMatcher.group(2);
String source = oldProxyMatcher.group(3); String format = oldProxyMatcher.group(4);
handleImageProxy(response, num, source, uri); String source = oldProxyMatcher.group(5);
handleImageProxy(response, num, source, format, uri);
} else { } else {
doPost(request, response); doPost(request, response);
} }
@ -109,7 +112,7 @@ public class PlantUmlServlet extends HttpServlet {
Transcoder transcoder = getTranscoder(); Transcoder transcoder = getTranscoder();
// the URL form has been submitted // the URL form has been submitted
if ((url != null) && (!url.trim().isEmpty())) { if (url != null && !url.trim().isEmpty()) {
// TODO Verify the url is correct // TODO Verify the url is correct
Pattern p = Pattern.compile(".*/(.*)"); Pattern p = Pattern.compile(".*/(.*)");
Matcher m = p.matcher(url); Matcher m = p.matcher(url);
@ -119,13 +122,13 @@ public class PlantUmlServlet extends HttpServlet {
} }
} }
// the Text form has been submitted // the Text form has been submitted
if ((text != null) && (!text.trim().isEmpty())) { if (text != null && !text.trim().isEmpty()) {
encoded = transcoder.encode(text); encoded = transcoder.encode(text);
} }
request.setAttribute("net.sourceforge.plantuml.servlet.decoded", text); request.setAttribute("net.sourceforge.plantuml.servlet.decoded", text);
request.setAttribute("net.sourceforge.plantuml.servlet.encoded", encoded); request.setAttribute("net.sourceforge.plantuml.servlet.encoded", encoded);
// forward to index.jsp // forward to index.jsp
RequestDispatcher dispatcher = request.getRequestDispatcher("/index.jsp"); RequestDispatcher dispatcher = request.getRequestDispatcher("/index.jsp");
dispatcher.forward(request, response); dispatcher.forward(request, response);
@ -158,11 +161,15 @@ public class PlantUmlServlet extends HttpServlet {
} }
private void handleImageProxy(HttpServletResponse response, String num, private void handleImageProxy(HttpServletResponse response, String num,
String source, String uri) throws IOException { String source, String format, String uri) throws IOException {
SourceStringReader reader = new SourceStringReader( getContent(source)); SourceStringReader reader = new SourceStringReader( getContent(source));
int n = num == null ? 0 : Integer.parseInt(num); int n = num == null ? 0 : Integer.parseInt(num);
// Write the first image to "os" // Write the requested image to "os"
reader.generateImage(response.getOutputStream(), n); if (format != null) {
reader.generateImage(response.getOutputStream(), n, new FileFormatOption(FileFormat.valueOf(format)));
} else {
reader.generateImage(response.getOutputStream(), n);
}
} }
private void sendImage(HttpServletResponse response, String text, String uri) private void sendImage(HttpServletResponse response, String text, String uri)
@ -195,7 +202,7 @@ public class PlantUmlServlet extends HttpServlet {
reader.generateImage(response.getOutputStream(), new FileFormatOption(FileFormat.PNG)); reader.generateImage(response.getOutputStream(), new FileFormatOption(FileFormat.PNG));
response.flushBuffer(); response.flushBuffer();
} }
private String getContent(String adress) throws IOException { private String getContent(String adress) throws IOException {
// HTTPConnection.setProxyServer("proxy", 8080); // HTTPConnection.setProxyServer("proxy", 8080);
CookieModule.setCookiePolicyHandler(null); CookieModule.setCookiePolicyHandler(null);

View File

@ -0,0 +1,74 @@
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>plantuml</display-name>
<context-param>
<param-name>org.eclipse.jetty.servlet.Default.welcomeServlets</param-name>
<param-value>exact</param-value>
</context-param>
<servlet>
<servlet-name>plantumlservlet</servlet-name>
<servlet-class>net.sourceforge.plantuml.servlet.PlantUmlServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>welcome</servlet-name>
<servlet-class>net.sourceforge.plantuml.servlet.Welcome</servlet-class>
</servlet>
<servlet>
<servlet-name>imgservlet</servlet-name>
<servlet-class>net.sourceforge.plantuml.servlet.ImgServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>svgservlet</servlet-name>
<servlet-class>net.sourceforge.plantuml.servlet.SvgServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>asciiservlet</servlet-name>
<servlet-class>net.sourceforge.plantuml.servlet.AsciiServlet</servlet-class>
</servlet>
<!-- Patterns of the servlet -->
<servlet-mapping>
<servlet-name>welcome</servlet-name>
<url-pattern>/welcome</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>plantumlservlet</servlet-name>
<url-pattern>/uml/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>plantumlservlet</servlet-name>
<url-pattern>/form</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>imgservlet</servlet-name>
<url-pattern>/img/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>svgservlet</servlet-name>
<url-pattern>/svg/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>asciiservlet</servlet-name>
<url-pattern>/txt/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>plantumlservlet</servlet-name>
<url-pattern>/start/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>plantumlservlet</servlet-name>
<url-pattern>/proxy/*</url-pattern>
</servlet-mapping>
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/error.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/error.jsp</location>
</error-page>
<welcome-file-list>
<welcome-file>welcome</welcome-file>
</welcome-file-list>
</web-app>

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1,38 @@
package net.sourceforge.plantuml.servlet;
import java.net.InetSocketAddress;
import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.WebAppContext;
public class ServerUtils {
Server server;
public ServerUtils(boolean start) throws Exception {
server = new Server(new InetSocketAddress("127.0.0.1", 0));
server.addBean(new WebAppContext(server, "src/main/webapp", "/plantuml"));
if (start) {
startServer();
}
}
public ServerUtils() throws Exception {
this(false);
}
public void startServer() throws Exception {
server.start();
}
public void stopServer() throws Exception {
server.stop();
}
public String getServerUrl() {
Connector connector = server.getConnectors()[0];
return String.format("http://%s:%d/plantuml/", connector.getHost(), connector.getLocalPort());
}
}

View File

@ -0,0 +1,28 @@
package net.sourceforge.plantuml.servlet;
import com.meterware.httpunit.GetMethodWebRequest;
import com.meterware.httpunit.WebConversation;
import com.meterware.httpunit.WebRequest;
import com.meterware.httpunit.WebResponse;
public class TestAsciiArt extends WebappTestCase {
/**
* Verifies the generation of the ascii art for the Bob -> Alice sample
*/
public void testSimpleSequenceDiagram() throws Exception {
WebConversation conversation = new WebConversation();
WebRequest request = new GetMethodWebRequest(getServerUrl() + "txt/SyfFKj2rKt3CoKnELR1Io4ZDoSa70000");
WebResponse response = conversation.getResource(request);
// Analyze response
// Verifies the Content-Type header
assertEquals("Response content type is not TEXT PLAIN", "text/plain", response.getContentType());
// Get the content and verify its size
String diagram = response.getText();
int diagramLen = diagram.length();
assertTrue(diagramLen > 200);
assertTrue(diagramLen < 250);
}
}

View File

@ -1,19 +1,22 @@
package net.sourceforge.plantuml.servlet; package net.sourceforge.plantuml.servlet;
import junit.framework.TestCase; import com.meterware.httpunit.GetMethodWebRequest;
import com.meterware.httpunit.*; import com.meterware.httpunit.WebConversation;
import com.meterware.httpunit.WebForm;
import com.meterware.httpunit.WebRequest;
import com.meterware.httpunit.WebResponse;
public class TestForm extends WebappTestCase {
public class TestForm extends TestCase {
/** /**
* Verifies that the welcome page has exactly two form * Verifies that the welcome page has exactly two form
* with the Bob --> Alice sample * with the Bob --> Alice sample
*/ */
public void testWelcomePage() throws Exception { public void testWelcomePage() throws Exception {
WebConversation conversation = new WebConversation(); WebConversation conversation = new WebConversation();
WebRequest request = new GetMethodWebRequest( TestUtils.getServerUrl()); WebRequest request = new GetMethodWebRequest(getServerUrl());
WebResponse response = TestUtils.tryGetResponse(conversation, request ); WebResponse response = TestUtils.tryGetResponse(conversation, request );
// Analyze response // Analyze response
WebForm forms[] = response.getForms(); WebForm forms[] = response.getForms();
assertEquals( 2, forms.length ); assertEquals( 2, forms.length );
assertEquals( "url", forms[1].getParameterNames()[0] ); assertEquals( "url", forms[1].getParameterNames()[0] );
@ -29,7 +32,7 @@ public class TestForm extends TestCase {
public void testVersion() throws Exception { public void testVersion() throws Exception {
WebConversation conversation = new WebConversation(); WebConversation conversation = new WebConversation();
// Fill the form and submit it // Fill the form and submit it
WebRequest request = new GetMethodWebRequest( TestUtils.getServerUrl()); WebRequest request = new GetMethodWebRequest(getServerUrl());
WebResponse response = TestUtils.tryGetResponse(conversation, request ); WebResponse response = TestUtils.tryGetResponse(conversation, request );
WebForm formUMLText = response.getForms()[0]; WebForm formUMLText = response.getForms()[0];
formUMLText.setParameter("text", "version"); formUMLText.setParameter("text", "version");
@ -51,7 +54,7 @@ public class TestForm extends TestCase {
public void testEmptyText() throws Exception { public void testEmptyText() throws Exception {
WebConversation conversation = new WebConversation(); WebConversation conversation = new WebConversation();
// Fill the form and submit it // Fill the form and submit it
WebRequest request = new GetMethodWebRequest( TestUtils.getServerUrl()); WebRequest request = new GetMethodWebRequest(getServerUrl());
WebResponse response = TestUtils.tryGetResponse(conversation, request ); WebResponse response = TestUtils.tryGetResponse(conversation, request );
WebForm formUMLText = response.getForms()[0]; WebForm formUMLText = response.getForms()[0];
formUMLText.setParameter("text", ""); formUMLText.setParameter("text", "");
@ -66,14 +69,14 @@ public class TestForm extends TestCase {
// Ensure there is no image // Ensure there is no image
assertEquals( 0, response.getImages().length); assertEquals( 0, response.getImages().length);
} }
/** /**
* Verifies that when the encoded URL is empty, no image is generated * Verifies that when the encoded URL is empty, no image is generated
*/ */
public void testEmptyUrl() throws Exception { public void testEmptyUrl() throws Exception {
WebConversation conversation = new WebConversation(); WebConversation conversation = new WebConversation();
// Fill the form and submit it // Fill the form and submit it
WebRequest request = new GetMethodWebRequest( TestUtils.getServerUrl() ); WebRequest request = new GetMethodWebRequest(getServerUrl());
WebResponse response = TestUtils.tryGetResponse(conversation, request ); WebResponse response = TestUtils.tryGetResponse(conversation, request );
WebForm formUrl = response.getForms()[1]; WebForm formUrl = response.getForms()[1];
formUrl.setParameter("url", ""); formUrl.setParameter("url", "");
@ -88,14 +91,14 @@ public class TestForm extends TestCase {
// Ensure there is no image // Ensure there is no image
assertEquals( 0, response.getImages().length); assertEquals( 0, response.getImages().length);
} }
/** /**
* Verifies that a ditaa diagram is generated * Verifies that a ditaa diagram is generated
*/ */
public void testDitaaText() throws Exception { public void testDitaaText() throws Exception {
WebConversation conversation = new WebConversation(); WebConversation conversation = new WebConversation();
// Fill the form and submit it // Fill the form and submit it
WebRequest request = new GetMethodWebRequest( TestUtils.getServerUrl() ); WebRequest request = new GetMethodWebRequest(getServerUrl());
WebResponse response = TestUtils.tryGetResponse(conversation, request ); WebResponse response = TestUtils.tryGetResponse(conversation, request );
WebForm formDitaaText = response.getForms()[0]; WebForm formDitaaText = response.getForms()[0];
formDitaaText.setParameter("text", "@startditaa \n*--> \n@endditaa"); formDitaaText.setParameter("text", "@startditaa \n*--> \n@endditaa");

View File

@ -1,26 +1,28 @@
package net.sourceforge.plantuml.servlet; package net.sourceforge.plantuml.servlet;
import junit.framework.TestCase;
import com.meterware.httpunit.*;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.InputStream; import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
import java.util.Locale; import java.util.Locale;
import java.text.SimpleDateFormat;
public class TestImage extends TestCase { import com.meterware.httpunit.GetMethodWebRequest;
import com.meterware.httpunit.WebConversation;
import com.meterware.httpunit.WebRequest;
import com.meterware.httpunit.WebResponse;
public class TestImage extends WebappTestCase {
/** /**
* Verifies the generation of the version image from an encoded URL * Verifies the generation of the version image from an encoded URL
*/ */
public void testVersionImage() throws Exception { public void testVersionImage() throws Exception {
WebConversation conversation = new WebConversation(); WebConversation conversation = new WebConversation();
WebRequest request = new GetMethodWebRequest( TestUtils.getServerUrl()+"img/AqijAixCpmC0"); WebRequest request = new GetMethodWebRequest(getServerUrl() + "img/AqijAixCpmC0");
WebResponse response = conversation.getResource( request); WebResponse response = conversation.getResource( request);
// Analyze response // Analyze response
// Verifies the Content-Type header // Verifies the Content-Type header
assertEquals( "Response content type is not PNG", "image/png", response.getContentType()); assertEquals( "Response content type is not PNG", "image/png", response.getContentType());
// Get the image and verify its size // Get the image and verify its size
InputStream responseStream = response.getInputStream(); InputStream responseStream = response.getInputStream();
ByteArrayOutputStream imageStream = new ByteArrayOutputStream(); ByteArrayOutputStream imageStream = new ByteArrayOutputStream();
byte[] buf = new byte[1024]; byte[] buf = new byte[1024];
@ -33,7 +35,7 @@ public class TestImage extends TestCase {
byte[] inMemoryImage = imageStream.toByteArray(); byte[] inMemoryImage = imageStream.toByteArray();
int diagramLen = inMemoryImage.length; int diagramLen = inMemoryImage.length;
assertTrue( diagramLen > 10000); assertTrue( diagramLen > 10000);
assertTrue( diagramLen < 20000); assertTrue( diagramLen < 20000);
} }
/** /**
@ -41,8 +43,8 @@ public class TestImage extends TestCase {
*/ */
public void testDiagramHttpHeader() throws Exception { public void testDiagramHttpHeader() throws Exception {
WebConversation conversation = new WebConversation(); WebConversation conversation = new WebConversation();
// Bob -> Alice : hello // Bob -> Alice : hello
WebRequest request = new GetMethodWebRequest( TestUtils.getServerUrl()+"img/SyfFKj2rKt3CoKnELR1Io4ZDoSa70000"); WebRequest request = new GetMethodWebRequest(getServerUrl() + "img/SyfFKj2rKt3CoKnELR1Io4ZDoSa70000");
WebResponse response = conversation.getResource( request); WebResponse response = conversation.getResource( request);
// Analyze response // Analyze response
// Verifies the Content-Type header // Verifies the Content-Type header

View File

@ -1,24 +1,27 @@
package net.sourceforge.plantuml.servlet; package net.sourceforge.plantuml.servlet;
import junit.framework.TestCase;
import com.meterware.httpunit.*;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.InputStream; import java.io.InputStream;
public class TestProxy extends TestCase { import com.meterware.httpunit.GetMethodWebRequest;
import com.meterware.httpunit.WebConversation;
import com.meterware.httpunit.WebForm;
import com.meterware.httpunit.WebRequest;
import com.meterware.httpunit.WebResponse;
public class TestProxy extends WebappTestCase {
/** /**
* Verifies the proxified reception of the default Bob and Alice diagram * Verifies the proxified reception of the default Bob and Alice diagram
*/ */
public void testDefaultProxy() throws Exception { public void testDefaultProxy() throws Exception {
WebConversation conversation = new WebConversation(); WebConversation conversation = new WebConversation();
WebRequest request = new GetMethodWebRequest( TestUtils.getServerUrl()+"proxy/" WebRequest request = new GetMethodWebRequest(getServerUrl() + "proxy/"
+TestUtils.getServerUrl()+"welcome"); + getServerUrl() + "welcome");
WebResponse response = conversation.getResource( request); WebResponse response = conversation.getResource( request);
// Analyze response // Analyze response
// Verifies the Content-Type header // Verifies the Content-Type header
//assertEquals( "Response content type is not PNG", "image/png", response.getContentType()); //assertEquals( "Response content type is not PNG", "image/png", response.getContentType());
// Get the image and verify its size (~1533 bytes) // Get the image and verify its size (~1600 bytes)
InputStream responseStream = response.getInputStream(); InputStream responseStream = response.getInputStream();
ByteArrayOutputStream imageStream = new ByteArrayOutputStream(); ByteArrayOutputStream imageStream = new ByteArrayOutputStream();
byte[] buf = new byte[1024]; byte[] buf = new byte[1024];
@ -31,7 +34,7 @@ public class TestProxy extends TestCase {
byte[] inMemoryImage = imageStream.toByteArray(); byte[] inMemoryImage = imageStream.toByteArray();
int diagramLen = inMemoryImage.length; int diagramLen = inMemoryImage.length;
assertTrue( diagramLen > 1500); assertTrue( diagramLen > 1500);
assertTrue( diagramLen < 1600); assertTrue( diagramLen < 1700);
} }
/** /**
@ -39,8 +42,8 @@ public class TestProxy extends TestCase {
*/ */
public void testInvalidUrl() throws Exception { public void testInvalidUrl() throws Exception {
WebConversation conversation = new WebConversation(); WebConversation conversation = new WebConversation();
// Try to proxify an invalid address // Try to proxify an invalid address
WebRequest request = new GetMethodWebRequest( TestUtils.getServerUrl()+"proxy/invalidURL"); WebRequest request = new GetMethodWebRequest(getServerUrl() + "proxy/invalidURL");
WebResponse response = conversation.getResource( request); WebResponse response = conversation.getResource( request);
// Analyze response, it must be the empty form // Analyze response, it must be the empty form
// Verifies the Content-Type header // Verifies the Content-Type header

View File

@ -1,19 +1,17 @@
package net.sourceforge.plantuml.servlet; package net.sourceforge.plantuml.servlet;
import junit.framework.TestCase; import com.meterware.httpunit.GetMethodWebRequest;
import com.meterware.httpunit.*; import com.meterware.httpunit.WebConversation;
import com.meterware.httpunit.WebRequest;
import com.meterware.httpunit.WebResponse;
import java.util.Date; public class TestSVG extends WebappTestCase {
import java.util.Locale;
import java.text.SimpleDateFormat;
public class TestSVG extends TestCase {
/** /**
* Verifies the generation of the SVG for the Bob -> Alice sample * Verifies the generation of the SVG for the Bob -> Alice sample
*/ */
public void testSimpleSequenceDiagram() throws Exception { public void testSimpleSequenceDiagram() throws Exception {
WebConversation conversation = new WebConversation(); WebConversation conversation = new WebConversation();
WebRequest request = new GetMethodWebRequest( TestUtils.getServerUrl()+"svg/SyfFKj2rKt3CoKnELR1Io4ZDoSa70000"); WebRequest request = new GetMethodWebRequest(getServerUrl() + "svg/SyfFKj2rKt3CoKnELR1Io4ZDoSa70000");
WebResponse response = conversation.getResource( request); WebResponse response = conversation.getResource( request);
// Analyze response // Analyze response
// Verifies the Content-Type header // Verifies the Content-Type header
@ -22,7 +20,7 @@ public class TestSVG extends TestCase {
String diagram = response.getText(); String diagram = response.getText();
int diagramLen = diagram.length(); int diagramLen = diagram.length();
assertTrue( diagramLen > 1700); assertTrue( diagramLen > 1700);
assertTrue( diagramLen < 1800); assertTrue( diagramLen < 1800);
} }
} }

View File

@ -0,0 +1,31 @@
package net.sourceforge.plantuml.servlet;
import junit.framework.TestCase;
public abstract class WebappTestCase extends TestCase {
private ServerUtils serverUtils;
public WebappTestCase() {
super();
}
public WebappTestCase(String name) {
super(name);
}
@Override
public void setUp() throws Exception {
serverUtils = new ServerUtils(true);
}
@Override
public void tearDown() throws Exception {
serverUtils.stopServer();
}
protected String getServerUrl() {
return serverUtils.getServerUrl();
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,28 +0,0 @@
package net.sourceforge.plantuml.servlet;
import junit.framework.TestCase;
import com.meterware.httpunit.*;
import java.util.Date;
import java.util.Locale;
import java.text.SimpleDateFormat;
public class TestAsciiArt extends TestCase {
/**
* Verifies the generation of the ascii art for the Bob -> Alice sample
*/
public void testSimpleSequenceDiagram() throws Exception {
WebConversation conversation = new WebConversation();
WebRequest request = new GetMethodWebRequest( TestUtils.getServerUrl()+"txt/SyfFKj2rKt3CoKnELR1Io4ZDoSa70000");
WebResponse response = conversation.getResource( request);
// Analyze response
// Verifies the Content-Type header
assertEquals( "Response content type is not TEXT PLAIN", "text/plain", response.getContentType());
// Get the content and verify its size
String diagram = response.getText();
int diagramLen = diagram.length();
assertTrue( diagramLen > 200);
assertTrue( diagramLen < 250);
}
}