public BioBrick loadBioBrick(XmlNode bioBrickNode)
{
reinitVars();
//common biobrick attributes
try
{
bioBrickName = bioBrickNode.Attributes[BioBricksXMLTags.ID].Value;
bioBrickSize = bioBrickNode.Attributes[BioBricksXMLTags.SIZE].Value;
bioBrickType = bioBrickNode.Attributes[BioBricksXMLTags.TYPE].Value;
}
catch (NullReferenceException exc)
{
Logger.Log("BioBrickLoader::loadBioBricksFromFile bad xml, missing field\n" + exc, Logger.Level.WARN);
return(null);
}
catch (Exception exc)
{
Logger.Log("BioBrickLoader::loadBioBricksFromFile failed, got exc=" + exc, Logger.Level.WARN);
return(null);
}
Logger.Log("BioBrickLoader::loadBioBricksFromFile got id=" + bioBrickName
+ ", size=" + bioBrickSize
+ ", type=" + bioBrickType
, Logger.Level.TRACE);
if (checkString(bioBrickName))
{
switch (bioBrickType)
{
case BioBricksXMLTags.PROMOTER:
logCurrentBioBrick(BioBricksXMLTags.PROMOTER);
foreach (XmlNode attr in bioBrickNode)
{
switch (attr.Name)
{
case BioBricksXMLTags.BETA:
beta = attr.InnerText;
break;
case BioBricksXMLTags.FORMULA:
formula = attr.InnerText;
break;
case XMLTags.COMMENT:
break;
default:
logUnknownAttr(attr, BioBricksXMLTags.PROMOTER);
break;
}
}
if (checkString(beta) && checkString(formula))
{
bioBrick = new PromoterBrick(bioBrickName, parseFloat(beta), formula);
}
break;
case BioBricksXMLTags.RBS:
logCurrentBioBrick(BioBricksXMLTags.RBS);
foreach (XmlNode attr in bioBrickNode)
{
switch (attr.Name)
{
case BioBricksXMLTags.RBSFACTOR:
rbsfactor = attr.InnerText;
break;
case XMLTags.COMMENT:
break;
default:
logUnknownAttr(attr, BioBricksXMLTags.RBS);
break;
}
}
if (checkString(rbsfactor))
{
bioBrick = new RBSBrick(bioBrickName, parseFloat(rbsfactor));
}
break;
case BioBricksXMLTags.GENE:
logCurrentBioBrick(BioBricksXMLTags.GENE);
foreach (XmlNode attr in bioBrickNode)
{
switch (attr.Name)
{
case BioBricksXMLTags.PROTEIN:
protein = attr.InnerText;
break;
case XMLTags.COMMENT:
break;
default:
logUnknownAttr(attr, BioBricksXMLTags.GENE);
break;
}
}
if (checkString(protein))
{
bioBrick = new GeneBrick(bioBrickName, protein);
}
break;
case BioBricksXMLTags.TERMINATOR:
logCurrentBioBrick(BioBricksXMLTags.TERMINATOR);
foreach (XmlNode attr in bioBrickNode)
{
switch (attr.Name)
{
case BioBricksXMLTags.TERMINATORFACTOR:
terminatorfactor = attr.InnerText;
break;
case XMLTags.COMMENT:
break;
default:
logUnknownAttr(attr, BioBricksXMLTags.TERMINATOR);
break;
}
}
if (checkString(terminatorfactor))
{
bioBrick = new TerminatorBrick(bioBrickName, parseFloat(terminatorfactor));
}
break;
default:
Logger.Log("BioBrickLoader::loadBioBricksFromFile wrong type " + bioBrickType, Logger.Level.WARN);
break;
}
if (null != bioBrick && checkString(bioBrickSize))
{
bioBrick.setSize(parseInt(bioBrickSize));
}
return(bioBrick);
}
else
{
Logger.Log("BioBrickLoader::loadBioBricksFromFile Error : missing attribute id in BioBrick node", Logger.Level.WARN);
return(null);
}
}