/**
  * Retourne true si ce sont des tag du même nom et si les attributs de l'objet en paramètre sont
  * au moins tous présent
  *
  * @param obj
  * @return
  */
 public boolean equalsAtLeast(BeanTag obj) {
   boolean ret = getName().equalsIgnoreCase(obj.getName());
   if (ret) {
     if (obj.getListAttribut() != null && (obj.getListAttribut().size() > 0)) {
       ret = getListAttribut() != null && getListAttribut().size() >= obj.getListAttribut().size();
       if (ret) {
         int cnt = 0;
         List paramAttribut = obj.getListAttribut();
         for (Iterator iter1 = paramAttribut.iterator(); iter1.hasNext(); ) {
           BeanTagAttribut elParam = (BeanTagAttribut) iter1.next();
           List attribut = getListAttribut();
           for (Iterator iter2 = attribut.iterator(); iter2.hasNext(); ) {
             BeanTagAttribut el = (BeanTagAttribut) iter2.next();
             if (elParam.equals(el)) {
               cnt++;
               break;
             }
           }
         }
         ret = (cnt == paramAttribut.size());
       }
     }
   }
   return ret;
 }
 public BeanTag createEnd() {
   BeanTag tag = new BeanTag(getName(), "</" + getName() + ">", "");
   tag.setLevel(getLevel());
   tag.setOrder(getOrder());
   return tag;
 }
 public boolean equalsLevel(BeanTag obj) {
   return (obj != null)
       && (((level == null) && (obj.getLevel() == null))
           && ((level != null) && level.equals(obj.getLevel())));
 }
 public boolean isClosingTag(BeanTag tag) {
   List lTagName = (tag == null) ? null : (List) getListTagImpliciteEnd(getName().toUpperCase());
   return (lTagName == null) ? false : lTagName.contains(tag.getName().toUpperCase());
 }