Como obtener el Objeto Content de un contenido

cancel
Showing results for 
Search instead for 
Did you mean: 
uridium
Member II

Como obtener el Objeto Content de un contenido

Hola,

Estoy leyendo un espacio de Alfreso con el siguiente codigo:

RepositoryServiceSoapBindingStub repositoryService = WebServiceFactory .getRepositoryService();
Reference reference = new Reference(STORE, null, getXpathSpaceName(path));
QueryResult query = repositoryService.queryChildren(reference);
ResultSetRow[] rows = query.getResultSet().getRows();

Esto me devuelve los contenidos del espacio. A partir de aqui quiero ejecutar procesos sobre los contenidos.

El problema que encuentro es que los metodos que he de utilizar necesitan como parametro de entrada un objeto Content

No veo como obtener el objeto Content a partir de rows he intentado buscar algún otro metodo para conseguirlo, incluso a partir del Objeto Reference pero creo que ya me esoty liando mucho.

Alguna idea?

Gracias.
10 Replies
pjcaracuel_2349
Active Member II

Re: Como obtener el Objeto Content de un contenido

Buenas,

sigo a partir de tu linea, quizas tenga algun error puesto que yo no soy un avanzado programador, pero la idea iria por esa linea:

ResultSetRow[] rows = query.getResultSet().getRows();

