/* * * Copyright 2013 Entando S.r.l. (http://www.entando.com) All rights reserved. * * This file is part of Entando software. * Entando is a free software; * You can redistribute it and/or modify it * under the terms of the GNU General Public License (GPL) as published by the Free Software Foundation; version 2. * * See the file License for the specific language governing permissions * and limitations under the License * * * * Copyright 2013 Entando S.r.l. (http://www.entando.com) All rights reserved. * */ package com.agiletec.plugins.jpaddressbook.aps.system.services.vcard.parse; import java.io.ByteArrayInputStream; import java.util.ArrayList; import java.util.List; import org.jdom.Document; import org.jdom.Element; import org.jdom.input.SAXBuilder; import org.jdom.output.Format; import org.jdom.output.XMLOutputter; import com.agiletec.aps.system.ApsSystemUtils; import com.agiletec.plugins.jpaddressbook.aps.system.services.vcard.model.VCardContactField; /** * @author A.Cocco */ public class VCardDOM implements IVCardDOM { /** * Build vcard-mapping document * @param vcards */ @Override public void buildVcardMappingDOM(List<VCardContactField> vcards) { this.setDoc(new Document()); this.setRoot(new Element(VCARD_FIELDS_ELEMENT)); Element fieldElement = null; if(vcards != null){ for (int i = 0; i < vcards.size(); i++) { VCardContactField vcard = vcards.get(i); fieldElement = new Element(VCARD_FIELD_ELEMENT); this.getRoot().addContent(fieldElement); this.setCode(vcard.getCode(), fieldElement); this.setDescription(vcard.getDescription(), fieldElement); this.setEnabled(vcard.isEnabled(), fieldElement); this.setProfileAttribute(vcard.getProfileAttribute(), fieldElement); } } this.getDoc().setRootElement(this.getRoot()); } /** * Returns a VCard list * @return vcard list */ @SuppressWarnings("unchecked") @Override public List<VCardContactField> parseVcardMapping() { Element element = null; List<VCardContactField> cards = new ArrayList<VCardContactField>(); Element root = this.getDoc().getRootElement(); List<Element> fields = root.getChildren(); VCardContactField vcard = null; for (int i = 0; i < fields.size(); i++) { element = fields.get(i); vcard = new VCardContactField(); if(element.getAttribute(ATTRIBUTE_CODE_FIELD) != null) vcard.setCode(element.getAttribute(ATTRIBUTE_CODE_FIELD).getValue()); if(element.getAttribute(ATTRIBUTE_DESCRIPTION_FIELD) != null) vcard.setDescription(element.getAttribute(ATTRIBUTE_DESCRIPTION_FIELD).getValue()); if(element.getAttribute(ATTRIBUTE_ENABLED_FIELD) != null) vcard.setEnabled(Boolean.valueOf(element.getAttribute(ATTRIBUTE_ENABLED_FIELD).getValue())); if(element.getAttribute(ATTRIBUTE_PROFILE_FIELD) != null) vcard.setProfileAttribute(element.getAttribute(ATTRIBUTE_PROFILE_FIELD).getValue()); cards.add(vcard); } return cards; } /** * Read vcard mapping * @param vcard mapping */ @Override public void readVcardMapping(String vcardMapping){ SAXBuilder builder = new SAXBuilder(); try { this.setDoc(builder.build(new ByteArrayInputStream(vcardMapping.getBytes()))); } catch (Throwable t) { ApsSystemUtils.getLogger().trace("Method readVcardMapping failed."); } } /** * Returns vcard mapping in XML format * @return vcard mapping in XML format */ @Override public String getXMLDocument(){ XMLOutputter out = new XMLOutputter(); Format format = Format.getPrettyFormat(); format.setIndent("\t"); out.setFormat(format); String xml = out.outputString(_doc); return xml; } /** * Sets the vcard code * @param code * @param element */ private void setCode(String code, Element element){ if(code != null) element.setAttribute(ATTRIBUTE_CODE_FIELD, code.trim()); else element.setAttribute(ATTRIBUTE_CODE_FIELD, ""); } /** * Sets the vcard description * @param description * @param element */ private void setDescription(String description, Element element){ if(description != null) element.setAttribute(ATTRIBUTE_DESCRIPTION_FIELD, description.trim()); else element.setAttribute(ATTRIBUTE_DESCRIPTION_FIELD, ""); } /** * Sets vcard enabling * @param enabled * @param element */ private void setEnabled(boolean enabled, Element element){ element.setAttribute(ATTRIBUTE_ENABLED_FIELD, String.valueOf(enabled)); } /** * Sets vcard profile attribute * @param profileAttribute * @param element */ private void setProfileAttribute(String profileAttribute, Element element){ if(profileAttribute != null && !"".equals(profileAttribute.trim())) element.setAttribute(ATTRIBUTE_PROFILE_FIELD, profileAttribute.trim()); else element.setAttribute(ATTRIBUTE_PROFILE_FIELD, ""); } /** * Sets the doc * @param doc the doc to set */ public void setDoc(Document doc) { this._doc = doc; } /** * Sets the root element * @param root the root to set */ public void setRoot(Element root) { this._root = root; } /** * Returns the doc * @return the doc */ public Document getDoc() { return _doc; } /** * Returns the root * @return the root */ public Element getRoot() { return _root; } protected Document _doc; protected Element _root; private final static String VCARD_FIELDS_ELEMENT = "vcardfields"; private final static String VCARD_FIELD_ELEMENT = "vcardfield"; private final static String ATTRIBUTE_CODE_FIELD = "code"; private final static String ATTRIBUTE_DESCRIPTION_FIELD = "description"; private final static String ATTRIBUTE_ENABLED_FIELD = "enabled"; private final static String ATTRIBUTE_PROFILE_FIELD = "profileAttribute"; }