setLazyLoad("true");
addBean(FullClassPath, BeanName, 1, InitMethod);
addBean(FullClassPath, BeanName, 0, InitMethod);
// Default the name to the name of the bean if no name list is provided.
If (Len(trim(BeanName)) LT 1)
{
BeanName = ListLast(FullClassPath,".");
};
// Set the config properties for the Singleton
// Create the necessary struct
variables.config[BeanName] = StructNew();
// Set it as a Singleton
variables.config[BeanName].Singleton = Singleton;
// Set the path
variables.config[BeanName].Path = FullClassPath;
// Save the initi method
variables.config[BeanName].InitMethod = InitMethod;
// Initialize the dependency lists
variables.config[BeanName].ConstructorDependencies = "";
variables.config[BeanName].SetterDependencies = "";
variables.config[BeanName].MixinDependencies = "";
variables.config[BeanName].ConstructorDependencyStruct = StructNew();
variables.config[BeanName].SetterDependencyStruct = StructNew();
variables.config[BeanName].MixinDependencyStruct = StructNew();
addBeanFromFactory(FactoryBean, FactoryMethod, BeanName, 1);
addBeanFromFactory(FactoryBean, FactoryMethod, BeanName, 0);
// Set the config properties for the Singleton
// Create the necessary struct
variables.config[BeanName] = StructNew();
// Set it as a Singleton
variables.config[BeanName].Singleton = Singleton;
// Set the Factory bean
variables.config[BeanName].FactoryBean = FactoryBean;
// Set the Factory method
variables.config[BeanName].FactoryMethod = FactoryMethod;
// Initialize the dependency lists
variables.config[BeanName].ConstructorDependencies = "";
variables.config[BeanName].SetterDependencies = "";
variables.config[BeanName].MixinDependencies = "";
// Add the constructor dependencies
variables.config[BeanName].ConstructorDependencies = ListAppend(variables.config[BeanName].ConstructorDependencies, InjectedBeanName);
If (len(PropertyName) LT 1)
{PropertyName = InjectedBeanName;};
variables.config[BeanName].ConstructorDependencyStruct[InjectedBeanName] = PropertyName;
// Add the setter dependencies
variables.config[BeanName].SetterDependencies = ListAppend(variables.config[BeanName].SetterDependencies, InjectedBeanName);
If (len(PropertyName) LT 1)
{PropertyName = InjectedBeanName;};
variables.config[BeanName].SetterDependencyStruct[InjectedBeanName] = PropertyName;
// Add the mixin dependencies
variables.config[BeanName].MixinDependencies = ListAppend(variables.config[BeanName].MixinDependencies, InjectedBeanName);
If (len(PropertyName) LT 1)
{PropertyName = InjectedBeanName;};
variables.config[BeanName].MixinDependencyStruct[InjectedBeanName] = PropertyName;
// Add the constructor property
variables.config[BeanName].ConstructorProperties[PropertyName] = PropertyValue;
// Add the setter property
variables.config[BeanName].SetterProperties[PropertyName] = PropertyValue;
// Add the mixin property
variables.config[BeanName].MixinProperties[PropertyName] = PropertyValue;
var i = 0;
// parse coldspring xml bean config
var xml = XMLParse(arguments.XMLFilePath,false);
// use XMLSearch to create array of all bean defs
var beans = XMLSearch(xml,'/beans/bean');
// loop over beans to create singleton or transient
For (i = 1; i lte ArrayLen(beans); i = i + 1)
{
if (structKeyExists(arguments,"properties"))
{
translateBean(beans[i],arguments.properties);
}
else
{
translateBean(beans[i]);
}
}
var beanStruct = StructNew();
var Key = "";
// loop over bean tag attributes and create beanStruct keys
For (key in bean.XmlAttributes)
{
if (key eq "factory-bean")
{
beanStruct.FactoryBean = bean.XmlAttributes[key];
};
if (key eq "factory-method")
{
beanStruct.FactoryMethod = bean.XmlAttributes[key];
};
if (key eq "singleton")
{
beanStruct.Singleton = bean.XmlAttributes[key];
};
if (key eq "class")
{
beanStruct.FullClassPath = bean.XmlAttributes[key];
};
if (key eq "id")
{
beanStruct.BeanName = bean.XmlAttributes[key];
};
if (key eq "init-method")
{
beanStruct.InitMethod = bean.XmlAttributes[key];
};
};
// if Singleton is not defined, or if beanStruct has a key Singleton eq false, create transient
if (not (structKeyExists(beanStruct,"Singleton")) or (not beanStruct.Singleton))
{
// if beanStruct contains key FactoryBean, then create transient from factory
if (structKeyExists(beanStruct,"FactoryBean"))
{
addTransientFromFactory(argumentCollection=beanStruct);
}
else
{
addTransient(argumentCollection=beanStruct);
};
}
else
{
// if beanStruct contains key FactoryBean, then create singleton from factory
if (structKeyExists(beanStruct,"FactoryBean"))
{
addSingletonFromFactory(argumentCollection=beanStruct);
}
else
{
addSingleton(argumentCollection=beanStruct);
};
};
if (structKeyExists(arguments,"props"))
{
// add constructor dependecies and properties
translateBeanChildren(arguments.bean,'constructor-arg',arguments.props);
// add setter dependecies and properties
translateBeanChildren(arguments.bean,'property',arguments.props);
// add mixin dependecies and properties
translateBeanChildren(arguments.bean,'mixin',arguments.props);
}
else
{
// add constructor dependecies and properties
translateBeanChildren(arguments.bean,'constructor-arg');
// add setter dependecies and properties
translateBeanChildren(arguments.bean,'property');
// add mixin dependecies and properties
translateBeanChildren(arguments.bean,'mixin');
}
var children = "";
var entries = "";
var hashMap = "";
var property = "";
var key = "";
var i = 1;
var j = 1;
// find all constructor properties and dependencies
children = XMLSearch(bean,arguments.childTagName);
for (i = 1; i lte ArrayLen(children); i = i + 1)
{
// child element "value"
if (structKeyExists(children[i],"value"))
{
if ((structKeyExists(arguments,"props")) and (structKeyExists(arguments.props,children[i].XmlAttributes["name"])))
{
property = arguments.props[#ReplaceList(children[i].value.XmlText,"${,}",",")#];
}
else
{
property = children[i].value.XmlText;
};
switch (arguments.childTagName)
{
case 'constructor-arg' :
{
addConstructorProperty(bean.XmlAttributes["id"],children[i].XmlAttributes["name"],property);
};
break;
case 'property' :
{
addSetterProperty(bean.XmlAttributes["id"],children[i].XmlAttributes["name"],property);
};
break;
case 'mixin' :
{
addMixinProperty(bean.XmlAttributes["id"],children[i].XmlAttributes["name"],property);
};
break;
};
};
// child element "map"
if (structKeyExists(children[i],"map"))
{
entries = XMLSearch(children[i],'map/entry');
hashMap = structNew();
for (j = 1; j lte ArrayLen(entries); j = j + 1)
{
if (structKeyExists(entries[j],"value"))
{
hashMap[entries[j].XmlAttributes["key"]] = entries[j].value.XmlText;
}
else if (structKeyExists(entries[j],"ref"))
{
hashMap[entries[j].XmlAttributes["key"]] = entries[j].ref.XmlAttributes["bean"];
}
}
switch (arguments.childTagName)
{
case 'constructor-arg' :
{
addConstructorProperty(bean.XmlAttributes["id"],children[i].XmlAttributes["name"],hashMap);
};
break;
case 'property' :
{
addSetterProperty(bean.XmlAttributes["id"],children[i].XmlAttributes["name"],hashMap);
};
break;
case 'mixin' :
{
addMixinProperty(bean.XmlAttributes["id"],children[i].XmlAttributes["name"],hashMap);
};
break;
};
};
// child element "ref"
if (structKeyExists(children[i],"ref"))
{
switch (arguments.childTagName)
{
case 'constructor-arg' :
{
addConstructorDependency(bean.XmlAttributes["id"],children[i].ref.XmlAttributes["bean"],children[i].XmlAttributes["name"]);
};
break;
case 'property' :
{
addSetterDependency(bean.XmlAttributes["id"],children[i].ref.XmlAttributes["bean"],children[i].XmlAttributes["name"]);
};
break;
case 'mixin' :
{
addMixinDependency(bean.XmlAttributes["id"],children[i].ref.XmlAttributes["bean"],children[i].XmlAttributes["name"]);
};
break;
};
};
//child element "bean"
if (structKeyExists(children[i],"bean"))
{
// use recursion
if (structKeyExists(arguments,"props"))
{
translateBean(children[i].bean,arguments.props);
}
else
{
translateBean(children[i].bean);
}
switch (arguments.childTagName)
{
case 'constructor-arg' :
{
addConstructorDependency(bean.XmlAttributes["id"],children[i].XmlAttributes["name"],children[i].bean.XmlAttributes["id"]);
};
break;
case 'property' :
{
addSetterDependency(bean.XmlAttributes["id"],children[i].XmlAttributes["name"],children[i].bean.XmlAttributes["id"]);
};
break;
case 'mixin' :
{
addMixinDependency(bean.XmlAttributes["id"],children[i].XmlAttributes["name"],children[i].bean.XmlAttributes["id"]);
};
break;
};
};
};