Skip to content
Snippets Groups Projects
Commit e558a83d authored by deniszgonjanin's avatar deniszgonjanin
Browse files

Created a way for modules to resolve dependencies, an eventual fix for Issue 172

parent f7190aef
No related branches found
No related tags found
No related merge requests found
......@@ -27,12 +27,13 @@ package org.bigbluebutton.main.managers
import flash.utils.Dictionary;
import mx.collections.ArrayCollection;
import mx.controls.Alert;
import org.bigbluebutton.common.IBigBlueButtonModule;
import org.bigbluebutton.common.LogUtil;
import org.bigbluebutton.common.Role;
import org.bigbluebutton.main.events.ConfigurationEvent;
import org.bigbluebutton.main.events.ModuleLoadEvent;
import org.bigbluebutton.main.events.ModuleLoadEvent;
import org.bigbluebutton.main.model.ModuleDescriptor;
public class ModuleManager
......@@ -82,7 +83,6 @@ package org.bigbluebutton.main.managers
}
private function handleComplete(e:Event):void{
//HERE
parse(new XML(e.target.data));
if (_numModules > 0) {
notifyInitializedListeners(true);
......@@ -359,7 +359,45 @@ package org.bigbluebutton.main.managers
}
public function buildDependencyTree():void{
var sorted:ArrayCollection = new ArrayCollection();
var independent:ArrayCollection = getModulesWithNoDependencies();
while(independent.length > 0){
var n:ModuleDescriptor = independent.removeItemAt(0) as ModuleDescriptor;
sorted.addItem(n);
for (var key:Object in _modules) {
var m:ModuleDescriptor = _modules[key] as ModuleDescriptor;
m.removeDependency(n.getAttribute("name") as String);
if ((m.unresolvedDependencies.length == 0) && (!m.resolved)){
independent.addItem(m);
m.resolved = true;
}
}
}
//Debug Information
for (var key2:Object in _modules) {
var m2:ModuleDescriptor = _modules[key2] as ModuleDescriptor;
if (m2.unresolvedDependencies.length != 0){
LogUtil.error("Module " + (m2.getAttribute("name") as String) + " still has a dependency " + (m2.unresolvedDependencies.getItemAt(0) as String));
}
}
LogUtil.debug("Dependency Order: ");
for (var u:int = 0; u<sorted.length; u++){
LogUtil.debug(((sorted.getItemAt(u) as ModuleDescriptor).getAttribute("name") as String));
}
}
private function getModulesWithNoDependencies():ArrayCollection{
var returnArray:ArrayCollection = new ArrayCollection();
for (var key:Object in _modules) {
var m:ModuleDescriptor = _modules[key] as ModuleDescriptor;
if (m.unresolvedDependencies.length == 0) {
returnArray.addItem(m);
}
}
return returnArray;
}
}
}
\ No newline at end of file
......@@ -22,10 +22,12 @@ package org.bigbluebutton.main.model
import flash.events.Event;
import flash.events.ProgressEvent;
import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.modules.ModuleLoader;
import org.bigbluebutton.common.IBigBlueButtonModule;
import org.bigbluebutton.common.LogUtil;
import org.bigbluebutton.common.LogUtil;
import org.bigbluebutton.main.managers.ModuleManager;
public class ModuleDescriptor
......@@ -39,8 +41,12 @@ package org.bigbluebutton.main.model
private var callbackHandler:Function;
public var unresolvedDependencies:ArrayCollection;
public var resolved:Boolean = false;
public function ModuleDescriptor(attributes:XML)
{
unresolvedDependencies = new ArrayCollection();
_attributes = new Object();
_loader = new ModuleLoader();
......@@ -79,7 +85,9 @@ package org.bigbluebutton.main.model
var attName:String = attNamesList[i].name();
var attValue:String = item.attribute(attName);
_attributes[attName] = attValue;
}
}
populateDependencies();
}
......@@ -125,38 +133,26 @@ package org.bigbluebutton.main.model
LogUtil.debug(_attributes.name + " uri = " + _attributes.uri);
}
/*
private function onUrlChanged(event:Event):void {
LogUtil.debug("Module onUrlChanged Event");
callbackHandler(event);
public function hasUnresolvedDependency(module:String):Boolean{
return unresolvedDependencies.contains(module);
}
private function onLoading(event:Event):void {
LogUtil.debug("Module onLoading Event");
callbackHandler(event);
public function removeDependency(module:String):void{
for (var i:int = 0; i<unresolvedDependencies.length; i++){
if (unresolvedDependencies[i] == module) unresolvedDependencies.removeItemAt(i);
}
}
private function populateDependencies():void{
var dependString:String = _attributes["dependsOn"] as String;
if (dependString == null) return;
private function onProgress(event:Event):void {
LogUtil.debug("Module onProgress Event");
callbackHandler(event);
}
private function onSetup(event:Event):void {
LogUtil.debug("Module onSetup Event");
callbackHandler(event);
}
private function onError(event:Event):void {
LogUtil.debug("Module onError Event");
callbackHandler(event);
var trimSpaces:String = dependString.replace(" ", "");
var dependencies:Array = trimSpaces.split(",");
for (var i:int = 0; i<dependencies.length; i++){
unresolvedDependencies.addItem(dependencies[i]);
}
}
private function onUnload(event:Event):void {
LogUtil.debug("Module onUnload Event");
callbackHandler(event);
}
*/
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment