Example usage for org.dom4j Element elementIterator

List of usage examples for org.dom4j Element elementIterator

Introduction

In this page you can find the example usage for org.dom4j Element elementIterator.

Prototype

Iterator<Element> elementIterator(QName qName);

Source Link

Document

Returns an iterator over the elements contained in this element which match the given fully qualified name.

Usage

From source file:de.xwic.sandbox.server.installer.XmlImport.java

License:Apache License

/**
 * @param entity//from  w  w  w  .  j a va 2s  .c om
 * @param property
 * @param elProp
 */
@SuppressWarnings("unchecked")
private void loadPropertyValue(IEntity entity, Property property, Element elProp) throws Exception {

    PropertyDescriptor pd = property.getDescriptor();
    Class<?> type = pd.getPropertyType();
    Method mWrite = pd.getWriteMethod();
    // check if value is null
    boolean isNull = elProp.element(XmlExport.ELM_NULL) != null;

    Object value = null;
    if (!isNull) {

        if (Set.class.isAssignableFrom(type)) {
            // a set.
            Set<IEntity> set = new HashSet<IEntity>();
            Element elSet = elProp.element(XmlExport.ELM_SET);
            for (Iterator<?> itSet = elSet.elementIterator(XmlExport.ELM_ELEMENT); itSet.hasNext();) {
                Element elSetElement = (Element) itSet.next();
                String typeElement = elSetElement.attributeValue("type");
                int refId = Integer.parseInt(elSetElement.getText());

                Integer newId = importedEntities.get(new EntityKey(typeElement, refId));
                if (newId != null) {
                    // its an imported object
                    refId = newId.intValue();
                }
                DAO refDAO = DAOSystem.findDAOforEntity(typeElement);
                IEntity refEntity = refDAO.getEntity(refId);
                set.add(refEntity);
            }
            value = set;

        } else if (IEntity.class.isAssignableFrom(type)) {
            // entity type
            int refId = Integer.parseInt(elProp.getText());
            Integer newId = importedEntities.get(new EntityKey(type.getName(), refId));
            if (newId != null) {
                // its an imported object
                refId = newId.intValue();
            }
            if (IPicklistEntry.class.isAssignableFrom(type)) {
                IPicklisteDAO plDAO = (IPicklisteDAO) DAOSystem.getDAO(IPicklisteDAO.class);
                value = plDAO.getPickListEntryByID(refId);
            } else {
                DAO refDAO = DAOSystem.findDAOforEntity((Class<? extends IEntity>) type);
                IEntity refEntity = refDAO.getEntity(refId);
                value = refEntity;
            }

        } else {
            // basic type
            String text = elProp.getText();
            if (String.class.equals(type)) {
                value = text;
            } else if (int.class.equals(type) || Integer.class.equals(type)) {
                value = Integer.valueOf(text);
            } else if (long.class.equals(type) || Long.class.equals(type)) {
                value = Long.valueOf(text);
            } else if (boolean.class.equals(type) || Boolean.class.equals(type)) {
                value = Boolean.valueOf(text.equals("true"));
            } else if (Date.class.equals(type)) {
                value = new Date(Long.parseLong(text));
            } else if (double.class.equals(type) || Double.class.equals(type)) {
                value = Double.valueOf(text);
            }
        }

    }
    mWrite.invoke(entity, new Object[] { value });

}

From source file:delphsim.model.Compartimento.java

License:Open Source License

/**
 * Mtodo para cargar los datos contenidos en un objeto de tipo
 * <CODE>org.dom4j.Element</CODE> en este objeto.
 * @param elementoCompartimento El objeto <CODE>org.dom4j.Element</CODE>.
 *//*from   ww  w  . j  a v a  2s.  c o m*/
