/// <summary> /// Adiciona as facetas do arquivo de descrição ao componente. /// </summary> /// <param name="context">O componente</param> /// <exception cref="SCSException">Caso ocorra um erro na criação das facetas.</exception> private void AddFacets(ComponentContext context) { XmlNodeList facetsNodeList = xmlComponent.GetElementsByTagName(FACET_ELEMENT); foreach (XmlNode facetNode in facetsNodeList) { String name = facetNode[FACET_NAME].InnerText; String interfaceName = facetNode[FACET_REP_ID].InnerText; XmlNode servantNode = facetNode[FACET_SERVANT]; String servantName = servantNode.InnerText; String servantAssembly = servantNode.Attributes[FACET_SERVANT_ASSEMBLY_ATTRIBUTE].InnerText; String type = String.Format("{0}, {1}", servantName, servantAssembly); MarshalByRefObject servant = InstantiateServant(type, context); if (!IiopNetUtil.CheckInterface(servant, interfaceName)) { string errorMsg = String.Format( "A faceta '{0}' não suporta a interface '{1}'", name, interfaceName); throw new SCSException(errorMsg); } if (context.GetFacetByName(name) != null) { logger.Info(String.Format("A faceta {0} foi atualizada.", name)); try { context.UpdateFacet(name, servant); } catch (ArgumentException e) { throw new SCSException(e.Message); } } else { logger.Debug(String.Format("Adicionando a faceta {0}", name)); context.AddFacet(name, interfaceName, servant); } } }