diff --git a/wise-editor/src/main/webapp/icons/legacy/links.png b/wise-editor/src/main/webapp/icons/legacy/links.png new file mode 100644 index 00000000..b8edc126 Binary files /dev/null and b/wise-editor/src/main/webapp/icons/legacy/links.png differ diff --git a/wise-webapp/src/main/java/com/wisemapping/controller/ExportController.java b/wise-webapp/src/main/java/com/wisemapping/controller/ExportController.java deleted file mode 100644 index c83346af..00000000 --- a/wise-webapp/src/main/java/com/wisemapping/controller/ExportController.java +++ /dev/null @@ -1,214 +0,0 @@ -/* -* Copyright [2011] [wisemapping] -* -* Licensed under WiseMapping Public License, Version 1.0 (the "License"). -* It is basically the Apache License, Version 2.0 (the "License") plus the -* "powered by wisemapping" text requirement on every single page; -* you may not use this file except in compliance with the License. -* You may obtain a copy of the license at -* -* http://www.wisemapping.org/license -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -package com.wisemapping.controller; - -import com.wisemapping.exporter.ExportException; -import com.wisemapping.exporter.ExportFormat; -import com.wisemapping.exporter.ExporterFactory; -import com.wisemapping.model.MindMap; -import com.wisemapping.service.MindmapService; -import com.wisemapping.view.MindMapBean; -import com.wisemapping.exporter.ExportProperties; -import com.wisemapping.filter.UserAgent; -import org.apache.batik.transcoder.TranscoderException; -import org.jetbrains.annotations.NotNull; -import org.springframework.web.servlet.ModelAndView; -import org.springframework.web.servlet.mvc.multiaction.NoSuchRequestHandlingMethodException; -import org.xml.sax.SAXException; -import sun.misc.BASE64Encoder; - -import javax.servlet.ServletOutputStream; -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.xml.bind.JAXBException; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.stream.XMLStreamException; -import javax.xml.transform.TransformerException; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.OutputStream; - -public class ExportController extends BaseMultiActionController { - private static final String IMG_EXPORT_FORMAT = "IMG_EXPORT_FORMAT"; - private static final String MAP_ID_PARAMETER = "mapId"; - private static final String MAP_SVG_PARAMETER = "mapSvg"; - private static final String EXPORT_FORMAT_PARAMETER = "exportFormat"; - private static final String IMG_SIZE_PARAMETER = "imgSize"; - private static final String MAP_XML_PARAM = "mapXml"; - - - public ModelAndView handleNoSuchRequestHandlingMethod(NoSuchRequestHandlingMethodException noSuchRequestHandlingMethodException, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { - logger.info("Mindmap Controller: EXPORT action"); - final MindMap mindmap = getMindmapFromRequest(httpServletRequest); - return new ModelAndView("mindmapExport", "mindmap", new MindMapBean(mindmap)); - } - - public ModelAndView export(HttpServletRequest request, HttpServletResponse response) throws TranscoderException, IOException, JAXBException { - logger.info("Export Controller: exporting WiseMap action"); - - final String mapIdStr = request.getParameter(MAP_ID_PARAMETER); - if (mapIdStr != null) { - final String mapSvg = request.getParameter(MAP_SVG_PARAMETER); - try { - - int mindmapId = Integer.parseInt(mapIdStr); - - logger.debug("SVG Map to export:" + mapSvg); - if (mapSvg == null || mapSvg.isEmpty()) { - throw new IllegalArgumentException("SVG map could not be null"); - } - - String formatStr = request.getParameter(EXPORT_FORMAT_PARAMETER); - if (IMG_EXPORT_FORMAT.endsWith(formatStr)) { - formatStr = request.getParameter("imgFormat"); - } - - final MindmapService service = getMindmapService(); - final MindMap mindMap = service.getMindmapById(mindmapId); - - // Build format properties ... - final ExportFormat format = ExportFormat.valueOf(formatStr); - final ExportProperties properties = ExportProperties.create(format); - if (properties instanceof ExportProperties.ImageProperties) { - final String sizeStr = request.getParameter(IMG_SIZE_PARAMETER); - final ExportProperties.ImageProperties imageProperties = (ExportProperties.ImageProperties) properties; - if (sizeStr != null) { - final ExportProperties.ImageProperties.Size size = ExportProperties.ImageProperties.Size.valueOf(sizeStr); - imageProperties.setSize(size); - } else { - imageProperties.setSize(ExportProperties.ImageProperties.Size.LARGE); - } - } - - final ByteArrayOutputStream bos = new ByteArrayOutputStream(); - - // Change image link URL. - setBaseBaseImgUrl(format, properties); - ExporterFactory.export(properties, mindMap.getUnzippedXml(), bos, mapSvg); - - // If the export goes ok, write the map to the stream ... - - // Set format content type... - final String contentType = format.getContentType(); - response.setContentType(contentType); - - // Set file name... - final String fileName = mindMap.getTitle() + "." + format.getFileExtension(); - response.setHeader("Content-Disposition", "attachment;filename=" + fileName); - - // Write content ... - final ServletOutputStream outputStream = response.getOutputStream(); - outputStream.write(bos.toByteArray()); - - - } catch (Throwable e) { - logger.error("Unexpexted error during export process", e); - response.setStatus(HttpServletResponse.SC_NOT_FOUND); - logger.error("map: " + mapSvg); - } - } else { - logger.warn("mapIdStr is null.Image could not be imported. UserAgent:" + request.getHeaders(UserAgent.USER_AGENT_HEADER)); - response.setStatus(HttpServletResponse.SC_NOT_FOUND); - } - return null; - } - - private void setBaseBaseImgUrl(@NotNull ExportFormat format, @NotNull ExportProperties properties) { - - final String baseUrl; - if (format == ExportFormat.SVG) { - baseUrl = "http://www.wisemapping.com/images"; - } else { - final ServletContext servletContext = this.getServletContext(); - baseUrl = "file://" + servletContext.getRealPath("/icons/") + "/"; - } - properties.setBaseImagePath(baseUrl); - } - - public ModelAndView print(HttpServletRequest request, HttpServletResponse response) throws TranscoderException, IOException, JAXBException { - logger.info("Export Controller: printing WiseMap action"); - - final String mapIdStr = request.getParameter(MAP_ID_PARAMETER); - int mindmapId = Integer.parseInt(mapIdStr); - final MindmapService service = getMindmapService(); - final MindMap mindmap = service.getMindmapById(mindmapId); - final String mapSvg = request.getParameter(MAP_SVG_PARAMETER); - - final ByteArrayOutputStream bos = new ByteArrayOutputStream(); - try { - exportImage(response, mapSvg, bos, false); - } catch (Throwable e) { - logger.error("Unexpexted error generating the image", e); - logger.error("map: " + mapSvg); - } - - BASE64Encoder encoder = new BASE64Encoder(); - String content = encoder.encode(bos.toByteArray()); - final String exportContent = "data:image/png;base64," + content; - bos.close(); - - ModelAndView view = new ModelAndView("mindmapPrint", "mindmap", new MindMapBean(mindmap)); - final String xmlMap = mindmap.getNativeXmlAsJsLiteral(); - view.addObject(MAP_XML_PARAM, xmlMap); - view.addObject(MAP_SVG_PARAMETER, exportContent); - - return view; - - } - - public ModelAndView image(HttpServletRequest request, HttpServletResponse response) throws TranscoderException, IOException, JAXBException { - logger.info("Export Controller: generating image WiseMap action"); - - final String mapIdStr = request.getParameter(MAP_ID_PARAMETER); - final String mapSvg = request.getParameter(MAP_SVG_PARAMETER); - try { - final ServletOutputStream outputStream = response.getOutputStream(); - - exportImage(response, mapSvg, outputStream, true); - - - } catch (Throwable e) { - logger.error("Unexpexted error generating the image", e); - logger.error("map: " + mapSvg); - } - return null; - } - - private void exportImage(HttpServletResponse response, String mapSvg, OutputStream outputStream, boolean setOutput) throws TranscoderException, IOException, ParserConfigurationException, SAXException, XMLStreamException, TransformerException, JAXBException, ExportException { - - //Image Format - ExportFormat imageFormat = ExportFormat.PNG; - - // Build format properties ... - final ExportProperties.ImageProperties imageProperties = new ExportProperties.ImageProperties(imageFormat); - imageProperties.setSize(ExportProperties.ImageProperties.Size.XMEDIUM); - - // Change image link URL. - setBaseBaseImgUrl(imageFormat, imageProperties); - - // Set format content type... - if (setOutput) - response.setContentType(imageFormat.getContentType()); - - // Write content ... - ExporterFactory.export(imageProperties, null, outputStream, mapSvg); - } -} \ No newline at end of file diff --git a/wise-webapp/src/main/java/com/wisemapping/rest/MindmapController.java b/wise-webapp/src/main/java/com/wisemapping/rest/MindmapController.java index e3b0186a..ea78ae2a 100644 --- a/wise-webapp/src/main/java/com/wisemapping/rest/MindmapController.java +++ b/wise-webapp/src/main/java/com/wisemapping/rest/MindmapController.java @@ -4,9 +4,8 @@ package com.wisemapping.rest; import com.wisemapping.model.MindMap; import com.wisemapping.model.MindmapUser; import com.wisemapping.model.User; -import com.wisemapping.rest.model.RestMindMap; +import com.wisemapping.rest.model.RestMindmap; import com.wisemapping.service.MindmapService; -import com.wisemapping.validator.Utils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; @@ -16,21 +15,18 @@ import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.ModelAndView; import java.io.IOException; -import java.util.HashMap; import java.util.List; -import java.util.Map; @Controller public class MindmapController { @Autowired private MindmapService mindmapService; - - @RequestMapping(method = RequestMethod.GET, value = "/map/{id}") + @RequestMapping(method = RequestMethod.GET, value = "/map/{id}", produces = {"text/xml", "application/json", "text/html"}) @ResponseBody public ModelAndView getMindmap(@PathVariable int id) throws IOException { final MindMap mindMap = mindmapService.getMindmapById(id); - final RestMindMap map = new RestMindMap(mindMap); + final RestMindmap map = new RestMindmap(mindMap); return new ModelAndView("mapView", "map", map); } @@ -39,7 +35,7 @@ public class MindmapController { final User user = com.wisemapping.security.Utils.getUser(); final List list = mindmapService.getMindmapUserByUser(user); -// final RestMindMap map = new RestMindMap(mindMap); +// final RestMindMap map = new RestMindmap(mindMap); // return new ModelAndView("mapView", "map", map); return null; } diff --git a/wise-webapp/src/main/java/com/wisemapping/rest/TransformerController.java b/wise-webapp/src/main/java/com/wisemapping/rest/TransformerController.java index 65238e89..445704d8 100644 --- a/wise-webapp/src/main/java/com/wisemapping/rest/TransformerController.java +++ b/wise-webapp/src/main/java/com/wisemapping/rest/TransformerController.java @@ -1,12 +1,16 @@ package com.wisemapping.rest; +import com.wisemapping.exporter.ExportFormat; import com.wisemapping.exporter.ExportProperties; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.HashMap; import java.util.Map; @@ -14,6 +18,10 @@ import java.util.Map; @Controller public class TransformerController { + private static final String PARAM_SVG_XML = "svgXml"; + private static final String PARAM_WISE_MAP_XML = "mapXml"; + private static final String PARAM_FILENAME = "filename"; + @RequestMapping(method = RequestMethod.POST, value = "/transform", produces = {"application/pdf"}, consumes = {"image/svg+xml"}) @ResponseBody public ModelAndView transformPdf(@RequestBody @Nullable final String content) throws IOException { @@ -26,6 +34,18 @@ public class TransformerController { return new ModelAndView("transformViewPdf", values); } + @RequestMapping(method = RequestMethod.POST, value = "/transform", produces = {"image/svg+xml"}, consumes = {"image/svg+xml"}) + @ResponseBody + public ModelAndView transformSvg(@RequestBody @Nullable final String content) throws IOException { + final Map values = new HashMap(); + if (content == null || content.length() == 0) { + throw new IllegalArgumentException("Body can not be null."); + } + + values.put("content", content); + return new ModelAndView("transformViewSvg", values); + } + @RequestMapping(method = RequestMethod.POST, value = "/transform", produces = {"image/png"}, consumes = {"image/svg+xml"}) @ResponseBody public ModelAndView transformPng(@RequestBody @Nullable final String content) throws IOException { @@ -47,7 +67,7 @@ public class TransformerController { } values.put("content", content); values.put("imageSize", ExportProperties.ImageProperties.Size.LARGE); - return new ModelAndView("transformViewJpg", values); + return new ModelAndView("transformViewJpeg", values); } @RequestMapping(method = RequestMethod.POST, value = "/transform", produces = {"application/freemind"}, consumes = {"text/xml"}) @@ -60,4 +80,42 @@ public class TransformerController { values.put("content", content); return new ModelAndView("transformViewFreemind", values); } + + @RequestMapping(method = RequestMethod.POST, value = "/transform", consumes = {"application/x-www-form-urlencoded"}) + public ModelAndView transform(@NotNull HttpServletRequest request, + @NotNull HttpServletResponse response) throws IOException { + final String svg = request.getParameter(PARAM_SVG_XML); + final String mapXml = request.getParameter(PARAM_WISE_MAP_XML); + final String filename = request.getParameter(PARAM_FILENAME); + + + // Obtains transformation type based on the last part of the URL ... + final String requestURI = request.getRequestURI(); + final String format = requestURI.substring(requestURI.lastIndexOf(".") + 1, requestURI.length()); + final ExportFormat exportFormat = ExportFormat.valueOf(format.toUpperCase()); + + ModelAndView result; + switch (exportFormat) { + case PNG: + result = this.transformPng(svg); + break; + case JPEG: + result = this.transformJpeg(svg); + break; + case PDF: + result = this.transformPdf(svg); + break; + case SVG: + result = this.transformSvg(svg); + break; + case FREEMIND: + result = this.transformFreemind(mapXml); + break; + default: + throw new IllegalArgumentException("Unsupported export format"); + + } + result.getModelMap().put("filename", filename); + return result; + } } diff --git a/wise-webapp/src/main/java/com/wisemapping/rest/model/RestMindmap.java b/wise-webapp/src/main/java/com/wisemapping/rest/model/RestMindmap.java index 5291045c..8c4cf46e 100644 --- a/wise-webapp/src/main/java/com/wisemapping/rest/model/RestMindmap.java +++ b/wise-webapp/src/main/java/com/wisemapping/rest/model/RestMindmap.java @@ -17,17 +17,17 @@ import java.util.Date; @XmlRootElement(name = "map") @XmlAccessorType(XmlAccessType.PROPERTY) -public class RestMindMap { +public class RestMindmap { @JsonIgnore private MindMap mindmap; - public RestMindMap() { + public RestMindmap() { this(null); } - public RestMindMap(@NotNull MindMap mindmap) { + public RestMindmap(@NotNull MindMap mindmap) { this.mindmap = mindmap; } diff --git a/wise-webapp/src/main/java/com/wisemapping/rest/view/TransformView.java b/wise-webapp/src/main/java/com/wisemapping/rest/view/TransformView.java index 6d31a78d..144db7e2 100644 --- a/wise-webapp/src/main/java/com/wisemapping/rest/view/TransformView.java +++ b/wise-webapp/src/main/java/com/wisemapping/rest/view/TransformView.java @@ -28,6 +28,7 @@ public class TransformView extends AbstractView { protected void renderMergedOutputModel(@NotNull Map viewMap, @NotNull HttpServletRequest request, @NotNull final HttpServletResponse response) throws Exception { final String content = (String) viewMap.get("content"); + final String filename = (String) viewMap.get("filename"); // Build format properties ... final ExportProperties properties = ExportProperties.create(exportFormat); @@ -57,7 +58,7 @@ public class TransformView extends AbstractView { response.setContentType(contentType); // Set file name... - final String fileName = "map" + "." + exportFormat.getFileExtension(); + final String fileName = (filename != null ? filename : "map" + ".") + exportFormat.getFileExtension(); response.setHeader("Content-Disposition", "attachment;filename=" + fileName); // Write content ... diff --git a/wise-webapp/src/main/webapp/WEB-INF/wisemapping-acegi-security.xml b/wise-webapp/src/main/webapp/WEB-INF/wisemapping-acegi-security.xml deleted file mode 100644 index 0359e3ea..00000000 --- a/wise-webapp/src/main/webapp/WEB-INF/wisemapping-acegi-security.xml +++ /dev/null @@ -1,167 +0,0 @@ - - - - - - - - - CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON - PATTERN_TYPE_APACHE_ANT - /**=httpSessionContextIntegrationFilter,logoutFilter,authenticationProcessingFilter,securityContextHolderAwareRequestFilter,rememberMeProcessingFilter,anonymousProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /c/login.htm?login_error=2 - /c/login.htm?login_error=3 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON - PATTERN_TYPE_APACHE_ANT - /index.jsp=IS_AUTHENTICATED_ANONYMOUSLY - /c/login*=IS_AUTHENTICATED_ANONYMOUSLY - /c/userregistration*=IS_AUTHENTICATED_ANONYMOUSLY - /c/activation.htm=IS_AUTHENTICATED_ANONYMOUSLY - /c/forgotpassword*=IS_AUTHENTICATED_ANONYMOUSLY - /c/captcha*=IS_AUTHENTICATED_ANONYMOUSLY - /c/home.htm=IS_AUTHENTICATED_ANONYMOUSLY - /c/try.htm=IS_AUTHENTICATED_ANONYMOUSLY - /c/search.htm=IS_AUTHENTICATED_ANONYMOUSLY - /c/keyboard.htm=IS_AUTHENTICATED_ANONYMOUSLY - /css/*=IS_AUTHENTICATED_ANONYMOUSLY - /js/**=IS_AUTHENTICATED_ANONYMOUSLY - /ws/**=IS_AUTHENTICATED_ANONYMOUSLY - /images/*=IS_AUTHENTICATED_ANONYMOUSLY - /c/embeddedview.htm=IS_AUTHENTICATED_ANONYMOUSLY - /c/export.htm=IS_AUTHENTICATED_ANONYMOUSLY - /c/publicview.htm=IS_AUTHENTICATED_ANONYMOUSLY - /dwr/engine.js=IS_AUTHENTICATED_ANONYMOUSLY - /dwr/interface/loggerservice.js=IS_AUTHENTICATED_ANONYMOUSLY - /dwr/call/plaincall/loggerservice.logerror.dwr=IS_AUTHENTICATED_ANONYMOUSLY - /**=IS_AUTHENTICATED_REMEMBERED - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/wise-webapp/src/main/webapp/WEB-INF/wisemapping-rest.xml b/wise-webapp/src/main/webapp/WEB-INF/wisemapping-rest.xml index 0c2baf05..1e0b28b4 100644 --- a/wise-webapp/src/main/webapp/WEB-INF/wisemapping-rest.xml +++ b/wise-webapp/src/main/webapp/WEB-INF/wisemapping-rest.xml @@ -15,15 +15,10 @@ - - - - - - com.wisemapping.rest.model.RestMindMap + com.wisemapping.rest.model.RestMindmap @@ -33,11 +28,14 @@ - + + - + + + @@ -76,5 +74,7 @@ - + + + \ No newline at end of file diff --git a/wise-webapp/src/main/webapp/WEB-INF/wisemapping-security.xml b/wise-webapp/src/main/webapp/WEB-INF/wisemapping-security.xml index 6ed011bf..0c3bde00 100644 --- a/wise-webapp/src/main/webapp/WEB-INF/wisemapping-security.xml +++ b/wise-webapp/src/main/webapp/WEB-INF/wisemapping-security.xml @@ -30,9 +30,11 @@ + + diff --git a/wise-webapp/src/main/webapp/WEB-INF/wisemapping-servlet.xml b/wise-webapp/src/main/webapp/WEB-INF/wisemapping-servlet.xml index b19db494..8fd5e210 100644 --- a/wise-webapp/src/main/webapp/WEB-INF/wisemapping-servlet.xml +++ b/wise-webapp/src/main/webapp/WEB-INF/wisemapping-servlet.xml @@ -107,11 +107,7 @@ - - - - - + @@ -303,7 +299,6 @@ editorController cookerController settingsController - exportController publishController editProfileController tagsController diff --git a/wise-webapp/src/main/webapp/jsp/mindmapExport.jsp b/wise-webapp/src/main/webapp/jsp/mindmapExport.jsp index b5ab7be3..c580e92d 100644 --- a/wise-webapp/src/main/webapp/jsp/mindmapExport.jsp +++ b/wise-webapp/src/main/webapp/jsp/mindmapExport.jsp @@ -1,13 +1,13 @@ <%@ include file="/jsp/init.jsp" %>

- - '${mindmap.title}'

+ '${mindmap.title}'
-
" style="height:100%;"> - - - + " + style="height:100%;" enctype="application/x-www-form-urlencoded"> + + + @@ -85,14 +85,36 @@ }); $('ok').addEvent('click', function(event) { - $('exportForm').submit(); + + var form = $('exportForm'); + + // Look for the selected format and append export suffix... + var value = $$('input[name=exportFormat]:checked')[0].get('value'); + var suffix; + if (value == 'IMG_EXPORT_FORMAT') { + var selected = $('imgFormat'); + suffix = selected.options[selected.selectedIndex].value; + } else { + suffix = value; + } + suffix = suffix.toLowerCase(); + form.action = form.action + "." + suffix; + + // Store SVG o native map... + if (suffix == "freemind") { + var mindmap = designer.getMindmap(); + var serializer = mindplot.XMLMindmapSerializerFactory.getSerializerFromMindmap(mindmap); + var domMap = serializer.toXML(mindmap); + form.mapXml.value = core.Utils.innerXML(domMap); + } else { + form.svgXml.value = $("workspaceContainer").innerHTML; + } + + // Finally, submit map ... + form.submit(); + + MooDialog.Request.active.close(); }); - $('cancel').addEvent('click', function(event) { - MooDialog.Request.active.close(); - }); - - document.exportForm.mapSvg.value = $("workspaceContainer").innerHTML; - \ No newline at end of file