public void cargarDesdeXML(Element elementoCompartimento) {
    this.setNombre(elementoCompartimento.attributeValue("nombre"));
    this.setHabitantes(Long.valueOf(elementoCompartimento.attributeValue("habitantes")));

    String[] procVinculados = new String[elementoCompartimento.elements("procesoVinculado").size()];
    int indice = 0;
    for (Iterator i = elementoCompartimento.elementIterator("procesoVinculado"); i.hasNext();) {
        Element elementoProcesoVinculado = (Element) i.next();
        procVinculados[indice++] = elementoProcesoVinculado.attributeValue("nombre");
    }
    this.setProcesosVinculados(procVinculados);

    String[] compVinculados = new String[elementoCompartimento.elements("compartimentoVinculados").size()];
    indice = 0;
    for (Iterator i = elementoCompartimento.elementIterator("compartimentoVinculados"); i.hasNext();) {
        Element elementoCompartimentoVinculado = (Element) i.next();
        compVinculados[indice++] = elementoCompartimentoVinculado.attributeValue("nombre");
    }
    this.setCompartimentosVinculados(compVinculados);

    Element elementoDefinicionContinua = elementoCompartimento.element("definicionContinua");
    if (elementoDefinicionContinua != null) {
        this.setDefinicionContinua(elementoDefinicionContinua.attributeValue("definicion"));
    }

}

From source file:delphsim.model.Division.java

License:Open Source License

/**
 * Mtodo para cargar los datos contenidos en un objeto de tipo
 * <CODE>org.dom4j.Element</CODE> en este objeto.
 * @param elementoDivision El objeto <CODE>org.dom4j.Element</CODE>.
 *///from ww  w  . j  av a2  s  .c om
public void cargarDesdeXML(Element elementoDivision) {
    this.setNombre(elementoDivision.attributeValue("nombre"));
    this.categorias = new Categoria[elementoDivision.elements("categoria").size()];
    int indice = 0;
    for (Iterator i = elementoDivision.elementIterator("categoria"); i.hasNext();) {
        Element elementoCategoria = (Element) i.next();
        this.categorias[indice] = new Categoria();
        this.categorias[indice++].cargarDesdeXML(elementoCategoria);
    }
}

From source file:delphsim.model.Epidemia.java

License:Open Source License

/**
 * Abre un archivo XML y, si es correcto y vlido, carga su informacin en
 * esta epidemia./*from  w  w w . ja va  2s. c o  m*/
 * @param XMLSchema Ruta relativa al archivo .xsd contra el que hay que
 *                  validar el fichero que se quiere abrir.
 * @param archivoOrigen El fichero que se quiere abrir.
 * @return Una cadena con los errores detectados. Vaca si no hay ninguno.
 * @throws org.dom4j.DocumentException Si hay algn problema al analizar el archivo.
 * @throws org.xml.sax.SAXException Si hay algn problema al validar el archivo.
 * @throws java.io.IOException Si hay algn problema al leer el archivo.
 */
