home *** CD-ROM | disk | FTP | other *** search
- package mx.rpc.xml
- {
- import mx.rpc.AsyncToken;
- import mx.rpc.events.ResultEvent;
- import mx.rpc.events.SchemaLoadEvent;
- import mx.rpc.http.HTTPService;
-
- public class SchemaLoader extends XMLLoader
- {
- private static const LOAD_INCLUDE:String = "include";
-
- private static const LOAD_IMPORT:String = "import";
-
- private var topLevelSchema:Schema;
-
- private var _schemaManager:SchemaManager;
-
- private var locationMap:Object;
-
- public function SchemaLoader(param1:HTTPService = null)
- {
- super(param1);
- locationMap = {};
- }
-
- override protected function resultHandler(param1:ResultEvent) : void
- {
- var _loc5_:Schema = null;
- var _loc6_:Array = null;
- var _loc7_:Namespace = null;
- var _loc8_:XMLList = null;
- var _loc9_:Schema = null;
- var _loc10_:Namespace = null;
- var _loc11_:SchemaLoadEvent = null;
- super.resultHandler(param1);
- var _loc2_:XML = XML(param1.result);
- var _loc3_:AsyncToken = param1.token;
- var _loc4_:String = _loc3_ == null ? null : _loc3_.location;
- if(_loc3_.parent != null)
- {
- _loc5_ = _loc3_.parent as Schema;
- if(_loc3_.loadType == LOAD_INCLUDE)
- {
- _loc6_ = _loc2_.namespaceDeclarations();
- for each(_loc7_ in _loc6_)
- {
- _loc5_.xml.addNamespace(_loc7_);
- }
- _loc8_ = _loc2_.children();
- _loc5_.addInclude(_loc8_);
- locationMap[_loc4_] = _loc8_;
- schemaIncludes(_loc5_,_loc4_);
- schemaImports(_loc5_,_loc4_);
- }
- else
- {
- _loc9_ = new Schema(_loc2_);
- locationMap[_loc4_] = _loc9_;
- _loc10_ = _loc3_.importNamespace as Namespace;
- _loc5_.addImport(_loc10_,_loc9_);
- schemaIncludes(_loc9_,_loc4_);
- schemaImports(_loc9_,_loc4_);
- }
- }
- else
- {
- topLevelSchema = new Schema(_loc2_);
- locationMap[_loc4_] = topLevelSchema;
- schemaIncludes(topLevelSchema,_loc4_);
- schemaImports(topLevelSchema,_loc4_);
- }
- if(loadsOutstanding <= 0)
- {
- _loc11_ = SchemaLoadEvent.createEvent(topLevelSchema,_loc4_);
- dispatchEvent(_loc11_);
- }
- }
-
- override public function load(param1:String) : void
- {
- param1 = getQualifiedLocation(param1);
- loadSchema(param1);
- }
-
- private function loadSchema(param1:String, param2:Schema = null, param3:Namespace = null, param4:String = null) : AsyncToken
- {
- var _loc5_:AsyncToken = internalLoad(param1);
- if(_loc5_ != null)
- {
- _loc5_.parent = param2;
- _loc5_.importNamespace = param3;
- _loc5_.loadType = param4;
- }
- return _loc5_;
- }
-
- public function schemaIncludes(param1:Schema, param2:String) : void
- {
- var schemaINCXML:XML = null;
- var location:String = null;
- var existing:XMLList = null;
- var schemaQName:QName = null;
- var schemaXML:XML = null;
- var nsSchema:Namespace = null;
- var includeQName:QName = null;
- var schema:Schema = param1;
- var parentLocation:String = param2;
- var schemaINCList:XMLList = schema.xml.elements(schema.schemaConstants.includeQName);
- for each(schemaINCXML in schemaINCList)
- {
- location = schemaINCXML.@schemaLocation;
- location = getQualifiedLocation(location,parentLocation);
- existing = locationMap[location] as XMLList;
- schemaQName = schemaINCXML.name();
- schemaXML = schema.xml;
- nsSchema = new Namespace(schema.schemaConstants.xsdURI);
- includeQName = schema.schemaConstants.includeQName;
- delete schemaXML[includeQName].(@schemaLocation == location)[0];
- schema.xml = schemaXML;
- if(existing == null)
- {
- loadSchema(location,schema,schema.targetNamespace,LOAD_INCLUDE);
- }
- else
- {
- schema.addInclude(existing);
- }
- }
- }
-
- public function schemaImports(param1:Schema, param2:String, param3:SchemaManager = null) : void
- {
- var importNode:XML = null;
- var location:String = null;
- var importURI:String = null;
- var importNS:Namespace = null;
- var nsSchema:Namespace = null;
- var importedSchemas:Array = null;
- var importedSchema:Schema = null;
- var existing:Schema = null;
- var schema:Schema = param1;
- var parentLocation:String = param2;
- var schemaManager:SchemaManager = param3;
- var importQName:QName = schema.schemaConstants.importQName;
- var schemaXML:XML = schema.xml;
- var imports:XMLList = schemaXML.elements(importQName);
- for each(importNode in imports)
- {
- location = importNode.attribute("schemaLocation").toString();
- importURI = importNode.attribute("namespace").toString();
- importNS = new Namespace(importURI);
- nsSchema = new Namespace(schema.schemaConstants.xsdURI);
- if(location == "")
- {
- if(schemaManager != null)
- {
- importedSchemas = schemaManager.getResourcesForURI(importURI);
- if(importedSchemas != null)
- {
- for each(importedSchema in importedSchemas)
- {
- schema.addImport(importNS,importedSchema);
- }
- delete schemaXML[importQName].(@namespace == importURI)[0];
- schema.xml = schemaXML;
- }
- }
- }
- else
- {
- delete schemaXML[importQName].(@namespace == importURI)[0];
- schema.xml = schemaXML;
- location = getQualifiedLocation(location,parentLocation);
- existing = locationMap[location];
- if(existing == null)
- {
- loadSchema(location,schema,importNS,LOAD_IMPORT);
- }
- else
- {
- schema.addImport(importNS,existing);
- }
- }
- }
- }
- }
- }
-
-