{"id":316,"date":"2017-04-10T09:49:24","date_gmt":"2017-04-10T09:49:24","guid":{"rendered":"http:\/\/www.josejavierfm.es\/blog\/?p=316"},"modified":"2017-04-10T09:49:24","modified_gmt":"2017-04-10T09:49:24","slug":"patron-observer-en-un-comando-jonic-desde-bean","status":"publish","type":"post","link":"https:\/\/www.josejavierfm.es\/blog\/2017\/04\/10\/patron-observer-en-un-comando-jonic-desde-bean\/","title":{"rendered":"Patron observer en un comando JONIC desde Bean"},"content":{"rendered":"<p>En la estructura de JONIC, no podemos crear el comando que extienda de Observable (porque ya extiende de ResultCommand), por lo que creamos una clase interna que si lo haga.<\/p>\n<p>&nbsp;<\/p>\n<pre>public class ConsultaMasivaCMD extends ResultCommand&lt;List&gt;\r\n\r\npublic PorcentajeMasivoObservable myobs = new PorcentajeMasivoObservable();\r\n\r\npublic class PorcentajeMasivoObservable extends Observable\r\n{\r\nprivate int porcentaje = 0;\r\npublic int getPorcentaje()\r\n{\r\nreturn porcentaje;\r\n}\r\npublic void setPorcentaje(int porcentaje)\r\n{\r\nthis.porcentaje=porcentaje;\r\nsetChanged();\r\nnotifyObservers();\r\n}\r\n\r\n}\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>Y dentro de nuestro comando en el runcommand:<\/p>\n<pre>@Override\r\npublic ResultCommand&lt;List&lt;Resultado&gt;&gt; runCommand() throws Exception {\r\n\r\n      for (int i = 0; i &lt;=array.size() - 1; i++) {\r\n\r\n          ...\u00a0\r\n         \u00a0myobs.setPorcentaje(porcentaje);\r\n      }\r\n\r\n}\r\n\r\n<\/pre>\n<p>Ahora que ya tenemos la clase observable nos vamos al bean:<\/p>\n<pre>public class ConsultaFicherosBean extends RequestAbstractBean implements Serializable, Observer {\r\n\r\nprivate ConsultaMasivaCMD.PorcentajeMasivoObservable pmo =null;\r\n\r\nprivate Integer progress;\r\n\r\npublic String acConsultar() {\r\n\r\nConsultaMasivaCMD cmd = (ConsultaMasivaCMD)createCommand(ConsultaMasivaCMD.class);\r\ncmd.setObj(this);\r\npmo=cmd.myobs;\r\npmo.addObserver(this);\r\ncmd = (ConsultaMasivaCMD) runCommand(cmd);\r\nif (cmd != null &amp;&amp; cmd.getResult() != null)\r\nresult.addAll(cmd.getResult());\r\n\r\nreturn \"donde sea\";\r\n}\r\n\r\n@Override\r\npublic void update(Observable o, Object arg) {\r\nif (o==pmo){\r\nprogress=pmo.getPorcentaje();\r\n}\r\n\r\n}\r\n<\/pre>\n<p>En el xhtml ponemos una barra de progreso con un poll para indicar el estado del progreso.<\/p>\n<pre>&lt;h:form id=\"dataForm\"&gt;\r\n\r\n&lt;p:commandButton id=\"viewButton\" value=\"Enviar Petici\u00f3n\"\r\naction=\"#{consultaFicherosBean.acConsultar}\"\r\n\r\nonclick=\"PF('pb').start();PF('poll').start();\"\r\nonstart=\"PF('dlg').show()\"\r\noncomplete=\"PF('dlg').hide();PF('pb').cancel();PF('poll').stop();\"\r\nupdate=\":dataForm :prg\"\r\n\r\nicon=\"ui-icon-pin-s\" \/&gt;\r\n\r\n&lt;\/h:form&gt;\r\n\r\n&lt;p:dialog widgetVar=\"dlg\"\r\nappendTo=\"@(body)\"\r\nmodal=\"true\"\r\nwidth=\"400\"\r\nheight=\"100\"\r\nheader=\"Progreso\"\r\ndraggable=\"false\"\r\nclosable=\"false\"\r\ncloseOnEscape=\"false\"\r\nresizable=\"false\"\r\nminimizable=\"false\"&gt;\r\n&lt;h:form id=\"prg\"&gt;\r\n\r\n  &lt;p:poll interval=\"1\"\r\n  widgetVar=\"poll\"\r\n  autoStart=\"false\"\r\n  async=\"true\"\r\n  update=\":prg\"\r\n  immediate=\"true\"\/&gt;\r\n\r\n&lt;!-- progressbar--&gt;\r\n&lt;p:progressBar widgetVar=\"pb\"\r\najax=\"true\"\r\nvalue=\"#{consultaFicherosBean.progress}\"\r\nlabelTemplate=\"{value}%\"\r\nstyleClass=\"animated\"\r\nglobal=\"false\"&gt;\r\n&lt;\/p:progressBar&gt;\r\n&lt;\/h:form&gt;\r\n&lt;\/p:dialog&gt;\r\n\r\n<\/pre>\n<p>Con esto el comando avisa en cada iteraci\u00f3n del porcentaje, el Bean se entera y actualiza su variable de progreso y la p\u00e1gina mediante el poll y la barra de progreso puede informar al usuario de como va la tarea.<\/p>\n<p><a href=\"http:\/\/www.josejavierfm.es\/blog\/wp-content\/uploads\/2017\/04\/Shutter_20170410_001.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-medium wp-image-317\" src=\"http:\/\/www.josejavierfm.es\/blog\/wp-content\/uploads\/2017\/04\/Shutter_20170410_001-300x106.png\" alt=\"\" width=\"300\" height=\"106\" srcset=\"https:\/\/www.josejavierfm.es\/blog\/wp-content\/uploads\/2017\/04\/Shutter_20170410_001-300x106.png 300w, https:\/\/www.josejavierfm.es\/blog\/wp-content\/uploads\/2017\/04\/Shutter_20170410_001.png 488w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n\n<div class=\"twitter-share\"><a href=\"https:\/\/twitter.com\/intent\/tweet?via=josejavierfm\" class=\"twitter-share-button\">Twittear<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"<p>En la estructura de JONIC, no podemos crear el comando que extienda de Observable (porque ya extiende de ResultCommand), por lo que creamos una clase interna que si lo haga. &nbsp; public class ConsultaMasivaCMD extends ResultCommand&lt;List&gt; public PorcentajeMasivoObservable myobs = new PorcentajeMasivoObservable(); public class PorcentajeMasivoObservable extends Observable { private int porcentaje = 0; public int [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/www.josejavierfm.es\/blog\/wp-json\/wp\/v2\/posts\/316"}],"collection":[{"href":"https:\/\/www.josejavierfm.es\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.josejavierfm.es\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.josejavierfm.es\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.josejavierfm.es\/blog\/wp-json\/wp\/v2\/comments?post=316"}],"version-history":[{"count":1,"href":"https:\/\/www.josejavierfm.es\/blog\/wp-json\/wp\/v2\/posts\/316\/revisions"}],"predecessor-version":[{"id":318,"href":"https:\/\/www.josejavierfm.es\/blog\/wp-json\/wp\/v2\/posts\/316\/revisions\/318"}],"wp:attachment":[{"href":"https:\/\/www.josejavierfm.es\/blog\/wp-json\/wp\/v2\/media?parent=316"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.josejavierfm.es\/blog\/wp-json\/wp\/v2\/categories?post=316"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.josejavierfm.es\/blog\/wp-json\/wp\/v2\/tags?post=316"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}