Subversion Repositories bacoAlunos

Rev

Rev 1012 | Blame | Compare with Previous | Last modification | View Log | RSS feed

package pt.estgp.estgweb.domain.views;

import jomm.utils.StringsUtils;
import org.apache.log4j.Logger;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.services.courseunits.LoadCourseUnitAnnouncements;

import java.io.Serializable;
import java.util.*;

/**
 * @author Jorge Machado
 * @date 2/Mar/2008
 * @time 19:34:49
 * @see pt.estgp.estgweb.domain.views
 */

public class CourseUnitView extends DomainObjectView implements ICanManage
{
    private static final 1.5.0/docs/api/java/util/logging/Logger.html">Logger logger = 1.5.0/docs/api/java/util/logging/Logger.html">Logger.getLogger(CourseUnitView.class);


    LoadCourseUnitAnnouncements loadCourseUnitAnnouncements = new LoadCourseUnitAnnouncements();

    private long id;
    private 1.5.0/docs/api/java/lang/String.html">String name;
    private 1.5.0/docs/api/java/lang/String.html">String code;
    private long courseId;
    private long coordinatorId;
    private long responsableId;
    private 1.5.0/docs/api/java/lang/String.html">String courseCode;
    private 1.5.0/docs/api/java/lang/String.html">String courseName;
    private 1.5.0/docs/api/java/lang/String.html">String semestre;
    private 1.5.0/docs/api/java/lang/String.html">String importYear;
    private 1.5.0/docs/api/java/lang/String.html">String contentsGrants;
    private BlogView blog;
    private 1.5.0/docs/api/java/lang/String.html">String pathIntranet;
    private 1.5.0/docs/api/java/lang/String.html">String normalizedName;
    private List<AnnouncementView> announcements;
    private List<CourseUnitSummaryView> summaries;
    private 1.5.0/docs/api/java/lang/String.html">String summariesJson;

    private CourseUnit courseUnit;
    private UserView responsableTeacher;
    private Set<UserView> teachers;
    private Set<UserView> students;
    private List<UserView> studentsOrderedByName;
    private List<UserView> studentsOrderedByNumber;

    private 1.5.0/docs/api/java/lang/String.html">String objectives;
    private 1.5.0/docs/api/java/lang/String.html">String programStreamId;
    private 1.5.0/docs/api/java/lang/String.html">String evaluationStreamId;
    private boolean validProgram;
    private UserView validatorUser;
    private boolean validEvaluation = false;
    private int programSize;
    private 1.5.0/docs/api/java/lang/String.html">String extension;
    private List<CourseUnitAssignementView> courseUnitAssignements;
    private 1.5.0/docs/api/java/lang/String.html">String sumariosPathFileIntranet;

    private boolean notFound = false;

    private CourseView courseView;

    public 1.5.0/docs/api/java/lang/Class.html">Class getReferenceClass()
    {
        return CourseUnitImpl.class;
    }

    public 1.5.0/docs/api/java/io/Serializable.html">Serializable getSerializable()
    {
        return id;
    }

    public CourseUnitView()
    {
    }
    public CourseUnitView(CourseUnit courseUnit, boolean initTeachers, boolean initStudents )
    {
        super(courseUnit);
        init(courseUnit, initTeachers, initStudents,false,false);
    }

    public CourseUnitView(CourseUnit courseUnit, boolean initTeachers, boolean initStudents, boolean initBlog )
    {
        super(courseUnit);
        init(courseUnit, initTeachers, initStudents, initBlog,false);
    }

    public CourseUnitView(CourseUnit courseUnit, boolean initTeachers, boolean initStudents, boolean initBlog, boolean validatorPerson )
    {
        super(courseUnit);
        init(courseUnit, initTeachers, initStudents, initBlog, validatorPerson);
    }

    public CourseUnitView(CourseUnit courseUnit)
    {
        super(courseUnit);
        init(courseUnit, false,false,false,false);
    }

    public CourseUnitView(CourseUnit courseUnit, BlogView b)
    {
        super(courseUnit);
        this.blog = b;
        init(courseUnit, false,false,false,false);
    }

