Inicio > Content Server, Fatwire, Java > Fatwire Content Server. Conocer el número de elementos retornados con AssetDataManager antes de iterar sobre ellos

Fatwire Content Server. Conocer el número de elementos retornados con AssetDataManager antes de iterar sobre ellos


Esta mañana mantenía una conversación con un querido amigo de un anterior trabajo y me planteaba una duda muy interesante.

No sabía como obtener el número de elementos de una query que se ejecutaba con AssetDataManager antes de iterar sobre los datos devueltos. La cuestión era interesante porque yo tampoco lo sabía (aunque dije que sí se podía antes de cerciorarme, esta vez hubo suerte).

Lo primero que hice fue buscar en los manuales un ejemplo de ese tipo de querys con AssetDataManager, ya que en la aplicación en la que estoy actualmente no hay código parecido. Una vez localizado, ejecuté un Kit de Desarrollo personal para pasar del dicho al hecho y hacer las pruebas pertinentes.

El código sería algo parecido a esto

Session ses = SessionFactory.getSession();

AssetDataManager mgr =AssetDataManager) ses.getManager( AssetDataManager.class.getName() );

Query q = new SimpleQuery(“TIPO_CONTENIDO”, SUBTIPO_CONTENIDO”, null, Collections.singletonList(“ATRIBUTO”) );

Y luego el for (aquí deberíamos conocer el número de elementos devueltos por AssetDataManager, antes del for)

for( AssetData data : mgr.read( q ) )

Mirando en la documentación, compruebo que la sentencia mgr.read(q) devuelve un objeto de tipo AssetData y que este implementa la interfaz Iterable. De ahí la sintaxis del for, un poco alejada de la clásica (¿me estaré volviendo clásico/viejo?) for(inicialización; comprobación de la condición;cambio de valor de la variable que forma la condición), que se aprovecha de la interfaz Iterable para recorrer hasta el final el objeto devuelto.

Entonces vamos a recuperar el susodicho objeto

Iterable <AssetData> aData = mgr.read( q );

Ok. Ahora quiero conocer su tamaño (size()). Sin embargo ni la clase AssetData ni el interfaz Iterable implementan dicho método. He de intentar tener un objeto que lo tenga.

Mirando la api de java compruebo que el interfaz Iterable tiene un conjunto de SubInterfaces entre los que se encuentra Collection. Ese interfaz estoy más acostumbrado a usarlo.

De nuevo voy a mirar el API de java, en este caso a ver que pista me puede dar Collection. Veo que el objeto Vector implementa el interfaz Collection, que a su vez es un SubInterfaz de Iterable..Bingo. Al mirar el API de Vector para comprobar de que manera se relaciona Vector con Collection veo que uno de los constructores de Vector tiene como parámetro un objeto que implemente Collection…Esto está hecho entonces.

El código que me falta es el siguiente:

Vector vcData = new Vector((Collection)aData);

Hecho, ya se puede averiguar el número de elementos.

vcData.size();

Por tanto finalmente el código quedaría de la siguiente manera:

Session ses = SessionFactory.getSession();

AssetDataManager mgr =AssetDataManager) ses.getManager( AssetDataManager.class.getName() );

Query q = new SimpleQuery(“TIPO_CONTENIDO”, SUBTIPO_CONTENIDO”, null, Collections.singletonList(“ATRIBUTO”) );

Iterable <AssetData> aData = mgr.read( q );

Vector vcData = new Vector((Collection)aData);

out.println(“elementos= ” + vcData.size());

//Y ya vendría el for

for( AssetData data : mgr.read( q ) )

No se si habrá otra manera de hacerlo, si es así estaría muy interesado en saberla.

El conocimiento es colectivo. Saludos :D

Categorías:Content Server, Fatwire, Java Etiquetas: , ,
  1. Aún no hay comentarios.
  1. Aún no hay trackbacks

Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s

Seguir

Get every new post delivered to your Inbox.