Hi, 2014-12-13 12:23 GMT+01:00 Matthias Wegner <[email protected]>:
Hi,
i want to create a custom excel-file. For that i want to use a uploaded template and the give it some values. I write that to the attachment storage and want to hcange the metainfo. The file creation with the template works fine, but the metatdata-change is not shown in xwiki. How can i do that? My code is so far
It is not at all recommended to manipulate directly files from attachments file storage ... [1]. I think you'd better use xwiki regular apis to do so (on "doc") ... [2] By retrieving the inner attachment (Attachment#getAttachment, as an XWikiAttachment), you should be able to update metadata if needed. J. [1] - http://platform.xwiki.org/xwiki/bin/view/AdminGuide/Attachments#HDirectorySt... [2] - http://platform.xwiki.org/xwiki/bin/view/SRD/Navigation
{{groovy}} import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.Calendar; import org.jdom2.Document; import org.jdom2.Element; import org.jdom2.JDOMException; import org.jdom2.input.SAXBuilder; import org.jdom2.output.Format; import org.jdom2.output.XMLOutputter; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.POIFSFileSystem;
ArrayList<String> header = new ArrayList<String>(); ArrayList<Hashtable<String, String>> table = new ArrayList<Hashtable<String, String>>(); String sheetName = "Data"; String fileName = "empty.xls"; String templateName = "template.xls"; String templateSpace = "Main"; String pageName = "ExcelTest"; String xwikiPath = "/opt/xwiki/openskies_v6.3"; String templatePath =
xwikiPath+"/data/storage/xwiki/"+templateSpace+"/"+pageName+"/~this/attachments/"+templateName+"/"+templateName; String filenamePath =
xwikiPath+"/data/storage/xwiki/"+templateSpace+"/"+pageName+"/~this/attachments/"+fileName+"/"+fileName;
header.add("X") header.add("Y") header.add("Z")
Hashtable<String, String> tableRow = new Hashtable<String, String>(); tableRow.put("X", "Q"); tableRow.put("Y", "W"); tableRow.put("Z", "R"); table.add(tableRow);
tableRow = new Hashtable<String, String>(); tableRow.put("X", "E"); tableRow.put("Y", "F"); tableRow.put("Z", "G"); table.add(tableRow);
public String convert(Long value) { return value.toString(); }
try { HSSFWorkbook wb = null; HSSFSheet sheet = null;
File templateFile = new File(templatePath); boolean templateExists = templateFile.exists(); if (templateExists) { POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(templateFile)); wb = new HSSFWorkbook(fs); sheet = wb.getSheetAt(0); } else { wb = new HSSFWorkbook(); sheet = wb.createSheet(sheetName); }
HSSFRow headerRow = null; if (templateExists) { headerRow = sheet.getRow(0); } else { headerRow = sheet.createRow(0); } for (short i = 0; i < header.size(); i++) { HSSFCell cell = null; if (templateExists) { cell = headerRow.getCell(i); } else { cell = headerRow.createCell(i); } cell.setCellValue(header.get(i)); }
for (int ii = 0; ii < table.size(); ii++) { HSSFRow row = null; if (templateExists) { row = sheet.getRow(ii+1); } else { row = sheet.createRow(ii+1); } for (short i = 0; i < header.size(); i++) { HSSFCell cell = null; if (templateExists) { cell = row.getCell(i); } else { cell = row.createCell(i); } String s = table.get(ii).get(header.get(i)); cell.setCellValue(s); } }
File excelOut = new File(filenamePath); FileOutputStream fileOut = new FileOutputStream(filenamePath); wb.write(fileOut); fileOut.close();
File meta = new
File(xwikiPath+"/data/storage/xwiki/"+templateSpace+"/"+pageName+"/~this/attachments/" + fileName + "/~METADATA.xml"); Document metadata = new SAXBuilder().build(meta);
Element root = metadata.getRootElement(); for (Element child : root.getChildren()) { if (child.getChildText("filename").equals(fileName)) { if (child.getChildText("version").equals("1.1")) {
child.getChild("filesize").setText(convert(excelOut.length()));
child.getChild("date").setText(convert(Calendar.getInstance().getTime().getTime())); } } } XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat()); outputter.output(metadata, new FileOutputStream(meta));
} catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (JDOMException e) { e.printStackTrace(); }
{{/groovy}}
[[Download>>attach:empty.xls]]
-- View this message in context: http://xwiki.475771.n2.nabble.com/Changing-Metdata-of-Attachment-tp7593478.h... Sent from the XWiki- Users mailing list archive at Nabble.com. _______________________________________________ users mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/users