1 //<Script type="text/javascript">
6 * Projects can only contain one directory... - it can import other projects..(later)
8 * we need to sort out that - paths is currently a key/value array..
15 public class Project.Project {
18 public string id = "";
19 public string fn = "";
20 public string name = "";
21 public Gee.HashMap<string,string> paths;
22 public GLib.List<JsRender.JsRender> files ;
24 public string xtype = "";
27 Project (string path) {
32 this.paths = new Gee.HashMap<string,string>();
33 this.files = new GLib.List<JsRender.JsRender>();
34 //XObject.extend(this, cfg);
42 public void onChanged() {
43 // ProjectManager.fireEvent('changed');
50 load : function (o) // is this used??
52 if (!this.fetchTree) {
53 console.log("Project.getTree tree called on base object?!?!");
58 return o.success.apply(o.scope || this, [this]);
60 return this.fetchTree(o);
64 // public Palete getPalete ()
66 //print("Project.Base: GET PROVIDER FOR " + this.xtype);
67 // return ProjectManager.getPalete(this.xtype);
70 public string toJSON()
73 var builder = new Json.Builder ();
75 builder.begin_object ();
77 builder.set_member_name ("name");
78 builder.add_string_value (this.name);
81 builder.set_member_name ("fn");
82 builder.add_string_value (this.fn);
84 builder.set_member_name ("xtype");
85 builder.add_string_value (this.xtype);
87 // file ??? try/false?
88 builder.set_member_name ("paths");
91 builder.begin_array ();
94 var iter = this.paths.map_iterator();
96 builder.add_string_value (iter.get_key());
101 var generator = new Json.Generator ();
102 var root = builder.get_root ();
103 generator.set_root (root);
105 return generator.to_data (null);
109 // returns the first path
110 public string getName()
112 var iter = this.paths.map_iterator();
113 while (iter.next()) {
114 return GLib.Path.get_basename(iter.get_key());
124 public GLib.List<JsRender.JsRender> toTree ()
129 var files = new Gee.HashMap<string,JsRender.JsRender>();
131 for(var i = 0; i < this.files.length(); i++) {
132 var fo = this.files.nth_data(i);
134 fo.hasParent = false;
135 fo.cn = new GLib.List<JsRender.JsRender>();
137 if (this.files.nth_data(i).fullname.length > 0) {
138 files.set(fo.fullname, fo);
142 var iter = files.map_iterator();
143 while (iter.next()) {
144 var f = iter.get_value();
147 if (par.length < 1) {
150 if (!files.has_key(par)) {
153 files.get(par).cn.add(f);
158 var ret = new GLib.List<JsRender.JsRender>();
159 iter = files.map_iterator();
160 while (iter.next()) {
161 var f = iter.get_value();
167 if (files.has_key(f.fullname)) {
173 return a.path > b.path ? 1 : -1;
177 //print(JSON.stringify(ret,null,4));
186 public JsRender.JsRender? getById(string id)
189 for(var i = 0; i < this.files.length; i++) {
190 var fo = this.files.nth_data(i);
193 //console.log(f.id + '?=' + id);
201 public JsRender.JsRender loadFileOnly (string path)
204 return JsRender.Base.factory(xt, this, path);
208 public JsRender.JsRender create(string filename)
210 var ret = this.loadFileOnly(filename);
218 public void addFile(JsRender.JsRender pfile) { // add a single file, and trigger changed.
219 this.files.append_val(pfile); // duplicate check?
223 public void add(string path, string type)
225 this.paths.set(path,type);
226 //Seed.print(" type is '" + type + "'");
229 // console.dump(this.files);
231 if (type == "file" ) {
232 this.files.append(this.loadFileOnly( path ));
237 public void scanDirs()
239 var iter = this.paths.map_iterator();
240 while (iter.next()) {
241 if (iter.get_value() != "dir") {
244 this.scanDir(iter.get_key());
246 //console.dump(this.files);
250 public void scanDir(string dir, int dp =0 )
253 //Seed.print("Project.Base: Running scandir on " + dir);
254 if (dp > 5) { // no more than 5 deep?
257 // this should be done async -- but since we are getting the proto up ...
260 var f = File.new_for_path(dir);
261 var file_enum = f.enumerate_children(GLib.FileAttribute.STANDARD_DISPLAY_NAME, GLib.FileQueryInfoFlags.NONE, null);
265 while ((next_file = file_enum.next_file(null)) != null) {
266 var fn = next_file.get_display_name();
269 //console.log('trying ' + dir + '/' + fn);
271 if (fn[0] == '.') { // skip hidden
275 if (FileUtils.test(dir + "/" + fn, GLib.FileTest.IS_DIR)) {
276 subs += (dir + "/" + fn);
280 if (!Regex.match_simple("\\.bjs$", fn)) {
287 var sp = dir.split("/");
289 for (var i = 0; i < sp.length; i++) {
294 sp = sp.splice(sp.length - (dp +1), (dp +1));
295 parent = sp.join('.');
298 if (typeof(_this.files[dir + '/' + fn]) != 'undefined') {
299 // we already have it..
300 _this.files[dir + '/' + fn].parent = parent;
305 JsRender.JsRender.factory(xt,this, dir + "/" + fn);
310 for (var i = 0; i < subs.length; i++) {
311 this.scanDir(subs[i], dp+1);