Extraer el tipo de una propiedad dado un modelo

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

Extraer el tipo de una propiedad dado un modelo

Hola,

He definido un nuevo modelo y me gustaría que dado un nombre de propiedad, p.e. my:fecha, ver de qué tipo es . Alguien me puede guiar?

<namespaces>
<namespace uri="my.new.model" prefix="my"/>
</namespaces>

<types>
<type name="my:mitipo1">
<title>Mi Tipo 1</title>
<properties>
<property name="my:fecha">
<title>Fecha</title>
<type>d:date</type>
<mandatory>true</mandatory>
</property>
<property name="my:nombre">
<title>Nombre</title>
<type>d:text</type>
<mandatory>true</mandatory>
</property>
</properties>
</type>
<types>

Muchas gracias,

Un saludo,

merimm
10 Replies
pjcaracuel_2349
Active Member II

Re: Extraer el tipo de una propiedad dado un modelo

Hola,

Si precisaras un poquito mas quizas te podriamos ayudar.

me gustaría que dado un nombre de propiedad, p.e. my:fecha, ver de qué tipo es

Ver de que tipo donde? Webclient? Ventana de propiedades? Otro sitio?

Saludos
merimm
Member II

Re: Extraer el tipo de una propiedad dado un modelo

Es cierto :-), sería desde una aplicación Java.

Es decir dada la propiedad {my.new.model}fecha como puedo obtener el tipo? Es para detectar los que son tipo date y aplicarle la conversión de fecha antes de insertar la propiedad en el nodo.
La fecha me viene así 16-ENE-06 y la tengo que pasar a formato yyyy-MM-dd'T'HH:mm:ss.sss+00:00[\b] para que se inserte correctamente en Alfresco. Este tratamiento sólo lo debería hacer con las propiedades del tipo date. No se si me explico ahora.

Gracias de antemano.

Un saludo,

merimm
pjcaracuel_2349
Active Member II

Re: Extraer el tipo de una propiedad dado un modelo

Ok, mejor asi.

Si tienes a mano los javadoc de alfresco, dentro de ../repository-doc/index.html

Encontraras un interface y una clase que probablemente te ayuden.

DataType
DataTypeDefinition
DataTypeMap

Saludos
ajv
Member II

Re: Extraer el tipo de una propiedad dado un modelo

Hola Merimm,

Si es para usar dentro de java yo probaría de sacarle partido al servicio de diccionario.
Si le echas un vistazo al DictionaryService (http://dev.alfresco.com/resource/docs/java/repository/org/alfresco/service/cmr/dictionary/Dictionary...), verás que contiene muchos métodos de utilidad para obtener la información de configuración de tus modelos. Entre ellos, se encuentra:
getProperty

@NotAuditable
PropertyDefinition getProperty(QName propertyName)

    Gets the definition of the property as defined by its owning Class.

    Parameters:
        propertyName - the property name
    Returns:
        the property definition (or null, if it doesn't exist)
El cual permite obtener la definición de la propiedad, dado el nombre completo de ésta.
La interfaz PropertyDefinition, por su parte, dispone del método getDataType() que te devuelve la definición del tipo.

Te dejo los enlaces a ambas interfaces, por si quieres profundizar en el tema:
PropertyDefinition - http://dev.alfresco.com/resource/docs/java/repository/org/alfresco/service/cmr/dictionary/PropertyDe...
DataTypeDefinition - http://dev.alfresco.com/resource/docs/java/repository/org/alfresco/service/cmr/dictionary/DataTypeDe...

A partir del DatatypeDefinition de tu propiedad podrías hacer un switch o similar del tipo:
if (miTipo.equals(DataTypeDefinition.DATE)) {
    // Casting a Date
}
if …

Bueno, espero que te resulte útil la información.
Saludos!
pjcaracuel_2349
Active Member II

Re: Extraer el tipo de una propiedad dado un modelo

Apuntate uno "virtualmente" hablando claro.

De aqui salgo sabiendo programar en Alfresco.
merimm
Member II

Re: Extraer el tipo de una propiedad dado un modelo

Agradezco mucho vuestra ayuda.

A lo mejor digo una tontería muy grande, pero ando muy muy perdida, no veo cómo usar el servicio de diccionario, de dónde parto para obtener el DictionaryService?

Gracias again!
ajv
Member II

Re: Extraer el tipo de una propiedad dado un modelo

Hola merimm,

En absoluto es una tontería lo que preguntas…al principio es normal no tener claro esas cositas  Smiley Very Happy
Te pongo un ejemplo de cómo obtener una referencia al DictionaryService:
DictionaryService ds = Repository.getServiceRegistry(
            FacesContext.getCurrentInstance()).getDictionaryService();
Necesitarás importar la interfaz del servicio de diccionario: import org.alfresco.service.cmr.dictionary.DictionaryService;
Como ves coge el contexto de la instancia actual (FacesContext.getCurrentInstance()) con el fin de recuperar los diferentes servicios registrados del repositorio (Repository.getServiceRegistry(context)) y coger el servicio de diccionario (services.getDictionaryService()).
Al principio todo esto parece muy extraño y abstracto, pero resulta muy ágil, pues a partir del ServiceRegistry tienes acceso no sólo al servicio de diccionario, sino a todos los demás: getNodeService(), getSearchService(), getPermissionService()…y a través de ellos es como puedes acceder a la funcionalidad del API de Alfresco.

Bueno, espero haberte ayudado.  :wink:
Un saludo,

Adrián.
merimm
Member II

Re: Extraer el tipo de una propiedad dado un modelo

Hola Adrián,

Muchas gracias por tu respuesta. No te he respondido antes esperando a solucionar el problema pero no he dado aún con la tela. El FacesContext me da NULL y no consigo arreglarlo. Lo seguiré intentando…

Un saludo,

merimm
ajv
Member II

Re: Extraer el tipo de una propiedad dado un modelo

Hola merimm,

Tendrás que darnos un poco más de información al respecto…pues con esas líneas de código dentro de una clase java debería funcionarte.
Por ejemplo, el log de error que obtienes, desde dónde intentas ejecutar el código y bajo qué eventos o circunstancias, cómo lo has hecho, etc…

Por si te sirve, otra forma sencilla que se me ocurre es pasarle el dictionaryService por parámetro mediante la declaración de un bean de Spring:
<bean id="miBean" class="miPaquete.miClase">
      <property name="dictionaryService">
         <ref bean="dictionaryService"/>
      </property>
</bean>
y en tu clase tener un atributo dictionaryService, que se inicializará cuando arranque de nuevo tu Alfresco…
   private DictionaryService dictionaryService;
   public DictionaryService getDictionaryService() {
      return dictionaryService;
   }

   public void setDictionaryService(DictionaryServicedictionaryService) {
      this.dictionaryService= dictionaryService;
   }
Bueno, espero que más que liarte te esté sirviendo de ayuda  :?
Saludos!