diff --git a/src/main/java/de/jottyfan/timetrack/modules/done/DoneGateway.java b/src/main/java/de/jottyfan/timetrack/modules/done/DoneGateway.java index 1703ac1..78a9fab 100644 --- a/src/main/java/de/jottyfan/timetrack/modules/done/DoneGateway.java +++ b/src/main/java/de/jottyfan/timetrack/modules/done/DoneGateway.java @@ -129,7 +129,8 @@ public class DoneGateway extends JooqGateway { /** * get all from t_done of the given day * - * @param day the day; if null, the current date is used + * @param day + * the day; if null, the current date is used * * @return a list of found times, an empty one at least */ @@ -224,7 +225,8 @@ public class DoneGateway extends JooqGateway { /** * get day summary * - * @param day the day + * @param day + * the day * @return the day summary if found, an empty map otherwise */ public WholeDaySummaryBean getDaySummary(Date day) { @@ -262,7 +264,8 @@ public class DoneGateway extends JooqGateway { /** * get all jobs of day * - * @param day the day + * @param day + * the day * @return list of found jobs; an empty list at least */ public List getAllJobs(Date day) { @@ -297,10 +300,10 @@ public class DoneGateway extends JooqGateway { SelectConditionStep> sql = getJooq() // @formatter:off .select(T_DONE.TIME_FROM, - T_DONE.TIME_UNTIL, - T_PROJECT.NAME, - T_MODULE.NAME, - T_JOB.NAME) + 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)) @@ -324,17 +327,16 @@ public class DoneGateway extends JooqGateway { buf.append(jobName); FullCalendarEventBean bean = new FullCalendarEventBean(buf.toString(), timeFrom) { + private static final long serialVersionUID = 1L; + @Override public void addExtendedFields(StringBuilder buf) { } }; bean.setEnd(timeUntil); - bean.setColor("#444444"); // TODO: colors by project name, maybe find a way to determine color by project - // name - + bean.setColor(new RgbColor().determineRgbColor(projectName, moduleName, jobName)); list.getList().add(bean); } - return list.toJson(); } } diff --git a/src/main/java/de/jottyfan/timetrack/modules/done/DoneModel.java b/src/main/java/de/jottyfan/timetrack/modules/done/DoneModel.java index 3a2733c..306be71 100644 --- a/src/main/java/de/jottyfan/timetrack/modules/done/DoneModel.java +++ b/src/main/java/de/jottyfan/timetrack/modules/done/DoneModel.java @@ -176,6 +176,10 @@ public class DoneModel implements Model, Serializable { return buf.toString(); } + public String getDayIso8601() { + return day == null ? "" : new SimpleDateFormat("yyyy-MM-dd").format(day); + } + public void setBean(DoneBean bean) { this.bean = bean; } diff --git a/src/main/java/de/jottyfan/timetrack/modules/done/RgbColor.java b/src/main/java/de/jottyfan/timetrack/modules/done/RgbColor.java new file mode 100644 index 0000000..8013662 --- /dev/null +++ b/src/main/java/de/jottyfan/timetrack/modules/done/RgbColor.java @@ -0,0 +1,44 @@ +package de.jottyfan.timetrack.modules.done; + +import java.awt.Color; + +/** + * + * @author henkej + * + */ +public class RgbColor { + + /** + * find a rgb color code for the combination of the given params + * + * @param bigInfluence + * @param mediumInfluence + * @param littleInfluence + * @return the hex color code + */ + public String determineRgbColor(String bigInfluence, String mediumInfluence, String littleInfluence) { + int big = bigInfluence == null ? 0 : bigInfluence.hashCode(); + int med = mediumInfluence == null ? 0 : mediumInfluence.hashCode(); + int lit = littleInfluence == null ? 0 : littleInfluence.hashCode(); + + float bI = (1f / String.valueOf(big).length()); + float mI = (0.5f / String.valueOf(med).length()); + float lI = (0.25f / String.valueOf(lit).length()); + + float r = 0.0f + bI + mI + lI; // + makes it brighter + float g = 0.5f - bI - mI - lI; // - makes it darker + float b = 0.5f - bI - mI - lI; + + r = r < 0 ? r * -1 : r; + r = r > 1.0f ? 1 / r : r; + g = g < 0 ? g * -1 : g; + g = g > 1.0f ? 1 / g : g; + b = b < 0 ? b * -1 : b; + b = b > 1.0f ? 1 / b : b; + + Color c = new Color(r, g, b); + return new StringBuilder("rgb(").append(c.getRed()).append(",").append(c.getGreen()).append(",").append(c.getBlue()) + .append(")").toString(); + } +} diff --git a/src/main/webapp/pages/done/init.xhtml b/src/main/webapp/pages/done/init.xhtml index bc2bbef..2784f38 100644 --- a/src/main/webapp/pages/done/init.xhtml +++ b/src/main/webapp/pages/done/init.xhtml @@ -1,104 +1,107 @@ + xmlns:f="http://java.sun.com/jsf/core" xmlns:my="http://xmlns.jcp.org/jsf/composite/my" xmlns:b="http://bootsfaces.net/ui"> - Arbeitszeit + Arbeitszeit - - - - - - - - - - - - - - - - - - - - - - - - - - - - Pause + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pause

- -

-
-
- - Startzeit + + + + + + Startzeit

- -

-
-
- - Überstunden + + + + + + Überstunden

- -

-
-
- - Arbeitszeit + + + + + + Arbeitszeit

- -

-
-
- - Endzeit + + + + + + Endzeit

- -

-
-
-
-
- - - - - - - - - -

- -

-
- - - -
-
-
-
- - - - - - - - -
+ + +
+
+
+
+ + + + + + + + + +

+ +

+
+ + +
+
+
+
+ + + + + + + + +
diff --git a/src/test/java/de/jottyfan/timetrack/moduls/done/TestRgbColor.java b/src/test/java/de/jottyfan/timetrack/moduls/done/TestRgbColor.java new file mode 100644 index 0000000..fe2cc4f --- /dev/null +++ b/src/test/java/de/jottyfan/timetrack/moduls/done/TestRgbColor.java @@ -0,0 +1,23 @@ +package de.jottyfan.timetrack.moduls.done; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +import de.jottyfan.timetrack.modules.done.RgbColor; + +/** + * + * @author henkej + * + */ +public class TestRgbColor { + + @Test + public void testDetermineRgbColor() { + RgbColor c = new RgbColor(); + assertEquals("rgb(146,204,204)", c.determineRgbColor(null, null, null)); + assertEquals("rgb(61,66,66)", c.determineRgbColor("Ship", "alles", "Mail")); + assertEquals("rgb(43,85,85)", c.determineRgbColor("Square", "Entwicklung_Programmierung", "alles")); + } +}