Cambiar nombre interno de un espacio

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

Cambiar nombre interno de un espacio

Hola a tod@s,

Estoy accediendo por jcr a Alfresco para gestionar documentos y me he encontrado con un problema. Necesito renombrar algunos espacios que ya estan creados pero no consigo que lo cambie realmente. Al hacer un export de un espacion obtengo algo asi:

<sv:node [color=#FF0000]sv:name="NOMBREESPACIO"[/color]>
        <sv:property sv:name="jcr:primaryType" sv:type="Name">
          <sv:value>cm:folder</sv:value>
        </sv:property>
        <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
          <sv:value>sys:referenceable</sv:value>
          <sv:value>cm:auditable</sv:value>
          <sv:value>app:uifacets</sv:value>
          <sv:value>mix:referenceable</sv:value>
        </sv:property>
        <sv:property sv:name="jcr:uuid" sv:type="String">
          <sv:value>555ec997-f07d-464e-9433-384958891895</sv:value>
        </sv:property>
        <sv:property sv:name="app:icon" sv:type="String">
          <sv:value>space-icon-default</sv:value>
        </sv:property>
        <sv:property sv:name="cm:name" sv:type="String">
          [color=#008040]<sv:value>nombreespacio</sv:value>[/color]
        </sv:property>
        <sv:property sv:name="sys:node-dbid" sv:type="Long">
          <sv:value>66935</sv:value>
        </sv:property>
        <sv:property sv:name="sys:store-identifier" sv:type="String">
          <sv:value>SpacesStore</sv:value>
        </sv:property>
        <sv:property sv:name="cm:title" sv:type="String">
          [color=#008040]<sv:value>nombreespacio</sv:value>[/color]
        </sv:property>
        <sv:property sv:name="sys:node-uuid" sv:type="String">
          <sv:value>555ec997-f07d-464e-9422-324987643223</sv:value>
        </sv:property>
        <sv:property sv:name="cm:modified" sv:type="Date">
          <sv:value>2009-03-24T16:26:01.265+01:00</sv:value>
        </sv:property>
        <sv:property sv:name="cm:created" sv:type="Date">
          <sv:value>2009-03-24T16:07:40.750+01:00</sv:value>
        </sv:property>
        <sv:property sv:name="sys:store-protocol" sv:type="String">
          <sv:value>workspace</sv:value>
        </sv:property>
        <sv:property sv:name="cm:creator" sv:type="String">
          <sv:value>usuario</sv:value>
        </sv:property>
        <sv:property sv:name="cm:description" sv:type="String">
          <sv:value></sv:value>
        </sv:property>
        <sv:property sv:name="cm:modifier" sv:type="String">
          <sv:value>usuario</sv:value>
        </sv:property>

Pues bien, yo necesito cambiar el nombre interno de mayusculas a minusculas pero no lo consigo (quiero cambiar sv:name="NOMBREESPACIO")…. solo consigo cambiar la property <svSmiley Tongueroperty sv:name="cm:name" sv:type="String"> que me cambia el nombre pero solo en la GUI de Alfresco (internamente sigue estando en mayusculas).

No se si queda muy clara mi explicación, si hay alguien que haya trabajado con JCR y Alfresco que me pueda echar una mano se lo agradeceria.

Saludos
8 Replies
pjcaracuel_2349
Active Member II

Re: Cambiar nombre interno de un espacio

Buenas,

HAS visto los ejemplos que vienen en el SDK de Alfresco? TE pongo uno de ellos. Tambien, podrias convertir el nodo JCR en un nodo alfresco
http://wiki.alfresco.com/wiki/Introducing_the_Alfresco_Java_Content_Repository_API#Mixing_JCR_and_Al...


/*
* Copyright (C) 2005-2007 Alfresco Software Limited.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.

* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.

* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

* As a special exception to the terms and conditions of version 2.0 of
* the GPL, you may redistribute this Program in connection with Free/Libre
* and Open Source Software ("FLOSS") applications as described in Alfresco's
* FLOSS exception.  You should have recieved a copy of the text describing
* the FLOSS exception, and it is also available here:
* http://www.alfresco.com/legal/licensing"
*/
package org.alfresco.sample;

import javax.jcr.Node;
import javax.jcr.Repository;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.SimpleCredentials;

import org.alfresco.jcr.api.JCRNodeRef;
import org.alfresco.model.ContentModel;
import org.alfresco.repo.content.MimetypeMap;
import org.alfresco.service.ServiceRegistry;
import org.alfresco.service.cmr.repository.ContentData;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;



/**
* Simple client example demonstrating the use of the Alfresco JCR (JSR-170) API.
*
* The client creates a content node in the "Company Home" folder.  The content
* may be viewed and operated on within the Alfresco Web Client.  Note: the web client
* will need to be re-started after executing this sample to see the changes in
* effect.
*
* This client demonstrates the "Embedded Repository" deployment option as described
* in the Alfresco Respotiory Architecture docucment -
* http://wiki.alfresco.com/wiki/Alfresco_Repository_Architecture
*/
public class FirstJCRClient
{
   
    public static void main(String[] args)
       throws Exception
   {
       // access the Alfresco JCR Repository (here it's via programmatic approach, but it could also be injected)
       ApplicationContext context = new ClassPathXmlApplicationContext("classpath:alfresco/application-context.xml");
       Repository repository = (Repository)context.getBean("JCR.Repository");
   
       // login to workspace (here we rely on the default workspace defined by JCR.Repository bean)
       Session session = repository.login(new SimpleCredentials("admin", "admin".toCharArray()));
   
       try
       {
           // first, access the company home
           Node rootNode = session.getRootNode();
           Node companyHome = rootNode.getNode("app:company_home");
   
           // create the content node
           String name = "JCR sample (" + System.currentTimeMillis() + ")";
           Node content = companyHome.addNode("cm:" + name, "cm:content");
           content.setProperty("cm:name", name);

           // add titled aspect (for Web Client display)
           content.addMixin("cm:titled");
           content.setProperty("cm:title", name);
           content.setProperty("cm:description", name);

           //
           // write some content to new node
           //
           content.setProperty("cm:content", "The quick brown fox jumps over the lazy dog");
          
           //
           // To set the content mime type, we need to use an Alfresco native service
           // as there isn't an equivalent call in JCR
           //
           setMimeType(context, content, MimetypeMap.MIMETYPE_TEXT_PLAIN);

           // save changes
           session.save();
       }
       finally
       {
           session.logout();
           System.exit(0);
       }
   }   

   
    /**
     * Demonstrates the mixed use of JCR API calls and Alfresco Foundation API calls.
     *
     * Here, the Foundation API is used to set the mimetype of the content.
     *
     * @param context  application context
     * @param node   the JCR Node to adjust
     * @param mimeType  the mimetype to set
     * @throws RepositoryException
     */
   private static void setMimeType(ApplicationContext context, Node node, String mimeType)
       throws RepositoryException
   {
      // retrieve service registry
        ServiceRegistry serviceRegistry = (ServiceRegistry) context.getBean(ServiceRegistry.SERVICE_REGISTRY);
        NodeService nodeService = serviceRegistry.getNodeService();
      
       // convert the JCR Node to an Alfresco Node Reference
       NodeRef nodeRef = JCRNodeRef.getNodeRef(node);
   
       // retrieve the Content Property (represented as a ContentData object in Alfresco)
       ContentData content = (ContentData)nodeService.getProperty(nodeRef, ContentModel.PROP_CONTENT);
      
       // update the Mimetype
       content = ContentData.setMimetype(content, mimeType);
       nodeService.setProperty(nodeRef, ContentModel.PROP_CONTENT, content);
   }

}

neverdie
Member II

Re: Cambiar nombre interno de un espacio

Si, si yo realmente hago eso, mi codigo para renombrar es este:

-obtengo el nodo:
       Node node = getNode(rootAppNode,path);
-lo renombro:
       node.setProperty("cm:name", name.toLowerCase());

Lo que estoy haciendo realmente es cambiar el nombre que tenia antes pero pasado a minusculas. la propiedad cm:name del nodo me la cambia:

<svSmiley Tongueroperty sv:name="cm:name" sv:type="String">
          <sv:value>nombrenodo</sv:value>
</svSmiley Tongueroperty>


Pero el verdadero nombre interno que usa Alfresco sigue en mayusculas:

<sv:node sv:name="NOMBRENODO">

En bbdd creo que es el campo string_value de la tabla alf_node_properties. Ese es el nombre que quiero cambiar…
ajv
Member II

Re: Cambiar nombre interno de un espacio

Buenas!!

Si no te importa poner el código que usas…quizás detectamos algo que se te escapa.
Por ejemplo, tienes puesto que te guarde los cambios de la sesión, session.save()?

Saludos!
neverdie
Member II

Re: Cambiar nombre interno de un espacio

Buenos dias,

Si, si hago un session.save();

Node rootAppNode = obtenerRootNode(session);
Node node = getNode(rootAppNode,userPath);
node.setProperty(getProperty(PROPERTY_JCR_NAME), name.toLowerCase());
session.save();

donde PROPERTY_JCR_NAME es cm:name.

Visualmente me lo cambia. Es decir…cuando entro a alfresco por la GUI yo veo que el espacio está en minusculas. Lo que ocurre es que mediante jcr si intento validar si existe el path (rootAppNode.hasNode(userPath)), me dice que no existe ya que yo lo busco en minusculas pero internamente el espacio aún esta en mayusculas.
pjcaracuel_2349
Active Member II

Re: Cambiar nombre interno de un espacio

Buenas,

Prueba a hacer un nodo.save(); y reinicias Alfresco.

Saludos
neverdie
Member II

Re: Cambiar nombre interno de un espacio

Nada…hace lo mismo. cambia la propiedad cm:name a minusculas. Yo lo veo en minusculas pero la propiedad sv:name del nodo sigue estando en mayusculas, voy a buscar otra forma de resolver mi problema.

Gracias de todas formas por vuestras respuestas.

Saludos!!
pjcaracuel_2349
Active Member II

Re: Cambiar nombre interno de un espacio

Oki, aunque ya por curiosidad, si lo cambias directamente en bbdd?? Se que no es lo recomendable pero para una urgencia…

Saludos
neverdie
Member II

Re: Cambiar nombre interno de un espacio

Podria…pero el problema es que he organizado usuarios en una estructura de espacios en Alfresco, es un entorno productivo, y el volumen de usuarios existentes ya es alto…y solo quiero pasar a minusculas el nombre del espacio raiz del usuario (el espacio con el nombre del usuario), pero no los espacios que 'cuelgan' de el. Me habia hecho un proceso para renombrarlos porque sino por bbdd tendria que ir uno a uno habiendo localizado antes cuales estan en mayusculas o bien cambiar todos los espacios a minusculas, pero esto ultimo no quiero hacerlo. Pero bueno…si no encuentro otra solucion….no me quedará otra que ir uno por uno en bbdd  :? 

Gracias y saludos!