git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube...
authorVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Sun, 3 Dec 2017 10:51:59 +0000 (10:51 +0000)
committerVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Sun, 3 Dec 2017 10:51:59 +0000 (10:51 +0000)
13 files changed:
client/Maestro/Installer/installforge-installer-project.ifp
client/Maestro/MaestroForm.cs
client/Maestro/Properties/AssemblyInfo.cs
client/Maestro/Splash.Designer.cs
client/PlanAIRClient/TrafficIDSelector.cs
server/-configuration/scheduledjobs.json
server/user.jobengine.osgi.commons/src/user/commons/octopus/OctopusDataMiner.java
server/user.jobengine.osgi.server/pages/index.zul
server/user.jobengine.osgi.server/pages/joblist.zul
server/user.jobengine.osgi.server/pages/statistics.zul
server/user.jobengine.osgi.server/pages/statistics2.zul
server/user.jobengine.osgi.server/src/user/jobengine/server/scheduler/SchedulerService.java
server/user.jobengine.osgi.server/src/user/jobengine/zk/model/StatisticsComposer.java

index 5f680af85ff0db954f388991526a023cf7fce26e..9ab745e643e9665ce2d5ca30f1a2cac0f59867f2 100644 (file)
Binary files a/client/Maestro/Installer/installforge-installer-project.ifp and b/client/Maestro/Installer/installforge-installer-project.ifp differ
index c9971247e2ac21e7006e4805074d890ab9883e4f..1f718fe5dec93e88a89b872577ba80d5ab7e1d58 100644 (file)
@@ -124,7 +124,6 @@ namespace Maestro {
         }\r
 \r
         private void MaestroForm_FormClosing(object sender, FormClosingEventArgs e) {\r
-            //if (ModifierKeys.HasFlag()\r
             if (TrayApplicationContext.GlobalConfig.MinimizeToTray)\r
                 Visible = false;\r
             else\r
index 9ecd567a8024953ade6f9eeecec29dfdf57a762c..ecb854a274345eabd8ad61b3b20794efa85bdc61 100644 (file)
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
 // You can specify all the values or you can default the Build and Revision Numbers\r
 // by using the '*' as shown below:\r
 // [assembly: AssemblyVersion("1.0.*")]\r
-[assembly: AssemblyVersion("2.0.6.0")]\r
-[assembly: AssemblyFileVersion("2.0.6.0")]\r
+[assembly: AssemblyVersion("2.0.6.1")]\r
+[assembly: AssemblyFileVersion("2.0.6.1")]\r
index f4ab6bc6728216387bba80bce1060244f88eecfc..302688764134acf031a8af1e56b3b97670380aa1 100644 (file)
             // picWorld\r
             // \r
             this.picWorld.BackColor = System.Drawing.Color.Transparent;\r
+            this.picWorld.Dock = System.Windows.Forms.DockStyle.Fill;\r
             this.picWorld.Image = ((System.Drawing.Image)(resources.GetObject("picWorld.Image")));\r
-            this.picWorld.Location = new System.Drawing.Point(16, 0);\r
+            this.picWorld.Location = new System.Drawing.Point(0, 0);\r
+            this.picWorld.Margin = new System.Windows.Forms.Padding(0);\r
             this.picWorld.Name = "picWorld";\r
-            this.picWorld.Size = new System.Drawing.Size(320, 349);\r
+            this.picWorld.Size = new System.Drawing.Size(350, 361);\r
             this.picWorld.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;\r
             this.picWorld.TabIndex = 0;\r
             this.picWorld.TabStop = false;\r
index c4dddde7fb21bfedd23a0716da89d1d50b927964..3776caaa2eb7b718f2beb698a4f2b08a231d12c9 100644 (file)
@@ -9,6 +9,7 @@ using MaestroShared.Configuration;
 using MaestroShared.Target;\r
 using MaestroShared.Targets;\r
 using System.IO;\r
+using System.Text.RegularExpressions;\r
 \r
 namespace TrafficClient {\r
     public delegate void OnSelectedIDChanged(string ID, int variantID, string text);\r
@@ -50,7 +51,6 @@ namespace TrafficClient {
                 return;\r
             ClearSelection();\r
             Cursor.Current = Cursors.WaitCursor;\r
-            string searchText = txtFilter.Text;\r
             DateTime? scheduledDate = null;\r
             if (this.dtScheduled.Checked)\r
                 scheduledDate = this.dtScheduled.Value.Date;\r
@@ -59,13 +59,14 @@ namespace TrafficClient {
             dgTraffic.Columns.Clear();\r
             if (rbMaterial.Checked) {\r
                 dgTraffic.Columns.AddRange(GetMaterialColumns());\r
+                string searchText = Regex.Replace(txtFilter.Text, "[^0-9]", "");\r
                 items = trafficAPI.GetMaterials(searchText, chkProblematic.Checked, scheduledDate, scheduledDate);\r
             } else if (rbAD.Checked) {\r
                 dgTraffic.Columns.AddRange(GetADColumns());\r
-                items = trafficAPI.GetADs(searchText, chkProblematic.Checked, scheduledDate, scheduledDate);\r
+                items = trafficAPI.GetADs(txtFilter.Text, chkProblematic.Checked, scheduledDate, scheduledDate);\r
             } else if (rbPromo.Checked) {\r
                 dgTraffic.Columns.AddRange(GetPromoColumns());\r
-                items = trafficAPI.GetPromos(searchText, chkProblematic.Checked, scheduledDate, scheduledDate);\r
+                items = trafficAPI.GetPromos(txtFilter.Text, chkProblematic.Checked, scheduledDate, scheduledDate);\r
             }\r
 \r
             if (items == null || items.Count == 0)\r
@@ -102,7 +103,7 @@ namespace TrafficClient {
             if (e.RowIndex < 0 || e.ColumnIndex != 0)\r
                 return;\r
             DataGridView gridView = sender as DataGridView;\r
-            if (gridView == null)\r
+            if (gridView == null || dgTraffic.SelectedRows.Count == 0)\r
                 return;\r
             OnSelectionChanged(dgTraffic.SelectedRows[0]);\r
         }\r
@@ -140,6 +141,9 @@ namespace TrafficClient {
         }\r
 \r
         private void OnDataGridKeyDown(object sender, KeyEventArgs e) {\r
+            if (dgTraffic.SelectedRows.Count == 0)\r
+                return;\r
+\r
             if (e.KeyCode == Keys.Space && dgTraffic.CurrentCell.ColumnIndex != 0)\r
                 OnSelectionChanged(dgTraffic.SelectedRows[0]);\r
             if (e.KeyCode == Keys.F5)\r
@@ -177,11 +181,12 @@ namespace TrafficClient {
 \r
         private void SelectResult() {\r
             List<TrafficItem> result = trafficAPIBindingSource.DataSource as List<TrafficItem>;\r
-            OnSelectionChanged(dgTraffic.Rows[0]);\r
-            if (result == null || result.Count == 0)\r
+            if (result == null || result.Count == 0) {\r
                 MsgBox.Info("Nincs találat.");\r
-            else\r
+            } else {\r
+                OnSelectionChanged(dgTraffic.Rows[0]);\r
                 result[0].Selected = true;\r
+            }\r
         }\r
 \r
         public void LookupByMaterialID(string id) {\r
index 2c972df57377192f50160533d4fbd5e22e391696..875e874f8527e8baa7c45567c46a3ef020f7dba5 100644 (file)
       ]\r
        },      \r
        {\r
-      "active": false,\r
+      "active": true,\r
          "name" : "OCTOPUS adatok teljes szinkronizálása",\r
       "template": "sync-octopus.xml",\r
-      "executeimmediate": false,\r
+      "executeimmediate": true,\r
       "cronexpression": "0/30 * * * * ?",\r
       "parameters": [\r
        {"name": "forceFull", "value": true, "type": "java.lang.Boolean"}\r
index fd67d38239221d93f78249d90ce70cf5e6c59377..72d1d27b661ceddc622dd0ac6a60552abe0ce805 100644 (file)
@@ -16,10 +16,8 @@ import org.jboss.resteasy.client.jaxrs.BasicAuthentication;
 import org.jboss.resteasy.client.jaxrs.ResteasyClient;\r
 import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder;\r
 import org.jboss.resteasy.client.jaxrs.ResteasyWebTarget;\r
-import org.jboss.resteasy.spi.ResteasyDeployment;\r
 import org.joda.time.DateTime;\r
 \r
-import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;\r
 import com.ibm.nosql.json.JSONUtil;\r
 import com.ibm.nosql.json.api.BasicDBList;\r
 import com.ibm.nosql.json.api.BasicDBObject;\r
@@ -88,7 +86,8 @@ public class OctopusDataMiner implements Runnable {
                apiUser = System.getProperty("jobengine.octopus.api.user");\r
                apiPwd = System.getProperty("jobengine.octopus.api.password");\r
 \r
-               ResteasyClient client = new ResteasyClientBuilder().register(JacksonJsonProvider.class).build();\r
+               //              ResteasyClient client = new ResteasyClientBuilder().register(JacksonJsonProvider.class).build();\r
+               ResteasyClient client = new ResteasyClientBuilder().build();\r
                webTarget = client.target(apiAddress).register(new BasicAuthentication(apiUser, apiPwd));\r
        }\r
 \r
@@ -243,39 +242,40 @@ public class OctopusDataMiner implements Runnable {
 \r
                        logger.info("Fetch rundowns");\r
 \r
-                       //                      ResteasyWebTarget target = webTarget.path(RUNDOWN);\r
-                       //                      Builder result = target.request().header(OCTOPUS_DEVICE_ID, apiUser).header(OCTOPUS_DEVICE_NAME, apiPwd);\r
-                       //                      Response r = result.get();\r
-                       //                      String x = r.readEntity(String.class);\r
-                       //                      return;\r
-                       BasicDBList rundowns = queryRundowns();\r
-                       logger.info("Fetch rundown story references");\r
-                       storyRundowns = buildRundownReferences(rundowns);\r
-                       logger.info("Fetch story folders");\r
-                       BasicDBList storyFolders = queryStoryFolders();\r
-                       logger.info("Fetch folder story references");\r
-                       storyStoryFolders = buildFolderReferences(storyFolders);\r
-\r
-                       if (rundowns == null || rundowns.size() == 0) {\r
-                               progressEvent.setProgress(50);\r
-                               fireProgressEvent(progressEvent);\r
-                       } else {\r
-                               logger.info("Process rundowns");\r
-                               storeRundowns(rundowns, null);\r
-                       }\r
-\r
-                       if (storyFolders == null || storyFolders.size() == 0) {\r
-                               progressEvent.setProgress(100);\r
-                               fireProgressEvent(progressEvent);\r
-                       } else {\r
-                               logger.info("Process story folders");\r
-                               storeStoryFolders(storyFolders, null);\r
-                       }\r
-                       setLastUpdateTime(new Date());\r
-                       logger.info("Activate");\r
-                       db.getCollection(RUNDOWN_COLLECTION).rename(IOctopusAPI.RUNDOWN_COLLECTION, true);\r
-                       db.getCollection(FOLDER_COLLECTION).rename(IOctopusAPI.FOLDER_COLLECTION, true);\r
-                       db.getCollection(STORY_COLLECTION).rename(IOctopusAPI.STORY_COLLECTION, true);\r
+                       ResteasyWebTarget target = webTarget.path(RUNDOWN);\r
+                       Builder result = target.request().header(OCTOPUS_DEVICE_ID, apiUser).header(OCTOPUS_DEVICE_NAME, apiPwd);\r
+                       Response r = result.get();\r
+                       String x = r.readEntity(String.class);\r
+                       logger.info(x);\r
+                       return;\r
+                       //                      BasicDBList rundowns = queryRundowns();\r
+                       //                      logger.info("Fetch rundown story references");\r
+                       //                      storyRundowns = buildRundownReferences(rundowns);\r
+                       //                      logger.info("Fetch story folders");\r
+                       //                      BasicDBList storyFolders = queryStoryFolders();\r
+                       //                      logger.info("Fetch folder story references");\r
+                       //                      storyStoryFolders = buildFolderReferences(storyFolders);\r
+                       //\r
+                       //                      if (rundowns == null || rundowns.size() == 0) {\r
+                       //                              progressEvent.setProgress(50);\r
+                       //                              fireProgressEvent(progressEvent);\r
+                       //                      } else {\r
+                       //                              logger.info("Process rundowns");\r
+                       //                              storeRundowns(rundowns, null);\r
+                       //                      }\r
+                       //\r
+                       //                      if (storyFolders == null || storyFolders.size() == 0) {\r
+                       //                              progressEvent.setProgress(100);\r
+                       //                              fireProgressEvent(progressEvent);\r
+                       //                      } else {\r
+                       //                              logger.info("Process story folders");\r
+                       //                              storeStoryFolders(storyFolders, null);\r
+                       //                      }\r
+                       //                      setLastUpdateTime(new Date());\r
+                       //                      logger.info("Activate");\r
+                       //                      db.getCollection(RUNDOWN_COLLECTION).rename(IOctopusAPI.RUNDOWN_COLLECTION, true);\r
+                       //                      db.getCollection(FOLDER_COLLECTION).rename(IOctopusAPI.FOLDER_COLLECTION, true);\r
+                       //                      db.getCollection(STORY_COLLECTION).rename(IOctopusAPI.STORY_COLLECTION, true);\r
 \r
                } catch (Exception e) {\r
                        logger.catching(e);\r
@@ -427,13 +427,14 @@ public class OctopusDataMiner implements Runnable {
        }\r
 \r
        private Builder query(String path, String fields) {\r
-               logger.info("Class loader {}", getClass().getClassLoader());\r
-               try {\r
-                       ResteasyDeployment deployment = new ResteasyDeployment();\r
-                       deployment.start();\r
-               } catch (Exception e) {\r
-                       logger.catching(e);\r
-               }\r
+               //logger.info("Class loader {}", getClass().getClassLoader());\r
+               //              try {\r
+               //                      //TODO kell e?\r
+               //                      ResteasyDeployment deployment = new ResteasyDeployment();\r
+               //                      deployment.start();\r
+               //              } catch (Exception e) {\r
+               //                      logger.catching(e);\r
+               //              }\r
                ResteasyWebTarget target = webTarget.path(path).queryParam(FIELDS, fields);\r
                Builder result = target.request().header(OCTOPUS_DEVICE_ID, apiUser).header(OCTOPUS_DEVICE_NAME, apiPwd);\r
                return result;\r
index 4cdc84cb88449a02613efdbd6f317d068f5aca1c..b19de165e73b2b7e01ca6a9f113e3097cf28eb3c 100644 (file)
@@ -57,7 +57,7 @@
                                                                <image src="/img/mediacube_logo_v2_50x50.png">\r
 <!--                                                           <custom-attributes org.zkoss.zul.image.preload="true" /> -->\r
                                                                </image>\r
-                                                               <label style="color:#e3e3e3;font-size:20px;font-weight:bold">MediaCube v2.1.5</label>\r
+                                                               <label style="color:#e3e3e3;font-size:20px;font-weight:bold">MediaCube v2.1.5.2</label>\r
                                                        </div>\r
                                                </west>\r
                                                <center border="0">\r
index e635a992aca9ffc5489e8b7ad09cd0ed9abf9cba..9c5f39fea27179a9b73d5e3a404847deb35b5985 100644 (file)
@@ -39,7 +39,7 @@
                                        onSelect="@command('selectJob')" style="border: none; background: #e3e3e3 !important;" oddRowSclass="listbox-odd-style" sclass="listbox-normal-style" >\r
                                       <listhead sizable="true">\r
                                        <listheader label="Id" hflex="min" align="left"/>\r
-                                       <listheader label="Indításs" hflex="min" align="left"/>\r
+                                       <listheader label="Indítás" hflex="min" align="left"/>\r
                                        <listheader label="Kész" hflex="min" align="left"/>\r
                                        <listheader label="Név" hflex="min" align="left"/>\r
                                        <listheader label="Prioritás" hflex="min" align="left"/>\r
index 9aab1df51580eb3adeb612ab14ec1f809738f9b3..253ccb34a40b3f3bad9225ebcae413456e59afbf 100644 (file)
@@ -43,8 +43,8 @@
                var obj = eval("(" + value.name + ')');\r
                return String\r
                .format(\r
-                               'Befejezve . {0} <br/> Azonosító . {1} <br/> Forrás . {2} <br/> Cél . {3} <br/> Cimke . <span style="background:{4}">{5}</span> <br/> Sikeres . {6}',\r
+                               'Befejezve . {0} <br/> Azonosító . {1} <br/> Forrás . {2} <br/> Cél . {3} <br/> Cimke . <span style="background:{4}">{5}</span> <br/> Sikeres . {6} <br/> Felhasználó . {7}',\r
                                obj.Finished, obj.HouseId, obj.Source, obj.Destination,\r
-                               "red", obj.Tag, obj.Successful);\r
+                               obj.Tag, obj.Tag, obj.Successful, obj.UserName);\r
        }\r
 </script> <charts id="chart" type="spline" /> </window>\r
index 75b67fe5e14a76b8c2c4b9829c4d9206f967a58b..3220569b77545edd26e157c8d249adb59dee6bdf 100644 (file)
@@ -9,7 +9,7 @@
        </div>\r
                \r
        <div width="100%" height="95%">\r
-               <charts id="chart" type="arearange" height="800"  title="Octopus lista"/>\r
+               <charts id="chart" type="arearange" height="1000" title="Octopus lista"/>\r
        </div>\r
        \r
 </window>\r
index f8005d39d3869290bbcda3feec25c74ae76b2059..cd4722f00949faa01adceb80072bb8bcdaf2b4fe 100644 (file)
@@ -62,9 +62,12 @@ public class SchedulerService {
 \r
        public ScheduledJob createScheduledJob(BasicDBObject jobJSON) {\r
                ScheduledJob sj = new ScheduledJob();\r
-               sj.setJobId(String.valueOf(++schedulerJobId));\r
-               sj.setJobName(jobJSON.getString("name"));\r
-               sj.setTemplateName(jobJSON.getString("template"));\r
+               //              sj.setJobId(String.valueOf(++schedulerJobId));\r
+               String name = jobJSON.getString("name");\r
+               String template = jobJSON.getString("template");\r
+               sj.setJobId(String.format("%s.%s", template, name));\r
+               sj.setJobName(name);\r
+               sj.setTemplateName(template);\r
                sj.setCronExpressions(jobJSON.getString("cronexpression"));\r
                sj.setExecuteOnStartup(jobJSON.getBoolean("executeimmediate"));\r
                sj.setActive(jobJSON.getBoolean("active"));\r
@@ -228,6 +231,7 @@ public class SchedulerService {
        }\r
 \r
        private void scheduleImmediate(String jobID) {\r
+\r
                Trigger trigger = TriggerBuilder.newTrigger().forJob(jobID).startNow().build();\r
                try {\r
                        scheduler.scheduleJob(trigger);\r
index 10ec8facfb4993d024144d3f97c61a1a1a91fec2..80d493ca22451e1dfecfe6a52601f834dd3214f9 100644 (file)
@@ -38,15 +38,15 @@ import user.jobengine.server.JobEngine;
 public class StatisticsComposer extends SelectorComposer<Window> {\r
        private static final Logger logger = LogManager.getLogger();\r
        private static final int XCOUNT = 60 * 24;\r
-       private IItemManager itemManager = null;\r
        private static Map<String, Color> colors = new HashMap<>();\r
-\r
        static {\r
                colors.put("INGEST", new Color("red"));\r
-               colors.put("ARCHIVE", new Color("green"));\r
-               colors.put("TRANSCODE", new Color("blue"));\r
+               colors.put("Betöltés", new Color("green"));\r
+               colors.put("Adáskész", new Color("blue"));\r
        }\r
 \r
+       private IItemManager itemManager = null;\r
+\r
        @Wire\r
        private Datebox chartDateSelector;\r
 \r
@@ -57,73 +57,48 @@ public class StatisticsComposer extends SelectorComposer<Window> {
                this.itemManager = JobEngine.getStaticItemManager();\r
        }\r
 \r
-       @Listen("onChange = #chartDateSelector")\r
-       public void changeDate() {\r
-               //ha elhgynánk a gombot\r
-       }\r
-\r
-       @Override\r
-       public void doAfterCompose(Window comp) throws Exception {\r
-               super.doAfterCompose(comp);\r
-               chartDateSelector.setValue(new Date());\r
-               showChart();\r
+       private void addPoint(Series series, int x, int y, String data, Color color) {\r
+               Point p = new Point(x, y);\r
+               p.setName(data);\r
+               if (color != null)\r
+                       p.getMarker().setFillColor(color);\r
+               series.addPoint(p);\r
        }\r
 \r
-       @Listen("onClick = #btnShowChart")\r
-       public void showChart() {\r
-               clearChart();\r
-               configureChart();\r
-               setupXAxis();\r
-               List<WorkflowAction> actions = itemManager.getWorkflowActions(chartDateSelector.getValue());\r
-               if (actions == null || actions.size() == 0) {\r
-                       setupYAxis(0);\r
+       private void addPoint(Series series, WorkflowAction action, int y) {\r
+               if (action.getFinished() == null)\r
                        return;\r
-               }\r
-\r
-               //              logger.info("Item count {}", actions.size());\r
-               int distinctCount = fillData(actions);\r
-               setupYAxis(distinctCount);\r
-\r
-               int height = 100 + distinctCount * 20;\r
-\r
-               //              logger.info("Height {}", height);\r
-               chart.setHeight(height);\r
+               Calendar cal = Calendar.getInstance();\r
+               cal.setTime(new Date(action.getFinished().getTime()));\r
+               int x = cal.get(Calendar.HOUR_OF_DAY) * 60 + cal.get(Calendar.MINUTE);\r
+               Color color = colors.get(action.getTag());\r
+               BasicDBObject data = new BasicDBObject();\r
+               data.put("Finished", action.getFinished().toString());\r
+               data.put("HouseId", action.getHouseId());\r
+               data.put("Touched", action.getTouched());\r
+               data.put("Started", action.getStarted());\r
+               data.put("Source", action.getSource());\r
+               data.put("Destination", action.getDestination());\r
+               data.put("Tag", color == null ? "lightgray" : color.toString());\r
+               data.put("Successful", action.isSuccessful());\r
+               data.put("UserName", action.getUserName());\r
+               addPoint(series, x, y, data.toString(), color);\r
        }\r
 \r
-       private void setupYAxis(int distinctCount) {\r
-               YAxis yAxis = chart.getYAxis();\r
-               yAxis.setTitle("Anyagok");\r
-               yAxis.setMin(0);\r
-               yAxis.setMax(distinctCount);\r
-               yAxis.setTickInterval(1);\r
-               if (distinctCount == 0) {\r
-                       yAxis.setGridLineWidth(0);\r
-               } else {\r
-                       yAxis.setGridLineWidth(1);\r
-                       //Solid, ShortDash, ShortDot, ShortDashDot, ShortDashDotDot, Dot , Dash, LongDash, DashDot, LongDashDot, and LongDashDotDot\r
-                       yAxis.setGridLineDashStyle("LongDashDot");\r
-                       yAxis.setGridLineColor(new Color("lightgray"));\r
-               }\r
-\r
-               yAxis.getLabels().addExtraAttr("formatter",\r
-                               new JavaScriptValue("function () { return statisticsYValue(this.value, this.chart.series); }"));\r
+       @Listen("onChange = #chartDateSelector")\r
+       public void changeDate() {\r
+               //ha elhgynánk a gombot\r
        }\r
 \r
-       private void setupXAxis() {\r
-               XAxis xAxis = chart.getXAxis();\r
-               xAxis.setTickInterval(20);\r
-               xAxis.setMin(0);\r
-               xAxis.setMax(XCOUNT);\r
-               AxisLabels xLabels = xAxis.getLabels();\r
-               xLabels.setRotation(-45);\r
-               xAxis.getLabels().addExtraAttr("formatter",\r
-                               new JavaScriptValue("function () { return statisticsXValue(this.value); }"));\r
+       private void clearChart() {\r
+               int size = chart.getSeriesSize();\r
+               for (int i = 0; i < size; i++)\r
+                       chart.getSeries(i).setData(new ArrayList<Integer>());\r
        }\r
 \r
        private void configureChart() {\r
-               chart.setTitle("Híranyagok élettörténete");\r
-               chart.setSubtitle(CalendarUtils.toDateWithDayString(CalendarUtils.createCalendar(chartDateSelector.getValue()),\r
-                               new Locale("hu")));\r
+               chart.setTitle("Anyagok élettörténete");\r
+               chart.setSubtitle(CalendarUtils.toDateWithDayString(CalendarUtils.createCalendar(chartDateSelector.getValue()), new Locale("hu")));\r
                chart.getLegend().setEnabled(false);\r
                chart.setWidth(2048);\r
                SplinePlotOptions options = chart.getPlotOptions().getSpline();\r
@@ -149,16 +124,18 @@ public class StatisticsComposer extends SelectorComposer<Window> {
                tooltip.setFormat("");\r
                tooltip.setPointFormat("");\r
                tooltip.setUseHTML(true);\r
+               tooltip.setBorderWidth(0);\r
                //tooltip.setFormat(format);\r
 \r
                tooltip.addExtraAttr("formatter", new JavaScriptValue("function () { return statistics(this.point); }"));\r
 \r
        }\r
 \r
-       private void clearChart() {\r
-               int size = chart.getSeriesSize();\r
-               for (int i = 0; i < size; i++)\r
-                       chart.getSeries(i).setData(new ArrayList<Integer>());\r
+       @Override\r
+       public void doAfterCompose(Window comp) throws Exception {\r
+               super.doAfterCompose(comp);\r
+               chartDateSelector.setValue(new Date());\r
+               showChart();\r
        }\r
 \r
        private int fillData(List<WorkflowAction> actions) {\r
@@ -182,31 +159,53 @@ public class StatisticsComposer extends SelectorComposer<Window> {
                return result;\r
        }\r
 \r
-       private void addPoint(Series series, WorkflowAction action, int y) {\r
-               if (action.getFinished() == null)\r
-                       return;\r
-               Calendar cal = Calendar.getInstance();\r
-               cal.setTime(new Date(action.getFinished().getTime()));\r
-               int x = cal.get(Calendar.HOUR_OF_DAY) * 60 + cal.get(Calendar.MINUTE);\r
-               Color color = colors.get(action.getTag());\r
-               BasicDBObject data = new BasicDBObject();\r
-               data.put("Finished", action.getFinished().toString());\r
-               data.put("HouseId", action.getHouseId());\r
-               data.put("Touched", action.getTouched());\r
-               data.put("Started", action.getStarted());\r
-               data.put("Source", action.getSource());\r
-               data.put("Destination", action.getDestination());\r
-               data.put("Tag", action.getTag());\r
-               data.put("Successful", action.isSuccessful());\r
-               addPoint(series, x, y, data.toString(), color);\r
+       private void setupXAxis() {\r
+               XAxis xAxis = chart.getXAxis();\r
+               xAxis.setTickInterval(20);\r
+               xAxis.setMin(0);\r
+               xAxis.setMax(XCOUNT);\r
+               AxisLabels xLabels = xAxis.getLabels();\r
+               xLabels.setRotation(-45);\r
+               xAxis.getLabels().addExtraAttr("formatter", new JavaScriptValue("function () { return statisticsXValue(this.value); }"));\r
        }\r
 \r
-       private void addPoint(Series series, int x, int y, String data, Color color) {\r
-               Point p = new Point(x, y);\r
-               p.setName(data);\r
-               if (color != null)\r
-                       p.getMarker().setFillColor(color);\r
-               series.addPoint(p);\r
+       private void setupYAxis(int distinctCount) {\r
+               YAxis yAxis = chart.getYAxis();\r
+               yAxis.setTitle("Anyagok");\r
+               yAxis.setMin(0);\r
+               yAxis.setMax(distinctCount);\r
+               yAxis.setTickInterval(1);\r
+               if (distinctCount == 0) {\r
+                       yAxis.setGridLineWidth(0);\r
+               } else {\r
+                       yAxis.setGridLineWidth(1);\r
+                       //Solid, ShortDash, ShortDot, ShortDashDot, ShortDashDotDot, Dot , Dash, LongDash, DashDot, LongDashDot, and LongDashDotDot\r
+                       yAxis.setGridLineDashStyle("LongDashDot");\r
+                       yAxis.setGridLineColor(new Color("lightgray"));\r
+               }\r
+\r
+               yAxis.getLabels().addExtraAttr("formatter", new JavaScriptValue("function () { return statisticsYValue(this.value, this.chart.series); }"));\r
+       }\r
+\r
+       @Listen("onClick = #btnShowChart")\r
+       public void showChart() {\r
+               clearChart();\r
+               configureChart();\r
+               setupXAxis();\r
+               List<WorkflowAction> actions = itemManager.getWorkflowActions(chartDateSelector.getValue());\r
+               if (actions == null || actions.size() == 0) {\r
+                       setupYAxis(0);\r
+                       return;\r
+               }\r
+\r
+               //              logger.info("Item count {}", actions.size());\r
+               int distinctCount = fillData(actions);\r
+               setupYAxis(distinctCount);\r
+\r
+               int height = 100 + distinctCount * 20;\r
+\r
+               //              logger.info("Height {}", height);\r
+               chart.setHeight(height);\r
        }\r
 \r
 }
\ No newline at end of file