/** * Parses a plugin definition from an xml string. * * @param xml XML containing plugin definition. * @return A plugin definition instance. * @throws Exception Unspecified exception. */ public static PluginDefinition fromXml(String xml) throws Exception { return (PluginDefinition) new PluginXmlParser().fromXml(xml, "plugin"); }
@Override protected void doParse(Element element, BeanDefinitionBuilder builder) { doParse(element, null, builder); }
@Override protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { builder.addDependsOn("manifestIterator"); builder.addPropertyValue("path", getResourcePath(parserContext)); addProperties(element, builder); Element resourceTag = findTag("resource", element); NodeList resources = getTagChildren("resource", element); parseResources((Element) resources.item(i), builder, resourceList); Element securityTag = findTag("security", element); addProperties(securityTag, builder); ManagedList<AbstractBeanDefinition> authorityList = new ManagedList<>(); NodeList authorities = getTagChildren("security", element); parseAuthorities((Element) authorities.item(i), builder, authorityList); Element serializationTag = findTag("serialization", element); addProperties(serializationTag, builder); ManagedList<AbstractBeanDefinition> propertyList = new ManagedList<>(); NodeList properties = getTagChildren("serialization", element); parseProperties((Element) properties.item(i), builder, propertyList);
Class<? extends IPluginResource> resourceClass = null; switch (getResourceType(getNodeName(resource))) { case button: resourceClass = PluginResourceButton.class; addProperties(resource, resourceBuilder); resourceList.add(resourceBuilder.getBeanDefinition());
/** * Parse the property list. * * @param element Root property tag. * @param builder Bean definition builder. * @param propertyList List of properties to return. */ private void parseProperties(Element element, BeanDefinitionBuilder builder, ManagedList<AbstractBeanDefinition> propertyList) { NodeList properties = element.getChildNodes(); for (int i = 0; i < properties.getLength(); i++) { Node node = properties.item(i); if (!(node instanceof Element)) { continue; } Element property = (Element) node; BeanDefinitionBuilder propertyBuilder = BeanDefinitionBuilder.genericBeanDefinition(PropertyInfo.class); addProperties(property, propertyBuilder); parseConfig(property, propertyBuilder); propertyList.add(propertyBuilder.getBeanDefinition()); } }
@Test public void parserTest() throws Exception { String xml = MockTest.getTextFromResource("pluginDefinition.xml"); PluginDefinition def = PluginXmlParser.fromXml(xml); assertEquals("Test1", def.getName()); assertEquals("plugin-test", def.getId()); assertEquals(def.getResources().size(), 4); assertTrue(def.getResources().get(0) instanceof PluginResourceButton); assertTrue(def.getResources().get(1) instanceof PluginResourceButton); assertTrue(def.getResources().get(2) instanceof PluginResourceHelp); assertTrue(def.getResources().get(3) instanceof PluginResourcePropertyGroup); }
@Override public void init() { registerBeanDefinitionParser("plugin", new PluginXmlParser()); }
/** * Parses out configuration settings for current property descriptor. * * @param property Root element * @param propertyBuilder Bean definition builder. */ private void parseConfig(Element property, BeanDefinitionBuilder propertyBuilder) { Element config = (Element) getTagChildren("config", property).item(0); if (config != null) { Properties properties = new Properties(); NodeList entries = getTagChildren("entry", config); for (int i = 0; i < entries.getLength(); i++) { Element entry = (Element) entries.item(i); String key = entry.getAttribute("key"); String value = entry.getTextContent().trim(); properties.put(key, value); } propertyBuilder.addPropertyValue("config", properties); } }
/** * Parse the authority list. * * @param element Root authority tag. * @param builder Bean definition builder. * @param authorityList List of authorities to return. */ private void parseAuthorities(Element element, BeanDefinitionBuilder builder, ManagedList<AbstractBeanDefinition> authorityList) { NodeList authorities = element.getChildNodes(); for (int i = 0; i < authorities.getLength(); i++) { Node node = authorities.item(i); if (!(node instanceof Element)) { continue; } Element authority = (Element) node; BeanDefinitionBuilder authorityBuilder = BeanDefinitionBuilder .genericBeanDefinition(PluginDefinition.Authority.class); addProperties(authority, authorityBuilder); authorityList.add(authorityBuilder.getBeanDefinition()); } }