public String abrirXML(String XMLSchema, File archivoOrigen)
        throws DocumentException, SAXException, IOException {
    // Comprobar que el archivo se ajusta al esquema XML de DelphSim
    SchemaValidator validadorEsquemas = new SchemaValidator();
    validadorEsquemas.setXMLSchemaURL(new File(System.getProperty("java.class.path")).getParent() + XMLSchema);
    String errores = validadorEsquemas.validar(archivoOrigen);
    if (errores.equals("")) {
        // Abrir el archivo XML de la ruta especificada y coger el elemento "epidemia" (raz)
        Document archivoXML = this.analizar(archivoOrigen);
        Element elementoEpidemia = archivoXML.getRootElement();
        if (elementoEpidemia.attributeValue("unidadTiempo") != null) {
            this.unidadTiempo = elementoEpidemia.attributeValue("unidadTiempo");
        }

        // Iterar para recuperar todos los elementos "parmetro" y crear los objetos
        Vector vectorParametros = new Vector();
        this.parametros = new Parametro[elementoEpidemia.elements("parametro").size()];
        int indice = 0;
        for (Iterator i = elementoEpidemia.elementIterator("parametro"); i.hasNext();) {
            Element elementoParametro = (Element) i.next();
            this.parametros[indice] = new Parametro();
            this.parametros[indice].cargarDesdeXML(elementoParametro);
            vectorParametros.add(this.parametros[indice].getNombre());
            this.palabrasReservadas.add(this.parametros[indice].getNombre());
            indice++;
        }

        // Iterar para recuperar todos los elementos "proceso" y crear los objetos
        Vector vectorProcesos = new Vector();
        this.procesos = new Proceso[elementoEpidemia.elements("proceso").size()];
        indice = 0;
        for (Iterator i = elementoEpidemia.elementIterator("proceso"); i.hasNext();) {
            Element elementoProceso = (Element) i.next();
            this.procesos[indice] = new Proceso();
            this.procesos[indice].cargarDesdeXML(elementoProceso);
            vectorProcesos.add(this.procesos[indice].getNombre());
            this.palabrasReservadas.add(this.procesos[indice].getNombre());
            indice++;
        }

        // Comprobar que, dentro de los parmetros, parametrosVinculados y
        // procesosVinculados usen nombres definidos y adems que
        // parametrosVinculados estn en el orden apropiado.
        for (int i = 0; i < this.parametros.length; i++) {
            String nombrePar = this.parametros[i].getNombre();
            String[] parVinc = this.parametros[i].getParametrosVinculados();
            String[] procVinc = this.parametros[i].getProcesosVinculados();
            for (int j = 0; j < parVinc.length; j++) {
                int posicion = vectorParametros.indexOf(parVinc[j]);
                if (posicion == -1) {
                    errores += String.format(
                            "<Error> El parmetro '%s' se utiliza en la definicin del parmetro '%s', "
                                    + "pero ste ltimo no se ha definido realmente.\n\n",
                            nombrePar, parVinc[j]);
                } else if (posicion == i) {
                    errores += String.format("<Error> El parmetro '%s' no puede depender de s mismo.\n\n",
                            nombrePar);
                } else if (posicion < i) {
                    errores += String.format("<Advertencia> El parmetro '%s' depende del parmetro '%s', "
                            + "por lo que debe definirse despus de l.\n\n", parVinc[j], nombrePar);
                }
            }
            for (int j = 0; j < procVinc.length; j++) {
                if (!vectorProcesos.contains(procVinc[j])) {
                    errores += String.format(
                            "<Error> El parmetro '%s' se utiliza en la definicin del proceso '%s', "
                                    + "pero ste ltimo no se ha definido realmente.\n\n",
                            nombrePar, procVinc[j]);
                }
            }
        }
        // Comprobar que, dentro de los procesos, procesosVinculados usen
        // nombres definidos y estn en el orden apropiado.
        for (int i = 0; i < this.procesos.length; i++) {
            String nombreProc = this.procesos[i].getNombre();
            String[] procVinc = this.procesos[i].getProcesosVinculados();
            for (int j = 0; j < procVinc.length; j++) {
                int posicion = vectorProcesos.indexOf(procVinc[j]);
                if (posicion == -1) {
                    errores += String.format(
                            "<Error> El proceso '%s' se utiliza en la definicin del proceso '%s', "
                                    + "pero ste ltimo no se ha definido realmente.\n\n",
                            nombreProc, procVinc[j]);
                } else if (posicion == i) {
                    errores += String.format("<Error> El proceso '%s' no puede depender de s mismo.\n\n",
                            nombreProc);
                } else if (posicion < i) {
                    errores += String.format(
                            "<Advertencia> El proceso '%s' depende del proceso '%s', "
                                    + "por lo que debe definirse despus de l.\n\n",
                            procVinc[j], nombreProc);
                }
            }
        }

        // Recuperar el elemento "poblacion" y crear el objeto correspondiente
        Element elementoPoblacion = elementoEpidemia.element("poblacion");
        this.poblacion = new Poblacion();
        this.poblacion.cargarDesdeXML(elementoPoblacion);

        // Iterar para recuperar todos los elementos "compartimento" y crear los objetos
        // Comprobar que el nmero, nombre y orden de los compartimentos corresponda con las categoras
        this.compartimentos = new Compartimento[elementoEpidemia.elements("compartimento").size()];
        String[] segunDivisiones = this.combinarCategorias(null);
        if (segunDivisiones.length != this.compartimentos.length) {
            errores += "<Error> Los compartimentos definidos en el archivo abierto no se corresponden "
                    + "con la verdadera combinacin de las distintas categoras definidas.";
            return errores;
        }
        indice = 0;
        for (Iterator i = elementoEpidemia.elementIterator("compartimento"); i.hasNext();) {
            Element elementoCompartimento = (Element) i.next();
            this.compartimentos[indice] = new Compartimento();
            this.compartimentos[indice].cargarDesdeXML(elementoCompartimento);
            if (!this.compartimentos[indice].getNombre().equals(segunDivisiones[indice])) {
                errores += "<Error> Los compartimentos definidos en el archivo abierto no se corresponden "
                        + "con la verdadera combinacin de las distintas categoras definidas.";
                return errores;
            }
            this.palabrasReservadas.add(this.compartimentos[indice].getNombre());
            indice++;
        }

        // Generar los atajos correspondientes a los compartimentos cargados
        this.generarAtajos();
    }

    // Devolver los errores producidos, cadena vaca si no ha habido
    return errores;
}

