miércoles, 10 de junio de 2015

Liferay "Mi Perfil (My Account)" desde template en velocity

Normalmente no se necesita, pero en algunos casos se puede necesitar crear una entrada al portlet de Mi Perfil (My Account) de Liferay desde algún template en velocity, ya sea desde un custom theme,  template de contenido, template de listas dinámicas, template de asset publisher, etc.

Liferay en su dockbar hace esta liga desde un jsp y es bastante diferente hacerlo en velocity.

Dejo aquí un ejemplo de como llamar el portlet de Mi Perfil (My Account) desde velocity. El código es bastante corto y sencillo, ya que esta URL se encuentra en la variable de Liferay de theme_display!

## Liferay pop up link to display the account editing page of a user (Velocity)
#set ($my_account_url = $theme_display.getURLMyAccount() + "&controlPanelCategory=my")

Creamos la URL para el portlet de Mi Perfil (My Account), luego hay que cargarla en un popup (para hacerlo como lo hace Liferay en el dockbar).
Liferay tiene una utilería de javascript para crear los popups que utiliza, así que la usamos.

<a href="javascript:Liferay.Util.openWindow({dialog: {destroyOnHide: true}, title: 'My Account', uri: '$my_account_url'});">
     Edit Profile
</a>

Listo! así de fácil.

viernes, 5 de junio de 2015

Página de configuración en portlet de Liferay

Varias veces he batallado para recordar y/o encontrar como crear una página de configuración en un portlet al estilo Liferay, así que dejare el proceso aquí para futuras referencias, o por si a alguien le sirve!
(Digo al estilo Liferay porque siempre puedes crear una pagina mas en tu portlet, que tenga acceso restringido para Admins, y manejar ahi las configuraciones del portlet. Pero los portlets de que trae Liferay de caja, no se configuran asi.)

Primero, creamos nuestro portlet.

Entramos al archivo liferay-portlet.xml, en este agregamos el configuration-action-class, usando la clase DefaultConfigurationAction. quedaria asi:

<portlet>
 <portlet-name>configtest</portlet-name>
 <icon>/icon.png</icon>
 <configuration-action-class>com.liferay.portal.kernel.portlet.DefaultConfigurationAction</configuration-action-class>
 <header-portlet-css>/css/main.css</header-portlet-css>
 <footer-portlet-javascript>/js/main.js</footer-portlet-javascript>
 <css-class-wrapper>configtest-portlet</css-class-wrapper>
</portlet>

Al agregar esto, liferay ya crea en las configuraciones del portlet una nueva pestaña llamada setup. Esta pestaña estara en blanco, ahora creemos la página para mostrar algo.

En el archivo de configuración del portlet, portlet.xml agregamos un parámetro de inicialización mas, para agregar el jsp.

<init-param>
 <name>view-template</name>
 <value>/view.jsp</value>
</init-param>
<init-param>
        <name>config-template</name>
        <value>/config.jsp</value>
</init-param>
<expiration-cache>0</expiration-cache>

El nombre del parámetro debe ser config-template, así es como Liferay sabe que ese parámetro es para la configuración del portlet.

Agregamos la pagina config.jsp en este caso a la misma altura de view.jsp, que es la pagina que se crea automáticamente al generar el portlet.

En el view.jsp vamos a traer la configuración para pintarla.

<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<portlet:defineObjects />
<%
String message = portletPreferences.getValue("message", "hola mundo");
%>
<%=message %>.


Y en el config.jsp creamos una forma, con un textbox para poner el mensaje que queremos mostrar al usuario (en este caso).
<%@page import="com.liferay.portal.kernel.util.Constants"%>
<%@ taglib uri="http://alloy.liferay.com/tld/aui" prefix="aui" %>
<%@ taglib uri="http://liferay.com/tld/portlet" prefix="liferay-portlet" %>
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>

<portlet:defineObjects />
<%
String message = portletPreferences.getValue("message", "hola mundo");
%>
<liferay-portlet:actionURL portletConfiguration="true" var="configURL"/>
<liferay-portlet:renderURL portletConfiguration="true" var="configRenderURL"/>

<aui:form action="<%=configURL %>" method="post" name="fm">
 <aui:input name="<%=Constants.CMD %>" type="hidden" value="<%=Constants.UPDATE %>" />
 <aui:input name="redirect" type="hidden" value="<%=configRenderURL %>" />
 <aui:fieldset>
  <aui:input name="preferences--message--" id="message" label="Welcome Message" value="<%=message %>" />
 </aui:fieldset>
 <aui:button-row>
  <aui:button type="submit"/>
 </aui:button-row>
</aui:form>


