Package com.agiletec.plugins.jpfacetnav.aps.tags

Source Code of com.agiletec.plugins.jpfacetnav.aps.tags.HasToOpenFacetNodeTag

/*
*
* Copyright 2013 Entando S.r.l. (http://www.entando.com) All rights reserved.
*
* This file is part of Entando software.
* Entando is a free software;
* You can redistribute it and/or modify it
* under the terms of the GNU General Public License (GPL) as published by the Free Software Foundation; version 2.
*
* See the file License for the specific language governing permissions  
* and limitations under the License
*
*
*
* Copyright 2013 Entando S.r.l. (http://www.entando.com) All rights reserved.
*
*/
package com.agiletec.plugins.jpfacetnav.aps.tags;

import java.util.List;
import java.util.Map;

import javax.servlet.jsp.JspException;

import com.agiletec.aps.system.ApsSystemUtils;
import com.agiletec.aps.system.common.tree.ITreeNode;
import com.agiletec.aps.system.common.tree.ITreeNodeManager;

/**
*
* @author E.Santoboni
*/
public class HasToOpenFacetNodeTag extends AbstractFacetNavTag {

  @Override
  public int doStartTag() throws JspException {
    try {
      boolean hasToOpen =
        ((this.getRequiredFacets().contains(this.getFacetNodeCode())) || this.isSelectedOneChild())
        && this.hasChildrenOccurrences();
      if (hasToOpen) {
        return EVAL_BODY_INCLUDE;
      } else {
        return super.doStartTag();
      }
    } catch (Throwable t) {
      ApsSystemUtils.logThrowable(t, this, "doStartTag");
      throw new JspException("Error initialization tag", t);
    }
  }

  /**
   * Returns true if one child is selected
   * @return True if one child is selected
   */
  private boolean isSelectedOneChild() {
    ITreeNodeManager facetManager = this.getFacetManager();
    List<String> requiredFacets = this.getRequiredFacets();
    for (int i=0; i<requiredFacets.size(); i++) {
      String requiredFacet = requiredFacets.get(i);
      ITreeNode facet = facetManager.getNode(requiredFacet);
      if (null != facet) {
        boolean check = this.checkSelectChild(facet, this.getFacetNodeCode());
        if (check) return true;
      }
    }
    return false;
  }

  /**
   * Returns true if a child is selected.
   * @param facet
   * @param codeForCheck
   * @return true if a child is selected
   */
  private boolean checkSelectChild(ITreeNode facet, String codeForCheck) {
    if (facet.getCode().equals(codeForCheck)) {
      return true;
    }
    ITreeNode parentFacet = facet.getParent();
    if (null != parentFacet && !parentFacet.getCode().equals(parentFacet.getParent().getCode())) {
      return this.checkSelectChild(parentFacet, codeForCheck);
    }
    return false;
  }

  /**
   * Returns true if there are children occurrences.
   * @return true if there are children occurrences
   */
  private boolean hasChildrenOccurrences() {
    ITreeNodeManager facetManager = this.getFacetManager();
    ITreeNode facet = facetManager.getNode(this.getFacetNodeCode());
    for (int i=0; i<facet.getChildren().length; i++) {
      ITreeNode child = facet.getChildren()[i];
      Integer occurrence = this.getOccurrences().get(child.getCode());
      if (null != occurrence && occurrence.intValue()>0) {
        return true;
      }
    }
    return false;
  }

  public String getFacetNodeCode() {
    return _facetNodeCode;
  }
  public void setFacetNodeCode(String facetNodeCode) {
    this._facetNodeCode = facetNodeCode;
  }
  public List<String> getRequiredFacets() {
    return _requiredFacets;
  }
  public void setRequiredFacets(List<String> requiredFacets) {
    this._requiredFacets = requiredFacets;
  }
  public Map<String, Integer> getOccurrences() {
    return _occurrences;
  }
  public void setOccurrences(Map<String, Integer> occurrences) {
    this._occurrences = occurrences;
  }

  private String _facetNodeCode;//="${facetNode.code}"
  private List<String> _requiredFacets;//="requiredFacets"
  private Map<String, Integer> _occurrences; //="${occurrences}"

}
TOP

Related Classes of com.agiletec.plugins.jpfacetnav.aps.tags.HasToOpenFacetNodeTag

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.