1 var Exporter = {}
  2 
  3 Exporter.run = function() {
  4    var exportXml = function(object, fname) {
  5       var result = new HopObject;
  6       for (var key in object) {
  7          result.version = Root.VERSION;
  8          result.origin = object.href();
  9          result.origin_id = object._id;
 10          var value = object[key];
 11          if (!value || (value._id && value.constructor !== User)) {
 12             continue;
 13          }
 14          if (value.constructor === User) {
 15             result[key] = value.name;
 16          } else {
 17             result[key] = value;
 18          }
 19       }
 20       Xml.write(result, new java.io.File(dir, fname || object._id + ".xml"));
 21       return;
 22    }
 23    
 24    var item;
 25    while (item = app.data.exports.shift()) {
 26       var site = Site.getById(item.site);
 27       delete app.data.exports[site.name];
 28 
 29       var baseDir = site.getStaticFile();
 30       var dir = exportDir = new helma.File(baseDir, "export.temp");
 31    
 32       var log = new helma.File(exportDir, "error.log");
 33       log.open();
 34 
 35       exportDir.makeDirectory();
 36       exportXml(site, "site.xml");
 37    
 38       var zip = new helma.Zip();
 39    
 40       dir = new java.io.File(exportDir, "stories");
 41       dir.mkdirs();
 42       site.stories.forEach(function() {
 43          exportXml(this);
 44       });
 45    
 46       dir = new java.io.File(exportDir, "files");
 47       dir.mkdirs();
 48       site.files.forEach(function() {
 49          exportXml(this);
 50          try {
 51             zip.add(this.getFile(), "files");
 52          } catch (ex) {
 53             log.writeln(ex);
 54          }
 55       });
 56       
 57       dir = new java.io.File(exportDir, "images");
 58       dir.mkdirs();
 59       site.images.forEach(function() {
 60          exportXml(this);
 61          try {
 62             zip.add(this.getFile(), "images");
 63             zip.add(this.getThumbnailFile(), "images");
 64          } catch (ex) {
 65             log.writeln(ex);
 66          }
 67       });
 68 
 69       log.close();
 70 
 71       zip.add(exportDir);
 72       zip.save(new java.io.File(baseDir, site.name + "-export.zip"));
 73       exportDir.removeDirectory();
 74       return;
 75    }
 76    
 77    return;
 78 }
 79 
 80 Exporter.add = function(site) {
 81    if (!app.data.exports[site.name]) {
 82       app.data.exports.push({
 83          site: site._id,
 84          status: "queued"
 85       });
 86       return app.data.exports[site.name] = true; 
 87    }
 88    return false;
 89 }
 90