    public CourseUnit getCourseUnit() {
        return courseUnit;
    }

    private void init(CourseUnit courseUnit, boolean initTeachers, boolean initStudents, boolean initBlog, boolean validatorUser)
    {
        this.pathIntranet = courseUnit.getPathIntranet();
        this.normalizedName = courseUnit.getNormalizedName();
        this.courseUnit = courseUnit;
        this.courseName = courseUnit.getCourseName();
        this.name = courseUnit.getName();
        this.code = courseUnit.getCode();
        this.importYear = courseUnit.getImportYear();
        this.semestre = courseUnit.getSemestre();
        this.courseCode = courseUnit.getCourseCode();
        this.summariesJson = courseUnit.getSummariesJson();
        this.sumariosPathFileIntranet = ((CourseUnitImpl)courseUnit).getSummariosPathFileIntranet();

//        this.objectives = courseUnit.getObjectives();    DEPRECATED
        if(courseUnit.getCourseUnitProgram() !=null  && courseUnit.getCourseUnitProgram().getCourseUnitProgramPart2() != null)
            this.objectives = courseUnit.getCourseUnitProgram().getCourseUnitProgramPart2().getObjectivos();
        else
            this.objectives = null;
        this.contentsGrants = courseUnit.getContentsGrants();
        if(courseUnit.getProgramStreamId() != null)
        {
            programStreamId = courseUnit.getProgramStreamId();
            validProgram = courseUnit.isValidProgram();
            if(validatorUser)
            {
                if(courseUnit.getValidatorUser() != null)
                    this.validatorUser = new UserView(courseUnit.getValidatorUser());
            }
        }

        if(courseUnit.getEvaluationStreamId() != null)
        {
            evaluationStreamId = courseUnit.getEvaluationStreamId();
            validEvaluation = courseUnit.getCourseUnitEvaluation().isClosed();
        }

//        if(courseUnit.getBlog() != null)
//            this.blog = new BlogView(courseUnit.getBlog());
        this.id = courseUnit.getId();
        teachers = new HashSet<UserView>();
        students = new HashSet<UserView>();
        if(initTeachers && courseUnit.getTeachers() != null)
        {
            responsableTeacher = new UserView(courseUnit.getResponsableTeacher());
            for(TeacherImpl t: courseUnit.getTeachers())
            {
                UserView u = new UserView(t);
                teachers.add(u);
            }
        }
        if(initStudents && courseUnit.getStudents() != null)
        {
            for(StudentImpl s: courseUnit.getStudents())
            {
                UserView u = new UserView(s);
                students.add(u);
            }
        }
        if(initBlog)
        {
            blog = new BlogView(((CourseUnitImpl)courseUnit).getUnitBlog(),this);
        }
        if(courseUnit.getCourse() != null)
        {
            courseId = courseUnit.getCourse().getId();
            if(courseUnit.getCourse().getCoordinator() != null)
                coordinatorId = courseUnit.getCourse().getCoordinator().getId();
        }
        if(courseUnit.getResponsableTeacher() != null)
        {
            responsableId = courseUnit.getResponsableTeacher().getId();
        }
        courseView = new CourseView(courseUnit.getCourse(),false);
    }

