@Override public String put( String itemId, InputStream dataStream, long dataSize, HashMap<String, String> params, HashMap<String, String> metas, XMLConfig extra) { if (coll == null) return null; if (maxDocSize > 0 && dataSize > 0 && dataSize > maxDocSize) return null; BasicDBObject docsearch = new BasicDBObject(); docsearch.put("item_id", itemId); BasicDBObject doc = new BasicDBObject(); doc.put("item_id", itemId); doc.put("item_extra", extra.asXml()); Document xml_params = DocumentFactory.getInstance().createDocument("utf-8"); xml_params.setXMLEncoding("utf-8"); Element xml_params_items = xml_params.addElement("params"); for (Map.Entry<String, String> item : params.entrySet()) { String key = item.getKey(); if (item.getValue() != null) xml_params_items.addElement(key).addText(item.getValue()); } doc.put("item_params", xml_params.asXML()); Document xml_metas = DocumentFactory.getInstance().createDocument("utf-8"); xml_metas.setXMLEncoding("utf-8"); Element xml_metas_items = xml_metas.addElement("metas"); for (Map.Entry<String, String> item : metas.entrySet()) { String key = item.getKey(); if (item.getKey().startsWith("meta_")) { key = key.replace(':', '_').replace('-', '_').replace('.', '_').replace('/', '_'); } if (item.getValue() != null) xml_metas_items.addElement(key).addText(item.getValue()); } doc.put("item_metas", xml_metas.asXML()); if (dataStream != null) { String contentBase64 = ""; try { // dataStream.reset(); contentBase64 = Base64.inputStreamToStringBase64(dataStream); doc.put("content_base64", contentBase64); } catch (IOException e) { System.out.println(itemId); e.printStackTrace(); } } remove(itemId); return coll.add(doc); }
public static DocumentCacheItem doc2DocumentCacheItem(BasicDBObject doc) { try { String itemId = doc.get("item_id").toString(); XMLConfig extra = null; if (doc.get("item_extra") != null) { extra = new XMLConfig(); extra.loadString(doc.get("item_extra").toString()); } HashMap<String, String> params = new HashMap<String, String>(); HashMap<String, String> metas = new HashMap<String, String>(); Document document = null; SAXReader reader = new SAXReader(); reader.setValidation(false); try { document = reader.read(new StringReader(doc.get("item_params").toString())); Element elmParams = (Element) document.selectSingleNode("params"); if (elmParams != null) { List<Element> items = elmParams.elements(); Iterator<Element> iterItems = items.iterator(); while (iterItems.hasNext()) { Element item = (Element) iterItems.next(); params.put(item.getName(), item.getText()); } } } catch (DocumentException de) { IOException ioe = new IOException(); ioe.initCause(de); throw ioe; } reader = new SAXReader(); reader.setValidation(false); try { document = reader.read(new StringReader(doc.get("item_metas").toString())); Element elmMetas = (Element) document.selectSingleNode("metas"); if (elmMetas != null) { List<Element> items = elmMetas.elements(); Iterator<Element> iterItems = items.iterator(); while (iterItems.hasNext()) { Element item = (Element) iterItems.next(); metas.put( item.getName() .replace(':', '_') .replace('-', '_') .replace('.', '_') .replace('/', '_'), item.getText()); } } } catch (DocumentException de) { IOException ioe = new IOException(); ioe.initCause(de); throw ioe; } InputStream inputSource = new ByteArrayInputStream(doc.get("content_base64").toString().getBytes()); InputStream streamData = new Base64.InputStream(inputSource, Base64.DECODE); return new DocumentCacheItem(itemId, streamData, params, metas, extra); } catch (IOException e) { e.printStackTrace(); } return null; }