package pt.estgp.estgweb.services.courseunits;
import jomm.dao.impl.AbstractDao;
import org.apache.log4j.Logger;
import org.hibernate.Query;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.views.CourseUnitView;
import pt.utl.ist.berserk.logic.serviceManager.IService;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
/**
* Created by jorgemachado on 15/12/15.
*/
public class DeleteCourseUnitService
implements IService
{
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(DeleteCourseUnitService.
class);
public static class CourseUnitContentsInfo
{
public List
<String
> warnings =
new ArrayList
<String
>();
public 1.5.0/docs/api/java/lang/String.html">String messageResult =
"";
boolean canDelete =
false;
public CourseUnitView cuv
;
public List
<String
> getWarnings
() {
return warnings
;
}
public 1.5.0/docs/api/java/lang/String.html">String getMessageResult
() {
return messageResult
;
}
public boolean isCanDelete
() {
return canDelete
;
}
public CourseUnitView getCuv
() {
return cuv
;
}
}
/**
*
* @param courseUnitId
* @return a list of warnings
*
*/
public CourseUnitContentsInfo checkDelete
(long courseUnitId,UserSession session
)
{
CourseUnitContentsInfo result =
new CourseUnitContentsInfo
();
result.
canDelete =
true;
CourseUnit cu = DaoFactory.
getCourseUnitDaoImpl().
load(courseUnitId
);
boolean alert =
false;
if(cu.
getStudents() !=
null && cu.
getStudents().
size() > 0)
{
result.
warnings.
add("ALERT - Tem Alunos (NAO PODE APAGAR, remova os alunos primeiro)");
result.
canDelete =
false;
}
if(cu.
getTeachers() !=
null && cu.
getTeachers().
size() > 0)
{
result.
warnings.
add("ALERT - Tem Professores");
}
if(cu.
getAnnouncements() !=
null && cu.
getAnnouncements().
size() > 0)
{
result.
warnings.
add("ALERT - Tem Anuncios");
}
if(cu.
getAssignements() !=
null && cu.
getAssignements().
size() > 0)
{
result.
warnings.
add("ALERT - Tem Trabalhos (NAO PODE APAGAR, remova os trabalhos primeiro (tarefa do professor))");
}
if(cu.
getBlogs() !=
null && cu.
getBlogs().
size() > 0)
{
result.
warnings.
add("ALERT - Tem BLOGS");
}
if(cu.
getCourseUnitEvaluation() !=
null)
{
result.
warnings.
add("ALERT - Tem Relatorio de Avaliacao (NAO PODE APAGAR, contacte a equipa de desenvolvimento para encontrar solucao)");
result.
canDelete =
false;
}
if(cu.
getCourseUnitProgram() !=
null)
{
result.
warnings.
add("ALERT - Tem ficha curricular, nao vai apagar a ficha fica em backup id ficha: (" + cu.
getCourseUnitProgram().
getId() +
") pdf: (http://SITE_URL/repositoryStream/" + cu.
getProgramStreamId() +
"), exporte a ficha para backup");
}
if(cu.
getSummaries() !=
null && cu.
getSummaries().
size() > 0)
{
result.
warnings.
add("ALERT - Tem Sumarios, vai apagar os sumarios localmente");
}
if(result.
canDelete)
{
result.
messageResult =
"Pode Apagar";
}
else
{
result.
messageResult =
"Não é permitido apagar esta unidade";
}
result.
cuv =
new CourseUnitView
(cu,
false,
false,
false,
false);
return result
;
}
/**
*
* @param courseUnitId
* @return a list of warnings
*
*/
public CourseUnitContentsInfo tryDelete
(long courseUnitId,UserSession session
)
{
CourseUnitContentsInfo result = checkDelete
(courseUnitId,session
);
if(result.
canDelete)
{
CourseUnit cu = DaoFactory.
getCourseUnitDaoImpl().
load(courseUnitId
);
logger.
warn("Will Delete courseUnit: " + cu.
getImportYear() +
";" + cu.
getSemestre() +
";" + cu.
getCode() +
";" + cu.
getName() +
";" + cu.
getCourseCode() +
";" + cu.
getCourseName());
if(cu.
getTeachers() !=
null && cu.
getTeachers().
size() > 0
)
{
Iterator
<TeacherImpl
> teachers = cu.
getTeachers().
iterator();
while(teachers.
hasNext())
{
Teacher t = teachers.
next();
teachers.
remove();
t.
getTeachedUnits().
remove(cu
);
logger.
warn("Removing Teacher: " + t.
getSigesCode() +
" - id:" + t.
getId() +
" name:" + t.
getName());
}
}
if(cu.
getAnnouncements() !=
null && cu.
getAnnouncements().
size() > 0
)
{
Iterator
<CourseUnitAnnouncement
> annoucements = cu.
getAnnouncements().
iterator();
while(annoucements.
hasNext())
{
CourseUnitAnnouncement a = annoucements.
next();
annoucements.
remove();
a.
setCourseUnit(null);
logger.
warn("Removing Annoucement: " + a.
getId());
DaoFactory.
getAnnouncementDaoImpl().
delete(a
);
}
}
if(cu.
getBlogs() !=
null && cu.
getBlogs().
size() > 0
)
{
Iterator
<CourseUnitBlog
> blogs = cu.
getBlogs().
iterator();
while(blogs.
hasNext())
{
CourseUnitBlog a = blogs.
next();
blogs.
remove();
Set
<BlogPost
> posts = a.
getPosts();
Iterator
<BlogPost
> postsIter = posts.
iterator();
while(postsIter.
hasNext())
{
BlogPost bp = postsIter.
next();
a.
getPosts().
remove(bp
);
bp.
setBlog(null);
DaoFactory.
getBlogPostDaoImpl().
delete(bp
);
}
a.
setCourseUnit(null);
logger.
warn("Removing Blog: " + a.
getId());
DaoFactory.
getCourseUnitBlogDaoImpl().
delete(a
);
}
}
if(cu.
getCourseUnitProgram() !=
null)
{
result.
warnings.
add("ALERT - Tem ficha curricular, nao vai apagar a ficha fica em backup id ficha: (" + cu.
getCourseUnitProgram().
getId() +
") pdf: (http://SITE_URL/repositoryStream/" + cu.
getProgramStreamId() +
"), exporte a ficha para backup");
cu.
setCourseUnitProgram(null);
}
if(cu.
getSummaries() !=
null && cu.
getSummaries().
size() > 0)
{
result.
warnings.
add("ALERT - Tem Sumarios, vai apagar os sumarios localmente");
Iterator
<CourseUnitSummary
> summaries = cu.
getSummaries().
iterator();
while(summaries.
hasNext())
{
CourseUnitSummary a = summaries.
next();
summaries.
remove();
a.
setCourseUnit(null);
logger.
warn("Removing Summary: " + a.
getId());
DaoFactory.
getCourseUnitSummaryDaoImpl().
delete(a
);
}
}
DaoFactory.
getCourseUnitDaoImpl().
delete(cu
);
result.
messageResult =
"Unidade Apagada";
}
return result
;
}
public List
<CourseUnitContentsInfo
> loadDeleteCandidates
(1.5.0/docs/api/java/lang/String.html">String importYear,UserSession session
)
{
List
<CourseUnitContentsInfo
> courseUnitContentsInfos =
new ArrayList
<CourseUnitContentsInfo
>();
1.5.0/docs/api/javax/management/Query.html">Query q = AbstractDao.
getCurrentSession().
createQuery("select c.id from c in class " + CourseUnit.
class.
getName() +
" where size(c.students) = 0 and c.importYear = ? order by c.importYear, c.semestre, c.code");
q.
setString(0,importYear
);
1.5.0/docs/api/java/util/Iterator.html">Iterator iter = q.
iterate();
while(iter.
hasNext())
{
1.5.0/docs/api/java/lang/Long.html">Long id =
(1.5.0/docs/api/java/lang/Long.html">Long) iter.
next();
CourseUnitContentsInfo cuInfo = checkDelete
(id,session
);
courseUnitContentsInfos.
add(cuInfo
);
}
return courseUnitContentsInfos
;
}
}