Package org.fenixedu.academic.servlet.taglib

Source Code of org.fenixedu.academic.servlet.taglib.UnitsTree

/**
* Copyright © 2002 Instituto Superior Técnico
*
* This file is part of FenixEdu Academic.
*
* FenixEdu Academic is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* FenixEdu Academic is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with FenixEdu Academic.  If not, see <http://www.gnu.org/licenses/>.
*/
/*
* Created on Jul 29, 2006
*
*/
package org.fenixedu.academic.servlet.taglib;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;

import org.apache.commons.lang.StringUtils;
import org.fenixedu.academic.domain.organizationalStructure.AccountabilityTypeEnum;
import org.fenixedu.academic.domain.organizationalStructure.Unit;
import org.joda.time.YearMonthDay;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* @author mrsp
*
*/
public class UnitsTree extends TagSupport {

    private static final Logger logger = LoggerFactory.getLogger(UnitsTree.class);

    private String initialUnit;

    private String unitParamName;

    private String state;

    private String path;

    private String expanded;

    @Override
    public int doStartTag() throws JspException {
        String tree = writeInstitutionTree();
        try {
            pageContext.getOut().print(tree);
        } catch (IOException e) {
            logger.error(e.getMessage(), e);
        }
        return SKIP_BODY;
    }

    public String writeInstitutionTree() {

        StringBuilder buffer = new StringBuilder();
        Unit unit = (Unit) pageContext.findAttribute(this.getInitialUnit());
        YearMonthDay currentDate = new YearMonthDay();

        buffer.append("<ul class='padding1 nobullet'>");
        getSubUnitsList(unit, null, buffer, currentDate, this.getUnitParamName(), this.getPath());
        buffer.append("</ul>");

        return buffer.toString();
    }

    private void getSubUnitsList(Unit parentUnit, Unit parentUnitParent, StringBuilder buffer, YearMonthDay currentDate,
            String paramName, String path) {

        buffer.append("<li>");

        HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
        List<Unit> subUnits = getUnitSubUnits(parentUnit, currentDate);
        if (!subUnits.isEmpty()) {
            putImage(parentUnit, parentUnitParent, buffer, request);
        }

        buffer.append("<a href=\"").append(request.getContextPath()).append(path).append("&").append(paramName).append("=")
                .append(parentUnit.getExternalId()).append("\">").append(parentUnit.getNameWithAcronym()).append("</a>")
                .append("</li>");

        if (!subUnits.isEmpty()) {
            buffer.append("<ul class='mvert0 nobullet' id=\"").append("aa").append(parentUnit.getExternalId())
                    .append((parentUnitParent != null) ? parentUnitParent.getExternalId() : "").append("\" ")
                    .append("style='display:" + (getExpanded() != null && Boolean.valueOf(getExpanded()) ? "block" : "none"))
                    .append("'>\r\n");

            Collections.sort(subUnits, Unit.COMPARATOR_BY_NAME_AND_ID);
        }

        for (Unit subUnit : subUnits) {
            getSubUnitsList(subUnit, parentUnit, buffer, currentDate, paramName, path);
        }

        if (!subUnits.isEmpty()) {
            buffer.append("</ul>");
        }
    }

    private List<Unit> getUnitSubUnits(Unit parentUnit, YearMonthDay currentDate) {

        List<AccountabilityTypeEnum> accountabilityEnums = new ArrayList<AccountabilityTypeEnum>();

        accountabilityEnums.add(AccountabilityTypeEnum.ORGANIZATIONAL_STRUCTURE);
        accountabilityEnums.add(AccountabilityTypeEnum.ACADEMIC_STRUCTURE);
        accountabilityEnums.add(AccountabilityTypeEnum.GEOGRAPHIC);

        if (!StringUtils.isEmpty(this.getState()) && this.getState().equalsIgnoreCase("true")) {
            return new ArrayList(parentUnit.getActiveSubUnits(currentDate, accountabilityEnums));
        } else if (!StringUtils.isEmpty(this.getState()) && this.getState().equalsIgnoreCase("false")) {
            return new ArrayList(parentUnit.getInactiveSubUnits(currentDate, accountabilityEnums));
        } else {
            return new ArrayList(parentUnit.getSubUnits(accountabilityEnums));
        }
    }

    private void putImage(Unit parentUnit, Unit parentUnitParent, StringBuilder buffer, HttpServletRequest request) {
        buffer.append("<img ")
                .append("src='")
                .append(request.getContextPath())
                .append((getExpanded() != null && Boolean.valueOf(getExpanded()) ? "/images/toggle_minus10.gif" : "/images/toggle_plus10.gif"))
                .append("' id=\"").append(parentUnit.getExternalId())
                .append((parentUnitParent != null) ? parentUnitParent.getExternalId() : "").append("\" ")
                .append("indexed='true' onClick=\"").append("check(document.getElementById('").append("aa")
                .append(parentUnit.getExternalId()).append((parentUnitParent != null) ? parentUnitParent.getExternalId() : "")
                .append("'),document.getElementById('").append(parentUnit.getExternalId())
                .append((parentUnitParent != null) ? parentUnitParent.getExternalId() : "").append("'));return false;")
                .append("\"> ");
    }

    @Override
    public String getId() {
        return id;
    }

    @Override
    public void setId(String id) {
        this.id = id;
    }

    public String getInitialUnit() {
        return initialUnit;
    }

    public void setInitialUnit(String initialUnit) {
        this.initialUnit = initialUnit;
    }

    public String getPath() {
        return path;
    }

    public void setPath(String path) {
        this.path = path;
    }

    public String getUnitParamName() {
        return unitParamName;
    }

    public void setUnitParamName(String unitParamName) {
        this.unitParamName = unitParamName;
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }

    public String getExpanded() {
        return expanded;
    }

    public void setExpanded(String expanded) {
        this.expanded = expanded;
    }
}
TOP

Related Classes of org.fenixedu.academic.servlet.taglib.UnitsTree

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.