From source file:delphsim.model.Parametro.java

License:Open Source License

/**
 * Mtodo para cargar los datos contenidos en un objeto de tipo
 * <CODE>org.dom4j.Element</CODE> en este objeto.
 * @param elementoParametro El objeto <CODE>org.dom4j.Element</CODE>.
 *///from   w  ww. j  a  v  a 2 s .c o  m
public void cargarDesdeXML(Element elementoParametro) {
    this.setNombre(elementoParametro.attributeValue("nombre"));
    this.setDescripcion(elementoParametro.elementText("descripcion"));

    String[] parVinculados = new String[elementoParametro.elements("parametroVinculado").size()];
    int indice = 0;
    for (Iterator i = elementoParametro.elementIterator("parametroVinculado"); i.hasNext();) {
        Element elementoParametroVinculado = (Element) i.next();
        parVinculados[indice++] = elementoParametroVinculado.attributeValue("nombre");
    }
    this.setParametrosVinculados(parVinculados);

    String[] procVinculados = new String[elementoParametro.elements("procesoVinculado").size()];
    indice = 0;
    for (Iterator i = elementoParametro.elementIterator("procesoVinculado"); i.hasNext();) {
        Element elementoProcesoVinculado = (Element) i.next();
        procVinculados[indice++] = elementoProcesoVinculado.attributeValue("nombre");
    }
    this.setProcesosVinculados(procVinculados);

    String[] compVinculados = new String[elementoParametro.elements("compartimentoVinculado").size()];
    indice = 0;
    for (Iterator i = elementoParametro.elementIterator("compartimentoVinculado"); i.hasNext();) {
        Element elementoCompartimentoVinculado = (Element) i.next();
        compVinculados[indice++] = elementoCompartimentoVinculado.attributeValue("nombre");
    }
    this.setCompartimentosVinculados(compVinculados);

    Element elementoDefinicionContinua = elementoParametro.element("definicionContinua");
    if (elementoDefinicionContinua != null) {
        this.setDefinicionContinua(elementoDefinicionContinua.attributeValue("definicion"));
    }
}

From source file:delphsim.model.Poblacion.java

License:Open Source License

/**
 * Mtodo para cargar los datos contenidos en un objeto de tipo
 * <CODE>org.dom4j.Element</CODE> en este objeto.
 * @param elementoPoblacion El objeto <CODE>org.dom4j.Element</CODE>.
 *///  w ww.j  av a2  s.c  om
public void cargarDesdeXML(Element elementoPoblacion) {
    this.setNombre(elementoPoblacion.attributeValue("nombre"));
    this.setHabitantes(Long.valueOf(elementoPoblacion.attributeValue("habitantes")));
    this.divisiones = new Division[elementoPoblacion.elements("division").size()];
    int indice = 0;
    for (Iterator i = elementoPoblacion.elementIterator("division"); i.hasNext();) {
        Element elementoDivision = (Element) i.next();
        this.divisiones[indice] = new Division();
        this.divisiones[indice++].cargarDesdeXML(elementoDivision);
    }
}

From source file:delphsim.model.Proceso.java

License:Open Source License

/**
 * Mtodo para cargar los datos contenidos en un objeto de tipo
 * <CODE>org.dom4j.Element</CODE> en este objeto.
 * @param elementoProceso El objeto <CODE>org.dom4j.Element</CODE>.
 *//*w w  w. j  a va2s  . co m*/
public void cargarDesdeXML(Element elementoProceso) {
    this.setNombre(elementoProceso.attributeValue("nombre"));
    this.setDescripcion(elementoProceso.elementText("descripcion"));

    String[] procVinculados = new String[elementoProceso.elements("procesoVinculado").size()];
    int indice = 0;
    for (Iterator i = elementoProceso.elementIterator("procesoVinculado"); i.hasNext();) {
        Element elementoProcesoVinculado = (Element) i.next();
        procVinculados[indice++] = elementoProcesoVinculado.attributeValue("nombre");
    }
    this.setProcesosVinculados(procVinculados);

    String[] compVinculados = new String[elementoProceso.elements("compartimentoVinculado").size()];
    indice = 0;
    for (Iterator i = elementoProceso.elementIterator("compartimentoVinculado"); i.hasNext();) {
        Element elementoCompartimentoVinculado = (Element) i.next();
        compVinculados[indice++] = elementoCompartimentoVinculado.attributeValue("nombre");
    }
    this.setCompartimentosVinculados(compVinculados);

    Element elementoDefinicionContinua = elementoProceso.element("definicionContinua");
    if (elementoDefinicionContinua != null) {
        this.tramosContinua = new TramoContinua[elementoDefinicionContinua.elements("tramo").size()];
        indice = 0;
        for (Iterator i = elementoDefinicionContinua.elementIterator("tramo"); i.hasNext();) {
            Element elementoTramo = (Element) i.next();
            this.tramosContinua[indice] = new TramoContinua();
            this.tramosContinua[indice++].cargarDesdeXML(elementoTramo);
        }
    }
}

