001/* 002 * (C) Copyright 2006-2014 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, jcarsique 018 */ 019package org.nuxeo.connect.update.xml; 020 021import org.nuxeo.common.xmap.annotation.XNode; 022import org.nuxeo.common.xmap.annotation.XNodeList; 023import org.nuxeo.common.xmap.annotation.XObject; 024import org.nuxeo.connect.update.NuxeoValidationState; 025import org.nuxeo.connect.update.PackageDependency; 026import org.nuxeo.connect.update.PackageState; 027import org.nuxeo.connect.update.PackageType; 028import org.nuxeo.connect.update.PackageVisibility; 029import org.nuxeo.connect.update.ProductionState; 030import org.nuxeo.connect.update.Validator; 031import org.nuxeo.connect.update.Version; 032import org.nuxeo.connect.update.model.PackageDefinition; 033import org.nuxeo.connect.update.model.TaskDefinition; 034import org.nuxeo.connect.update.task.Task; 035 036/** 037 * @author <a href="mailto:bs@nuxeo.com">Bogdan Stefanescu</a> 038 */ 039@XObject("package") 040public class PackageDefinitionImpl implements PackageDefinition { 041 042 @XNode("@name") 043 protected String name; 044 045 @XNode("@version") 046 protected Version version; 047 048 @XNode("@type") 049 protected PackageType type; 050 051 @XNode("visibility") 052 protected PackageVisibility visibility; 053 054 @XNode("title") 055 protected String title; 056 057 @XNode("description") 058 protected String description; 059 060 @XNode("classifier") 061 protected String classifier; 062 063 @XNode("vendor") 064 protected String vendor; 065 066 @XNode("home-page") 067 protected String homePage; 068 069 @XNode("supported") 070 protected boolean supported = false; 071 072 @XNode("hotreload-support") 073 protected boolean hotReloadSupport = false; 074 075 @XNode("require-terms-and-conditions-acceptance") 076 protected boolean requireTermsAndConditionsAcceptance = false; 077 078 protected NuxeoValidationState validationState = NuxeoValidationState.NONE; 079 080 protected ProductionState productionState = ProductionState.TESTING; 081 082 /** 083 * The license name. E.g. LGPL, BSD etc. 084 */ 085 @XNode("license") 086 protected String license; 087 088 /** 089 * A license URL. If no specified the license.txt file in the package is the license content 090 */ 091 @XNode("license-url") 092 protected String licenseUrl; 093 094 /** 095 * The target platforms where this package may be installed. 096 */ 097 @XNodeList(value = "platforms/platform", type = String[].class, componentType = String.class) 098 protected String[] platforms; 099 100 /** 101 * The dependency value format is: <code>package_name[:package_min_version[:package_max_version]]</code> if no min 102 * and max version are specified the the last version should be used. 103 */ 104 @XNodeList(value = "dependencies/package", type = PackageDependency[].class, componentType = PackageDependency.class) 105 protected PackageDependency[] dependencies; 106 107 /** 108 * The conflict value format is: <code>package_name[:package_min_version[:package_max_version]]</code> if no min and 109 * max version are specified the the last version should be used. 110 */ 111 @XNodeList(value = "conflicts/package", type = PackageDependency[].class, componentType = PackageDependency.class) 112 protected PackageDependency[] conflicts; 113 114 /** 115 * The provides value format is: <code>package_name[:package_min_version[:package_max_version]]</code> if no min and 116 * max version are specified the the last version should be used. 117 */ 118 @XNodeList(value = "provides/package", type = PackageDependency[].class, componentType = PackageDependency.class) 119 protected PackageDependency[] provides; 120 121 /** 122 * A class implementing {@link Task}. if not specified the default implementation will be used 123 */ 124 @XNode("installer") 125 protected TaskDefinitionImpl installer; 126 127 /** 128 * A class implementing {@link Task}. if not specified the default implementation will be used 129 */ 130 @XNode("uninstaller") 131 protected TaskDefinitionImpl uninstaller; 132 133 /** 134 * A class implementing {@link Validator}. If not specified not post install validation will be done 135 */ 136 @XNode("validator") 137 protected String validator; 138 139 @XNode("nuxeo-validation") 140 protected void initNuxeoValidationState(String value) { 141 NuxeoValidationState targetState = NuxeoValidationState.getByValue(value); 142 if (targetState != null) { 143 validationState = targetState; 144 } 145 } 146 147 @XNode("production-state") 148 protected void initProductionState(String value) { 149 ProductionState targetState = ProductionState.getByValue(value); 150 if (targetState != null) { 151 productionState = targetState; 152 } 153 } 154 155 @Override 156 public String getId() { 157 if (version == null) { 158 return name; 159 } else { 160 return name + "-" + version.toString(); 161 } 162 } 163 164 @Override 165 public String getName() { 166 return name; 167 } 168 169 @Override 170 public void setName(String name) { 171 this.name = name; 172 } 173 174 @Override 175 public Version getVersion() { 176 return version; 177 } 178 179 @Override 180 public void setVersion(Version version) { 181 this.version = version; 182 } 183 184 @Override 185 public String getTitle() { 186 return title; 187 } 188 189 @Override 190 public void setTitle(String title) { 191 this.title = title; 192 } 193 194 @Override 195 public String getDescription() { 196 return description; 197 } 198 199 @Override 200 public void setDescription(String description) { 201 this.description = description; 202 } 203 204 @Override 205 public PackageType getType() { 206 return type; 207 } 208 209 @Override 210 public void setType(PackageType type) { 211 this.type = type; 212 } 213 214 @Override 215 public String getClassifier() { 216 return classifier; 217 } 218 219 @Override 220 public void setClassifier(String classifier) { 221 this.classifier = classifier; 222 } 223 224 @Override 225 public String getHomePage() { 226 return homePage; 227 } 228 229 @Override 230 public void setHomePage(String homePage) { 231 this.homePage = homePage; 232 } 233 234 @Deprecated 235 @Override 236 public String getLicense() { 237 return getLicenseType(); 238 } 239 240 @Override 241 public String getLicenseType() { 242 return license; 243 } 244 245 @Deprecated 246 @Override 247 public void setLicense(String license) { 248 setLicenseType(license); 249 } 250 251 @Override 252 public void setLicenseType(String license) { 253 this.license = license; 254 } 255 256 @Override 257 public String getLicenseUrl() { 258 return licenseUrl; 259 } 260 261 @Override 262 public void setLicenseUrl(String licenseUrl) { 263 this.licenseUrl = licenseUrl; 264 } 265 266 @Deprecated 267 @Override 268 public String[] getPlatforms() { 269 return getTargetPlatforms(); 270 } 271 272 @Override 273 public String[] getTargetPlatforms() { 274 return platforms; 275 } 276 277 @Deprecated 278 @Override 279 public void setPlatforms(String[] platforms) { 280 setTargetPlatforms(platforms); 281 } 282 283 @Override 284 public void setTargetPlatforms(String[] platforms) { 285 this.platforms = platforms; 286 } 287 288 @Override 289 public PackageDependency[] getDependencies() { 290 return dependencies; 291 } 292 293 @Override 294 public void setDependencies(PackageDependency[] dependencies) { 295 this.dependencies = dependencies; 296 } 297 298 @Override 299 public PackageDependency[] getConflicts() { 300 return conflicts; 301 } 302 303 @Override 304 public void setConflicts(PackageDependency[] conflicts) { 305 this.conflicts = conflicts; 306 } 307 308 @Override 309 public PackageDependency[] getProvides() { 310 return provides; 311 } 312 313 @Override 314 public void setProvides(PackageDependency[] provides) { 315 this.provides = provides; 316 } 317 318 @Override 319 public String getVendor() { 320 return vendor; 321 } 322 323 @Override 324 public void setVendor(String vendor) { 325 this.vendor = vendor; 326 } 327 328 @Override 329 public TaskDefinition getInstaller() { 330 return installer; 331 } 332 333 @Override 334 public void setInstaller(TaskDefinition installer) { 335 if (installer instanceof TaskDefinitionImpl) { 336 this.installer = (TaskDefinitionImpl) installer; 337 } else { 338 this.installer = new TaskDefinitionImpl(installer.getType(), installer.getRequireRestart()); 339 } 340 } 341 342 @Override 343 public TaskDefinition getUninstaller() { 344 return uninstaller; 345 } 346 347 @Override 348 public void setUninstaller(TaskDefinition uninstaller) { 349 if (uninstaller instanceof TaskDefinitionImpl) { 350 this.uninstaller = (TaskDefinitionImpl) uninstaller; 351 } else { 352 this.uninstaller = new TaskDefinitionImpl(uninstaller.getType(), uninstaller.getRequireRestart()); 353 } 354 } 355 356 @Override 357 public String getValidator() { 358 return validator; 359 } 360 361 @Override 362 public void setValidator(String validator) { 363 this.validator = validator; 364 } 365 366 @Override 367 public void setSupported(boolean supported) { 368 this.supported = supported; 369 } 370 371 @Override 372 public void setHotReloadSupport(boolean hotReloadSupport) { 373 this.hotReloadSupport = hotReloadSupport; 374 } 375 376 @Override 377 public void setValidationState(NuxeoValidationState validationState) { 378 this.validationState = validationState; 379 } 380 381 @Override 382 public void setProductionState(ProductionState productionState) { 383 this.productionState = productionState; 384 } 385 386 @Deprecated 387 public void write(XmlWriter writer) { 388 writer.writeXmlDecl(); 389 390 writer.start("package"); 391 writer.attr("name", name); 392 if (version != null) { 393 writer.attr("version", version.toString()); 394 } 395 if (type != null) { 396 writer.attr("type", type.getValue()); 397 } 398 if (visibility != null) { 399 writer.attr("visibility", visibility.toString()); 400 } 401 writer.startContent(); 402 writer.element("title", title); 403 writer.element("description", description); 404 writer.element("classifier", classifier); 405 writer.element("vendor", vendor); 406 writer.element("home-page", homePage); 407 writer.element("license", license); 408 writer.element("license-url", licenseUrl); 409 writer.element("hotreload-support", Boolean.valueOf(hotReloadSupport).toString()); 410 writer.element("supported", Boolean.valueOf(supported).toString()); 411 writer.element("require-terms-and-conditions-acceptance", 412 Boolean.valueOf(requireTermsAndConditionsAcceptance).toString()); 413 writer.element("production-state", productionState.toString()); 414 writer.element("nuxeo-validation", validationState.toString()); 415 if (platforms != null) { 416 writer.start("platforms"); 417 writer.startContent(); 418 for (String platform : platforms) { 419 writer.element("platform", platform); 420 } 421 writer.end("platforms"); 422 } 423 if (dependencies != null) { 424 writer.start("dependencies"); 425 writer.startContent(); 426 for (PackageDependency dep : dependencies) { 427 writer.element("package", dep.toString()); 428 } 429 writer.end("dependencies"); 430 } 431 432 if (installer != null) { 433 writer.start("installer"); 434 writer.attr("class", installer.getType()); 435 writer.attr("restart", String.valueOf(installer.getRequireRestart())); 436 writer.end(); 437 } 438 if (uninstaller != null) { 439 writer.start("uninstaller"); 440 writer.attr("class", uninstaller.getType()); 441 writer.attr("restart", String.valueOf(uninstaller.getRequireRestart())); 442 writer.end(); 443 } 444 writer.element("validator", validator); 445 writer.end("package"); 446 } 447 448 @Override 449 public ProductionState getProductionState() { 450 return productionState; 451 } 452 453 @Override 454 public NuxeoValidationState getValidationState() { 455 return validationState; 456 } 457 458 @Override 459 public boolean isSupported() { 460 return supported; 461 } 462 463 @Override 464 public boolean supportsHotReload() { 465 return hotReloadSupport; 466 } 467 468 @Override 469 public void setRequireTermsAndConditionsAcceptance(boolean requireTermsAndConditionsAcceptance) { 470 this.requireTermsAndConditionsAcceptance = requireTermsAndConditionsAcceptance; 471 } 472 473 @Override 474 public boolean requireTermsAndConditionsAcceptance() { 475 return requireTermsAndConditionsAcceptance; 476 } 477 478 @Override 479 public String toXML() { 480 return new XmlSerializer().toXML(this); 481 } 482 483 @Deprecated 484 @Override 485 public int getState() { 486 return PackageState.UNKNOWN.getValue(); 487 } 488 489 @Override 490 public PackageState getPackageState() { 491 return PackageState.UNKNOWN; 492 } 493 494 @Override 495 public boolean isLocal() { 496 throw new UnsupportedOperationException(); 497 } 498 499 @Override 500 public PackageVisibility getVisibility() { 501 return visibility; 502 } 503 504 @Override 505 public void setVisibility(PackageVisibility visibility) { 506 this.visibility = visibility; 507 } 508 509}