Merge branch 'master' of https://git.bukova.info/repos/git/isspst
						commit
						5079d6d55a
					
				@ -0,0 +1,186 @@
 | 
				
			|||||||
 | 
					package info.bukova.isspst.ui.signeddocs;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import info.bukova.isspst.DateTimeUtils;
 | 
				
			||||||
 | 
					import info.bukova.isspst.data.SignedDocument;
 | 
				
			||||||
 | 
					import info.bukova.isspst.data.SignedDocumentItem;
 | 
				
			||||||
 | 
					import info.bukova.isspst.storage.ReportFileStorage;
 | 
				
			||||||
 | 
					import org.apache.commons.lang3.StringUtils;
 | 
				
			||||||
 | 
					import org.slf4j.Logger;
 | 
				
			||||||
 | 
					import org.slf4j.LoggerFactory;
 | 
				
			||||||
 | 
					import org.springframework.security.access.AccessDeniedException;
 | 
				
			||||||
 | 
					import org.zkoss.bind.annotation.Command;
 | 
				
			||||||
 | 
					import org.zkoss.bind.annotation.Init;
 | 
				
			||||||
 | 
					import org.zkoss.zk.ui.select.annotation.WireVariable;
 | 
				
			||||||
 | 
					import org.zkoss.zul.DefaultTreeModel;
 | 
				
			||||||
 | 
					import org.zkoss.zul.Filedownload;
 | 
				
			||||||
 | 
					import org.zkoss.zul.TreeModel;
 | 
				
			||||||
 | 
					import org.zkoss.zul.TreeNode;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.io.*;
 | 
				
			||||||
 | 
					import java.text.Normalizer;
 | 
				
			||||||
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					import java.util.zip.ZipEntry;
 | 
				
			||||||
 | 
					import java.util.zip.ZipOutputStream;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class SignedDocsTreeList extends SignedDocsList {
 | 
				
			||||||
 | 
					    @SuppressWarnings("unused")
 | 
				
			||||||
 | 
					    private final static Logger log = LoggerFactory.getLogger(SignedDocsTreeList.class.getName());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @WireVariable
 | 
				
			||||||
 | 
					    private ReportFileStorage signedDocStorage;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public SignedDocsTreeNode getSelectedNodeItem() {
 | 
				
			||||||
 | 
					        return selectedNodeItem;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setSelectedNodeItem(SignedDocsTreeNode selectedNodeItem) {
 | 
				
			||||||
 | 
					        this.selectedNodeItem = selectedNodeItem;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private SignedDocsTreeNode selectedNodeItem;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public SignedDocsTreeList() {
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Init(superclass = true)
 | 
				
			||||||
 | 
					    public void signedDocsTreeListInit() {
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public TreeModel<TreeNode<SignedDocumentItem>> getTreeBackup() {
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            return signedDocumentService.getTree();
 | 
				
			||||||
 | 
					        } catch (AccessDeniedException e) {
 | 
				
			||||||
 | 
					            // BindUtils.postGlobalCommand(null, null, "disableCentre", null);
 | 
				
			||||||
 | 
					            // e.printStackTrace();
 | 
				
			||||||
 | 
					            return new DefaultTreeModel<SignedDocumentItem>(null);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public static void addToZipFile(String filePath, String zipPath, ZipOutputStream zos) throws FileNotFoundException, IOException {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //System.out.println("Writing '" + filePath + "' to zip file");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        File file = new File(filePath);
 | 
				
			||||||
 | 
					        FileInputStream fis = new FileInputStream(file);
 | 
				
			||||||
 | 
					        ZipEntry zipEntry = new ZipEntry(zipPath);
 | 
				
			||||||
 | 
					        zos.putNextEntry(zipEntry);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        byte[] bytes = new byte[1024];
 | 
				
			||||||
 | 
					        int length;
 | 
				
			||||||
 | 
					        while ((length = fis.read(bytes)) >= 0) {
 | 
				
			||||||
 | 
					            zos.write(bytes, 0, length);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        zos.closeEntry();
 | 
				
			||||||
 | 
					        fis.close();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public static String getNormalizedPath(String path) {
 | 
				
			||||||
 | 
					        String result = path.replaceAll("[ ]", "_");
 | 
				
			||||||
 | 
					        result = Normalizer.normalize(result, Normalizer.Form.NFD);
 | 
				
			||||||
 | 
					        result = result.replaceAll("[^-a-zA-Z0-9_./]", "");
 | 
				
			||||||
 | 
					        return result;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public static String getCheckedString(String str, int maxLength) {
 | 
				
			||||||
 | 
					        String result = "";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (str != null) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            int len = str.length();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (len > 0) {
 | 
				
			||||||
 | 
					                result = str.substring(0, len > maxLength ? maxLength - 1 : len);
 | 
				
			||||||
 | 
					                result += "-";
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return result;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public static String getCheckedString(String str) {
 | 
				
			||||||
 | 
					        return SignedDocsTreeList.getCheckedString(str, 50);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Command
 | 
				
			||||||
 | 
					    public void onCreateZipArchive() {
 | 
				
			||||||
 | 
					        if (this.selectedNodeItem == null) {
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        List<SignedDocsTreeNode> leafs = this.selectedNodeItem.getLeafs();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (leafs.size() > 0) {
 | 
				
			||||||
 | 
					            int deep = this.selectedNodeItem.getDeep();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            try {
 | 
				
			||||||
 | 
					                ByteArrayOutputStream bos = new ByteArrayOutputStream();
 | 
				
			||||||
 | 
					                ZipOutputStream zos = new ZipOutputStream(bos);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                for (SignedDocsTreeNode node : leafs) {
 | 
				
			||||||
 | 
					                    SignedDocumentItem item = node.getData();
 | 
				
			||||||
 | 
					                    String pdfFileName = item.getFileName();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    SignedDocument doc = item.getSignedDocument();
 | 
				
			||||||
 | 
					                    String zipDirs = "";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    String zipFileName = "";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    if (deep == 3 || deep == 4) {
 | 
				
			||||||
 | 
					                        zipFileName += SignedDocsTreeList.getCheckedString(DateTimeUtils.getFormatedDirDate(doc.getSignDate()));
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    zipFileName += SignedDocsTreeList.getCheckedString(item.getReportName());
 | 
				
			||||||
 | 
					                    zipFileName += SignedDocsTreeList.getCheckedString(doc.getNumser());
 | 
				
			||||||
 | 
					                    zipFileName += SignedDocsTreeList.getCheckedString(doc.getDescription());
 | 
				
			||||||
 | 
					                    zipFileName += SignedDocsTreeList.getCheckedString(pdfFileName);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    if (deep == 1 || deep == 2 || deep == 3) {
 | 
				
			||||||
 | 
					                        zipDirs += doc.getAgendaName();
 | 
				
			||||||
 | 
					                        zipDirs += "/";
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    if (deep == 1) {
 | 
				
			||||||
 | 
					                        zipDirs += DateTimeUtils.getFormatedYear(doc.getSignDate());
 | 
				
			||||||
 | 
					                        zipDirs += "/";
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    if (deep == 1) {
 | 
				
			||||||
 | 
					                        zipDirs += DateTimeUtils.getFormatedDirDateDDMM(doc.getSignDate());
 | 
				
			||||||
 | 
					                        zipDirs += "/";
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    if (deep == 2) {
 | 
				
			||||||
 | 
					                        zipDirs += DateTimeUtils.getFormatedDirDate(doc.getSignDate());
 | 
				
			||||||
 | 
					                        zipDirs += "/";
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    String rootPath = signedDocStorage.getRootPath();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    String diskPath = rootPath + "/" + pdfFileName;
 | 
				
			||||||
 | 
					                    String zipPath = zipDirs + zipFileName;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    zipPath = SignedDocsTreeList.getNormalizedPath(zipPath);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    if (new File(diskPath).isFile()) {
 | 
				
			||||||
 | 
					                        SignedDocsTreeList.addToZipFile(diskPath, zipPath, zos);
 | 
				
			||||||
 | 
					                    } else {
 | 
				
			||||||
 | 
					                        log.warn("Missing file '" + diskPath + "' !!!");
 | 
				
			||||||
 | 
					                        log.warn(doc.getAgendaName());
 | 
				
			||||||
 | 
					                        log.warn(doc.getDescription());
 | 
				
			||||||
 | 
					                        log.warn(item.getReportName());
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                zos.close();
 | 
				
			||||||
 | 
					                bos.close();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                Filedownload.save(bos.toByteArray(), "application/zip", "temp" + Long.toString(System.nanoTime()) + ".zip");
 | 
				
			||||||
 | 
					            } catch (FileNotFoundException e) {
 | 
				
			||||||
 | 
					                e.printStackTrace();
 | 
				
			||||||
 | 
					            } catch (IOException e) {
 | 
				
			||||||
 | 
					                e.printStackTrace();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,79 @@
 | 
				
			|||||||
 | 
					package info.bukova.isspst.ui.signeddocs;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import info.bukova.isspst.data.SignedDocumentItem;
 | 
				
			||||||
 | 
					import org.zkoss.zul.DefaultTreeNode;
 | 
				
			||||||
 | 
					import org.zkoss.zul.TreeNode;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.Collection;
 | 
				
			||||||
 | 
					import java.util.LinkedList;
 | 
				
			||||||
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class SignedDocsTreeNode extends DefaultTreeNode<SignedDocumentItem> {
 | 
				
			||||||
 | 
					    public SignedDocsTreeNode(SignedDocumentItem data) {
 | 
				
			||||||
 | 
					        super(data);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public SignedDocsTreeNode(SignedDocumentItem data, Collection<? extends TreeNode<SignedDocumentItem>> children) {
 | 
				
			||||||
 | 
					        super(data, children);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public SignedDocsTreeNode getParentNode() {
 | 
				
			||||||
 | 
					        return (SignedDocsTreeNode) this.getParent();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public int getDeep() {
 | 
				
			||||||
 | 
					        int iDeep = 0;
 | 
				
			||||||
 | 
					        SignedDocsTreeNode node = this.getParentNode();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        while (node != null) {
 | 
				
			||||||
 | 
					            node = node.getParentNode();
 | 
				
			||||||
 | 
					            iDeep++;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return iDeep;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public List<SignedDocsTreeNode> getLeafs() {
 | 
				
			||||||
 | 
					        List<SignedDocsTreeNode> list = new LinkedList<SignedDocsTreeNode>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!this.isLeaf()) {
 | 
				
			||||||
 | 
					            List<TreeNode<SignedDocumentItem>> children = this.getChildren();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            for (TreeNode<SignedDocumentItem> item : children) {
 | 
				
			||||||
 | 
					                SignedDocsTreeNode node = (SignedDocsTreeNode) item;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if (node != null) {
 | 
				
			||||||
 | 
					                    if (node.isLeaf()) {
 | 
				
			||||||
 | 
					                        list.add(node);
 | 
				
			||||||
 | 
					                    } else {
 | 
				
			||||||
 | 
					                        list.addAll(node.getLeafs());
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return list;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public int getLeafsCount() {
 | 
				
			||||||
 | 
					        int count = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!this.isLeaf()) {
 | 
				
			||||||
 | 
					            List<TreeNode<SignedDocumentItem>> children = this.getChildren();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            for (TreeNode<SignedDocumentItem> item : children) {
 | 
				
			||||||
 | 
					                SignedDocsTreeNode node = (SignedDocsTreeNode) item;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if (node != null) {
 | 
				
			||||||
 | 
					                    if (node.isLeaf()) {
 | 
				
			||||||
 | 
					                        count += 1;
 | 
				
			||||||
 | 
					                    } else {
 | 
				
			||||||
 | 
					                        count += node.getLeafsCount();
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return count;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,41 @@
 | 
				
			|||||||
 | 
					package info.bukova.isspst.ui.signeddocs;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import info.bukova.isspst.DateTimeUtils;
 | 
				
			||||||
 | 
					import info.bukova.isspst.StringUtils;
 | 
				
			||||||
 | 
					import info.bukova.isspst.data.SignedDocument;
 | 
				
			||||||
 | 
					import info.bukova.isspst.data.SignedDocumentItem;
 | 
				
			||||||
 | 
					import org.zkoss.zul.*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class SignedDocsTreeRenderer implements TreeitemRenderer<SignedDocsTreeNode> {
 | 
				
			||||||
 | 
					    public void render(Treeitem item, SignedDocsTreeNode data, int index) throws Exception {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        int deep = data.getDeep();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        boolean node1 = (deep == 1);//data.getParent().getParent() == null;
 | 
				
			||||||
 | 
					        boolean node3 = (deep == 3);//data.isLeaf();
 | 
				
			||||||
 | 
					        boolean node2 = (deep == 2);//!node1 && !node3;
 | 
				
			||||||
 | 
					        boolean node4 = (deep == 4);//!node1 && !node3;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        SignedDocumentItem signedDocumentItem = data.getData();
 | 
				
			||||||
 | 
					        SignedDocument signedDocument = signedDocumentItem.getSignedDocument();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Treerow tr = new Treerow();
 | 
				
			||||||
 | 
					        tr.setContext("popupMenu");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        item.appendChild(tr);
 | 
				
			||||||
 | 
					        tr.appendChild(new Treecell(node1 ? signedDocument.getAgendaName() : ""));
 | 
				
			||||||
 | 
					        tr.appendChild(new Treecell(node2 ? DateTimeUtils.getFormatedYear(signedDocument.getSignDate()) : ""));
 | 
				
			||||||
 | 
					        tr.appendChild(new Treecell(node3 ? DateTimeUtils.getFormatedDate(signedDocument.getSignDate()) : ""));
 | 
				
			||||||
 | 
					        tr.appendChild(new Treecell(node4 ? signedDocument.getNumser() : ""));
 | 
				
			||||||
 | 
					        tr.appendChild(new Treecell(node4 ? signedDocument.getDescription() : ""));
 | 
				
			||||||
 | 
					        tr.appendChild(new Treecell(node4 ? signedDocumentItem.getReportName() : data.getLeafsCount() + " souborů"));
 | 
				
			||||||
 | 
					//        tr.appendChild(new Treecell(node3 ? signedDocumentItem.getFileName() : ""));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        switch (deep) {
 | 
				
			||||||
 | 
					            case 1 : tr.setSclass("signed-doc-agenda");   break;
 | 
				
			||||||
 | 
					            case 2 : tr.setSclass("signed-doc-year");     break;
 | 
				
			||||||
 | 
					            case 3 : tr.setSclass("signed-doc-date");     break;
 | 
				
			||||||
 | 
					            case 4 : tr.setSclass("");                    break;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
											
												Binary file not shown.
											
										
									
								| 
		 After Width: | Height: | Size: 950 B  | 
											
												Binary file not shown.
											
										
									
								| 
		 After Width: | Height: | Size: 2.5 KiB  | 
@ -0,0 +1,12 @@
 | 
				
			|||||||
 | 
					<zk>
 | 
				
			||||||
 | 
						<?variable-resolver class="org.zkoss.zkplus.spring.DelegatingVariableResolver"?>
 | 
				
			||||||
 | 
						<window
 | 
				
			||||||
 | 
							vflex="1"
 | 
				
			||||||
 | 
							border="none"
 | 
				
			||||||
 | 
							apply="org.zkoss.bind.BindComposer"
 | 
				
			||||||
 | 
							viewModel="@id('vm') @init('info.bukova.isspst.ui.signeddocs.SignedDocsTreeList')">
 | 
				
			||||||
 | 
							<include
 | 
				
			||||||
 | 
								vflex="1"
 | 
				
			||||||
 | 
								src="/lists/signeddocs/treeBackup.zul" />
 | 
				
			||||||
 | 
						</window>
 | 
				
			||||||
 | 
					</zk>
 | 
				
			||||||
@ -0,0 +1,25 @@
 | 
				
			|||||||
 | 
					<hlayout vflex="1" hflex="max">
 | 
				
			||||||
 | 
					    <tree id="tree"
 | 
				
			||||||
 | 
					          vflex="1" hflex="max"
 | 
				
			||||||
 | 
					          model="@load(vm.treeBackup)"
 | 
				
			||||||
 | 
					          selectedItem="@bind(vm.selectedNodeItem)"
 | 
				
			||||||
 | 
					          itemRenderer="info.bukova.isspst.ui.signeddocs.SignedDocsTreeRenderer"
 | 
				
			||||||
 | 
					          sclass="addScrollbar">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <treecols>
 | 
				
			||||||
 | 
					            <treecol hflex="7" label="${labels.AgendaName}"/>
 | 
				
			||||||
 | 
					            <treecol hflex="4" label="${labels.SigningYear}"/>
 | 
				
			||||||
 | 
					            <treecol hflex="5" label="${labels.SigningDate}"/>
 | 
				
			||||||
 | 
					            <treecol hflex="5" label="${labels.Number}"/>
 | 
				
			||||||
 | 
					            <treecol hflex="15" label="${labels.OrderFormDescription}"/>
 | 
				
			||||||
 | 
					            <treecol hflex="6" label="${labels.ReportReport}"/>
 | 
				
			||||||
 | 
					        </treecols>
 | 
				
			||||||
 | 
					    </tree>
 | 
				
			||||||
 | 
					    <menupopup id="popupMenu">
 | 
				
			||||||
 | 
					        <menuitem
 | 
				
			||||||
 | 
					                image="/img/zip-032.png"
 | 
				
			||||||
 | 
					                label="${labels.DownloadZipArchive}..."
 | 
				
			||||||
 | 
					                onClick="@command('onCreateZipArchive')"
 | 
				
			||||||
 | 
					                />
 | 
				
			||||||
 | 
					    </menupopup>
 | 
				
			||||||
 | 
					</hlayout>
 | 
				
			||||||
					Loading…
					
					
				
		Reference in New Issue