From source file:dkpro.similarity.algorithms.sound.dict.PLS.java

License:Apache License

/**
 *
 * @param dictionaryFilename//from ww  w . j a v  a 2  s .c om
 *            The filename of the PLS dictionary to read in.
 * @throws DocumentException
 */
@SuppressWarnings("unchecked")
public PLS(String dictionaryFilename) throws DocumentException {
    SAXReader reader = new SAXReader();
    Document document = reader.read(dictionaryFilename);
    dict = new MultiValueMap();

    // Get dictionary alphabet and language
    Element lexicon = document.getRootElement();
    alphabetId = lexicon.attributeValue("alphabet");
    dictionaryLanguage = lexicon.attributeValue("lang");

    // Extract dictionary name from metadata
    Map<String, String> namespaceMap = new HashMap<String, String>();
    namespaceMap.put("rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#");
    namespaceMap.put("dc", "http://purl.org/dc/elements/1.1/");
    XPath xpath = document.createXPath("//rdf:Description");
    xpath.setNamespaceURIs(namespaceMap);
    Node node = xpath.selectSingleNode(lexicon);
    if (node != null) {
        dictionaryId = node.valueOf("@dc:title");
    } else {
        dictionaryId = "";
    }

    for (Iterator<Element> lexemeIterator = lexicon.elementIterator("lexeme"); lexemeIterator.hasNext();) {
        Element lexeme = lexemeIterator.next();
        List<Element> graphemes = lexeme.selectNodes("grapheme");
        List<Element> phonemes = lexeme.selectNodes("phoneme");
        for (Element grapheme : graphemes) {
            for (Element phoneme : phonemes) {
                dict.put(grapheme.getText(), phoneme.getText());
            }
        }
    }
}

From source file:edu.common.dynamicextensions.entitymanager.DataTypeFactory.java

License:BSD License

/**
 * This method updates module map by parsing xml file
 * @param xmlFileName file to be parsed/*  w  ww. j av a2 s.  co m*/
 * @return dataType Map
 * @throws DataTypeFactoryInitializationException on Exception
 */
public final Map populateDataTypeMap(String xmlFileName) throws DataTypeFactoryInitializationException {
    dataTypeMap = new HashMap<String, String>();

    SAXReader saxReader = new SAXReader();
    InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(xmlFileName);

    Document document = null;

    try {
        document = saxReader.read(inputStream);
        Element name = null;
        Element databaseDataType = null;

        Element primitiveAttributesElement = document.getRootElement();
        Iterator primitiveAttributeElementIterator = primitiveAttributesElement
                .elementIterator("Primitive-Attribute");

        Element primitiveAttributeElement = null;

        while (primitiveAttributeElementIterator.hasNext()) {
            primitiveAttributeElement = (Element) primitiveAttributeElementIterator.next();

            name = primitiveAttributeElement.element("name");
            databaseDataType = primitiveAttributeElement.element("database-datatype");

            dataTypeMap.put(name.getStringValue(), databaseDataType.getStringValue());
        }
    } catch (DocumentException documentException) {
        throw new DataTypeFactoryInitializationException(documentException);
    }

    return dataTypeMap;
}

From source file:edu.ku.brc.af.core.db.DBTableIdMgr.java

License:Open Source License

/**
 * Reads in datamodel input file and populates the Hashtable of the DBTableMgr with DBTableInfo
 * @param inputFile the input file./*from  www  . jav a  2  s .  com*/
 */
