MergeModels.js
	
	
Summary
	
		No overview generated for 'MergeModels.js'
	
    
    
 
        
mapbuilder.loadScript(baseDir+"/tool/ToolBase.js");
function MergeModels(toolNode, model) {
  ToolBase.apply(this, new Array(toolNode, model));
  
  this.template = null;
  this.init = function(objRef) {
    objRef.model.mergeModels = new Array();
    var models = toolNode.selectSingleNode('mb:merges');
    if (models) {
      var model = models.childNodes;
      for (var i = 0; i < model.length; i++) {
        if (model[i].firstChild) {
          objRef.addModel(objRef, config.objects[model[i].firstChild.nodeValue]);
        }
      }
    }
  }
  model.addListener('init', this.init, this);
  
  this.getTemplate = function(objRef) {
    objRef.template = objRef.model.doc ? objRef.model.doc.cloneNode(true) : null;
    if (objRef.template) {
      objRef.model.removeListener('loadModel', objRef.getTemplate, objRef);
      objRef.buildModel(objRef);
    }
  }
  model.addListener('loadModel', this.getTemplate, this);
  this.addModel = function(objRef, model) {
    objRef.model.mergeModels.push(model);
    if (model.doc) {
      objRef.mergeModel(objRef, model.doc);
    }
    model.addListener('refresh', objRef.buildModel, objRef);
  }
  
  this.mergeModel = function(objRef, modelToMerge) {
    var docToMerge = modelToMerge.doc ? modelToMerge.doc.cloneNode(true) : null;
    var nodes = docToMerge ? docToMerge.selectNodes('//*[@fid]') : null;
    if (!nodes) return;
    var node;
    for (var i=0; i<nodes.length; i++) {
      node = nodes[i];
      if (node.nodeName) {
        node.setAttribute('sourceModel', modelToMerge.id);
      }
    }    
    Sarissa.copyChildNodes(docToMerge.documentElement, objRef.model.doc.documentElement, true);
  }
  
  this.buildModel = function(objRef) {
    if (!objRef.template) return;
    objRef.model.callListeners('newModel');
    objRef.model.doc = objRef.template.cloneNode(true);
    for (var i in objRef.model.mergeModels) {
      objRef.mergeModel(objRef, objRef.model.mergeModels[i]);
    }
    objRef.model.callListeners('loadModel');
  }
}
	
Documentation generated by 
JSDoc on Tue Aug 21 08:12:28 2007