All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.anotheria.asg.generator.parser.XMLViewParser Maven / Gradle / Ivy

There is a newer version: 4.3.0
Show newest version
package net.anotheria.asg.generator.parser;

import net.anotheria.asg.generator.GeneratorDataRegistry;
import net.anotheria.asg.generator.meta.MetaModule;
import net.anotheria.asg.generator.view.meta.MetaCustomFunctionElement;
import net.anotheria.asg.generator.view.meta.MetaCustomSection;
import net.anotheria.asg.generator.view.meta.MetaDecorator;
import net.anotheria.asg.generator.view.meta.MetaDialog;
import net.anotheria.asg.generator.view.meta.MetaEmptyElement;
import net.anotheria.asg.generator.view.meta.MetaFieldElement;
import net.anotheria.asg.generator.view.meta.MetaFunctionElement;
import net.anotheria.asg.generator.view.meta.MetaListElement;
import net.anotheria.asg.generator.view.meta.MetaModuleSection;
import net.anotheria.asg.generator.view.meta.MetaSection;
import net.anotheria.asg.generator.view.meta.MetaValidator;
import net.anotheria.asg.generator.view.meta.MetaView;
import net.anotheria.asg.generator.view.meta.MetaViewElement;
import net.anotheria.util.StringUtils;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * XML Parser for MetaViews.
 *
 * @author another
 * @version $Id: $Id
 */
public final class XMLViewParser {

	/**
	 * {@link Logger} instance.
	 */
	private static final Logger LOGGER = LoggerFactory.getLogger(XMLViewParser.class);
	
	/**
	 * 

parseViews.

* * @param content a {@link java.lang.String} object. * @return a {@link java.util.List} object. */ public static final List parseViews(String content){ SAXBuilder reader = new SAXBuilder(); reader.setValidation(false); List ret = new ArrayList(); try{ Document doc = reader.build(new StringReader(content)); Element root = doc.getRootElement(); @SuppressWarnings("unchecked")List views = root.getChildren("view"); for (Element elem :views){ MetaView view = parseView(elem); ret.add(view); } }catch(JDOMException e){ LOGGER.error("parseViews", e); throw new RuntimeException("Can't parse view because: "+e.getMessage()); }catch(IOException e){ LOGGER.error("parseViews", e); throw new RuntimeException("Can't parse view because: "+e.getMessage()); } return ret; } private static final MetaView parseView(Element m){ String name = m.getAttributeValue("name"); MetaView view = new MetaView(name); //System.out.println("parsing view: "+name); @SuppressWarnings("unchecked")List sections = m.getChild("sections").getChildren(); for (int i=0; i elements = elementsRoot.getChildren(); for (int i=0; i dialogs = section.getChildren("dialog"); //System.out.println("To parse "+dialogs.size()+" dialogs."); for (int i=0; i dialogElements = d.getChild("elements").getChildren(); for (int e=0; e filters = section.getChildren("filter"); for (Element f : filters){ s.addMetaFilter(GeneratorDataRegistry.getInstance().createFilter(f.getAttributeValue("name"), f.getAttributeValue("field"))); } return s; } private static final MetaViewElement parseViewElement(MetaModuleSection section, Element elem){ String type = elem.getAttributeValue("type"); MetaViewElement element = null; if (type.equals("field")){ element = parseFieldElement(elem); } if (type.equals("function")){ element = parseFunctionElement(elem); } if (type.equals("list")){ element = parseListElement(elem); } if (type.equals("empty")){ element = parseEmptyElement(elem); } if (type.equals("customfunction")){ element = parseCustomFunctionElement(elem); } if (element==null) throw new RuntimeException("unknown element type "+type); String comparable = elem.getAttributeValue("comparable"); if (comparable!=null && comparable.equals("true") ) element.setComparable(true); if (section!=null && comparable!=null && comparable.equals("default") ){ element.setComparable(true); section.setDefaultSortable(element); } String fieldCaption = elem.getAttributeValue("caption"); if (!StringUtils.isEmpty(fieldCaption)) { element.setCaption(fieldCaption); } String description = elem.getChildText("description"); if (!StringUtils.isEmpty(description)) { element.setDescription(description); } String validatorsName = elem.getAttributeValue("validator"); if (validatorsName != null ) { String[] validators = validatorsName.split(","); List metaValidators = new ArrayList(validators.length); for (String validatorName : validators) { MetaValidator validator = GeneratorDataRegistry.getInstance().getValidator(validatorName); metaValidators.add(validator); if (validator == null) { throw new IllegalArgumentException("Uknown validator <" + validatorName + "> for view element def " + elem+ ". Check that you have validators-def.xml in classpath and validator definition is present there."); } } element.setValidators(metaValidators); } try{ Element decElement = elem.getChild("decorator"); if (decElement!=null){ element.setDecorator(parseDecorator(decElement)); //System.out.println("found decorator!"); } }catch(Exception e){ LOGGER.error("*********** Could not parse decorator cause: " + e.getMessage() + " ***********"); } return element; } private static final MetaDecorator parseDecorator(Element e){ String name = e.getAttributeValue("name"); String rule = e.getChildText("rule"); MetaDecorator dec = GeneratorDataRegistry.getInstance().createDecorator(name, rule); return dec; } private static final MetaFieldElement parseFieldElement(Element elem){ String name = elem.getAttributeValue("name"); String readonly = elem.getAttributeValue("readonly"); String autocompleteOff = elem.getAttributeValue("autocompleteOff"); String rich = elem.getAttributeValue("rich"); String datetime = elem.getAttributeValue("datetime"); String showLink = elem.getAttributeValue("showLink"); MetaFieldElement field = new MetaFieldElement(name); if (readonly!=null && readonly.equals("true")) field.setReadonly(true); if (rich!=null && rich.equals("true")) field.setRich(true); if (autocompleteOff!=null && autocompleteOff.equals("true")) field.setAutocompleteOff(true); if (datetime != null && datetime.equals("true")) field.setDatetime(true); if (showLink != null && showLink.equals("true")) field.setShowLink(true); return field; } private static final MetaEmptyElement parseEmptyElement(Element elem){ return new MetaEmptyElement(); } private static final MetaFunctionElement parseFunctionElement(Element elem){ String name = elem.getAttributeValue("name"); MetaFunctionElement ret = new MetaFunctionElement(name); if (elem.getAttribute("caption")!=null) ret.setCaption(elem.getAttributeValue("caption")); return ret; } private static final MetaCustomFunctionElement parseCustomFunctionElement(Element elem){ String name = elem.getAttributeValue("name"); MetaCustomFunctionElement ret = new MetaCustomFunctionElement(name); ret.setCaption(elem.getChildText("caption")); ret.setLink(elem.getChildText("link")); return ret; } private static final MetaListElement parseListElement(Element e){ MetaListElement ret = new MetaListElement(); @SuppressWarnings("unchecked")List elements = e.getChildren("element"); for (int i=0; i




© 2015 - 2025 Weber Informatics LLC | Privacy Policy