    public 1.5.0/docs/api/java/lang/String.html">String getEvaluationStreamId() {
        return evaluationStreamId;
    }


    public 1.5.0/docs/api/java/lang/String.html">String getSumariosPathFileIntranet() {
        return sumariosPathFileIntranet;
    }

    public boolean isValidEvaluation() {
        return validEvaluation;
    }


    public long getCoordinatorId() {
        return coordinatorId;
    }

    public void setCoordinatorId(long coordinatorId) {
        this.coordinatorId = coordinatorId;
    }

    public long getResponsableId() {
        return responsableId;
    }

    public void setResponsableId(long responsableId) {
        this.responsableId = responsableId;
    }

    public long getCourseId()
    {
        return courseId;
    }

    public void setCourseId(long courseId)
    {
        this.courseId = courseId;
    }

    public CourseView getCourseView()
    {
        return courseView;
    }

    public 1.5.0/docs/api/java/lang/String.html">String getNormalizedName()
    {
        return normalizedName;
    }

    public void setNormalizedName(1.5.0/docs/api/java/lang/String.html">String normalizedName)
    {
        this.normalizedName = normalizedName;
    }

    public 1.5.0/docs/api/java/lang/String.html">String getPathIntranet()
    {
        return pathIntranet;
    }

    public void setPathIntranet(1.5.0/docs/api/java/lang/String.html">String pathIntranet)
    {
        this.pathIntranet = pathIntranet;
    }

    public void setCourseView(CourseView courseView)
    {
        this.courseView = courseView;
    }

    public void setNotFound(boolean notFound)
    {
        this.notFound = notFound;
    }

    public boolean isNotFound()
    {
        return notFound;
    }

    public void setAnnouncements(List<AnnouncementView> announcements)
    {
        this.announcements = announcements;
    }

    public int getTeachersSize()
    {
        if(teachers != null)
            return teachers.size();
        return 0;
    }

    public int getStudentsSize()
    {
        if(students != null)
            return students.size();
        return 0;
    }

    public void setCourseUnitAssignements(List<CourseUnitAssignementView> courseUnitAssignements)
    {
        this.courseUnitAssignements = courseUnitAssignements;
    }

    public List<CourseUnitAssignementView> getCourseUnitAssignements()
    {
        return courseUnitAssignements;
    }

    public 1.5.0/docs/api/java/lang/String.html">String getContentsGrants() {
        return contentsGrants;
    }

    public void setContentsGrants(1.5.0/docs/api/java/lang/String.html">String contentsGrants) {
        this.contentsGrants = contentsGrants;
    }

    public void setId(long id)
    {
        this.id = id;
    }

    public void setName(1.5.0/docs/api/java/lang/String.html">String name)
    {
        this.name = name;
    }

    public void setCode(1.5.0/docs/api/java/lang/String.html">String code)
    {
        this.code = code;
    }

    public void setCourseCode(1.5.0/docs/api/java/lang/String.html">String courseCode)
    {
        this.courseCode = courseCode;
    }

    public void setCourseName(1.5.0/docs/api/java/lang/String.html">String courseName)
    {
        this.courseName = courseName;
    }

    public void persistViewInObject(CourseUnit c)
    {
        c.setObjectives(objectives);
        c.setContentsGrants(contentsGrants);
    }

    public void persistViewAdminInObject(CourseUnit c)
    {
        c.setImportYear(importYear);
        c.setName(name);
        c.setCode(code);
        c.setSemestre(semestre);
        if(courseId > 0)
        {
            c.setCourse(DaoFactory.getCourseDaoImpl().load(courseId));
            c.setCourseCode(c.getCourse().getCode());
            c.setCourseName(c.getCourse().getName());
        }
        if(responsableId > 0)
        {
            c.setResponsableTeacher(DaoFactory.getTeacherDaoImpl().load(responsableId));
        }
    }

    public 1.5.0/docs/api/java/lang/String.html">String getObjectives()
    {
        return objectives;
    }

    public 1.5.0/docs/api/java/lang/String.html">String getFormatedObjectives()
    {
        return StringsUtils.getFormatedText(objectives);
    }

    public void setObjectives(1.5.0/docs/api/java/lang/String.html">String objectives)
    {
        this.objectives = objectives;
    }

    public 1.5.0/docs/api/java/lang/String.html">String getProgramStreamId()
    {
        return programStreamId;
    }

    public void setProgramStreamId(1.5.0/docs/api/java/lang/String.html">String programStreamId)
    {
        this.programStreamId = programStreamId;
    }

    public long getId()
    {
        return id;
    }

    public 1.5.0/docs/api/java/lang/String.html">String getName()
    {
        return name;
    }

    public 1.5.0/docs/api/java/lang/String.html">String getCode()
    {
        return code;
    }

    public 1.5.0/docs/api/java/lang/String.html">String getSemestre()
    {
        if(semestre == null)
        {
            logger.error("Unit" + getId() + " " + getName() + "" + " - " + getCourseName() + " " + getImportYear() + " with no SEMESTRE SET, returning S1");
            return "S1";
        }
        return semestre;
    }

    public void setSemestre(1.5.0/docs/api/java/lang/String.html">String semestre)
    {
        this.semestre = semestre;
    }

    public 1.5.0/docs/api/java/lang/String.html">String getImportYear()
    {
        return importYear;
    }

    public void setImportYear(1.5.0/docs/api/java/lang/String.html">String importYear)
    {
        this.importYear = importYear;
    }

    public 1.5.0/docs/api/java/lang/String.html">String getCourseCode()
    {
        return courseCode;
    }

    public 1.5.0/docs/api/java/lang/String.html">String getCourseName()
    {
        return courseName;
    }

    public BlogView getBlog()
    {
        return blog;
    }


    public int getProgramSize()
    {
        return programSize;
    }

    public void setProgramSize(int programSize)
    {
        this.programSize = programSize;
    }


    public 1.5.0/docs/api/java/lang/String.html">String getExtension()
    {
        return extension;
    }

    public void setExtension(1.5.0/docs/api/java/lang/String.html">String extension)
    {
        this.extension = extension;
    }

    public List<AnnouncementView> getAnnouncements()
    {
        return announcements;
    }

    public Set<UserView> getTeachers()
    {
        return teachers;
    }

    public Set<UserView> getStudents()
    {
        return students;
    }

    public 1.5.0/docs/api/java/lang/String.html">String getSummariesJson() {
        return summariesJson;
    }

    List<CourseUnitSummaryView> summariesFromJson = null;
    /**
     *
     * @return sumaries or null if there are no summaries in Json
     */


    int lateSummaries = 0;

    public List<CourseUnitSummaryView> getSummariesFromJson() {
        if(summariesFromJson != null)
            return summariesFromJson;
        summariesFromJson = new ArrayList<CourseUnitSummaryView>();
        if(summariesJson != null && summariesJson.length() > 0)
        {
            try {
                JSONObject jsonObject = new JSONObject(summariesJson);
                JSONArray summaries = jsonObject.getJSONArray("summary");
                for(int i = 0; i < summaries.length();i++)
                {
                    JSONObject summary = summaries.getJSONObject(i);
                    CourseUnitSummaryImpl sum = DomainObjectFactory.createCourseUnitSummaryImpl();

                    if(sum.updateWithJson(summary)){
                        CourseUnitSummaryView view = new CourseUnitSummaryView(sum);
                        summariesFromJson.add(view);
                    }
                    else
                    {
                        CourseUnitSummaryView view = new CourseUnitSummaryView(sum);
                        if(view.getNumber() < 0 && view.getOriginalDate().getTime() < 1.5.0/docs/api/java/lang/System.html">System.currentTimeMillis())
                        {
                            lateSummaries++;
                        }
                    }
                }
            } catch (JSONException e) {
                logger.error(e,e);
            }
            1.5.0/docs/api/java/util/Collections.html">Collections.sort(summariesFromJson,new Comparator<CourseUnitSummaryView>() {
                @1.5.0/docs/api/java/lang/Override.html">Override
                public int compare(CourseUnitSummaryView courseUnitSummaryView, CourseUnitSummaryView courseUnitSummaryView2) {

                    if(courseUnitSummaryView.getNumber() > courseUnitSummaryView2.getNumber())
                        return -1;
                    else if(courseUnitSummaryView.getNumber() < courseUnitSummaryView2.getNumber())
                        return 1;
                    return 0;
                }
            });
            return summariesFromJson;
        }
        return null;
    }

    public int getLateSummaries()
    {
        getSummariesFromJson();
        return lateSummaries;

    }

    public void setSummariesJson(1.5.0/docs/api/java/lang/String.html">String summariesJson) {
        this.summariesJson = summariesJson;
    }

    public boolean isOwnedBy(GenericUser u)
    {
        return isOwnedBy(u, false);
    }

    public boolean isOwnedBy(GenericUser u, boolean transaction)
    {
        //return u != null && u instanceof TeacherImpl && ((TeacherImpl)u).hasCourseUnit(getId(), transaction);

        //ALTERACOES REUNIAO BACO CODIGO 01062011
        //TESTE A COMISSAO DE CURSO NAS CADEIRAS

        return u != null && u instanceof TeacherImpl && ((TeacherImpl)u).hasCourseUnit(getId(), transaction);
    }


    /**
     * Not implemented can be variuous teachers
     * @return null
     * use isOwnedBy in this class
     */

    public GenericUser getOwner()
    {
        return null;
    }

    /**
     * Not implemented
     * @return
     */

    public List<String> getOwnerRoles()
    {
        return null;
    }

    /**
     * Not implemented
     * @return
     */

    public 1.5.0/docs/api/java/lang/String.html">String getChoosedOwnerRole()
    {
        return null;
    }

    public boolean isInternal()
    {
        return true;
    }

    public boolean isValid()
    {
        return true;
    }


    public boolean isValidProgram()
    {
        return validProgram;
    }

    public void setValidProgram(boolean validProgram)
    {
        this.validProgram = validProgram;
    }

    public UserView getValidatorUser()
    {
        return validatorUser;
    }

    public void setValidatorUser(UserView validatorUser)
    {
        this.validatorUser = validatorUser;
    }

    public UserView getResponsableTeacher() {
        return responsableTeacher;
    }

    public void setResponsableTeacher(UserView responsableTeacher) {
        this.responsableTeacher = responsableTeacher;
    }

    public void setSummaries(List<CourseUnitSummaryView> summaries)
    {
        this.summaries = summaries;
    }

    public List<CourseUnitSummaryView> getSummaries()
    {
        return summaries;
    }

    public 1.5.0/docs/api/java/lang/String.html">String getTeachersSnipet()
    {
        1.5.0/docs/api/java/lang/String.html">String sep = "";
        1.5.0/docs/api/java/lang/StringBuilder.html">StringBuilder strBuilder = new 1.5.0/docs/api/java/lang/StringBuilder.html">StringBuilder();
        if(teachers != null && teachers.size() > 0)
        {
            for(UserView userView: teachers)
            {
                strBuilder
                        .append(sep)
                        .append(" ")
                        .append(" <a href=\"mailto:")
                        .append(userView.getEmail())
                        .append("\">")
                        .append(userView.getName())
                        .append("</a>")

                        ;
                sep = ",";
            }
        }
        return strBuilder.toString();
    }


    public List<UserView> getStudentsOrderedByNumber()
    {
        if(studentsOrderedByNumber == null && students != null)
        {
            studentsOrderedByNumber = new 1.5.0/docs/api/java/util/ArrayList.html">ArrayList(students);
            1.5.0/docs/api/java/util/Collections.html">Collections.sort(studentsOrderedByNumber,new Comparator<UserView>()
            {

                public int compare(UserView o1, UserView o2)
                {
                    if(o1 == null)
                        return 1;
                    if(o2 == null)
                        return -1;
                    if(o1.getCode() > o2.getCode())
                        return 1;
                    else if(o1.getCode() < o2.getCode())
                        return -1;
                    else
                        return 0;
                }
            }
            );
        }
        return studentsOrderedByNumber;
    }

    public List<UserView> getStudentsOrderedByName()
    {
        if(studentsOrderedByName == null && students != null)
        {
            studentsOrderedByName = new 1.5.0/docs/api/java/util/ArrayList.html">ArrayList(students);
            1.5.0/docs/api/java/util/Collections.html">Collections.sort(studentsOrderedByName,new Comparator<UserView>()
            {

                public int compare(UserView o1, UserView o2)
                {
                    if(o1 == null || o1.getName() == null)
                        return 1;
                    if(o2 == null || o2.getName() == null)
                        return -1;
                    return o1.getName().compareTo(o2.getName());
                }
            }
            );
        }
        return studentsOrderedByName;
    }
}