/** * All items for given list of uploads. Respect startItem and maxItem * * @param uploads * @return */ private List<Item> itemsByUploads(List<DataUpload> uploads) { if (resultItemList != null) return resultItemList; resultItemList = new ArrayList<Item>(); long currentStart = 0l; int itemsRead = 0; boolean transform = false; for (DataUpload du : uploads) { transform = false; if (du.getItemXpath() != null) { if (DB.getTransformationDAO().findByUpload(du).size() > 0) { if (DB.getTransformationDAO().findByUpload(du).get(0).getStatusCode() == 0) transform = true; } if (currentStart + du.getItemXpath().getCount() < startItem) { currentStart += du.getItemXpath().getCount(); continue; } List<XMLNode> l = du.getItemXpath().getNodes(startItem + itemsRead - currentStart, maxItems); for (XMLNode x : l) { log.debug("get tree .. "); XMLNode tree = DB.getXMLNodeDAO().getDOMTree(x); boolean trunc = false; if (tree.getSize() > 20000) { trunc = true; } log.debug(" . done"); if (itemsRead < maxItems) { List<? extends XMLNode> labelList = tree.getChildrenByXpath(du.getItemLabelXpath()); if (labelList.size() != 1) log.warn("Label not unique"); XMLNode label; Item i = new Item(); if (labelList.size() == 1) { label = labelList.get(0); i.name = label.getContent(); } else if (labelList.size() == 0) { i.name = "<no label>"; } else { i.name = "<" + labelList.size() + " labels>"; } i.truncated = trunc; i.uploadId = du.getDbID(); i.direct = du.isDirect(); i.nodeId = x.getNodeId(); i.transformed = transform; if (du.getUploadDate() == null) i.itemdate = ""; else i.itemdate = new SimpleDateFormat("dd/MM/yyyy HH:mm").format(du.getUploadDate()); i.importname = du.getOriginalFilename(); /*if( du.getOriginalFilename().length()<15 ) i.importname=du.getOriginalFilename(); else i.importname=".."+du.getOriginalFilename() .substring(du.getOriginalFilename().length()-12); */ resultItemList.add(i); itemsRead += 1; log.debug("adding item:" + itemsRead + " with date:" + i.getDate()); } } if (itemsRead == maxItems) break; currentStart += du.getItemXpath().getCount(); } } endItem = startItem + resultItemList.size(); return resultItemList; }