Author: glandais Date: 2008-02-15 10:18:01 +0000 (Fri, 15 Feb 2008) New Revision: 985 Added: trunk/simexplorer-is/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/ElementDownload.java trunk/simexplorer-is/simexplorer-is-web/src/main/webapp/ElementDownload.tml Removed: trunk/simexplorer-is/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/ElementExport.java trunk/simexplorer-is/simexplorer-is-web/src/main/webapp/ElementExport.tml Modified: trunk/simexplorer-is/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/ElementPageDetail.java Log: Renaming ElementExport to ElementDownload Copied: trunk/simexplorer-is/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/ElementDownload.java (from rev 984, trunk/simexplorer-is/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/ElementExport.java) =================================================================== --- trunk/simexplorer-is/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/ElementDownload.java (rev 0) +++ trunk/simexplorer-is/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/ElementDownload.java 2008-02-15 10:18:01 UTC (rev 985) @@ -0,0 +1,384 @@ +/* +* ##% Copyright (C) 2008 Code Lutin, Gabriel Landais +* +* This program 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 2 +* of the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* ##% */ +package fr.cemagref.simexplorer.is.ui.web.pages; + +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import java.util.StringTokenizer; + +import org.apache.tapestry.StreamResponse; +import org.codelutin.tapestry.beans.TreeNode; + +import fr.cemagref.simexplorer.is.attachment.Attachment; +import fr.cemagref.simexplorer.is.entities.data.Component; +import fr.cemagref.simexplorer.is.entities.data.ExplorationApplication; +import fr.cemagref.simexplorer.is.entities.data.ExplorationData; +import fr.cemagref.simexplorer.is.entities.data.Library; +import fr.cemagref.simexplorer.is.entities.data.LoggableElement; +import fr.cemagref.simexplorer.is.entities.metadata.MetaData; +import fr.cemagref.simexplorer.is.ui.web.SimExplorerWebException; +import fr.cemagref.simexplorer.is.ui.web.services.RemoteStorageService; +import fr.cemagref.simexplorer.is.ui.web.tools.AttachmentStreamResponse; +import fr.cemagref.simexplorer.is.ui.web.tools.XMLAttachment; +import fr.cemagref.simexplorer.is.ui.web.tools.ZipAttachment; + +/** + * The Class ElementDownload. + */ +public class ElementDownload extends ElementPageDetail { + + /* (non-Javadoc) + * @see fr.cemagref.simexplorer.is.ui.web.pages.security.ProtectedPage#getWindowTitle() + */ + @Override + public String getWindowTitle() { + return getMessages().get("simexplorer.ui.web.title.elementexport"); + } + + /** + * On action from download xml. + * + * @return the object + */ + public Object onActionFromDownloadXML() { + + Object response; + + MetaData mde = getMetadata(); + + try { + InputStream stream = RemoteStorageService.getStorageService() + .retrieveElementXML(getToken(), mde.getUuid(), + mde.getVersion().toString()); + response = new XMLAttachment(stream, mde.getType() + "." + + mde.getUuid() + ".v" + mde.getVersion()); + } catch (Exception e) { + throw new SimExplorerWebException(e); + } + + return response; + } + + /** + * On action from download full. + * + * @return the object + */ + public Object onActionFromDownloadFull() { + Object response; + + MetaData mde = getMetadata(); + + try { + InputStream stream = RemoteStorageService.getStorageService() + .retrieveElementFull(getToken(), mde.getUuid(), + mde.getVersion().toString()); + response = new ZipAttachment(stream, mde.getType() + "." + + mde.getUuid() + ".v" + mde.getVersion()); + } catch (Exception e) { + throw new SimExplorerWebException(e); + } + + return response; + } + + /** + * On download file. + * + * @param context + * the context + * + * @return the object + */ + public Object onDownloadFile(String context) { + StreamResponse response = null; + + try { + StringTokenizer st = new StringTokenizer(context, ","); + String uuid = st.nextToken(); + String version = st.nextToken(); + String attachmentUniqueId = st.nextToken(); + + MetaData metadata = RemoteStorageService.getStorageService() + .getMetadata(getToken(), uuid, version); + List<Attachment> attachments = metadata.getAttachments(); + for (Attachment attachment : attachments) { + if (attachment.getUniqueId().equals(attachmentUniqueId)) { + InputStream stream = RemoteStorageService + .getStorageService().retrieveElementData( + getToken(), uuid, version, attachment); + + response = new AttachmentStreamResponse(stream, attachment + .getFileName()); + return response; + } + } + + } catch (Exception e) { + throw new SimExplorerWebException(e); + } + + return response; + } + + /** + * Headers of tree grid. + * + * @return Headers + */ + public List<String> getHeaders() { + List<String> result = new ArrayList<String>(); + result.add(getMessages().get("simexplorer.ui.web.type")); + result.add(getMessages().get("simexplorer.ui.web.name")); + result.add(getMessages().get("simexplorer.ui.web.hash")); + result.add(""); + return result; + } + + /** + * Gets the nodes. + * + * @return the nodes + */ + public List<TreeNode> getNodes() { + List<TreeNode> nodes = new ArrayList<TreeNode>(); + nodes.add(generateNodes()); + return nodes; + } + + /** + * Generate nodes. + * + * @return the tree node + */ + private TreeNode generateNodes() { + TreeNode node = null; + if (getElement() instanceof ExplorationApplication) { + node = generateExplorationApplication(); + } + if (getElement() instanceof ExplorationData) { + node = generateExplorationData((ExplorationData) getElement()); + } + if (getElement() instanceof Component) { + node = generateComponent((Component) getElement()); + } + if (getElement() instanceof Library) { + node = generateLibrary((Library) getElement()); + } + return node; + } + + /** + * Generate exploration application. + * + * @return the tree node + */ + private TreeNode generateExplorationApplication() { + TreeNode node; + node = new TreeNode(); + + node.setType(TreeNode.TYPE_FOLDER); + + node.setColumns(generateStringArray("Application exploration", + getMetadata().getName())); + + List<TreeNode> children = new ArrayList<TreeNode>(); + TreeNode node1 = new TreeNode(); + node1.setType(TreeNode.TYPE_FOLDER); + node1.setColumns(generateStringArray("Components")); + node1 + .setChildren(generateComponents((ExplorationApplication) getElement())); + children.add(node1); + + TreeNode node2 = new TreeNode(); + node2.setType(TreeNode.TYPE_FOLDER); + node2.setColumns(generateStringArray("Explorations")); + node2 + .setChildren(generateExplorations((ExplorationApplication) getElement())); + children.add(node2); + + node.setChildren(children); + return node; + } + + /** + * Generate explorations. + * + * @param explorationApplication + * the exploration application + * + * @return the list< tree node> + */ + private List<TreeNode> generateExplorations( + ExplorationApplication explorationApplication) { + List<TreeNode> res = new ArrayList<TreeNode>(); + for (ExplorationData explorationData : explorationApplication + .getExplorations()) { + res.add(generateExplorationData(explorationData)); + } + return res; + } + + /** + * Generate exploration data. + * + * @param explorationData + * the exploration data + * + * @return the tree node + */ + private TreeNode generateExplorationData(ExplorationData explorationData) { + TreeNode explorationDataNode = new TreeNode(); + explorationDataNode.setType(TreeNode.TYPE_FOLDER); + + explorationDataNode.setColumns(generateStringArray("Exploration data", + explorationData.getMetaData().getName())); + + List<TreeNode> children = new ArrayList<TreeNode>(); + + List<Attachment> attachments = explorationData.getMetaData() + .getAttachments(); + + for (Attachment attachment : attachments) { + children.add(generateDownload(explorationData, attachment)); + } + explorationDataNode.setChildren(children); + + return explorationDataNode; + } + + /** + * Generate components. + * + * @param explorationApplication + * the exploration application + * + * @return the list< tree node> + */ + private List<TreeNode> generateComponents( + ExplorationApplication explorationApplication) { + Set<Component> components = explorationApplication.getComponents(); + List<TreeNode> res = new ArrayList<TreeNode>(); + + for (Component component : components) { + res.add(generateComponent(component)); + } + + return res; + } + + /** + * Generate component. + * + * @param component + * the component + * + * @return the tree node + */ + private TreeNode generateComponent(Component component) { + TreeNode componentNode = new TreeNode(); + componentNode.setType(TreeNode.TYPE_FOLDER); + + componentNode.setColumns(generateStringArray("Component", component + .getMetaData().getName())); + + List<TreeNode> children = new ArrayList<TreeNode>(); + + TreeNode node; + + node = new TreeNode(); + node.setType(TreeNode.TYPE_FOLDER); + + node.setColumns(generateStringArray("Libraries")); + node.setChildren(generateLibraries(component.getLibraries())); + + children.add(node); + + componentNode.setChildren(children); + return componentNode; + } + + /** + * Generate libraries. + * + * @param libraries + * the libraries + * + * @return the list< tree node> + */ + private List<TreeNode> generateLibraries(Set<Library> libraries) { + List<TreeNode> res = new ArrayList<TreeNode>(); + for (Library library : libraries) { + TreeNode node = generateLibrary(library); + res.add(node); + } + return res; + } + + /** + * Generate library. + * + * @param library + * the library + * + * @return the tree node + */ + private TreeNode generateLibrary(Library library) { + TreeNode node = new TreeNode(); + node.setType(TreeNode.TYPE_FOLDER); + + List<Attachment> attachments = library.getMetaData().getAttachments(); + List<TreeNode> children = new ArrayList<TreeNode>(); + for (Attachment attachment : attachments) { + children.add(generateDownload(library, attachment)); + } + node.setChildren(children); + + node.setColumns(generateStringArray("Library", library.getMetaData() + .getName())); + return node; + } + + /** + * Generate download. + * + * @param explorationData + * the exploration data + * @param attachment + * the attachment + * + * @return the tree node + */ + private TreeNode generateDownload(LoggableElement explorationData, + Attachment attachment) { + TreeNode node = new TreeNode(); + node.setType(TreeNode.TYPE_DOCUMENT); + + String context = explorationData.getMetaData().getUuid() + "," + + explorationData.getMetaData().getVersion() + "," + + attachment.getUniqueId(); + + node.setColumns(generateStringArray(attachment.getContentType() + .getDescription(), attachment.getDataHash(), generateString( + attachment.getFileName(), "downloadFile", context))); + return node; + } + +} Deleted: trunk/simexplorer-is/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/ElementExport.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/ElementExport.java 2008-02-15 10:15:39 UTC (rev 984) +++ trunk/simexplorer-is/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/ElementExport.java 2008-02-15 10:18:01 UTC (rev 985) @@ -1,385 +0,0 @@ -/* -* ##% Copyright (C) 2008 Code Lutin, Gabriel Landais -* -* This program 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 2 -* of the License, or (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program; if not, write to the Free Software -* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -* ##% */ -package fr.cemagref.simexplorer.is.ui.web.pages; - -import java.io.InputStream; -import java.util.ArrayList; -import java.util.List; -import java.util.Set; -import java.util.StringTokenizer; - -import org.apache.tapestry.StreamResponse; -import org.codelutin.tapestry.beans.TreeNode; - -import fr.cemagref.simexplorer.is.attachment.Attachment; -import fr.cemagref.simexplorer.is.entities.data.Component; -import fr.cemagref.simexplorer.is.entities.data.ExplorationApplication; -import fr.cemagref.simexplorer.is.entities.data.ExplorationData; -import fr.cemagref.simexplorer.is.entities.data.Library; -import fr.cemagref.simexplorer.is.entities.data.LoggableElement; -import fr.cemagref.simexplorer.is.entities.metadata.MetaData; -import fr.cemagref.simexplorer.is.ui.web.SimExplorerWebException; -import fr.cemagref.simexplorer.is.ui.web.services.RemoteStorageService; -import fr.cemagref.simexplorer.is.ui.web.tools.AttachmentStreamResponse; -import fr.cemagref.simexplorer.is.ui.web.tools.XMLAttachment; -import fr.cemagref.simexplorer.is.ui.web.tools.ZipAttachment; - -/** - * The Class ElementExport. - * TODO la classe ne devrait-elle pas s'appeller ElementDownload ? - */ -public class ElementExport extends ElementPageDetail { - - /* (non-Javadoc) - * @see fr.cemagref.simexplorer.is.ui.web.pages.security.ProtectedPage#getWindowTitle() - */ - @Override - public String getWindowTitle() { - return getMessages().get("simexplorer.ui.web.title.elementexport"); - } - - /** - * On action from download xml. - * - * @return the object - */ - public Object onActionFromDownloadXML() { - - Object response; - - MetaData mde = getMetadata(); - - try { - InputStream stream = RemoteStorageService.getStorageService() - .retrieveElementXML(getToken(), mde.getUuid(), - mde.getVersion().toString()); - response = new XMLAttachment(stream, mde.getType() + "." - + mde.getUuid() + ".v" + mde.getVersion()); - } catch (Exception e) { - throw new SimExplorerWebException(e); - } - - return response; - } - - /** - * On action from download full. - * - * @return the object - */ - public Object onActionFromDownloadFull() { - Object response; - - MetaData mde = getMetadata(); - - try { - InputStream stream = RemoteStorageService.getStorageService() - .retrieveElementFull(getToken(), mde.getUuid(), - mde.getVersion().toString()); - response = new ZipAttachment(stream, mde.getType() + "." - + mde.getUuid() + ".v" + mde.getVersion()); - } catch (Exception e) { - throw new SimExplorerWebException(e); - } - - return response; - } - - /** - * On download file. - * - * @param context - * the context - * - * @return the object - */ - public Object onDownloadFile(String context) { - StreamResponse response = null; - - try { - StringTokenizer st = new StringTokenizer(context, ","); - String uuid = st.nextToken(); - String version = st.nextToken(); - String attachmentUniqueId = st.nextToken(); - - MetaData metadata = RemoteStorageService.getStorageService() - .getMetadata(getToken(), uuid, version); - List<Attachment> attachments = metadata.getAttachments(); - for (Attachment attachment : attachments) { - if (attachment.getUniqueId().equals(attachmentUniqueId)) { - InputStream stream = RemoteStorageService - .getStorageService().retrieveElementData( - getToken(), uuid, version, attachment); - - response = new AttachmentStreamResponse(stream, attachment - .getFileName()); - return response; - } - } - - } catch (Exception e) { - throw new SimExplorerWebException(e); - } - - return response; - } - - /** - * Headers of tree grid. - * - * @return Headers - */ - public List<String> getHeaders() { - List<String> result = new ArrayList<String>(); - result.add(getMessages().get("simexplorer.ui.web.type")); - result.add(getMessages().get("simexplorer.ui.web.name")); - result.add(getMessages().get("simexplorer.ui.web.hash")); - result.add(""); - return result; - } - - /** - * Gets the nodes. - * - * @return the nodes - */ - public List<TreeNode> getNodes() { - List<TreeNode> nodes = new ArrayList<TreeNode>(); - nodes.add(generateNodes()); - return nodes; - } - - /** - * Generate nodes. - * - * @return the tree node - */ - private TreeNode generateNodes() { - TreeNode node = null; - if (getElement() instanceof ExplorationApplication) { - node = generateExplorationApplication(); - } - if (getElement() instanceof ExplorationData) { - node = generateExplorationData((ExplorationData) getElement()); - } - if (getElement() instanceof Component) { - node = generateComponent((Component) getElement()); - } - if (getElement() instanceof Library) { - node = generateLibrary((Library) getElement()); - } - return node; - } - - /** - * Generate exploration application. - * - * @return the tree node - */ - private TreeNode generateExplorationApplication() { - TreeNode node; - node = new TreeNode(); - - node.setType(TreeNode.TYPE_FOLDER); - - node.setColumns(generateStringArray("Application exploration", - getMetadata().getName())); - - List<TreeNode> children = new ArrayList<TreeNode>(); - TreeNode node1 = new TreeNode(); - node1.setType(TreeNode.TYPE_FOLDER); - node1.setColumns(generateStringArray("Components")); - node1 - .setChildren(generateComponents((ExplorationApplication) getElement())); - children.add(node1); - - TreeNode node2 = new TreeNode(); - node2.setType(TreeNode.TYPE_FOLDER); - node2.setColumns(generateStringArray("Explorations")); - node2 - .setChildren(generateExplorations((ExplorationApplication) getElement())); - children.add(node2); - - node.setChildren(children); - return node; - } - - /** - * Generate explorations. - * - * @param explorationApplication - * the exploration application - * - * @return the list< tree node> - */ - private List<TreeNode> generateExplorations( - ExplorationApplication explorationApplication) { - List<TreeNode> res = new ArrayList<TreeNode>(); - for (ExplorationData explorationData : explorationApplication - .getExplorations()) { - res.add(generateExplorationData(explorationData)); - } - return res; - } - - /** - * Generate exploration data. - * - * @param explorationData - * the exploration data - * - * @return the tree node - */ - private TreeNode generateExplorationData(ExplorationData explorationData) { - TreeNode explorationDataNode = new TreeNode(); - explorationDataNode.setType(TreeNode.TYPE_FOLDER); - - explorationDataNode.setColumns(generateStringArray("Exploration data", - explorationData.getMetaData().getName())); - - List<TreeNode> children = new ArrayList<TreeNode>(); - - List<Attachment> attachments = explorationData.getMetaData() - .getAttachments(); - - for (Attachment attachment : attachments) { - children.add(generateDownload(explorationData, attachment)); - } - explorationDataNode.setChildren(children); - - return explorationDataNode; - } - - /** - * Generate components. - * - * @param explorationApplication - * the exploration application - * - * @return the list< tree node> - */ - private List<TreeNode> generateComponents( - ExplorationApplication explorationApplication) { - Set<Component> components = explorationApplication.getComponents(); - List<TreeNode> res = new ArrayList<TreeNode>(); - - for (Component component : components) { - res.add(generateComponent(component)); - } - - return res; - } - - /** - * Generate component. - * - * @param component - * the component - * - * @return the tree node - */ - private TreeNode generateComponent(Component component) { - TreeNode componentNode = new TreeNode(); - componentNode.setType(TreeNode.TYPE_FOLDER); - - componentNode.setColumns(generateStringArray("Component", component - .getMetaData().getName())); - - List<TreeNode> children = new ArrayList<TreeNode>(); - - TreeNode node; - - node = new TreeNode(); - node.setType(TreeNode.TYPE_FOLDER); - - node.setColumns(generateStringArray("Libraries")); - node.setChildren(generateLibraries(component.getLibraries())); - - children.add(node); - - componentNode.setChildren(children); - return componentNode; - } - - /** - * Generate libraries. - * - * @param libraries - * the libraries - * - * @return the list< tree node> - */ - private List<TreeNode> generateLibraries(Set<Library> libraries) { - List<TreeNode> res = new ArrayList<TreeNode>(); - for (Library library : libraries) { - TreeNode node = generateLibrary(library); - res.add(node); - } - return res; - } - - /** - * Generate library. - * - * @param library - * the library - * - * @return the tree node - */ - private TreeNode generateLibrary(Library library) { - TreeNode node = new TreeNode(); - node.setType(TreeNode.TYPE_FOLDER); - - List<Attachment> attachments = library.getMetaData().getAttachments(); - List<TreeNode> children = new ArrayList<TreeNode>(); - for (Attachment attachment : attachments) { - children.add(generateDownload(library, attachment)); - } - node.setChildren(children); - - node.setColumns(generateStringArray("Library", library.getMetaData() - .getName())); - return node; - } - - /** - * Generate download. - * - * @param explorationData - * the exploration data - * @param attachment - * the attachment - * - * @return the tree node - */ - private TreeNode generateDownload(LoggableElement explorationData, - Attachment attachment) { - TreeNode node = new TreeNode(); - node.setType(TreeNode.TYPE_DOCUMENT); - - String context = explorationData.getMetaData().getUuid() + "," - + explorationData.getMetaData().getVersion() + "," - + attachment.getUniqueId(); - - node.setColumns(generateStringArray(attachment.getContentType() - .getDescription(), attachment.getDataHash(), generateString( - attachment.getFileName(), "downloadFile", context))); - return node; - } - -} Modified: trunk/simexplorer-is/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/ElementPageDetail.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/ElementPageDetail.java 2008-02-15 10:15:39 UTC (rev 984) +++ trunk/simexplorer-is/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/ElementPageDetail.java 2008-02-15 10:18:01 UTC (rev 985) @@ -42,7 +42,7 @@ /** The element export. */ @InjectPage - private ElementExport elementExport; + private ElementDownload elementDownload; /** The element history. */ @InjectPage @@ -91,7 +91,7 @@ * @return the object */ public Object onExport(String context) { - return preparePage(elementExport, context); + return preparePage(elementDownload, context); } /** Copied: trunk/simexplorer-is/simexplorer-is-web/src/main/webapp/ElementDownload.tml (from rev 984, trunk/simexplorer-is/simexplorer-is-web/src/main/webapp/ElementExport.tml) =================================================================== --- trunk/simexplorer-is/simexplorer-is-web/src/main/webapp/ElementDownload.tml (rev 0) +++ trunk/simexplorer-is/simexplorer-is-web/src/main/webapp/ElementDownload.tml 2008-02-15 10:18:01 UTC (rev 985) @@ -0,0 +1,19 @@ +<t:layout xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd" + title="${windowtitle}"> + + <p><t:actionlink t:id="downloadXML">${message:simexplorer.ui.web.export.downloadxml}</t:actionlink> + </p> + <p><t:actionlink t:id="downloadFull">${message:simexplorer.ui.web.export.downloadfull}</t:actionlink> + </p> + + <p> + <h2>${message:simexplorer.ui.web.export.attachments}</h2> + </p> + <p> + <table t:type="cl/TreeGrid" source="nodes" columnHeaders="headers"> + </table> + </p> + + <p><t:back label="${message:simexplorer.ui.web.back}" /></p> + +</t:layout> Deleted: trunk/simexplorer-is/simexplorer-is-web/src/main/webapp/ElementExport.tml =================================================================== --- trunk/simexplorer-is/simexplorer-is-web/src/main/webapp/ElementExport.tml 2008-02-15 10:15:39 UTC (rev 984) +++ trunk/simexplorer-is/simexplorer-is-web/src/main/webapp/ElementExport.tml 2008-02-15 10:18:01 UTC (rev 985) @@ -1,19 +0,0 @@ -<t:layout xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd" - title="${windowtitle}"> - - <p><t:actionlink t:id="downloadXML">${message:simexplorer.ui.web.export.downloadxml}</t:actionlink> - </p> - <p><t:actionlink t:id="downloadFull">${message:simexplorer.ui.web.export.downloadfull}</t:actionlink> - </p> - - <p> - <h2>${message:simexplorer.ui.web.export.attachments}</h2> - </p> - <p> - <table t:type="cl/TreeGrid" source="nodes" columnHeaders="headers"> - </table> - </p> - - <p><t:back label="${message:simexplorer.ui.web.back}" /></p> - -</t:layout>