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()),
null, 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() && !userSession.
getUser().
isSuperuserOrAdmin() && !userSession.
getUser().
isTeacher())
{
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
;
}
}