1 var Importer = {} 2 3 Importer.run = function() { 4 var item; 5 while (item = app.data.imports.shift()) { 6 var file = item.file; 7 var site = Site.getById(item.site); 8 var user = User.getById(item.user); 9 10 var baseDir = site.getStaticFile(); 11 var importDir = new java.io.File(baseDir, "import.temp"); 12 var zip = new helma.Zip(file); 13 zip.extractAll(importDir); 14 15 var object = Xml.read(new java.io.File(importDir, "site.xml")); 16 for (var key in object) { 17 switch (key) { 18 case "name": 19 case "origin": 20 case "origin_id": 21 case "version": 22 break; 23 case "creator": 24 case "modifier": 25 site[key] = user; 26 break; 27 default: 28 res.debug("Settting " + key + " to " + object[key]); 29 site[key] = object[key]; 30 res.debug("New value: " + site[key]) 31 } 32 } 33 site.creator = user; 34 site.modifier = user; 35 36 // Commit is necessary or the mode is set incorrectly (which is strange) 37 // Invalidate is necessary to immediately apply metadata values 38 res.commit(); 39 site.invalidate(); 40 41 var importCollection = function(name) { 42 switch (name) { 43 case "files": 44 var parent = "site"; 45 var Prototype = File; 46 break; 47 case "images": 48 var parent = "parent"; 49 var Prototype = Image; 50 break; 51 case "stories": 52 var parent = "site"; 53 var Prototype = Story; 54 break; 55 default: 56 throw Error("Invalid collection name"); 57 } 58 59 var index = 1; 60 var dir = new java.io.File(importDir, name); 61 var list = dir.listFiles(); 62 for each (var file in list) { 63 item.status = "importing " + name + ": " + index++ + " of " + list.length; 64 if (file.toString().endsWith(".xml")) { 65 var object = Xml.read(file); 66 object[parent] = site; 67 object.creator = object.modifier = user; 68 var target = new Prototype; 69 for (var key in object) { 70 target[key] = object[key]; 71 } 72 site[name].add(target); 73 file["delete"](); 74 } 75 } 76 return; 77 } 78 79 importCollection("stories"); 80 importCollection("files"); 81 importCollection("images"); 82 83 // Move files directory to final destination 84 dest = site.getStaticFile("files"); 85 dest.removeDirectory(); 86 (new helma.File(importDir, "files")).renameTo(dest); 87 88 // Move images directory to final destination 89 var dest = site.getStaticFile("images"); 90 dest.removeDirectory(); 91 (new helma.File(importDir, "images")).renameTo(dest); 92 93 site.getStaticFile("import.temp").removeDirectory(); 94 95 delete app.data.imports[file]; 96 } 97 98 return; 99 } 100 101 Importer.add = function(file, site, user) { 102 if (!app.data.imports[file]) { 103 var item = { 104 file: file, 105 site: site._id, 106 user: user._id, 107 status: "queued" 108 } 109 app.data.imports.push(item); 110 return app.data.imports[file] = item; 111 } 112 return false; 113 } 114 115 Importer.getStatus = function(file) { 116 var item = app.data.imports[file]; 117 return item ? item.status : null; 118 } 119