package binky.reportrunner.service.impl;
import java.util.List;
import binky.reportrunner.dao.ReportRunnerDao;
import binky.reportrunner.data.RunnerDashboardItem;
import binky.reportrunner.data.RunnerDataSource;
import binky.reportrunner.data.RunnerGroup;
import binky.reportrunner.data.RunnerJob;
import binky.reportrunner.data.RunnerUser;
import binky.reportrunner.service.DashboardService;
import binky.reportrunner.service.DatasourceService;
import binky.reportrunner.service.GroupService;
import binky.reportrunner.service.ReportService;
import binky.reportrunner.service.UserService;
import com.googlecode.ehcache.annotations.Cacheable;
import com.googlecode.ehcache.annotations.TriggersRemove;
public class GroupServiceImpl implements GroupService {
private ReportRunnerDao<RunnerGroup, String> groupDao;
private ReportService reportService;
private DashboardService dashboardService;
private UserService userService;
private DatasourceService datasourceService;
@Override
@TriggersRemove(cacheName = "groupCache")
public void delete(String groupName) throws Exception {
List<RunnerJob> js = reportService.listJobs(groupName);
if (js!=null) {
for (RunnerJob j: js) {
reportService.deleteJob(j.getPk().getJobName(), groupName);
}
}
List<RunnerDashboardItem> is = dashboardService.getItemsForGroup(groupName);
if (is!=null) {
for (RunnerDashboardItem i:is) {
dashboardService.deleteItem(i.getId());
}
}
RunnerGroup g = groupDao.get(groupName);
for (RunnerUser u: userService.getAll()) {
if (u.getGroups()!=null && u.getGroups().contains(g)) {
u.getGroups().remove(g);
userService.saveOrUpdate(u);
}
}
for (RunnerDataSource d:datasourceService.listDataSources()) {
if (d.getGroups()!=null && d.getGroups().contains(g)) {
d.getGroups().remove(g);
datasourceService.saveUpdateDataSource(d);
}
}
groupDao.delete(groupName);
}
@Override
public List<RunnerGroup> getAll() {
return groupDao.getAll();
}
@Override
@Cacheable(cacheName = "groupCache")
public void saveOrUpdate(RunnerGroup group) {
groupDao.saveOrUpdate(group);
}
@Override
@Cacheable(cacheName = "groupCache")
public RunnerGroup getGroup(String groupName) {
return groupDao.get(groupName);
}
public void setGroupDao(ReportRunnerDao<RunnerGroup, String> groupDao) {
this.groupDao = groupDao;
List<RunnerGroup> groups = groupDao.getAll();
if (groups==null || groups.size()<1) {
RunnerGroup group = new RunnerGroup();
group.setGroupName("Example Group");
group.setGroupDescription("Sample group, please delete");
groupDao.saveOrUpdate(group);
}
}
public void setReportService(ReportService reportService) {
this.reportService = reportService;
}
public void setDashboardService(DashboardService dashboardService) {
this.dashboardService = dashboardService;
}
public void setUserService(UserService userService) {
this.userService = userService;
}
public void setDatasourceService(DatasourceService datasourceService) {
this.datasourceService = datasourceService;
}
}