Logo Search packages:      
Sourcecode: jaxe version File versions  Download package

boolean jaxe::Config::elementValide ( final JaxeElement  parent,
final boolean  details,
final String[]  texpr 
) [inline]

Renvoie true si l'élément parent est valide par rapport à ses enfants (au niveau 1). + renvoie l'expression régulière utilisée pour le test dans texpr[0] si details=true

Definition at line 1585 of file Config.java.

References jaxe::InterfaceSchema::contientDuTexte(), jaxe::JaxeElement::doc, expressionReguliere(), getElementConf(), jaxe::JaxeDocument::getElementForNode(), jaxe::JaxeElement::getNextSibling(), localValue(), LOG, jaxe::JaxeElement::noeud, and jaxe::JaxeElement::refElement.

Referenced by jaxe::elements::JEZone::majValidite(), jaxe::elements::JEString::majValidite(), and jaxe::elements::JEDivision::majValidite().

                                                                                                        {
        if (schema instanceof SchemaSimple)
            return(true); // on suppose que le test de sous-balise a déjà été fait
        if (autresConfigs.size() > 0) {
            final Config conf = getElementConf((Element)parent.noeud);
            if (conf != this)
                return(true); // on ne peut pas tester, cf commentaire dans insertionPossible
        }
        final Config conf = getElementConf((Element)parent.noeud);
        if (conf == null)
            return(true);
        final Element refParent = parent.refElement;
        final StringBuilder cettexp = new StringBuilder();
        if (validePatternCache == null)
            validePatternCache = new HashMap<Element, Pattern>();
        
        boolean avectexte = false;
        Node sousb = parent.noeud.getFirstChild();
        while (sousb != null) {
            if (sousb.getNodeType() == Node.ELEMENT_NODE)  {
                final JaxeElement je = parent.doc.getElementForNode(sousb);
                if (je != null) {
                    cettexp.append(localValue(sousb.getNodeName()));
                    cettexp.append(",");
                }
            } else if (sousb.getNodeType() == Node.TEXT_NODE || sousb.getNodeType() == Node.CDATA_SECTION_NODE) {
                if (!"".equals(sousb.getNodeValue().trim()))
                    avectexte = true;
            }
            sousb = sousb.getNextSibling();
        }
        if (avectexte && !schema.contientDuTexte(refParent))
            return(false);
        Pattern r = validePatternCache.get(refParent);
        if (r == null) {
            final String expr = conf.expressionReguliere(refParent, false, true);
            if (expr == null || expr.equals(""))
                return(true);
            //System.out.println("parent: "+parent.noeud.getNodeName()+" expression: '"+cettexp.toString()+"'");
            //System.out.println("test: " + expr);
            //System.out.println("visu: " + exprvisu);
            
            // jakarta-regexp
            /*
            RE r;
            try {
                r = new RE(expr);
            } catch (RESyntaxException ex) {
                LOG.error("elementValide(JaxeElement, boolean, String[]) - Malformed Pattern: " + expr, ex);
                return(true);
            }
            boolean matched = r.match(cettexp.toString());
            */
            
            // jakarta-oro
            /*
            Pattern r;
            try {
                r = compiler.compile(expr);
            } catch (final MalformedPatternException ex) {
                LOG.error("elementValide(JaxeElement, boolean, String[]) - Malformed Pattern: " + expr, ex);
                return(true);
            }
            final boolean matched = matcher.matches(cettexp.toString(), r);
            */
            
            // gnu-regexp
            /*
            RE r;
            try {
                r = new RE(expr);
            } catch (REException ex) {
                LOG.error("elementValide(JaxeElement, boolean, String[]) - Malformed Pattern: " + expr, ex);
                return(true);
            }
            boolean matched = r.isMatch(cettexp.toString());
            */
            
            // java.util.regex
            try {
                r = Pattern.compile("^" + expr + "$");
            } catch (final PatternSyntaxException ex) {
                LOG.error("elementValide(JaxeElement, boolean, String[]) - Malformed Pattern: ^" + expr + "$",
                        ex);
                return(true);
            }
            validePatternCache.put(refParent, r);
        }

        String exprvisu = null;
        if (details)
            exprvisu = conf.expressionReguliere(refParent, true, false);
        
        final boolean matched = r.matcher(cettexp.toString()).matches();
        
        if (matched)
            return(true);
        if (details)
            texpr[0] = exprvisu;
        return(false);
    }


Generated by  Doxygen 1.6.0   Back to index