001/* 002 * (C) Copyright 2006-2015 Nuxeo SA (http://nuxeo.com/) and contributors. 003 * 004 * All rights reserved. This program and the accompanying materials 005 * are made available under the terms of the GNU Lesser General Public License 006 * (LGPL) version 2.1 which accompanies this distribution, and is available at 007 * http://www.gnu.org/licenses/lgpl-2.1.html 008 * 009 * This library is distributed in the hope that it will be useful, 010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 012 * Lesser General Public License for more details. 013 * 014 * Contributors: 015 * bstefanescu, mguillaume, jcarsique 016 */ 017package org.nuxeo.connect.update.xml; 018 019import org.nuxeo.connect.update.PackageDependency; 020import org.nuxeo.connect.update.model.Field; 021import org.nuxeo.connect.update.model.Form; 022import org.nuxeo.connect.update.model.PackageDefinition; 023 024/** 025 * @author <a href="mailto:bs@nuxeo.com">Bogdan Stefanescu</a> 026 */ 027public class XmlSerializer extends XmlWriter { 028 029 public XmlSerializer() { 030 } 031 032 public XmlSerializer(String tab) { 033 super(tab); 034 } 035 036 public String toXML(PackageDefinition def) { 037 start("package"); 038 if (def.getType() != null) { 039 attr("type", def.getType().getValue()); 040 } 041 attr("name", def.getName()); 042 if (def.getVersion() != null) { 043 attr("version", def.getVersion().toString()); 044 } 045 startContent(); 046 047 element("title", def.getTitle()); 048 element("description", def.getDescription()); 049 element("vendor", def.getVendor()); 050 element("classifier", def.getClassifier()); 051 element("home-page", def.getHomePage()); 052 053 element("hotreload-support", Boolean.valueOf(def.supportsHotReload()).toString()); 054 element("supported", Boolean.valueOf(def.isSupported()).toString()); 055 element("require-terms-and-conditions-acceptance", Boolean.valueOf(def.requireTermsAndConditionsAcceptance()) 056 .toString()); 057 element("production-state", def.getProductionState().toString()); 058 element("nuxeo-validation", def.getValidationState().toString()); 059 060 if (def.getInstaller() != null) { 061 start("installer"); 062 attr("class", def.getInstaller().getType()); 063 attr("restart", String.valueOf(def.getInstaller().getRequireRestart())); 064 end(); 065 } 066 if (def.getUninstaller() != null) { 067 start("uninstaller"); 068 attr("class", def.getUninstaller().getType()); 069 attr("restart", String.valueOf(def.getUninstaller().getRequireRestart())); 070 end(); 071 } 072 element("validator", def.getValidator()); 073 074 try { 075 def.getClass().getMethod("getVisibility"); 076 if (def.getVisibility() != null) { 077 element("visibility", def.getVisibility().toString()); 078 } 079 } catch (NoSuchMethodException e) { 080 // Ignore visibility with old Connect Client versions 081 } 082 083 if (def.getTargetPlatforms() != null && def.getTargetPlatforms().length > 0) { 084 start("platforms"); 085 startContent(); 086 for (String platform : def.getTargetPlatforms()) { 087 element("platform", platform); 088 } 089 end("platforms"); 090 } 091 092 if (def.getDependencies() != null && def.getDependencies().length > 0) { 093 start("dependencies"); 094 startContent(); 095 for (PackageDependency dep : def.getDependencies()) { 096 element("package", dep.toString()); 097 } 098 end("dependencies"); 099 } 100 101 try { 102 def.getClass().getMethod("getConflicts"); 103 if (def.getConflicts() != null && def.getConflicts().length > 0) { 104 start("conflicts"); 105 startContent(); 106 for (PackageDependency conflict : def.getConflicts()) { 107 element("package", conflict.toString()); 108 } 109 end("conflicts"); 110 } 111 } catch (NoSuchMethodException e) { 112 // Ignore conflicts with old Connect Client versions 113 } 114 115 try { 116 def.getClass().getMethod("getProvides"); 117 if (def.getProvides() != null && def.getProvides().length > 0) { 118 start("provides"); 119 startContent(); 120 for (PackageDependency provide : def.getProvides()) { 121 element("package", provide.toString()); 122 } 123 end("provides"); 124 } 125 } catch (NoSuchMethodException e) { 126 // Ignore provides with old Connect Client versions 127 } 128 129 end("package"); 130 return sb.toString(); 131 } 132 133 public void buildXML(Form form) { 134 start("form"); 135 startContent(); 136 element("title", form.getTitle()); 137 element("image", form.getImage()); 138 element("description", form.getDescription()); 139 if (form.getFields() != null && form.getFields().length > 0) { 140 start("fields"); 141 startContent(); 142 for (Field field : form.getFields()) { 143 start("field"); 144 attr("name", field.getName()); 145 attr("type", field.getType()); 146 if (field.isRequired()) { 147 attr("required", "true"); 148 } 149 if (field.isReadOnly()) { 150 attr("readonly", "true"); 151 } 152 if (field.isVertical()) { 153 attr("vertical", "true"); 154 } 155 startContent(); 156 element("label", field.getLabel()); 157 element("value", field.getValue()); 158 end("field"); 159 } 160 end("fields"); 161 } 162 end("form"); 163 } 164 165 public String toXML(FormDefinition form) { 166 buildXML(form); 167 return sb.toString(); 168 } 169 170 public String toXML(FormDefinition... forms) { 171 start("forms"); 172 startContent(); 173 for (FormDefinition form : forms) { 174 buildXML(form); 175 } 176 end("forms"); 177 return sb.toString(); 178 } 179 180 public String toXML(FormsDefinition forms) { 181 start("forms"); 182 startContent(); 183 for (Form form : forms.getForms()) { 184 buildXML(form); 185 } 186 end("forms"); 187 return sb.toString(); 188 } 189}