diff --git a/src/main/java/net/sourceforge/plantuml/servlet/LanguageServlet.java b/src/main/java/net/sourceforge/plantuml/servlet/LanguageServlet.java new file mode 100644 index 0000000..fcbcc1e --- /dev/null +++ b/src/main/java/net/sourceforge/plantuml/servlet/LanguageServlet.java @@ -0,0 +1,54 @@ +/* ======================================================================== + * PlantUML : a free UML diagram generator + * ======================================================================== + * + * Project Info: http://plantuml.sourceforge.net + * + * This file is part of PlantUML. + * + * PlantUML is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * PlantUML distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + * License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, + * USA. + */ +package net.sourceforge.plantuml.servlet; + +import net.sourceforge.plantuml.syntax.LanguageDescriptor; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintStream; + +/** + * Servlet used to inspect the language keywords of the running PlantUML server. + * Same as {@code java -jar plantuml.jar -language} + */ +public class LanguageServlet extends HttpServlet { + + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + throw new ServletException(new UnsupportedOperationException("The Language servlet only handles GET requests")); + } + + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + final PrintStream ps = new PrintStream(response.getOutputStream()); + response.setContentType("text/text"); + new LanguageDescriptor().print(ps); + } +} diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml index 42787f9..00d917c 100644 --- a/src/main/webapp/WEB-INF/web.xml +++ b/src/main/webapp/WEB-INF/web.xml @@ -67,7 +67,11 @@ checkservlet net.sourceforge.plantuml.servlet.CheckSyntaxServlet - + + languageservlet + net.sourceforge.plantuml.servlet.LanguageServlet + + plantumlservlet /welcome @@ -128,6 +132,10 @@ proxyservlet /proxy + + languageservlet + /language + java.lang.Throwable /error.jsp diff --git a/src/test/java/net/sourceforge/plantuml/servlet/TestLanguage.java b/src/test/java/net/sourceforge/plantuml/servlet/TestLanguage.java new file mode 100644 index 0000000..c5eb3cf --- /dev/null +++ b/src/test/java/net/sourceforge/plantuml/servlet/TestLanguage.java @@ -0,0 +1,23 @@ +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; + +import java.io.IOException; + +public class TestLanguage extends WebappTestCase { + + /** + * Tests that the language for the current PlantUML server can be obtained through HTTP + */ + public void testRetrieveLanguage() throws IOException { + WebConversation conversation = new WebConversation(); + WebRequest request = new GetMethodWebRequest(getServerUrl() + "/language"); + WebResponse response = conversation.getResource(request); + String languageText = response.getText(); + assertTrue("Language contains @startuml", languageText.indexOf("@startuml") > 0); + } + +}