library upgrade

This commit is contained in:
2019-09-09 19:51:30 +02:00
parent 37337e0ebe
commit 57b23a9bdb
79 changed files with 4131 additions and 1666 deletions

View File

@ -32,6 +32,7 @@ public class ThemeBean implements Serializable
list.add("lumen");
list.add("other");
list.add("paper");
list.add("patternfly");
list.add("readable");
list.add("sandstone");
list.add("simplex");

View File

@ -1,44 +1,43 @@
package de.jottyfan.timetrack.modules;
import javax.faces.context.FacesContext;
import java.sql.SQLException;
import org.jooq.DSLContext;
import org.jooq.TableLike;
import de.jooqFaces.EJooqApplicationScope;
import de.jooqFaces.JooqFacesContext;
/**
*
* @author henkej
*
*/
public class JooqGateway
{
private final FacesContext facesContext;
public class JooqGateway {
private final JooqFacesContext facesContext;
public JooqGateway(FacesContext facesContext)
{
public JooqGateway(JooqFacesContext facesContext) {
this.facesContext = facesContext;
}
public DSLContext getJooq()
{
return (DSLContext) facesContext.getExternalContext().getApplicationMap().get(EJooqApplicationScope.JOOQ_FACES_DSLCONTEXT.get());
public DSLContext getJooq() throws ClassNotFoundException, SQLException {
return (DSLContext) facesContext.getJooq();
}
public Integer getFkLogin() {
// TODO: make a login, add the profile id to the session and read it here from facesContext
// TODO: make a login, add the profile id to the session and read it here from
// facesContext
return 1;
}
/**
* return amount of "select count(1) as amount " + subQuery
*
* @param subQuery
* @return number of entries
* @throws ClassNotFoundException
* @throws SQLException
*/
public Long getAmount(TableLike<?> table)
{
public Long getAmount(TableLike<?> table) throws ClassNotFoundException, SQLException {
return getJooq().selectCount().from(table).fetchOne(0, long.class);
}
}

View File

@ -5,6 +5,7 @@ import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.inject.Named;
import de.jooqFaces.JooqFacesContext;
import de.jottyfan.timetrack.help.Pages;
/**
@ -21,7 +22,7 @@ public class SessionControl {
public String doLogin() {
SessionModel model = new SessionModel();
model.doLogin(FacesContext.getCurrentInstance(), sessionBean);
model.doLogin((JooqFacesContext) FacesContext.getCurrentInstance(), sessionBean);
return Pages.START.get();
}

View File

@ -2,14 +2,17 @@ package de.jottyfan.timetrack.modules;
import static de.jottyfan.timetrack.db.profile.Tables.T_LOGIN;
import javax.faces.context.FacesContext;
import java.sql.SQLException;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.jooq.DSLContext;
import org.jooq.Record4;
import org.jooq.SelectConditionStep;
import org.jooq.exception.DataAccessException;
import de.jooqFaces.JooqFacesContext;
/**
*
* @author henkej
@ -18,7 +21,7 @@ import org.jooq.exception.DataAccessException;
public class SessionGateway extends JooqGateway {
private static final Logger LOGGER = LogManager.getLogger();
public SessionGateway(FacesContext facesContext) {
public SessionGateway(JooqFacesContext facesContext) {
super(facesContext);
}
@ -28,31 +31,36 @@ public class SessionGateway extends JooqGateway {
* @param bean
* the bean
* @return true or false
* @throws SQLException
* @throws ClassNotFoundException
* @throws DataAccessException
*/
public boolean seekAndSetLogin(SessionBean bean) {
SelectConditionStep<Record4<Integer, String, String, String>> sql = getJooq()
// @formatter:off
.select(T_LOGIN.PK,
T_LOGIN.FORENAME,
T_LOGIN.SURNAME,
T_LOGIN.PASSWORD)
.from(T_LOGIN)
.where(T_LOGIN.LOGIN.eq(bean.getUsername()));
// @formatter:on
LOGGER.debug(sql.toString());
Record4<Integer, String, String, String> r = sql.fetchOne();
if (r != null) {
String encrypted = r.get(T_LOGIN.PASSWORD);
if (bean.checkSecret(encrypted)) {
bean.setLogin(r.get(T_LOGIN.PK));
bean.setForename(r.get(T_LOGIN.FORENAME));
bean.setSurname(r.get(T_LOGIN.SURNAME));
return true;
public boolean seekAndSetLogin(SessionBean bean) throws DataAccessException, ClassNotFoundException, SQLException {
try (DSLContext jooq = getJooq()) {
SelectConditionStep<Record4<Integer, String, String, String>> sql = jooq
// @formatter:off
.select(T_LOGIN.PK,
T_LOGIN.FORENAME,
T_LOGIN.SURNAME,
T_LOGIN.PASSWORD)
.from(T_LOGIN)
.where(T_LOGIN.LOGIN.eq(bean.getUsername()));
// @formatter:on
LOGGER.debug(sql.toString());
Record4<Integer, String, String, String> r = sql.fetchOne();
if (r != null) {
String encrypted = r.get(T_LOGIN.PASSWORD);
if (bean.checkSecret(encrypted)) {
bean.setLogin(r.get(T_LOGIN.PK));
bean.setForename(r.get(T_LOGIN.FORENAME));
bean.setSurname(r.get(T_LOGIN.SURNAME));
return true;
} else {
throw new DataAccessException("wrong password");
}
} else {
throw new DataAccessException("wrong password");
return false;
}
} else {
return false;
}
}

View File

@ -1,10 +1,13 @@
package de.jottyfan.timetrack.modules;
import java.sql.SQLException;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import org.jooq.exception.DataAccessException;
import de.jooqFaces.JooqFacesContext;
/**
*
* @author henkej
@ -12,10 +15,10 @@ import org.jooq.exception.DataAccessException;
*/
public class SessionModel {
public boolean doLogin(FacesContext facesContext, SessionBean bean) {
public boolean doLogin(JooqFacesContext facesContext, SessionBean bean) {
try {
return new SessionGateway(facesContext).seekAndSetLogin(bean);
} catch (DataAccessException e) {
} catch (DataAccessException | ClassNotFoundException | SQLException e) {
FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "error on login", e.getMessage());
facesContext.addMessage(null, msg);
return false;

View File

@ -7,6 +7,7 @@ import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.inject.Named;
import de.jooqFaces.JooqFacesContext;
import de.jottyfan.timetrack.help.Navigation;
import de.jottyfan.timetrack.help.Pages;
import de.jottyfan.timetrack.modules.ControlInterface;
@ -30,7 +31,7 @@ public class ContactControl extends Navigation implements ControlInterface, Seri
}
public String toList() {
boolean ready = model.init(FacesContext.getCurrentInstance());
boolean ready = model.init((JooqFacesContext) FacesContext.getCurrentInstance());
return ready ? navigateTo(Pages.CONTACT_LIST) : toStart();
}
@ -45,21 +46,21 @@ public class ContactControl extends Navigation implements ControlInterface, Seri
}
public String doAdd() {
boolean ready = model.add(FacesContext.getCurrentInstance());
boolean ready = model.add((JooqFacesContext) FacesContext.getCurrentInstance());
return ready ? toList() : navigateTo(Pages.CONTACT_ITEM);
}
public String doUpdate() {
boolean ready = model.update(FacesContext.getCurrentInstance());
boolean ready = model.update((JooqFacesContext) FacesContext.getCurrentInstance());
return ready ? toList() : navigateTo(Pages.CONTACT_ITEM);
}
public String doDelete() {
boolean ready = model.delete(FacesContext.getCurrentInstance());
boolean ready = model.delete((JooqFacesContext) FacesContext.getCurrentInstance());
return ready ? toList() : navigateTo(Pages.CONTACT_ITEM);
}
public Integer getAmount() {
return model.getAmount(FacesContext.getCurrentInstance());
return model.getAmount((JooqFacesContext) FacesContext.getCurrentInstance());
}
}

View File

@ -2,22 +2,24 @@ package de.jottyfan.timetrack.modules.contact;
import static de.jottyfan.timetrack.db.contact.Tables.T_CONTACT;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.faces.context.FacesContext;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.jooq.DSLContext;
import org.jooq.DeleteConditionStep;
import org.jooq.InsertValuesStep4;
import org.jooq.Record1;
import org.jooq.Record5;
import org.jooq.SelectJoinStep;
import org.jooq.UpdateConditionStep;
import org.jooq.exception.DataAccessException;
import org.jooq.impl.DSL;
import de.jooqFaces.JooqFacesContext;
import de.jottyfan.timetrack.db.contact.enums.EnumContacttype;
import de.jottyfan.timetrack.db.contact.tables.records.TContactRecord;
import de.jottyfan.timetrack.modules.JooqGateway;
@ -30,7 +32,7 @@ import de.jottyfan.timetrack.modules.JooqGateway;
public class ContactGateway extends JooqGateway {
private static final Logger LOGGER = LogManager.getLogger(ContactGateway.class);
public ContactGateway(FacesContext facesContext) {
public ContactGateway(JooqFacesContext facesContext) {
super(facesContext);
}
@ -38,29 +40,34 @@ public class ContactGateway extends JooqGateway {
* get sorted list of contacts
*
* @return a list (an empty one at least)
* @throws SQLException
* @throws ClassNotFoundException
* @throws DataAccessException
*/
public List<ContactBean> getAll() {
SelectJoinStep<Record5<Integer, String, String, String, EnumContacttype>> sql = getJooq()
// @formatter:off
.select(T_CONTACT.PK,
T_CONTACT.FORENAME,
T_CONTACT.SURNAME,
T_CONTACT.CONTACT,
T_CONTACT.TYPE)
.from(T_CONTACT);
// @formatter:on
LOGGER.debug("{}", sql.toString());
List<ContactBean> list = new ArrayList<>();
for (Record5<Integer, String, String, String, EnumContacttype> r : sql.fetch()) {
ContactBean bean = new ContactBean(r.get(T_CONTACT.PK));
bean.setForename(r.get(T_CONTACT.FORENAME));
bean.setSurname(r.get(T_CONTACT.SURNAME));
bean.setContact(r.get(T_CONTACT.CONTACT));
bean.setType(r.get(T_CONTACT.TYPE));
list.add(bean);
public List<ContactBean> getAll() throws DataAccessException, ClassNotFoundException, SQLException {
try (DSLContext jooq = getJooq()) {
SelectJoinStep<Record5<Integer, String, String, String, EnumContacttype>> sql = jooq
// @formatter:off
.select(T_CONTACT.PK,
T_CONTACT.FORENAME,
T_CONTACT.SURNAME,
T_CONTACT.CONTACT,
T_CONTACT.TYPE)
.from(T_CONTACT);
// @formatter:on
LOGGER.debug("{}", sql.toString());
List<ContactBean> list = new ArrayList<>();
for (Record5<Integer, String, String, String, EnumContacttype> r : sql.fetch()) {
ContactBean bean = new ContactBean(r.get(T_CONTACT.PK));
bean.setForename(r.get(T_CONTACT.FORENAME));
bean.setSurname(r.get(T_CONTACT.SURNAME));
bean.setContact(r.get(T_CONTACT.CONTACT));
bean.setType(r.get(T_CONTACT.TYPE));
list.add(bean);
}
list.sort((o1, o2) -> o1 == null ? 0 : o1.compareTo(o2));
return list;
}
list.sort((o1, o2) -> o1 == null ? 0 : o1.compareTo(o2));
return list;
}
/**
@ -69,15 +76,20 @@ public class ContactGateway extends JooqGateway {
* @param pk
* the id of the contact
* @return the number of affected database rows, should be 1
* @throws SQLException
* @throws ClassNotFoundException
* @throws DataAccessException
*/
public Integer delete(Integer pk) {
DeleteConditionStep<TContactRecord> sql = getJooq()
// @formatter:off
.deleteFrom(T_CONTACT)
.where(T_CONTACT.PK.eq(pk));
// @formatter:on
LOGGER.debug("{}", sql.toString());
return sql.execute();
public Integer delete(Integer pk) throws DataAccessException, ClassNotFoundException, SQLException {
try (DSLContext jooq = getJooq()) {
DeleteConditionStep<TContactRecord> sql = jooq
// @formatter:off
.deleteFrom(T_CONTACT)
.where(T_CONTACT.PK.eq(pk));
// @formatter:on
LOGGER.debug("{}", sql.toString());
return sql.execute();
}
}
@ -87,19 +99,24 @@ public class ContactGateway extends JooqGateway {
* @param bean
* the contact information
* @return the number of affected database rows, should be 1
* @throws SQLException
* @throws ClassNotFoundException
* @throws DataAccessException
*/
public Integer add(ContactBean bean) {
InsertValuesStep4<TContactRecord, String, String, String, EnumContacttype> sql = getJooq()
// @formatter:off
.insertInto(T_CONTACT,
T_CONTACT.FORENAME,
T_CONTACT.SURNAME,
T_CONTACT.CONTACT,
T_CONTACT.TYPE)
.values(bean.getForename(), bean.getSurname(), bean.getContact(), bean.getType());
// @formatter:on
LOGGER.debug("{}", sql.toString());
return sql.execute();
public Integer add(ContactBean bean) throws DataAccessException, ClassNotFoundException, SQLException {
try (DSLContext jooq = getJooq()) {
InsertValuesStep4<TContactRecord, String, String, String, EnumContacttype> sql = jooq
// @formatter:off
.insertInto(T_CONTACT,
T_CONTACT.FORENAME,
T_CONTACT.SURNAME,
T_CONTACT.CONTACT,
T_CONTACT.TYPE)
.values(bean.getForename(), bean.getSurname(), bean.getContact(), bean.getType());
// @formatter:on
LOGGER.debug("{}", sql.toString());
return sql.execute();
}
}
/**
@ -108,34 +125,44 @@ public class ContactGateway extends JooqGateway {
* @param bean
* the contact information
* @return the number of affected database rows, should be 1
* @throws SQLException
* @throws ClassNotFoundException
* @throws DataAccessException
*/
public Integer update(ContactBean bean) {
UpdateConditionStep<TContactRecord> sql = getJooq()
// @formatter:off
.update(T_CONTACT)
.set(T_CONTACT.FORENAME, bean.getForename())
.set(T_CONTACT.SURNAME, bean.getSurname())
.set(T_CONTACT.CONTACT, bean.getContact())
.set(T_CONTACT.TYPE, bean.getType())
.where(T_CONTACT.PK.eq(bean.getPk()));
// @formatter:on
LOGGER.debug("{}", sql.toString());
return sql.execute();
public Integer update(ContactBean bean) throws DataAccessException, ClassNotFoundException, SQLException {
try (DSLContext jooq = getJooq()) {
UpdateConditionStep<TContactRecord> sql = jooq
// @formatter:off
.update(T_CONTACT)
.set(T_CONTACT.FORENAME, bean.getForename())
.set(T_CONTACT.SURNAME, bean.getSurname())
.set(T_CONTACT.CONTACT, bean.getContact())
.set(T_CONTACT.TYPE, bean.getType())
.where(T_CONTACT.PK.eq(bean.getPk()));
// @formatter:on
LOGGER.debug("{}", sql.toString());
return sql.execute();
}
}
/**
* get number of entries in t_contact
*
* @return number of entries
* @throws SQLException
* @throws ClassNotFoundException
* @throws DataAccessException
*/
public Integer getAmount() {
SelectJoinStep<Record1<Integer>> sql = getJooq()
// @formatter:off
.selectCount()
.from(T_CONTACT);
// @formatter:on
LOGGER.debug("{}", sql.toString());
return sql.fetchOne(DSL.count());
public Integer getAmount() throws DataAccessException, ClassNotFoundException, SQLException {
try (DSLContext jooq = getJooq()) {
SelectJoinStep<Record1<Integer>> sql = jooq
// @formatter:off
.selectCount()
.from(T_CONTACT);
// @formatter:on
LOGGER.debug("{}", sql.toString());
return sql.fetchOne(DSL.count());
}
}
/**

View File

@ -1,16 +1,17 @@
package de.jottyfan.timetrack.modules.contact;
import java.io.Serializable;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.enterprise.context.SessionScoped;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.inject.Named;
import org.jooq.exception.DataAccessException;
import de.jooqFaces.JooqFacesContext;
import de.jottyfan.timetrack.db.contact.enums.EnumContacttype;
import de.jottyfan.timetrack.modules.Model;
@ -28,14 +29,14 @@ public class ContactModel implements Model, Serializable {
private List<ContactBean> list;
private List<EnumContacttype> types;
public boolean init(FacesContext facesContext) {
public boolean init(JooqFacesContext facesContext) {
bean = new ContactBean(null);
try {
ContactGateway gw = new ContactGateway(facesContext);
list = gw.getAll();
types = gw.getTypes();
return true;
} catch (DataAccessException e) {
} catch (DataAccessException | ClassNotFoundException | SQLException e) {
facesContext.addMessage(null,
new FacesMessage(FacesMessage.SEVERITY_ERROR, "error on loading data from db", e.getMessage()));
list = new ArrayList<>();
@ -44,46 +45,46 @@ public class ContactModel implements Model, Serializable {
}
}
public boolean delete(FacesContext facesContext) {
public boolean delete(JooqFacesContext facesContext) {
try {
Integer affected = new ContactGateway(facesContext).delete(bean.getPk());
return affected.equals(1);
} catch (DataAccessException e) {
} catch (DataAccessException | ClassNotFoundException | SQLException e) {
facesContext.addMessage(null,
new FacesMessage(FacesMessage.SEVERITY_ERROR, "error on deleting data from db", e.getMessage()));
return false;
}
}
public boolean add(FacesContext facesContext) {
public boolean add(JooqFacesContext facesContext) {
try {
Integer affected = new ContactGateway(facesContext).add(bean);
return affected.equals(1);
} catch (DataAccessException e) {
} catch (DataAccessException | ClassNotFoundException | SQLException e) {
facesContext.addMessage(null,
new FacesMessage(FacesMessage.SEVERITY_ERROR, "error on adding data to db", e.getMessage()));
return false;
}
}
public boolean update(FacesContext facesContext) {
public boolean update(JooqFacesContext facesContext) {
try {
Integer affected = new ContactGateway(facesContext).update(bean);
return affected.equals(1);
} catch (DataAccessException e) {
} catch (DataAccessException | ClassNotFoundException | SQLException e) {
facesContext.addMessage(null,
new FacesMessage(FacesMessage.SEVERITY_ERROR, "error on updating data to db", e.getMessage()));
return false;
}
}
public Integer getAmount(FacesContext facesContext) {
public Integer getAmount(JooqFacesContext facesContext) {
try {
return new ContactGateway(facesContext).getAmount();
} catch (DataAccessException e) {
} catch (DataAccessException | ClassNotFoundException | SQLException e) {
facesContext.addMessage(null,
new FacesMessage(FacesMessage.SEVERITY_ERROR, "error on getting size of contacts", e.getMessage()));
return 0;
return -1;
}
}

View File

@ -10,6 +10,7 @@ import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.inject.Named;
import de.jooqFaces.JooqFacesContext;
import de.jottyfan.timetrack.help.Navigation;
import de.jottyfan.timetrack.help.Pages;
import de.jottyfan.timetrack.modules.ControlInterface;
@ -33,7 +34,7 @@ public class DoneControl extends Navigation implements ControlInterface, Seriali
}
public String toList() {
boolean ready = model.init(FacesContext.getCurrentInstance());
boolean ready = model.init((JooqFacesContext) FacesContext.getCurrentInstance());
return ready ? navigateTo(Pages.DONE_INIT) : toStart();
}
@ -41,13 +42,13 @@ public class DoneControl extends Navigation implements ControlInterface, Seriali
DoneBean bean = new DoneBean();
bean.setTimeFrom(getCurrentDate());
model.setBean(bean);
boolean ready = model.loadDefaults(FacesContext.getCurrentInstance());
boolean ready = model.loadDefaults((JooqFacesContext) FacesContext.getCurrentInstance());
return ready ? navigateTo(Pages.DONE_ADD) : toList();
}
public String toEdit(DoneBean bean) {
model.setBean(bean);
boolean ready = model.loadDefaults(FacesContext.getCurrentInstance());
boolean ready = model.loadDefaults((JooqFacesContext) FacesContext.getCurrentInstance());
return ready ? navigateTo(Pages.DONE_EDIT) : toList();
}
@ -57,17 +58,17 @@ public class DoneControl extends Navigation implements ControlInterface, Seriali
}
public String doUpdate() {
boolean ready = model.update(FacesContext.getCurrentInstance());
boolean ready = model.update((JooqFacesContext) FacesContext.getCurrentInstance());
return ready ? toList() : toEdit(model.getBean());
}
public String doDelete() {
boolean ready = model.delete(FacesContext.getCurrentInstance());
boolean ready = model.delete((JooqFacesContext) FacesContext.getCurrentInstance());
return ready ? toList() : toDelete(model.getBean());
}
public String doAdd() {
boolean ready = model.insert(FacesContext.getCurrentInstance());
boolean ready = model.insert((JooqFacesContext) FacesContext.getCurrentInstance());
return ready ? toList() : toAdd();
}

View File

@ -7,6 +7,7 @@ import static de.jottyfan.timetrack.db.done.Tables.T_PROJECT;
import static de.jottyfan.timetrack.db.done.Tables.V_TASKLIST;
import static de.jottyfan.timetrack.db.done.Tables.V_TOTALOFDAY;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
@ -16,10 +17,9 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.faces.context.FacesContext;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.jooq.DSLContext;
import org.jooq.DeleteConditionStep;
import org.jooq.InsertValuesStep6;
import org.jooq.Record;
@ -30,6 +30,7 @@ import org.jooq.SelectWhereStep;
import org.jooq.UpdateConditionStep;
import org.jooq.exception.DataAccessException;
import de.jooqFaces.JooqFacesContext;
import de.jottyfan.timetrack.db.done.tables.records.TDoneRecord;
import de.jottyfan.timetrack.db.done.tables.records.TJobRecord;
import de.jottyfan.timetrack.db.done.tables.records.TModuleRecord;
@ -46,7 +47,7 @@ import net.bootsfaces.component.fullCalendar.FullCalendarEventList;
public class DoneGateway extends JooqGateway {
private final static Logger LOGGER = LogManager.getLogger(DoneGateway.class);
public DoneGateway(FacesContext facesContext) {
public DoneGateway(JooqFacesContext facesContext) {
super(facesContext);
}
@ -54,51 +55,63 @@ public class DoneGateway extends JooqGateway {
* get all modules from db
*
* @return modules
* @throws SQLException
* @throws ClassNotFoundException
*/
public List<TModuleRecord> getAllModules() throws DataAccessException {
List<TModuleRecord> list = new ArrayList<>();
SelectWhereStep<TModuleRecord> sql = getJooq().selectFrom(T_MODULE);
LOGGER.debug(sql.toString());
for (TModuleRecord r : sql.fetch()) {
list.add(r);
public List<TModuleRecord> getAllModules() throws DataAccessException, ClassNotFoundException, SQLException {
try (DSLContext jooq = getJooq()) {
List<TModuleRecord> list = new ArrayList<>();
SelectWhereStep<TModuleRecord> sql = jooq.selectFrom(T_MODULE);
LOGGER.debug(sql.toString());
for (TModuleRecord r : sql.fetch()) {
list.add(r);
}
list.sort((o1, o2) -> o1 == null || o2 == null || o1.getName() == null || o2.getName() == null ? 0
: o1.getName().compareTo(o2.getName()));
return list;
}
list.sort((o1, o2) -> o1 == null || o2 == null || o1.getName() == null || o2.getName() == null ? 0
: o1.getName().compareTo(o2.getName()));
return list;
}
/**
* get all activities from db
*
* @return activities
* @throws SQLException
* @throws ClassNotFoundException
*/
public List<TJobRecord> getAllActivities() throws DataAccessException {
List<TJobRecord> list = new ArrayList<>();
SelectWhereStep<TJobRecord> sql = getJooq().selectFrom(T_JOB);
LOGGER.debug(sql.toString());
for (TJobRecord r : sql.fetch()) {
list.add(r);
public List<TJobRecord> getAllActivities() throws DataAccessException, ClassNotFoundException, SQLException {
try (DSLContext jooq = getJooq()) {
List<TJobRecord> list = new ArrayList<>();
SelectWhereStep<TJobRecord> sql = jooq.selectFrom(T_JOB);
LOGGER.debug(sql.toString());
for (TJobRecord r : sql.fetch()) {
list.add(r);
}
list.sort((o1, o2) -> o1 == null || o2 == null || o1.getName() == null || o2.getName() == null ? 0
: o1.getName().compareTo(o2.getName()));
return list;
}
list.sort((o1, o2) -> o1 == null || o2 == null || o1.getName() == null || o2.getName() == null ? 0
: o1.getName().compareTo(o2.getName()));
return list;
}
/**
* get all projects from db
*
* @return projects
* @throws SQLException
* @throws ClassNotFoundException
*/
public List<TProjectRecord> getAllProjects() throws DataAccessException {
List<TProjectRecord> list = new ArrayList<>();
SelectWhereStep<TProjectRecord> sql = getJooq().selectFrom(T_PROJECT);
LOGGER.debug(sql.toString());
for (TProjectRecord r : sql.fetch()) {
list.add(r);
public List<TProjectRecord> getAllProjects() throws DataAccessException, ClassNotFoundException, SQLException {
try (DSLContext jooq = getJooq()) {
List<TProjectRecord> list = new ArrayList<>();
SelectWhereStep<TProjectRecord> sql = jooq.selectFrom(T_PROJECT);
LOGGER.debug(sql.toString());
for (TProjectRecord r : sql.fetch()) {
list.add(r);
}
list.sort((o1, o2) -> o1 == null || o2 == null || o1.getName() == null || o2.getName() == null ? 0
: o1.getName().compareTo(o2.getName()));
return list;
}
list.sort((o1, o2) -> o1 == null || o2 == null || o1.getName() == null || o2.getName() == null ? 0
: o1.getName().compareTo(o2.getName()));
return list;
}
private Map<Integer, TProjectRecord> generateProjectMap(List<TProjectRecord> list) {
@ -132,8 +145,10 @@ public class DoneGateway extends JooqGateway {
* the day; if null, the current date is used
*
* @return a list of found times, an empty one at least
* @throws SQLException
* @throws ClassNotFoundException
*/
public List<DoneBean> getAll(LocalDateTime day) throws DataAccessException {
public List<DoneBean> getAll(LocalDateTime day) throws DataAccessException, ClassNotFoundException, SQLException {
Map<Integer, TProjectRecord> projectMap = generateProjectMap(getAllProjects());
Map<Integer, TModuleRecord> moduleMap = generateModuleMap(getAllModules());
Map<Integer, TJobRecord> jobMap = generateJobMap(getAllActivities());
@ -145,20 +160,22 @@ public class DoneGateway extends JooqGateway {
LocalDateTime tomorrow = day.plusDays(1).withHour(0).withMinute(0).withSecond(0).withNano(0);
List<DoneBean> list = new ArrayList<>();
SelectConditionStep<TDoneRecord> sql = getJooq()
// @formatter:off
.selectFrom(T_DONE)
.where(T_DONE.FK_LOGIN.eq(getFkLogin()))
.and(T_DONE.TIME_FROM.isNull()
.or(T_DONE.TIME_FROM.greaterThan(Timestamp.valueOf(yesterday))
.and(T_DONE.TIME_FROM.lessThan(Timestamp.valueOf(tomorrow)))))
.and(T_DONE.TIME_UNTIL.isNull()
.or(T_DONE.TIME_UNTIL.lessThan(Timestamp.valueOf(tomorrow))
.and(T_DONE.TIME_UNTIL.greaterThan(Timestamp.valueOf(yesterday)))));
// @formatter:on
LOGGER.debug(sql.toString());
for (TDoneRecord r : sql.fetch()) {
list.add(new DoneBean(r, projectMap, moduleMap, jobMap));
try (DSLContext jooq = getJooq()) {
SelectConditionStep<TDoneRecord> sql = getJooq()
// @formatter:off
.selectFrom(T_DONE)
.where(T_DONE.FK_LOGIN.eq(getFkLogin()))
.and(T_DONE.TIME_FROM.isNull()
.or(T_DONE.TIME_FROM.greaterThan(Timestamp.valueOf(yesterday))
.and(T_DONE.TIME_FROM.lessThan(Timestamp.valueOf(tomorrow)))))
.and(T_DONE.TIME_UNTIL.isNull()
.or(T_DONE.TIME_UNTIL.lessThan(Timestamp.valueOf(tomorrow))
.and(T_DONE.TIME_UNTIL.greaterThan(Timestamp.valueOf(yesterday)))));
// @formatter:on
LOGGER.debug(sql.toString());
for (TDoneRecord r : sql.fetch()) {
list.add(new DoneBean(r, projectMap, moduleMap, jobMap));
}
}
list.sort((o1, o2) -> o1 == null || o2 == null ? 0 : o1.compareTo(o2));
return list;
@ -168,57 +185,69 @@ public class DoneGateway extends JooqGateway {
* insert data into t_done
*
* @param bean
* @throws SQLException
* @throws ClassNotFoundException
*/
public void insert(DoneBean bean) throws DataAccessException {
public void insert(DoneBean bean) throws DataAccessException, ClassNotFoundException, SQLException {
Integer fkProject = bean.getProject() == null ? null : bean.getProject().getPk();
Integer fkModule = bean.getModule() == null ? null : bean.getModule().getPk();
Integer fkJob = bean.getActivity() == null ? null : bean.getActivity().getPk();
Integer fkLogin = getFkLogin();
InsertValuesStep6<TDoneRecord, Timestamp, Timestamp, Integer, Integer, Integer, Integer> sql = getJooq()
// @formatter:off
.insertInto(T_DONE,
T_DONE.TIME_FROM,
T_DONE.TIME_UNTIL,
T_DONE.FK_PROJECT,
T_DONE.FK_MODULE,
T_DONE.FK_JOB,
T_DONE.FK_LOGIN)
.values(bean.getTimeFrom(), bean.getTimeUntil(), fkProject, fkModule, fkJob, fkLogin);
// @formatter:on
LOGGER.debug(sql.toString());
sql.execute();
try (DSLContext jooq = getJooq()) {
InsertValuesStep6<TDoneRecord, Timestamp, Timestamp, Integer, Integer, Integer, Integer> sql = jooq
// @formatter:off
.insertInto(T_DONE,
T_DONE.TIME_FROM,
T_DONE.TIME_UNTIL,
T_DONE.FK_PROJECT,
T_DONE.FK_MODULE,
T_DONE.FK_JOB,
T_DONE.FK_LOGIN)
.values(bean.getTimeFrom(), bean.getTimeUntil(), fkProject, fkModule, fkJob, fkLogin);
// @formatter:on
LOGGER.debug(sql.toString());
sql.execute();
}
}
/**
* update bean in t_done
*
* @param bean
* @throws SQLException
* @throws ClassNotFoundException
*/
public void update(DoneBean bean) throws DataAccessException {
UpdateConditionStep<TDoneRecord> sql = getJooq()
// @formatter:off
.update(T_DONE)
.set(T_DONE.TIME_FROM, bean.getTimeFrom())
.set(T_DONE.TIME_UNTIL, bean.getTimeUntil())
.set(T_DONE.FK_PROJECT, bean.getProject() == null ? null : bean.getProject().getPk())
.set(T_DONE.FK_JOB, bean.getActivity() == null ? null : bean.getActivity().getPk())
.set(T_DONE.FK_MODULE, bean.getModule() == null ? null : bean.getModule().getPk())
.where(T_DONE.PK.eq(bean.getPk()));
// @formatter:on
LOGGER.debug(sql.toString());
sql.execute();
public void update(DoneBean bean) throws DataAccessException, ClassNotFoundException, SQLException {
try (DSLContext jooq = getJooq()) {
UpdateConditionStep<TDoneRecord> sql = jooq
// @formatter:off
.update(T_DONE)
.set(T_DONE.TIME_FROM, bean.getTimeFrom())
.set(T_DONE.TIME_UNTIL, bean.getTimeUntil())
.set(T_DONE.FK_PROJECT, bean.getProject() == null ? null : bean.getProject().getPk())
.set(T_DONE.FK_JOB, bean.getActivity() == null ? null : bean.getActivity().getPk())
.set(T_DONE.FK_MODULE, bean.getModule() == null ? null : bean.getModule().getPk())
.where(T_DONE.PK.eq(bean.getPk()));
// @formatter:on
LOGGER.debug(sql.toString());
sql.execute();
}
}
/**
* delete bean from t_done
*
* @param bean
* @throws SQLException
* @throws ClassNotFoundException
*/
public void delete(DoneBean bean) throws DataAccessException {
DeleteConditionStep<TDoneRecord> sql = getJooq().deleteFrom(T_DONE).where(T_DONE.PK.eq(bean.getPk()));
LOGGER.debug(sql.toString());
sql.execute();
public void delete(DoneBean bean) throws DataAccessException, ClassNotFoundException, SQLException {
try (DSLContext jooq = getJooq()) {
DeleteConditionStep<TDoneRecord> sql = jooq.deleteFrom(T_DONE).where(T_DONE.PK.eq(bean.getPk()));
LOGGER.debug(sql.toString());
sql.execute();
}
}
/**
@ -227,28 +256,33 @@ public class DoneGateway extends JooqGateway {
* @param day
* the day
* @return the day summary if found, an empty map otherwise
* @throws SQLException
* @throws ClassNotFoundException
* @throws DataAccessException
*/
public WholeDaySummaryBean getDaySummary(Date day) {
SelectConditionStep<Record4<String, String, String, String>> sql = getJooq()
// @formatter:off
.select(V_TOTALOFDAY.STARTTIME,
V_TOTALOFDAY.ENDTIME,
V_TOTALOFDAY.WORKTIME,
V_TOTALOFDAY.BREAKTIME)
.from(V_TOTALOFDAY)
.where(V_TOTALOFDAY.DAY.eq(new SimpleDateFormat("yyyy-MM-dd").format(day)))
.and(V_TOTALOFDAY.FK_LOGIN.eq(getFkLogin()));
// @formatter:on
LOGGER.debug(sql.toString());
Record r = sql.fetchOne();
if (r != null) {
String startTime = r.get(V_TOTALOFDAY.STARTTIME);
String endTime = r.get(V_TOTALOFDAY.ENDTIME);
String workTime = r.get(V_TOTALOFDAY.WORKTIME);
String breakTime = r.get(V_TOTALOFDAY.BREAKTIME);
return new WholeDaySummaryBean(startTime, endTime, workTime, breakTime);
public WholeDaySummaryBean getDaySummary(Date day) throws DataAccessException, ClassNotFoundException, SQLException {
try (DSLContext jooq = getJooq()) {
SelectConditionStep<Record4<String, String, String, String>> sql = jooq
// @formatter:off
.select(V_TOTALOFDAY.STARTTIME,
V_TOTALOFDAY.ENDTIME,
V_TOTALOFDAY.WORKTIME,
V_TOTALOFDAY.BREAKTIME)
.from(V_TOTALOFDAY)
.where(V_TOTALOFDAY.DAY.eq(new SimpleDateFormat("yyyy-MM-dd").format(day)))
.and(V_TOTALOFDAY.FK_LOGIN.eq(getFkLogin()));
// @formatter:on
LOGGER.debug(sql.toString());
Record r = sql.fetchOne();
if (r != null) {
String startTime = r.get(V_TOTALOFDAY.STARTTIME);
String endTime = r.get(V_TOTALOFDAY.ENDTIME);
String workTime = r.get(V_TOTALOFDAY.WORKTIME);
String breakTime = r.get(V_TOTALOFDAY.BREAKTIME);
return new WholeDaySummaryBean(startTime, endTime, workTime, breakTime);
}
return new WholeDaySummaryBean("", "", "", "");
}
return new WholeDaySummaryBean("", "", "", "");
}
/**
@ -257,76 +291,86 @@ public class DoneGateway extends JooqGateway {
* @param day
* the day
* @return list of found jobs; an empty list at least
* @throws SQLException
* @throws ClassNotFoundException
* @throws DataAccessException
*/
public List<DailySummaryBean> getAllJobs(Date day) {
SelectConditionStep<Record4<String, String, String, String>> sql = getJooq()
// @formatter:off
.select(V_TASKLIST.DURATION,
V_TASKLIST.PROJECT_NAME,
V_TASKLIST.MODULE_NAME,
V_TASKLIST.JOB_NAME)
.from(V_TASKLIST)
.where(V_TASKLIST.DAY.eq(new SimpleDateFormat("yyyy-MM-dd").format(day)))
.and(V_TASKLIST.FK_LOGIN.eq(getFkLogin()));
// @formatter:on
LOGGER.debug(sql.toString());
List<DailySummaryBean> list = new ArrayList<>();
for (Record4<String, String, String, String> r : sql.fetch()) {
String duration = r.get(V_TASKLIST.DURATION);
String projectName = r.get(V_TASKLIST.PROJECT_NAME);
String moduleName = r.get(V_TASKLIST.MODULE_NAME);
String jobName = r.get(V_TASKLIST.JOB_NAME);
list.add(new DailySummaryBean(projectName, moduleName, jobName, duration));
public List<DailySummaryBean> getAllJobs(Date day) throws DataAccessException, ClassNotFoundException, SQLException {
try (DSLContext jooq = getJooq()) {
SelectConditionStep<Record4<String, String, String, String>> sql = jooq
// @formatter:off
.select(V_TASKLIST.DURATION,
V_TASKLIST.PROJECT_NAME,
V_TASKLIST.MODULE_NAME,
V_TASKLIST.JOB_NAME)
.from(V_TASKLIST)
.where(V_TASKLIST.DAY.eq(new SimpleDateFormat("yyyy-MM-dd").format(day)))
.and(V_TASKLIST.FK_LOGIN.eq(getFkLogin()));
// @formatter:on
LOGGER.debug(sql.toString());
List<DailySummaryBean> list = new ArrayList<>();
for (Record4<String, String, String, String> r : sql.fetch()) {
String duration = r.get(V_TASKLIST.DURATION);
String projectName = r.get(V_TASKLIST.PROJECT_NAME);
String moduleName = r.get(V_TASKLIST.MODULE_NAME);
String jobName = r.get(V_TASKLIST.JOB_NAME);
list.add(new DailySummaryBean(projectName, moduleName, jobName, duration));
}
return list;
}
return list;
}
/**
* get json representation of all calendar events of user
*
* @return
* @throws SQLException
* @throws ClassNotFoundException
* @throws DataAccessException
*/
public String getAllCalendarEvents() {
SelectConditionStep<Record5<Timestamp, Timestamp, String, String, String>> sql = getJooq()
// @formatter:off
.select(T_DONE.TIME_FROM,
T_DONE.TIME_UNTIL,
T_PROJECT.NAME,
T_MODULE.NAME,
T_JOB.NAME)
.from(T_DONE)
.leftJoin(T_PROJECT).on(T_PROJECT.PK.eq(T_DONE.FK_PROJECT))
.leftJoin(T_MODULE).on(T_MODULE.PK.eq(T_DONE.FK_MODULE))
.leftJoin(T_JOB).on(T_JOB.PK.eq(T_DONE.FK_JOB))
.where(T_DONE.FK_LOGIN.eq(getFkLogin()));
// @formatter:on
LOGGER.debug(sql.toString());
FullCalendarEventList list = new FullCalendarEventList();
for (Record r : sql.fetch()) {
String projectName = r.get(T_PROJECT.NAME);
String moduleName = r.get(T_MODULE.NAME);
String jobName = r.get(T_JOB.NAME);
Date timeFrom = r.get(T_DONE.TIME_FROM);
Date timeUntil = r.get(T_DONE.TIME_UNTIL);
public String getAllCalendarEvents() throws DataAccessException, ClassNotFoundException, SQLException {
try (DSLContext jooq = getJooq()) {
SelectConditionStep<Record5<Timestamp, Timestamp, String, String, String>> sql = jooq
// @formatter:off
.select(T_DONE.TIME_FROM,
T_DONE.TIME_UNTIL,
T_PROJECT.NAME,
T_MODULE.NAME,
T_JOB.NAME)
.from(T_DONE)
.leftJoin(T_PROJECT).on(T_PROJECT.PK.eq(T_DONE.FK_PROJECT))
.leftJoin(T_MODULE).on(T_MODULE.PK.eq(T_DONE.FK_MODULE))
.leftJoin(T_JOB).on(T_JOB.PK.eq(T_DONE.FK_JOB))
.where(T_DONE.FK_LOGIN.eq(getFkLogin()));
// @formatter:on
LOGGER.debug(sql.toString());
FullCalendarEventList list = new FullCalendarEventList();
for (Record r : sql.fetch()) {
String projectName = r.get(T_PROJECT.NAME);
String moduleName = r.get(T_MODULE.NAME);
String jobName = r.get(T_JOB.NAME);
Date timeFrom = r.get(T_DONE.TIME_FROM);
Date timeUntil = r.get(T_DONE.TIME_UNTIL);
StringBuilder buf = new StringBuilder();
buf.append(projectName);
buf.append(", ");
buf.append(moduleName);
buf.append(": ");
buf.append(jobName);
StringBuilder buf = new StringBuilder();
buf.append(projectName);
buf.append(", ");
buf.append(moduleName);
buf.append(": ");
buf.append(jobName);
FullCalendarEventBean bean = new FullCalendarEventBean(buf.toString(), timeFrom) {
private static final long serialVersionUID = 1L;
FullCalendarEventBean bean = new FullCalendarEventBean(buf.toString(), timeFrom) {
private static final long serialVersionUID = 1L;
@Override
public void addExtendedFields(StringBuilder buf) {
}
};
bean.setEnd(timeUntil);
bean.setColor(new RgbColor().determineRgbColor(projectName, moduleName, jobName));
list.getList().add(bean);
@Override
public void addExtendedFields(StringBuilder buf) {
}
};
bean.setEnd(timeUntil);
bean.setColor(new RgbColor().determineRgbColor(projectName, moduleName, jobName));
list.getList().add(bean);
}
return list.toJson();
}
return list.toJson();
}
}

View File

@ -1,6 +1,7 @@
package de.jottyfan.timetrack.modules.done;
import java.io.Serializable;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.ZoneId;
@ -13,11 +14,11 @@ import java.util.TimeZone;
import javax.enterprise.context.SessionScoped;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.inject.Named;
import org.jooq.exception.DataAccessException;
import de.jooqFaces.JooqFacesContext;
import de.jottyfan.timetrack.db.done.tables.records.TJobRecord;
import de.jottyfan.timetrack.db.done.tables.records.TModuleRecord;
import de.jottyfan.timetrack.db.done.tables.records.TProjectRecord;
@ -44,7 +45,7 @@ public class DoneModel implements Model, Serializable {
private Date day;
private String calendarEvents;
public boolean init(FacesContext facesContext) {
public boolean init(JooqFacesContext facesContext) {
try {
day = day == null ? new Date() : day;
beans = getAllOfDay(facesContext, day);
@ -56,13 +57,13 @@ public class DoneModel implements Model, Serializable {
allJobs = gw.getAllJobs(day);
calendarEvents = gw.getAllCalendarEvents();
return true;
} catch (DataAccessException e) {
} catch (DataAccessException | ClassNotFoundException | SQLException e) {
facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "error", e.getMessage()));
return false;
}
}
public boolean loadDefaults(FacesContext facesContext) {
public boolean loadDefaults(JooqFacesContext facesContext) {
try {
defineTimes();
return true;
@ -126,37 +127,39 @@ public class DoneModel implements Model, Serializable {
* @param login
* the user to look up for
* @return all entries
* @throws SQLException
* @throws ClassNotFoundException
*/
private List<DoneBean> getAllOfDay(FacesContext facesContext, Date day) throws DataAccessException {
private List<DoneBean> getAllOfDay(JooqFacesContext facesContext, Date day) throws DataAccessException, ClassNotFoundException, SQLException {
LocalDateTime ldt = day.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
return new DoneGateway(facesContext).getAll(ldt);
}
public boolean insert(FacesContext facesContext) {
public boolean insert(JooqFacesContext facesContext) {
try {
new DoneGateway(facesContext).insert(bean);
return true;
} catch (DataAccessException e) {
} catch (DataAccessException | ClassNotFoundException | SQLException e) {
facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "error", e.getMessage()));
return false;
}
}
public boolean update(FacesContext facesContext) {
public boolean update(JooqFacesContext facesContext) {
try {
new DoneGateway(facesContext).update(bean);
return true;
} catch (DataAccessException e) {
} catch (DataAccessException | ClassNotFoundException | SQLException e) {
facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "error", e.getMessage()));
return false;
}
}
public boolean delete(FacesContext facesContext) {
public boolean delete(JooqFacesContext facesContext) {
try {
new DoneGateway(facesContext).delete(bean);
return true;
} catch (DataAccessException e) {
} catch (DataAccessException | ClassNotFoundException | SQLException e) {
facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "error", e.getMessage()));
return false;
}

View File

@ -7,6 +7,7 @@ import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.inject.Named;
import de.jooqFaces.JooqFacesContext;
import de.jottyfan.timetrack.help.Navigation;
import de.jottyfan.timetrack.help.Pages;
import de.jottyfan.timetrack.modules.ControlInterface;
@ -33,7 +34,7 @@ public class NoteControl extends Navigation implements ControlInterface, Seriali
public String toList()
{
boolean ready = model.init(FacesContext.getCurrentInstance());
boolean ready = model.init((JooqFacesContext) FacesContext.getCurrentInstance());
return ready ? navigateTo(Pages.NOTE_LIST) : "";
}
@ -50,19 +51,19 @@ public class NoteControl extends Navigation implements ControlInterface, Seriali
public String doAdd()
{
boolean ready = model.add(FacesContext.getCurrentInstance());
boolean ready = model.add((JooqFacesContext) FacesContext.getCurrentInstance());
return ready ? toList() : toItem(model.getBean());
}
public String doUpdate()
{
boolean ready = model.update(FacesContext.getCurrentInstance());
boolean ready = model.update((JooqFacesContext) FacesContext.getCurrentInstance());
return ready ? toList() : toItem(model.getBean());
}
public String doDelete()
{
boolean ready = model.delete(FacesContext.getCurrentInstance());
boolean ready = model.delete((JooqFacesContext) FacesContext.getCurrentInstance());
return ready ? toList() : toItem(model.getBean());
}
@ -98,6 +99,6 @@ public class NoteControl extends Navigation implements ControlInterface, Seriali
}
public Long getAmount() {
return model.getAmount(FacesContext.getCurrentInstance());
return model.getAmount((JooqFacesContext) FacesContext.getCurrentInstance());
}
}

View File

@ -2,13 +2,13 @@ package de.jottyfan.timetrack.modules.note;
import static de.jottyfan.timetrack.db.note.Tables.T_NOTE;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.faces.context.FacesContext;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.jooq.DSLContext;
import org.jooq.DeleteConditionStep;
import org.jooq.InsertValuesStep4;
import org.jooq.Record;
@ -16,6 +16,7 @@ import org.jooq.SelectJoinStep;
import org.jooq.UpdateConditionStep;
import org.jooq.exception.DataAccessException;
import de.jooqFaces.JooqFacesContext;
import de.jottyfan.timetrack.db.note.enums.EnumCategory;
import de.jottyfan.timetrack.db.note.enums.EnumNotetype;
import de.jottyfan.timetrack.db.note.tables.records.TNoteRecord;
@ -26,12 +27,10 @@ import de.jottyfan.timetrack.modules.JooqGateway;
* @author henkej
*
*/
public class NoteGateway extends JooqGateway
{
public class NoteGateway extends JooqGateway {
private static final Logger LOGGER = LogManager.getLogger(NoteGateway.class);
public NoteGateway(FacesContext facesContext)
{
public NoteGateway(JooqFacesContext facesContext) {
super(facesContext);
}
@ -40,14 +39,24 @@ public class NoteGateway extends JooqGateway
*
* @param noteBean
* @throws DataAccessException
* @throws SQLException
* @throws ClassNotFoundException
* @returns amount of affected rows in db
*/
public void insert(NoteBean bean) throws DataAccessException
{
InsertValuesStep4<TNoteRecord, String, EnumCategory, EnumNotetype, String> sql = getJooq().insertInto(T_NOTE, T_NOTE.TITLE, T_NOTE.CATEGORY, T_NOTE.NOTETYPE, T_NOTE.CONTENT).values(bean.getTitle(), bean.getCategory(), bean.getType(),
bean.getContent());
LOGGER.debug(sql.toString());
sql.execute();
public void insert(NoteBean bean) throws DataAccessException, ClassNotFoundException, SQLException {
try (DSLContext jooq = getJooq()) {
InsertValuesStep4<TNoteRecord, String, EnumCategory, EnumNotetype, String> sql = jooq
// @formatter:off
.insertInto(T_NOTE,
T_NOTE.TITLE,
T_NOTE.CATEGORY,
T_NOTE.NOTETYPE,
T_NOTE.CONTENT)
.values(bean.getTitle(), bean.getCategory(), bean.getType(), bean.getContent());
// @formatter:on
LOGGER.debug(sql.toString());
sql.execute();
}
}
/**
@ -55,12 +64,21 @@ public class NoteGateway extends JooqGateway
*
* @param bean
* @throws DataAccessException
* @throws SQLException
* @throws ClassNotFoundException
*/
public void update(NoteBean bean) throws DataAccessException
{
UpdateConditionStep<TNoteRecord> sql = getJooq().update(T_NOTE).set(T_NOTE.TITLE, bean.getTitle()).set(T_NOTE.CONTENT, bean.getContent()).where(T_NOTE.PK.eq(bean.getPk()));
LOGGER.debug(sql.toString());
sql.execute();
public void update(NoteBean bean) throws DataAccessException, ClassNotFoundException, SQLException {
try (DSLContext jooq = getJooq()) {
UpdateConditionStep<TNoteRecord> sql = jooq
// @formatter:off
.update(T_NOTE)
.set(T_NOTE.TITLE, bean.getTitle())
.set(T_NOTE.CONTENT, bean.getContent())
.where(T_NOTE.PK.eq(bean.getPk()));
// @formatter:on
LOGGER.debug(sql.toString());
sql.execute();
}
}
/**
@ -68,12 +86,15 @@ public class NoteGateway extends JooqGateway
*
* @param pk
* @throws DataAccessException
* @throws SQLException
* @throws ClassNotFoundException
*/
public void delete(Integer pk) throws DataAccessException
{
DeleteConditionStep<TNoteRecord> sql = getJooq().deleteFrom(T_NOTE).where(T_NOTE.PK.eq(pk));
LOGGER.debug(sql.toString());
sql.execute();
public void delete(Integer pk) throws DataAccessException, ClassNotFoundException, SQLException {
try (DSLContext jooq = getJooq()) {
DeleteConditionStep<TNoteRecord> sql = jooq.deleteFrom(T_NOTE).where(T_NOTE.PK.eq(pk));
LOGGER.debug(sql.toString());
sql.execute();
}
}
/**
@ -81,22 +102,24 @@ public class NoteGateway extends JooqGateway
*
* @return
* @throws DataAccessException
* @throws SQLException
* @throws ClassNotFoundException
*/
public List<NoteBean> getAll() throws DataAccessException
{
SelectJoinStep<Record> sql = getJooq().select().from(T_NOTE);
LOGGER.debug(sql.toString());
List<NoteBean> list = new ArrayList<>();
for (Record r : sql.fetch())
{
NoteBean bean = new NoteBean(r.get(T_NOTE.PK));
bean.setTitle(r.get(T_NOTE.TITLE));
bean.setCategory(r.get(T_NOTE.CATEGORY));
bean.setContent(r.get(T_NOTE.CONTENT));
bean.setType(r.get(T_NOTE.NOTETYPE));
bean.setLastchange(r.get(T_NOTE.LASTCHANGE));
list.add(bean);
public List<NoteBean> getAll() throws DataAccessException, ClassNotFoundException, SQLException {
try (DSLContext jooq = getJooq()) {
SelectJoinStep<Record> sql = jooq.select().from(T_NOTE);
LOGGER.debug(sql.toString());
List<NoteBean> list = new ArrayList<>();
for (Record r : sql.fetch()) {
NoteBean bean = new NoteBean(r.get(T_NOTE.PK));
bean.setTitle(r.get(T_NOTE.TITLE));
bean.setCategory(r.get(T_NOTE.CATEGORY));
bean.setContent(r.get(T_NOTE.CONTENT));
bean.setType(r.get(T_NOTE.NOTETYPE));
bean.setLastchange(r.get(T_NOTE.LASTCHANGE));
list.add(bean);
}
return list;
}
return list;
}
}

View File

@ -1,15 +1,16 @@
package de.jottyfan.timetrack.modules.note;
import java.io.Serializable;
import java.sql.SQLException;
import java.util.List;
import javax.enterprise.context.SessionScoped;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.inject.Named;
import org.jooq.exception.DataAccessException;
import de.jooqFaces.JooqFacesContext;
import de.jottyfan.timetrack.db.note.Tables;
import de.jottyfan.timetrack.modules.Model;
@ -27,65 +28,70 @@ public class NoteModel implements Model, Serializable
private List<NoteBean> beans;
private NoteBean bean;
public boolean init(FacesContext facesContext)
public boolean init(JooqFacesContext facesContext)
{
try
{
beans = new NoteGateway(facesContext).getAll();
return true;
}
catch (DataAccessException e)
catch (DataAccessException | ClassNotFoundException | SQLException e)
{
facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "error", e.getMessage()));
return false;
}
}
public boolean add(FacesContext facesContext)
public boolean add(JooqFacesContext facesContext)
{
try
{
new NoteGateway(facesContext).insert(bean);
return true;
}
catch (DataAccessException e)
catch (DataAccessException | ClassNotFoundException | SQLException e)
{
facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "error", e.getMessage()));
return false;
}
}
public boolean update(FacesContext facesContext)
public boolean update(JooqFacesContext facesContext)
{
try
{
new NoteGateway(facesContext).update(bean);
return true;
}
catch (DataAccessException e)
catch (DataAccessException | ClassNotFoundException | SQLException e)
{
facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "error", e.getMessage()));
return false;
}
}
public boolean delete(FacesContext facesContext)
public boolean delete(JooqFacesContext facesContext)
{
try
{
new NoteGateway(facesContext).delete(bean.getPk());
return true;
}
catch (DataAccessException e)
catch (DataAccessException | ClassNotFoundException | SQLException e)
{
facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "error", e.getMessage()));
return false;
}
}
public Long getAmount(FacesContext facesContext)
public Long getAmount(JooqFacesContext facesContext)
{
return new NoteGateway(facesContext).getAmount(Tables.T_NOTE);
try {
return new NoteGateway(facesContext).getAmount(Tables.T_NOTE);
} catch (ClassNotFoundException | SQLException e) {
facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "error", e.getMessage()));
return -1l;
}
}
@Override

View File

@ -4,10 +4,6 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
version="2.0">
<lifecycle>
<phase-listener>de.jooqFaces.JooqFacesRenderResponsePhaseListener</phase-listener>
<phase-listener>de.jooqFaces.JooqFacesRestoreViewPhaseListener</phase-listener>
</lifecycle>
<factory>
<faces-context-factory>de.jooqFaces.JooqFacesContextFactory</faces-context-factory>
</factory>

View File

@ -61,7 +61,7 @@
</context-param>
<context-param>
<param-name>jooqFacesProperties</param-name>
<param-value>/etc/tomcat8#/timetrack.properties</param-value>
<param-value>/etc/timetrack.properties</param-value>
</context-param>
<listener>
<listener-class>de.jooqFaces.PropertiesDeploymentListener</listener-class>

View File

@ -19,18 +19,17 @@
</h:panelGrid>
<b:tabView>
<b:tab title="Liste">
<b:dataTable value="#{doneModel.beans}" var="b" border="false" info="false" paginated="false" searching="false"
styleClass="doneoverview">
<b:dataTableColumn label="" orderable="false">
<b:dataTable value="#{doneModel.beans}" var="b" border="false" info="false" paginated="false" searching="false">
<b:dataTableColumn label="" style="width: 100px !important" orderable="false">
<b:commandButton action="#{doneControl.toDelete(b)}" value="Entfernen" look="danger" iconAwesome="trash" />
</b:dataTableColumn>
<b:dataTableColumn label="" value="#{b.timeSummary}" contentStyleClass="doneoverviewtext" style="min-width: 100px !important" orderable="false" />
<b:dataTableColumn label="" value="#{b.projectName}" contentStyleClass="doneoverviewtextemph" orderable="false" />
<b:dataTableColumn label="" value="#{b.timeDiff}" contentStyleClass="doneoverviewtextemph" orderable="false" />
<b:dataTableColumn label="" orderable="false">
<b:dataTableColumn label="" value="#{b.timeSummary}" contentStyleClass="doneoverviewtext" style="width: 128px !important" orderable="false" />
<b:dataTableColumn label="" value="#{b.projectName}" contentStyleClass="doneoverviewtextemph" style="width: 128px !important" orderable="false" />
<b:dataTableColumn label="" value="#{b.timeDiff}" contentStyleClass="doneoverviewtextemph" style="width: 64px !important" orderable="false" />
<b:dataTableColumn label="" style="width: 100px !important" orderable="false">
<b:commandButton action="#{doneControl.toEdit(b)}" value="Editieren" look="warning" iconAwesome="pencil" />
</b:dataTableColumn>
<b:dataTableColumn label="" value="#{b.moduleName}" contentStyleClass="doneoverviewtext" orderable="false" />
<b:dataTableColumn label="" value="#{b.moduleName}" contentStyleClass="doneoverviewtext" style="width: 128px !important" orderable="false" />
<b:dataTableColumn label="" value="#{b.jobName}" contentStyleClass="doneoverviewtext" orderable="false" />
</b:dataTable>
<b:row rendered="#{doneModel.daySummary != null}">

View File

@ -6,11 +6,6 @@
!important;
}
.doneoverview {
max-width: 850px !important;
width: 850px !important;
}
.doneoverviewtext {
font-size: 120%;
}