@Override public String getName() { return getElementContent(NAME_ELEMENT_NAME, element); }
@Override public String getDescription() { return DomHelper.getElementContent("DatabaseDescription", dbMeta); }
public String getName() { return DomHelper.getElementContent("DatabaseName", dbMeta); }
@Override public boolean getExpires() { String content = DomHelper.getElementContent(DomHelper.EXPIRES_ELEMENT_NAME, element); return content != null && content.equalsIgnoreCase("true"); }
@Override public boolean isRecycleBinEnabled() { return Boolean.valueOf(getElementContent(RECYCLE_BIN_ENABLED_ELEMENT_NAME, dbMeta)); }
@Override public Date getLastModificationTime() { try { return DomHelper.dateFormatter.parse(DomHelper.getElementContent(DomHelper.LAST_MODIFICATION_TIME_ELEMENT_NAME, element)); } catch (ParseException e) { return new Date(0); } }
@Override public Date getExpiryTime() { try { return DomHelper.dateFormatter.parse(DomHelper.getElementContent(DomHelper.EXPIRY_TIME_ELEMENT_NAME, element)); } catch (ParseException e) { return new Date(0); } }
@Override public Date getCreationTime() { try { return DomHelper.dateFormatter.parse(DomHelper.getElementContent(DomHelper.CREATION_TIME_ELEMENT_NAME, element)); } catch (ParseException e) { return new Date(0); } }
@Override public Date getLastAccessTime() { try { return DomHelper.dateFormatter.parse(DomHelper.getElementContent(DomHelper.LAST_ACCESS_TIME_ELEMENT_NAME, element)); } catch (ParseException e) { return new Date(0); } }
@Override public List<String> getPropertyNames() { ArrayList<String> result = new ArrayList<>(); List<Element> list = DomHelper.getElements("String", element); for (Element listElement: list) { result.add(DomHelper.getElementContent("Key", listElement)); } return result; }
@Override public List<String> getBinaryPropertyNames() { ArrayList<String> result = new ArrayList<>(); List<Element> list = DomHelper.getElements("Binary", element); for (Element listElement: list) { result.add(DomHelper.getElementContent("Key", listElement)); } return result; }
@Override public String getProperty(String name) { Element property = DomHelper.getElement(String.format(DomHelper.PROPERTY_ELEMENT_FORMAT, name), element, false); if (property == null) { return null; } return DomHelper.getElementContent(DomHelper.VALUE_ELEMENT_NAME, property); }
@Override public UUID getUuid() { String encodedUuid = getElementContent(UUID_ELEMENT_NAME, element); return Helpers.uuidFromBase64(encodedUuid); }
@Override public UUID getUuid() { return Helpers.uuidFromBase64(DomHelper.getElementContent(DomHelper.UUID_ELEMENT_NAME, element)); }
@Override public boolean isRecycleBin() { String UUIDcontent = getElementContent(RECYCLE_BIN_UUID_ELEMENT_NAME, database.dbMeta); if (UUIDcontent != null){ UUID uuid = Helpers.uuidFromBase64(UUIDcontent); return uuid.equals(this.getUuid()); } return false; }
@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); } }
for (int i = 0; i < protectedContent.getLength(); i++){ Element element = ((Element) protectedContent.item(i)); String decrypted = DomHelper.getElementContent(".", element); if (decrypted == null) { decrypted = "";
@Override public DomGroupWrapper getRecycleBin() { String UUIDcontent = getElementContent(RECYCLE_BIN_UUID_ELEMENT_NAME, dbMeta); if (UUIDcontent != null){ final UUID uuid = Helpers.uuidFromBase64(UUIDcontent); if (uuid.getLeastSignificantBits() != 0 && uuid.getMostSignificantBits() != 0) { for (DomGroupWrapper g: getRootGroup().getGroups()) { if (g.getUuid().equals(uuid)) { return g; } } // the recycle bin seems to have been lost, better create another one } // uuid was 0 i.e. there isn't one } // no recycle bin group set up if (!isRecycleBinEnabled()) { return null; } DomGroupWrapper g = newGroup(); g.setName("Recycle Bin"); getRootGroup().addGroup(g); ensureElementContent(RECYCLE_BIN_UUID_ELEMENT_NAME, dbMeta, base64FromUuid(g.getUuid())); touchElement(RECYCLE_BIN_CHANGED_ELEMENT_NAME, dbMeta); return g; }