@Override public void setExpires(boolean expires) { DomHelper.setElementContent(DomHelper.EXPIRES_ELEMENT_NAME, element, expires ? "True" : "False"); }
@Override public void enableRecycleBin(boolean enable) { setElementContent(RECYCLE_BIN_ENABLED_ELEMENT_NAME, dbMeta, ((Boolean) enable).toString()); }
@Override public void setExpiryTime(Date expiryTime) throws IllegalArgumentException { if (expiryTime == null) throw new IllegalArgumentException("expiryTime may not be null"); String formatted = DomHelper.dateFormatter.format(expiryTime); DomHelper.setElementContent(DomHelper.EXPIRY_TIME_ELEMENT_NAME, element, formatted); }
@Override protected void touch() { DomHelper.setElementContent(DomHelper.LAST_MODIFICATION_TIME_ELEMENT_NAME, element, DomHelper.dateFormatter.format(new Date())); }
@NotNull static Element touchElement(String elementPath, Element parentElement) { return setElementContent(elementPath, parentElement, dateFormatter.format(new Date())); }
@Override public void setName(String name) { setElementContent(NAME_ELEMENT_NAME, element, name); database.setDirty(true); }
@Override public void setIcon(DomIconWrapper icon) { setElementContent(ICON_ELEMENT_NAME, element, String.valueOf(icon.getIndex())); database.setDirty(true); }
@Override public void setProperty(String name, String value) { Element property = DomHelper.getElement(String.format(DomHelper.PROPERTY_ELEMENT_FORMAT, name), element, false); if (property == null) { property = DomHelper.newElement("String", element); DomHelper.setElementContent("Key", property, name); } DomHelper.setElementContent(DomHelper.VALUE_ELEMENT_NAME, property, value); DomHelper.touchElement(DomHelper.LAST_MODIFICATION_TIME_ELEMENT_NAME, element); database.setDirty(true); }
@Override public SerializableDatabase load(InputStream inputStream) throws IOException { DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); try { DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); doc = dBuilder.parse(inputStream); // we need to decrypt all protected fields // TODO we assume they are all strings, which is wrong NodeList protectedContent = (NodeList) DomHelper.xpath.evaluate("//*[@Protected='True']", doc, XPathConstants.NODESET); for (int i = 0; i < protectedContent.getLength(); i++){ Element element = ((Element) protectedContent.item(i)); String base64 = DomHelper.getElementContent(".", element); // Android compatibility byte[] encrypted = Base64.decodeBase64(base64.getBytes()); String decrypted = new String(encryption.decrypt(encrypted), "UTF-8"); DomHelper.setElementContent(".", element, decrypted); element.removeAttribute("Protected"); } return this; } catch (ParserConfigurationException e) { throw new IllegalStateException("Instantiating Document Builder", e); } catch (SAXException e) { throw new IllegalStateException("Parsing exception", e); } catch (XPathExpressionException e) { throw new IllegalStateException("XPath Exception", e); } }
public void setName(String name) { DomHelper.setElementContent("DatabaseName", dbMeta, name); DomHelper.touchElement("DatabaseNameChanged", dbMeta); setDirty(true); }
@Override public void setDescription(String description) { DomHelper.setElementContent("DatabaseDescription", dbMeta, description); DomHelper.touchElement("DatabaseDescriptionChanged", dbMeta); setDirty(true); }
private void ensureProperty(String name){ Element property = DomHelper.getElement(String.format(DomHelper.PROPERTY_ELEMENT_FORMAT, name), element, false); if (property == null) { Element container = DomHelper.newElement("String", element); DomHelper.setElementContent("Key", container, name); DomHelper.getElement("Value", container, true); } }
DomHelper.setElementContent(".", element, base64);
@Override public void setBinaryProperty(String name, byte[] value) { Element property = DomHelper.getElement(String.format(DomHelper.BINARY_PROPERTY_ELEMENT_FORMAT, name), element, false); if (property == null) { property = DomHelper.newElement("Binary", element); DomHelper.setElementContent("Key", property, name); } DomHelper.setBinaryElementContent(DomHelper.VALUE_ELEMENT_NAME, property, value); DomHelper.touchElement(DomHelper.LAST_MODIFICATION_TIME_ELEMENT_NAME, element); database.setDirty(true); }