Subversion Repositories bacoAlunos

Rev

Rev 1306 | Rev 1354 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

package pt.estgp.estgweb.services.profile;

import jomm.utils.FilesUtils;
import org.apache.log4j.Logger;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.enums.RecordEnum;
import pt.estgp.estgweb.domain.views.*;
import pt.estgp.estgweb.filters.chains.ResourceAccessControlEnum;
import pt.estgp.estgweb.services.data.RepositoryService;
import pt.estgp.estgweb.services.expceptions.ServiceException;
import pt.utl.ist.berserk.logic.serviceManager.IService;

import java.io.InputStream;
import java.util.*;

/*
 * @author Goncalo Luiz gedl [AT] rnl [DOT] ist [DOT] utl [DOT] pt
 *
 *
 * Created at 17/Out/2003 , 23:45:24
 *
 */

/**
 * @author Jorge Machado
 *
 *
 * Created at 17/Out/2003 , 23:45:24
 *
 */

public class CurriculumService implements IService
{

    RepositoryService repositoryService = new RepositoryService();

    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(CurriculumService.class);


    public UserView deleteRecord(long recordId, UserSession userSession) throws ServiceException
    {
        Record record = DaoFactory.getRecordDaoImpl().load(recordId);
        if(record.getRepositoryStream() != null && record.getRepositoryStream().length() > 0)
        {
            RepositoryFile repositoryFile = DaoFactory.getRepositoryFileDaoImpl().loadByIdentifier(record.getRepositoryStream());
            repositoryFile.setDeleted(true);
        }
        DaoFactory.getRecordDaoImpl().delete(record);
        userSession.getUser().getCreatorRecords().remove(record);
        return loadUserViewWithRecords(record.getOwner().getId(),userSession);
    }

    public RecordView loadEditRecord(long recordId, UserSession userSession) throws ServiceException
    {
        Record record = DaoFactory.getRecordDaoImpl().load(recordId);
        return new RecordView(record,true);
    }

