package io.loli.sc.server.service.pan;
import io.loli.sc.server.dao.pan.FolderDao;
import io.loli.sc.server.entity.User;
import io.loli.sc.server.entity.pan.FolderEntity;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import javax.inject.Inject;
import javax.inject.Named;
import javax.transaction.Transactional;
import com.google.common.collect.Lists;
@Named
public class FolderService {
@Inject
private FolderDao folderDao;
@Transactional
public void save(FolderEntity folder) {
folderDao.save(folder);
}
@Transactional
public List<FolderEntity> listByUserAndPath(User user, int pid, int startIndex, int maxCount) {
List<FolderEntity> result = null;
if (pid == 0) {
result = folderDao.listByUserAndPath(user.getId(), "/");
if (result.isEmpty()) {
FolderEntity f = new FolderEntity();
f.setParent(null);
f.setUser(user);
f.setCreateDate(new Date());
f.setFullPath("/");
f.setName("");
folderDao.save(f);
}
}
if (pid == 0) {
result = folderDao.listByUserAndParent(user.getId(), this.findRootByUser(user).getId(), startIndex,
maxCount);
} else {
result = folderDao.listByUserAndParent(user.getId(), pid, startIndex, maxCount);
}
return result;
}
public FolderEntity findById(int id) {
return folderDao.findById(id);
}
@Transactional
public FolderEntity findRootByUser(User user) {
List<FolderEntity> list = folderDao.listByUserAndPath(user.getId(), "/");
FolderEntity root = null;
if (!list.isEmpty()) {
root = list.get(0);
} else {
FolderEntity f = new FolderEntity();
f.setParent(null);
f.setUser(user);
f.setCreateDate(new Date());
f.setFullPath("/");
f.setName("");
folderDao.save(f);
root = f;
}
return root;
}
public List<FolderEntity> findParentsByFolder(Integer pid) {
FolderEntity child = this.findById(pid);
List<FolderEntity> list = Lists.newArrayList();
boolean flag = true;
FolderEntity temp = child;
while (flag) {
if (temp == null) {
flag = false;
} else {
list.add(temp);
temp = temp.getParent();
}
}
Collections.reverse(list);
return list;
}
}