package com.breakersoft.plow.dao.pgsql;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Map;
import java.util.UUID;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;
import com.breakersoft.plow.Folder;
import com.breakersoft.plow.FolderE;
import com.breakersoft.plow.Project;
import com.breakersoft.plow.dao.AbstractDao;
import com.breakersoft.plow.dao.FolderDao;
import com.breakersoft.plow.util.JdbcUtils;
@Repository
public class FolderDaoImpl extends AbstractDao implements FolderDao {
public static final RowMapper<Folder> MAPPER = new RowMapper<Folder>() {
@Override
public Folder mapRow(ResultSet rs, int rowNum)
throws SQLException {
FolderE folder = new FolderE();
folder.setFolderId((UUID)rs.getObject(1));
folder.setProjectId((UUID)rs.getObject(2));
folder.setName(rs.getString(3));
return folder;
}
};
private static final String GET =
"SELECT " +
"pk_folder,"+
"pk_project, " +
"str_name " +
"FROM " +
"plow.folder " +
"WHERE " +
"pk_folder = ?";
@Override
public Folder get(UUID id) {
return jdbc.queryForObject(GET, MAPPER, id);
}
private static final String GET_DEFAULT =
"SELECT " +
"folder.pk_folder, "+
"folder.pk_project," +
"folder.str_name " +
"FROM " +
"plow.folder, " +
"plow.project " +
"WHERE " +
"folder.pk_folder = project.pk_folder_default " +
"AND " +
"project.pk_project = ?";
@Override
public Folder getDefaultFolder(Project project) {
return jdbc.queryForObject(GET_DEFAULT, MAPPER, project.getProjectId());
}
private static final String INSERT =
JdbcUtils.Insert("plow.folder",
"pk_folder",
"pk_project",
"int_order",
"str_name");
@Override
public Folder createFolder(Project project, String name) {
UUID id = UUID.randomUUID();
// Block out other threads from adding folders.
jdbc.queryForObject("SELECT pk_project FROM plow.project WHERE pk_project=? FOR UPDATE",
String.class, project.getProjectId());
jdbc.update(INSERT, id, project.getProjectId(), 32000, name);
jdbc.update("INSERT INTO plow.folder_dsp (pk_folder) VALUES (?)", id);
renumber(project);
return get(id);
}
public void renumber(Project project) {
int order = 0;
for(Map<String,Object> item:
jdbc.queryForList("SELECT pk_folder FROM folder WHERE pk_project=? ORDER BY int_order",
project.getProjectId())) {
jdbc.update("UPDATE folder SET int_order=? WHERE pk_folder=?",
order, item.get("pk_folder"));
order+=2;
}
}
@Override
public void setMaxCores(Folder folder, int value) {
jdbc.update("UPDATE plow.folder_dsp SET int_cores_max=? WHERE pk_folder=?",
value, folder.getFolderId());
}
@Override
public void setMinCores(Folder folder, int value) {
jdbc.update("UPDATE plow.folder_dsp SET int_cores_min=? WHERE pk_folder=?",
value, folder.getFolderId());
}
@Override
public void setName(Folder folder, String name) {
jdbc.update("UPDATE plow.folder SET str_name=? WHERE pk_folder=?",
name, folder.getFolderId());
}
@Override
public void delete(Folder folder) {
jdbc.update("DELETE FROM plow.folder WHERE pk_folder=?", folder.getFolderId());
}
}