    public UserView createRecord(RecordView recordView,5+0%2Fdocs%2Fapi+InputStream">InputStream file, 1.5.0/docs/api/java/lang/String.html">String name, 1.5.0/docs/api/java/lang/String.html">String contentType, int size, UserSession userSession) throws ServiceException
    {
        Record r;

        if(recordView.getId() <= 0)
        {
            r = RecordEnum.parse(recordView.getType()).createInstance();
            r.setOwner(userSession.getUser());
//            r.setCreators(new HashSet<User>());
//            r.getCreators().add(userSession.getUser());
            userSession.getUser().getCreatorRecords().add(r);
            if(userSession.getUser().getCreatorRecords() == null)
                userSession.getUser().setCreatorRecords(new HashSet<Record>());

            DaoFactory.getRecordDaoImpl().save(r);
            DaoFactory.getRecordDaoImpl().refresh(r);
            1.5.0/docs/api/java/lang/System.html">System.out.println(r.getCreators().size());
        }
        else
            r = DaoFactory.getRecordDaoImpl().get(recordView.getId());



        recordView.persistViewInObject(r);

        if(file != null && size > 0)
        {
            1.5.0/docs/api/java/lang/String.html">String extension = FilesUtils.getExtension(name);
            if(recordView.getRepositoryStream() == null)
            {
                1.5.0/docs/api/java/lang/String.html">String identifier = repositoryService.storeRepositoryFile(file, contentType, extension, size, name, "profile.curriculum.record " + r.getTitle() + " of " + userSession.getUser().getUsername(), ResourceAccessControlEnum.parse(recordView.getFileAccess()),userSession);
                r.setRepositoryStream(identifier);
            }
            else
            {
                repositoryService.updateRepositoryFile(recordView.getRepositoryStream(), file, contentType, extension, size, name, "profile.curriculum.record " + " of " + userSession.getUser().getUsername(), ResourceAccessControlEnum.parse(recordView.getFileAccess()));
            }
        }
        return loadUserViewWithRecords(userSession.getUser().getId(), userSession);
    }

    public UserView loadUserViewWithRecordsCode(int code, UserSession userSession) throws ServiceException
    {
        User u = DaoFactory.getTeacherDaoImpl().loadBySigesCode(code);
        if(u == null)
            u = DaoFactory.getStudentDaoImpl().loadBySigesCode(code);
        if(u != null)
            return loadUserViewWithRecords(u.getId(),userSession);
        return null;
    }

    public UserView loadUserViewWithRecords(long id, UserSession userSession) throws ServiceException
    {
        User u;
        UserView userView;
        if(id <= 0)
        {
            userView = new UserView(userSession.getUser());
            u = userSession.getUser();
        }
        else
        {
            User user = DaoFactory.getUserDaoImpl().get(id);
            u = user;
            if(user != null)
                userView = new UserView(user);
            else
                return null;
        }
        if(u.getCreatorRecords() != null)
        {
            userView.setCreatorRecords(RecordView.getViews(new ArrayList<Record>(u.getCreatorRecords())));
        }
        if(u.getContributorRecords() != null)
        {
            userView.setContributorRecords(RecordView.getViews(new ArrayList<Record>(u.getContributorRecords())));
        }

        Set<CourseUnit> responsableCourseUnits = null;
        Set<CourseUnit> courseUnits = null;
        if(u instanceof Teacher)
        {
            Teacher teacher = (Teacher) u;
            courseUnits = new HashSet<CourseUnit>(DaoFactory.getCourseUnitDaoImpl().loadTeachedImportYearUnits(teacher.getId(), DaoFactory.getConfigurationDaoImpl().getInterfaceImportYear()));
            responsableCourseUnits = new HashSet<CourseUnit>(DaoFactory.getCourseUnitDaoImpl().loadResponsableImportYearUnits(teacher.getId(), DaoFactory.getConfigurationDaoImpl().getInterfaceImportYear()));
            userView.setResponsableCourseUnits(new ArrayList<CourseUnitView>());
            for(CourseUnit c: responsableCourseUnits)
            {
                CourseUnitView courseUnitView = new CourseUnitView(c);
                userView.getResponsableCourseUnits().add(courseUnitView);
            }
        }
        else if(u instanceof Student)
        {
            Student student = (Student) u;
            courseUnits = student.getSubscribedUnits();
        }
        if(courseUnits != null)
        {
            HashMap<Course,CourseView> courses = new HashMap<Course,CourseView>();
            List<CourseView> courseViews = new ArrayList<CourseView>();
            List<CourseUnitView> courseUnitViews = new ArrayList<CourseUnitView>();
            for(CourseUnit c: courseUnits)
            {
                CourseUnitView courseUnitView = new CourseUnitView(c);
                courseUnitViews.add(courseUnitView);
                CourseView courseView;
                if((courseView = courses.get(c.getCourse())) == null)
                {
                    courseView = new CourseView(c.getCourse());
                    courseViews.add(courseView);
                    courses.put(c.getCourse(),courseView);
                    courseView.setCourseUnits(new ArrayList<CourseUnitView>());
                }
                courseView.getCourseUnits().add(courseUnitView);
            }
            userView.setCourses(courseViews);
            userView.setCourseUnits(courseUnitViews);
        }
        return userView;
    }

    public UserView loadUserViewWithGrades(long id, UserSession userSession) throws ServiceException
    {

        User u;
        UserView userView;
        if(id <= 0)
        {
            userView = new UserView(userSession.getUser());
            u = userSession.getUser();
        }
        else
        {
            User user = DaoFactory.getUserDaoImpl().get(id);
            u = user;
            if(user != null)
                userView = new UserView(user);
            else
                return null;
        }
        List<CourseUnitGradeView> grades = loadGrades(id,userSession);
        userView.setGrades(grades);
        return userView;
    }

    public List<CourseUnitGradeView> loadGrades(long userId, UserSession userSession) throws ServiceException
    {
        //todo change security
        if(userId != userSession.getUser().getId())
        {
            logger.warn("Trying see grades of other user");
            return null;
        }
        List<CourseUnitGradeView> gradesViews = new ArrayList<CourseUnitGradeView>();
        Student s = DaoFactory.getStudentDaoImpl().get(userId);
        if(s == null)
            return null;
        Set<CourseUnitGrade> grades = s.getCourseUnitGrades();
        if(grades == null)
            return null;
        for(CourseUnitGrade grade: grades)
        {
            gradesViews.add(new CourseUnitGradeView(grade));
        }
        return gradesViews;
    }
}