public void initialize(final File inputFile) {
    log.debug(
            "Reading in datamodel file: " + inputFile.getAbsolutePath() + " to create and populate DBTableMgr"); //$NON-NLS-1$ //$NON-NLS-2$
    String classname = null;
    try {
        SAXReader reader = new SAXReader();
        reader.setValidation(false);

        Element databaseNode = XMLHelper.readFileToDOM4J(inputFile);

        if (databaseNode != null) {
            for (Iterator<?> i = databaseNode.elementIterator("table"); i.hasNext();) //$NON-NLS-1$
            {
                Element tableNode = (Element) i.next();
                classname = tableNode.attributeValue("classname"); //$NON-NLS-1$

                String tablename = tableNode.attributeValue("table"); //$NON-NLS-1$
                int tableId = Integer.parseInt(tableNode.attributeValue("tableid")); //$NON-NLS-1$
                boolean isSearchable = XMLHelper.getAttr(tableNode, "searchable", false); //$NON-NLS-1$

                String primaryKeyField = null;

                // iterate through child elements of id nodes, there should only be 1
                for (Iterator<?> i2 = tableNode.elementIterator("id"); i2.hasNext();) //$NON-NLS-1$
                {
                    Element idNode = (Element) i2.next();
                    primaryKeyField = idNode.attributeValue("name"); //$NON-NLS-1$
                }

                if (classname == null) {
                    log.error("classname is null; check input file"); //$NON-NLS-1$
                }
                if (tablename == null) {
                    log.error("tablename is null; check input file"); //$NON-NLS-1$
                }
                if (isFullSchema && primaryKeyField == null) {
                    log.error("primaryKeyField is null; check input file table[" + tablename + "]"); //$NON-NLS-1$ //$NON-NLS-2$
                }
                //log.debug("Populating hashtable ID["+tableId+"]for class: " + classname+" "+ inputFile.getName());

                DBTableInfo tblInfo = new DBTableInfo(tableId, classname, tablename, primaryKeyField,
                        tableNode.attributeValue("abbrv")); //$NON-NLS-1$
                tblInfo.setSearchable(isSearchable);
                tblInfo.setBusinessRuleName(XMLHelper.getAttr(tableNode, "businessrule", null)); //$NON-NLS-1$

                if (hash.get(tableId) != null) {
                    log.error("Table ID used twice[" + tableId + "]"); //$NON-NLS-1$ //$NON-NLS-2$
                }
                hash.put(tableId, tblInfo);
                byClassNameHash.put(classname.toLowerCase(), tblInfo);
                byShortClassNameHash.put(tblInfo.getShortClassName().toLowerCase(), tblInfo);
                tables.add(tblInfo);

                Element idElement = (Element) tableNode.selectSingleNode("id"); //$NON-NLS-1$
                if (idElement != null) {
                    tblInfo.setIdColumnName(getAttr(idElement, "column", null)); //$NON-NLS-1$
                    tblInfo.setIdFieldName(getAttr(idElement, "name", null)); //$NON-NLS-1$
                    tblInfo.setIdType(getAttr(idElement, "type", null)); //$NON-NLS-1$
                }

                for (Iterator<?> ir = tableNode.elementIterator("tableindex"); ir.hasNext();) //$NON-NLS-1$
                {
                    Element irNode = (Element) ir.next();
                    String inxName = getAttr(irNode, "indexName", null);
                    String inxColNames = getAttr(irNode, "columnNames", null);
                    tblInfo.addTableIndex(inxName, inxColNames);
                }

                Element displayElement = (Element) tableNode.selectSingleNode("display"); //$NON-NLS-1$
                if (displayElement != null) {
                    tblInfo.setDefaultFormName(getAttr(displayElement, "view", null)); //$NON-NLS-1$
                    tblInfo.setUiFormatter(getAttr(displayElement, "uiformatter", null)); //$NON-NLS-1$
                    tblInfo.setDataObjFormatter(getAttr(displayElement, "dataobjformatter", null)); //$NON-NLS-1$
                    tblInfo.setSearchDialog(getAttr(displayElement, "searchdlg", null)); //$NON-NLS-1$
                    tblInfo.setNewObjDialog(getAttr(displayElement, "newobjdlg", null)); //$NON-NLS-1$

                } else {
                    tblInfo.setDefaultFormName(""); //$NON-NLS-1$
                    tblInfo.setUiFormatter(""); //$NON-NLS-1$
                    tblInfo.setDataObjFormatter(""); //$NON-NLS-1$
                    tblInfo.setSearchDialog(""); //$NON-NLS-1$
                    tblInfo.setNewObjDialog(""); //$NON-NLS-1$
                }

                for (Iterator<?> ir = tableNode.elementIterator("relationship"); ir.hasNext();) //$NON-NLS-1$
                {
                    Element irNode = (Element) ir.next();
                    DBRelationshipInfo tblRel = new DBRelationshipInfo(
                            irNode.attributeValue("relationshipname"), //$NON-NLS-1$
                            getRelationshipType(irNode.attributeValue("type")), //$NON-NLS-1$
                            irNode.attributeValue("classname"), //$NON-NLS-1$
                            irNode.attributeValue("columnname"), //$NON-NLS-1$
                            irNode.attributeValue("othersidename"), //$NON-NLS-1$
                            irNode.attributeValue("jointable"), //$NON-NLS-1$
                            getAttr(irNode, "required", false), //$NON-NLS-1$
                            getAttr(irNode, "updatable", false), //$NON-NLS-1$
                            getAttr(irNode, "save", false), //$NON-NLS-1$
                            getAttr(irNode, "likemanytoone", false)); //$NON-NLS-1$
                    tblInfo.getRelationships().add(tblRel);
                }

                for (Iterator<?> ir = tableNode.elementIterator("field"); ir.hasNext();) //$NON-NLS-1$
                {
                    Element irNode = (Element) ir.next();

                    int len = -1;
                    String lenStr = irNode.attributeValue("length"); //$NON-NLS-1$
                    if (StringUtils.isNotEmpty(lenStr) && StringUtils.isNumeric(lenStr)) {
                        len = Integer.parseInt(lenStr);
                        //                            if (!UIRegistry.isMobile() && len > 256) // length over 255 are memo/text fields in MySQL and do not need to be constrained
                        //                            {
                        //                                len = 32767;
                        //                            }
                    }
                    DBFieldInfo fieldInfo = new DBFieldInfo(tblInfo, irNode.attributeValue("column"), //$NON-NLS-1$
                            irNode.attributeValue("name"), //$NON-NLS-1$
                            irNode.attributeValue("type"), //$NON-NLS-1$
                            len, getAttr(irNode, "required", false), //$NON-NLS-1$
                            getAttr(irNode, "updatable", false), //$NON-NLS-1$
                            getAttr(irNode, "unique", false), //$NON-NLS-1$
                            getAttr(irNode, "indexed", false), //$NON-NLS-1$
                            getAttr(irNode, "partialDate", false), //$NON-NLS-1$
                            getAttr(irNode, "datePrecisionName", null)); //$NON-NLS-1$
                    // This done to cache the original setting.
                    fieldInfo.setRequiredInSchema(fieldInfo.isRequired());
                    tblInfo.addField(fieldInfo);
                }

                for (Iterator<?> faIter = tableNode.elementIterator("fieldalias"); faIter.hasNext();) //$NON-NLS-1$
                {
                    Element faNode = (Element) faIter.next();
                    String vName = getAttr(faNode, "vname", null);//$NON-NLS-1$
                    String aName = getAttr(faNode, "aname", null);//$NON-NLS-1$
                    if (vName != null && aName != null) {
                        tblInfo.addFieldAlias(vName, aName);
                    }
                }

                //Collections.sort(tblInfo.getFields());
            }
        } else {
            log.error("Reading in datamodel file.  SAX parser got null for the root of the document."); //$NON-NLS-1$
        }

    } catch (java.lang.NumberFormatException numEx) {
        edu.ku.brc.af.core.UsageTracker.incrHandledUsageCount();
        edu.ku.brc.exceptions.ExceptionTracker.getInstance().capture(DBTableIdMgr.class, numEx);
        log.error("Specify datamodel input file: " + inputFile.getAbsolutePath() //$NON-NLS-1$
                + " failed to provide valid table id for class/table:" + classname); //$NON-NLS-1$
        log.error(numEx);
    } catch (Exception ex) {
        edu.ku.brc.af.core.UsageTracker.incrHandledUsageCount();
        edu.ku.brc.exceptions.ExceptionTracker.getInstance().capture(DBTableIdMgr.class, ex);
        log.error(ex);
        ex.printStackTrace();
    }
    Collections.sort(tables);
    log.debug("Done Reading in datamodel file: " + inputFile.getAbsolutePath()); //$NON-NLS-1$
}