En el value del textbox, usamos en el name el doble guion para la propiedad message, que es la que utilizamos en el view.jsp para mostrar el mensaje que queremos que vea el usuario, esto es para que la clase DefaultConfigurationAction haga todo mágicamente, sin tener necesidad nosotros de mandarlo guardar o mandarlo traer de la base de datos en un Controller. Este método de guardado/extracción solo se usa en la forma, no al momento de ir por la propiedad en las preferencias del portlet.

Y listo! esto debe tener un portlet con una pagina de configuración al estilo Liferay!


Resultado final:



lunes, 1 de junio de 2015

Santuario - UE4 y Oculust Rift

Hola amigos

Actualmente nos encontramos trabajando en un proyecto nuevo, el cual es la representación del Santuario descrito en el libro de Éxodo de la Biblia.
Para dicho proyecto decidimos utilizar Unreal Engine 4 ya que queremos utilizar un dispositivo para Realidad Aumentada llamado Oculus Rift. Para aquellos que no sepan que es el Oculus Rift, aquí les dejo un video para que se den una idea. VIDEO

Espero muy pronto les podamos avisar en donde lo pueden descargar y como utilizarlo.

Saludos



lunes, 2 de febrero de 2015

Aplicación para android - Frases de Buda

Hola Gente!

Pues nos complace informarles que esta publicada la primera aplicación para dispositivos Android desarrollada con Corona.
Siempre se empieza por algo, y este es el inicio de Nituniyo!.



Saludos!

jueves, 20 de noviembre de 2014

Crear un arbol en json desde lista en Java

Directo al punto!
Tenemos una lista en Java en forma de árbol y queremos convertirla a json para usarla en el front-end

List<Especialidad> treeEspecialidades = new ArrayList<Especialidad>();

El objeto Especialidad vendría siendo el nodo del árbol, y dentro tiene una lista de hijos (de tipo Especialidad también), y la lista de treeEspecialidades es la lista de los nodos raíz.
Podemos usar el modo rápido, y convertir el árbol a json con alguna librería que convierta el java a json

 String json = JSONFactoryUtil.serialize(treeEspecialidades);  

(en este caso JSONFactoryUtil esta en las librerías core de Liferay)
Lo malo de este método es que al ser una lista de objetos, crea mucha basura en el json, que no va a ser usada nunca.

Para crear el objeto json con los datos que se quieren y el formato que se requiera para usarlo en el front-end, se crea un método recursivo. Éste recorre todo el árbol y lo convierte a json:

 private String convertTreeToJson(List<Especialidad> treeEspecialidades){  
           if(treeEspecialidades==null){  
                return "";  
           }  
           StringBuffer sb = new StringBuffer();  
           for(Especialidad especialidad: treeEspecialidades){  
                sb.append("{");  
                sb.append("id:\""+especialidad.getEspecialidadId()+"\",");  
                if(especialidad.getParent()!=null){  
                     sb.append("parent:\""+especialidad.getParent().getEspecialidadId()+"\",");  
                }else{  
                     sb.append("parent:\"#\",");  
                }  
                sb.append("text:\""+especialidad.getEspecialidad()+"\",");  
                if(especialidad.getHijos()!=null){  
                     sb.append(convertTreeToJson(especialidad.getHijos()));  
                }  
                sb.append("}");  
     }  
           return sb.toString();  
}  

Éste método devuelve un json a manera de árbol, por ejemplo:

 {  
   id: "1",  
   parent: "#",  
   text: "Energética",  
   {  
     id: "2",  
     parent: "1",  
     text: "Petróleo y Gas",  
   } {  
     id: "10",  
     parent: "1",  
     text: "Luz y Fuerza",  
     {  
       id: "11",  
       parent: "10",  
       text: "Luz",  
       {  
         id: "12",  
         parent: "11",  
         text: "Luz calle",  
         {  
           id: "13",  
           parent: "12",  
           text: "Luz de luces",  
         }  
       }  
     }  
   }  
 } {  
   id: "3",  
   parent: "#",  
   text: "Tecnología",  
   {  
     id: "5",  
     parent: "3",  
     text: "Desarrollo de sismtemas",  
     {  
       id: "6",  
       parent: "5",  
       text: "Programador Java",  
     } {  
       id: "9",  
       parent: "5",  
       text: "Programador .Net ligeramente mucho texto de prueba",  
     }  
   }  
 } {  
   id: "4",  
   parent: "#",  
   text: "Mercadotécnia",  
   {  
     id: "7",  
     parent: "4",  
     text: "Merca 2",  
     {  
       id: "8",  
       parent: "7",  
       text: "Hoja Merca",  
     }  
   }  
 }  

Espero le sirva a alguien!

viernes, 7 de noviembre de 2014

La Forma.

Todo lo que conocemos lo conocemos en FORMA. Por ejemplo, una flor tiene la forma de una flor, una palabra la forma de una palabra, una imagen mental la forma de una imagen mental, un sonido la forma de un sonido, un pensamiento la forma de un pensamiento, y el silencio la forma del silencio. 

