001/* 002 * (C) Copyright 2006-2016 Nuxeo SA (http://nuxeo.com/) and others. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 * 016 * Contributors: 017 * bstefanescu 018 * mguillaume 019 * jcarsique 020 * Yannis JULIENNE 021 */ 022package org.nuxeo.connect.update.xml; 023 024import org.nuxeo.connect.update.PackageDependency; 025import org.nuxeo.connect.update.model.Field; 026import org.nuxeo.connect.update.model.Form; 027import org.nuxeo.connect.update.model.PackageDefinition; 028 029/** 030 * @author <a href="mailto:[email protected]">Bogdan Stefanescu</a> 031 */ 032public class XmlSerializer extends XmlWriter { 033 034 public XmlSerializer() { 035 } 036 037 public XmlSerializer(String tab) { 038 super(tab); 039 } 040 041 public String toXML(PackageDefinition def) { 042 start("package"); 043 if (def.getType() != null) { 044 attr("type", def.getType().getValue()); 045 } 046 attr("name", def.getName()); 047 if (def.getVersion() != null) { 048 attr("version", def.getVersion().toString()); 049 } 050 startContent(); 051 052 element("title", def.getTitle()); 053 element("description", def.getDescription()); 054 element("vendor", def.getVendor()); 055 element("classifier", def.getClassifier()); 056 element("home-page", def.getHomePage()); 057 058 element("hotreload-support", Boolean.valueOf(def.supportsHotReload()).toString()); 059 element("supported", Boolean.valueOf(def.isSupported()).toString()); 060 element("require-terms-and-conditions-acceptance", Boolean.valueOf(def.requireTermsAndConditionsAcceptance()) 061 .toString()); 062 element("production-state", def.getProductionState().toString()); 063 element("nuxeo-validation", def.getValidationState().toString()); 064 065 if (def.getInstaller() != null) { 066 start("installer"); 067 attr("class", def.getInstaller().getType()); 068 attr("restart", String.valueOf(def.getInstaller().getRequireRestart())); 069 end(); 070 } 071 if (def.getUninstaller() != null) { 072 start("uninstaller"); 073 attr("class", def.getUninstaller().getType()); 074 attr("restart", String.valueOf(def.getUninstaller().getRequireRestart())); 075 end(); 076 } 077 element("validator", def.getValidator()); 078 079 try { 080 def.getClass().getMethod("getVisibility"); 081 if (def.getVisibility() != null) { 082 element("visibility", def.getVisibility().toString()); 083 } 084 } catch (NoSuchMethodException e) { 085 // Ignore visibility with old Connect Client versions 086 } 087 088 if (def.getTargetPlatforms() != null && def.getTargetPlatforms().length > 0) { 089 start("platforms"); 090 startContent(); 091 for (String platform : def.getTargetPlatforms()) { 092 element("platform", platform); 093 } 094 end("platforms"); 095 } 096 097 if (def.getDependencies() != null && def.getDependencies().length > 0) { 098 start("dependencies"); 099 startContent(); 100 for (PackageDependency dep : def.getDependencies()) { 101 element("package", dep.toString()); 102 } 103 end("dependencies"); 104 } 105 106 if (def.getOptionalDependencies() != null && def.getOptionalDependencies().length > 0) { 107 start("optional-dependencies"); 108 startContent(); 109 for (PackageDependency dep : def.getOptionalDependencies()) { 110 element("package", dep.toString()); 111 } 112 end("optional-dependencies"); 113 } 114 115 try { 116 def.getClass().getMethod("getConflicts"); 117 if (def.getConflicts() != null && def.getConflicts().length > 0) { 118 start("conflicts"); 119 startContent(); 120 for (PackageDependency conflict : def.getConflicts()) { 121 element("package", conflict.toString()); 122 } 123 end("conflicts"); 124 } 125 } catch (NoSuchMethodException e) { 126 // Ignore conflicts with old Connect Client versions 127 } 128 129 try { 130 def.getClass().getMethod("getProvides"); 131 if (def.getProvides() != null && def.getProvides().length > 0) { 132 start("provides"); 133 startContent(); 134 for (PackageDependency provide : def.getProvides()) { 135 element("package", provide.toString()); 136 } 137 end("provides"); 138 } 139 } catch (NoSuchMethodException e) { 140 // Ignore provides with old Connect Client versions 141 } 142 143 end("package"); 144 return sb.toString(); 145 } 146 147 public void buildXML(Form form) { 148 start("form"); 149 startContent(); 150 element("title", form.getTitle()); 151 element("image", form.getImage()); 152 element("description", form.getDescription()); 153 if (form.getFields() != null && form.getFields().length > 0) { 154 start("fields"); 155 startContent(); 156 for (Field field : form.getFields()) { 157 start("field"); 158 attr("name", field.getName()); 159 attr("type", field.getType()); 160 if (field.isRequired()) { 161 attr("required", "true"); 162 } 163 if (field.isReadOnly()) { 164 attr("readonly", "true"); 165 } 166 if (field.isVertical()) { 167 attr("vertical", "true"); 168 } 169 startContent(); 170 element("label", field.getLabel()); 171 element("value", field.getValue()); 172 end("field"); 173 } 174 end("fields"); 175 } 176 end("form"); 177 } 178 179 public String toXML(FormDefinition form) { 180 buildXML(form); 181 return sb.toString(); 182 } 183 184 public String toXML(FormDefinition... forms) { 185 start("forms"); 186 startContent(); 187 for (FormDefinition form : forms) { 188 buildXML(form); 189 } 190 end("forms"); 191 return sb.toString(); 192 } 193 194 public String toXML(FormsDefinition forms) { 195 start("forms"); 196 startContent(); 197 for (Form form : forms.getForms()) { 198 buildXML(form); 199 } 200 end("forms"); 201 return sb.toString(); 202 } 203}