if (rows != null)
{

for(int i=0; i<rows .length; i++)
{
String nodeId = rows .getNode().getId(); //Obtenemos el id del objeto

ContentResult cr = new ContentResult(nodeId);

…………

Lo demas te lo dejo para ti.

Saludos
rhakaro
Member II

Re: Como obtener el Objeto Content de un contenido

Hola, siento no ser de ayuda, pero es que estoy teniendo algún problemilla con las búsquedas. No encuentro el objeto de tipo "ContentResult", no sé, no me aparece y (creo) tengo todas las librerías adjuntadas.

Os agradecería vuestra ayuda, para poder continuar. Si me funciona bien, pego en este post el código como respuesta a la pregunta.
Muchas gracias!
pjcaracuel_2349
Active Member II

Re: Como obtener el Objeto Content de un contenido

Buenas,

El ContentResult esta dentro del ejemplo del SDK WebservicesSamples. Este es el codigo de la clase


/**
     * Class to contain the information about the result from the query
     */
    public class ContentResult
    {
        private String id;
        private String name;
        private String description;
        private String url;      
        private String createDate;
       
        public ContentResult(String id)
        {
            this.id = id;
        }
       
        public String getCreateDate()
        {
            return createDate;
        }
       
        public void setCreateDate(String createDate)
        {
            this.createDate = createDate;
        }
       
        public String getDescription()
        {
            return description;
        }
       
        public void setDescription(String description)       
        {
            this.description = description;
        }
       
        public String getId()
        {
            return id;
        }

        public String getName()
        {
            return name;
        }
       
        public void setName(String name)
        {
            this.name = name;
        }
       
        public String getUrl()
        {
            return url;
        }
       
        public void setUrl(String url)
        {
            this.url = url;
        }     

        @Override
        public String toString()
        {
            return "id=" + this.id +
                   "; name=" + this.name +
                   "; description=" + this.description +
                   "; created=" + this.createDate +
                   "; url=" + this.url;
        }
    }
rhakaro
Member II

Re: Como obtener el Objeto Content de un contenido

Ummm, no sé si te he entendido bien (seguramente no vea la respuesta), pero eso creo que no me sirve mucho, ya que si necesito obtener los datos del Contenido, como Nombre, descripción, etc., esa clase sólo me sirve de cascarón.

Pensé que sería un objeto, que dando un identificador, pudiera obtener el contenido relleno.

La verdad es que estoy muy perdido con este tema aún, en cuanto consiga obtener dichos campos posteo mi logro, jeje.

Muchas gracias por responder, un saludo!
pjcaracuel_2349
Active Member II

Re: Como obtener el Objeto Content de un contenido

Oki,

Este es el contenido de la funcion que hace lo que pides. De todas formas te recomiendo que te bajes el SDK de alfresco, donde encontraras mas ejemplos. Este esta sacado de ahi.


/**
     * Get a list of ordered results of documents in the space specified matching the search
     * text provided.
     *
     * @param spaceName     the name of the space (immediatly beneth the company home space) to search
     * @param searchValue   the FTS search value
     * @return              list of results
     */
    public List<ContentResult> getRankedContent(String spaceName, String searchValue)
    {
        List<ContentResult> results = new ArrayList<ContentResult>();
       
        try
        {
            AuthenticationUtils.startSession(USERNAME, PASSWORD);
            try
            {           
                RepositoryServiceSoapBindingStub repositoryService = WebServiceFactory.getRepositoryService();      
               
                // Get a reference to the space we have named
                Reference reference = new Reference(STORE, null, "/app:company_home/*[@cm:name=\"" + spaceName + "\"]");
                Predicate predicate = new Predicate(new Reference[]{reference}, null, null);       
                Node[] nodes = repositoryService.get(predicate);
               
                // Create a query object, looking for all items with alfresco in the name of text
                Query query = new Query(
                        Constants.QUERY_LANG_LUCENE,
                        "+PARENT:\"workspace://SpacesStore/"+ nodes[0].getReference().getUuid() + "\" +TEXT:\"" + searchValue + "\"");
               
                // Execute the query
                QueryResult queryResult = repositoryService.query(STORE, query, false);
               
                // Display the results
                ResultSet resultSet = queryResult.getResultSet();
                ResultSetRow[] rows = resultSet.getRows();
               
                if (rows != null)
                {
                    // Get the infomation from the result set
                    for(ResultSetRow row : rows)
                    {
                        String nodeId = row.getNode().getId();
                        ContentResult contentResult = new ContentResult(nodeId);
                       
                        for (NamedValue namedValue : row.getColumns())
                        {
                            if (namedValue.getName().endsWith(Constants.PROP_CREATED) == true)
                            {
                                contentResult.setCreateDate(namedValue.getValue());
                            }
                            else if (namedValue.getName().endsWith(Constants.PROP_NAME) == true)
                            {
                                contentResult.setName(namedValue.getValue());
                            }
                            else if (namedValue.getName().endsWith(Constants.PROP_DESCRIPTION) == true)
                            {
                                contentResult.setDescription(namedValue.getValue());  
                            }
                            else if (namedValue.getName().endsWith(Constants.PROP_CONTENT) == true)
                            {
                                // We could go to the content service and ask for the content to get the URL but to save time we
                                // might as well dig the content URL out of the results.                       
                                String contentString = namedValue.getValue();
                                String[] values = contentString.split("[|=]");
                                contentResult.setUrl(values[1]);
                            }
                        }
                       
                        results.add(contentResult);
                    }
                }
            }
            finally
            {           
                // End the session
                AuthenticationUtils.endSession();
            }
        }
        catch (Exception serviceException)
        {
            throw new RuntimeException("Unable to perform search.", serviceException);
        }
       
        return results;
    }
   
http://sourceforge.net/projects/alfresco/files/SDK/
http://wiki.alfresco.com/wiki/Alfresco_SDK_3.2

Saludos
rhakaro
Member II

Re: Como obtener el Objeto Content de un contenido

Ok, muchas gracias, me descargo el SDK y pruebo lo que propones. Con esto ya lo tengo todo listo. He encontrado otra forma, aunque prefiero ésta que me pones.

Lo que estaba probando ahora mismo es lo siguiente:

// Para cada row x dentro de rows
                    NamedValue[] columns = row.getColumns();
               for (int y = 0; y < columns.length; y++){
                  System.out.println("row " + x + ": "
                        + row.getColumns(y).getName() + " = "
                        + row.getColumns(y).getValue());
               }

Muuuuuchas gracias por tu ayuda!!
rhakaro
Member II

Re: Como obtener el Objeto Content de un contenido

Ahora tengo un problema, resulta que "row" llega con tantos datos como contenidos haya encontrado (que los encuentra bien), pero no tienen valores como nombre, descricpción, ect.. Me he guiado por la SDK y no consigo recoger bien los datos, ¿qué puede fallar? (no entra en ningún "if" del final):

…….
…….
             Query query = new Query(Constants.QUERY_LANG_LUCENE, "PATH:\"/app:company_home/cm:prueba_folder//*\" + @cm\\:name:scri*");
             final Store STORE = new Store(Constants.WORKSPACE_STORE, "SpacesStore");
        QueryResult queryResult = repositoryService.query(STORE, query, false);   
             ResultSet results = queryResult.getResultSet();
        ResultSetRow[] rows = results.getRows();

             if(rows != null){
          for(ResultSetRow row : rows){
                          String nodeId = row.getNode().getId();
                          ContentResult contentResult = new ContentResult(nodeId);
                   
                          for (NamedValue namedValue : row.getColumns()){
                              if (namedValue.getName().endsWith(Constants.PROP_CREATED) == true){
                                  contentResult.setCreateDate(namedValue.getValue());
                              }
                              else if (namedValue.getName().endsWith(Constants.PROP_NAME) == true){
                                  contentResult.setName(namedValue.getValue());
                              }
                              else if (namedValue.getName().endsWith(Constants.PROP_DESCRIPTION) == true){
                                  contentResult.setDescription(namedValue.getValue());  
                              }
                              else if (namedValue.getName().endsWith(Constants.PROP_CONTENT) == true){
                                  // We could go to the content service and ask for the content to get the URL but to save time we
                                  // might as well dig the content URL out of the results.                       
                                  String contentString = namedValue.getValue();
                                  String[] values = contentString.split("[|=]");
                                  contentResult.setUrl(values[1]);
                              }
                       
                              System.out.println("Resultado " + x + ": \n" + contentResult.toString());
                          }
             }

Y otra duda, resulta que me busca bien por autor, por nombre, etc., pero no consigo que se centre en buscar sólo en "prueba_folder", me busca en todos sitios. ¿Qué hago mal?

Siento este pedazo de mensaje, pero estoy un poco desesperado, no sé qué es lo que no llego a entender….

Muchas gracias de antemano!!
rhakaro
Member II

Re: Como obtener el Objeto Content de un contenido

Hola a todos, al fin "he" conseguido resolver el problema de recuperar los campos (título, autor, fecha de creación, etc) de un Contenido obtenido a través de una búsqueda.

Os pego en enlace para no repetir mucho la información:

http://forums.alfresco.com/en/viewtopic%20...%2027&t=23085

Un saludo!
rubenagui
Member II

Re: Como obtener el Objeto Content de un contenido

Hola,

Puedes volver a poner el enlace, es que no está bien construido.

Muchas gracias.