La oscuridad forma de oscuridad, el amor forma de amor, la envidia forma de envidia, el dolor forma de dolor y la felicidad forma de felicidad. El dinero en forma de dinero, el calor en forma de calor, las galaxias en formas de galaxias, los números en forma de números, y Justin Bieber en forma de Justin Bieber.

Todo lo que se puede conocer se puede conocer sólo en FORMA. 

El problema es que en realidad las formas no nos interesan. Siempre nos preguntamos, ¿de dónde vienen las formas? más comúnmente, ¿de dónde viene todo? ¿por qué existe ALGO en vez de NADA?

Y la respuesta tradicional, por supuesto es, "todo viene de Dios." "Ajá! y de dónde viene Dios?" Y aquí es dónde comienza el debate. Unos dicen, "Dios es Dios y siempre ha existido", otros dicen "a! y por qué ALGO no puede venir de NADA y Dios si?? eso es trampa!"

Queridos hermanos, hay sólo 3 alternativas relevantes. O las FORMAS vienen de la NADA y aparecieron por sí solas, o las FORMAS siempre han existido y existirán desde infinito hasta infinito, o las FORMAS vienen de DIOS.

La primera nadie realmente la toma en serio, aunque los "intelectuales" famosos modernos han adoptado una versión que combina la primera y la segunda (Un Universo de la Nada).

Puede ser expresada algo así, ALGO es NADA, (o las FORMAS son NADA). Si ellos hubieran escrito la Biblia, Génesis 1:1 sería algo así,  "En el principio no había NADA y después ALGO pasó. aunque en realidad ALGO y NADA son lo mismo (aunque antes no había NADA Y después ALGO pasó)". (versión coloquial)

La segunda (las FORMAS siempre han existido y existirán desde infinito hasta infinito) es tentadora, pero quien se sienta a meditar profundamente sobre esto jamás podrá aceptarlo. "Osea, una flor existe no más por que sí? así no más porque NO se le ocurrió a nadie?"

La única opción que nos queda es la tercera. Las FORMAS vienen de DIOS. 

La definición de Dios es, "aquel que está más allá de las FORMAS, el SIN FORMA, EL AMO DE LAS FORMAS, DE DONDE LAS FORMAS VIENEN, EL CREADOR DE LAS FORMAS, EL QUE UNA VEZ QUE QUITAS LAS FORMAS SIGUE QUEDANDO, EL ESENCIAL, EL YO SOY, EL QUE NO TIENEN LIMITES, EL INFINITO, EL QUE NO PUEDE SER CONTENIDO, EL VERDADERO, EL REAL, EL ALFA Y EL OMEGA, EL QUE ES ANTES DE ALFA Y SIGUE SIENDO DESPUÉS DE OMEGA, THE ONE, "EL FORMADOR" (para ver 99 nombres más usados en el ISLAM más ver wikipedia Nombres de Dios)

EL PROBLEMA es que nuestras definiciones siguen siendo FORMAS!!!! 

"aquel que está más allá de las FORMAS" es como decir la FORMA que está más allá de las FORMAS!!! 

No hay palabras para expresar la REALIDAD que está detrás de las FORMAS. Porque en el momento que le das un nombre le estás dando una FORMA. Unos pueden decir que la palabra NADA es lo mismo, pero NADA implica ausencia de realidad. DIOS implica realidad. 

Por eso decimos que todo lo que podemos conocer sólo lo podemos conocer en forma.

Jesús es Dios hecho Forma. Dios tomo Forma en Jesús por que nosotros sólo podemos conocer en forma. Para que através de la forma de Jesús y sus enseñanzas pudieramos conocer aunque sea un poco al SIN FORMA. 



lunes, 20 de octubre de 2014

El Gran Examen

La vida humana es un examen.

Los que lo pasen van a ir al cielo y conocerán a Dios.

No hay excusas, las reglas del examen están escritas en nuestra misma naturaleza.

No se ocupan libros sagrados, aunque Dios nos dejó libros sagrados por si eso de que se nos va la onda.

Nadie puede decir yo no sabía. El deseo más grande de todo ser humano es conocer a la Realidad Absoluta. Se puede también expresar como deseo de entender todo, o deseo de ver a Dios, o deseo de ser Dios.

Todo ser humano sabe que no está haciendo bien las cosas y que debe cambiar su vida. Por eso cuando nuestra vida peligra dejamos a un lado las cosas que sabíamos que eran pérdida de tiempo, y hacemos las que sabemos debíamos haber estado haciendo.

Los que no pasen el examen muy probablemente desaparecerán para siempre o reencarnarán como creaturas salvajes, llenas de anciedad y desesperación. O peligro se van al infierno donde será el llanto y crujir de dientes.

Sigue a tu consciencia hasta las últimas consecuencias y vivirás ANIMOOO!!!FUAAAA!!!