Constraint

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

Constraint

Hola a todos

Resulta que quiero que los valores de un constraint se lean de base de datos (o de algún fichero), porque se prevee que van ir aumentando en el futuro. Leyendo el foro en inglés encontré esto http://forums.alfresco.com/en/viewtopic.php?f=5&t=10101&p=47856#p38060 la cuestión es que tengo varias dudas.

La primera de todas y casi que la más importante es dónde creo la clase ¿modifico un archivo? ¿creo uno nuevo? ¿tengo que registrarlo? ¿en qué carpeta lo meto? etc.

La segunda es que yo en Java estoy pez y apenas entiendo nada. Sé donde se almacena el resultado y dónde lee de base de datos, pero apenas comprendo las construcciones, me resultan tremendamente confusas y puesto que todavía no tengo definida la base de datos, me gustaría, por el momento, saber que tengo que hacer para que por ahora la lista esté en el código Java, para probar si todo va bien (cuando vea que funciona, ya me pondré con la base de datos y seguramente preguntaré algo de este código).

Muchas gracias
7 Replies
xsaettone
Member II

Re: Constraint

Hola melongris,

dejame ayudarte con al menos parte de tus dudas. Por un lado tienes que crearte la clase y por otro lado modificas el modelo (el xml donde tienes la propiedad lista que quieres restringir) y haces las modificaciones que indica el post que citas.

Para crear la clase:

Primero que nada descarga el SDK de Alfresco, ya que necesitarás las librerias que provee (http://wiki.alfresco.com/wiki/Labs_3_Final_download_files). Es importante que la versión de SDK corresponda con la versión de Alfresco que uses; asumiré que usas la versión 3.2.De todas formas es buena idea revisar este enlace http://wiki.alfresco.com/wiki/Alfresco_SDK_3.2

En eclipse:
1. Crea un proyecto Java.
2. Bajo la carpeta src crea un Package, en mi caso org.alfresco.sample.CodeLabelExtend.
3. Dentro del package creas una clase, en mi caso ListOfValuesQueryConstraint, esta clase contendrá:


package org.alfresco.sample.CodeLabelExtend;

import java.util.ArrayList;
import java.util.List;
import java.sql.*;

import org.alfresco.repo.dictionary.constraint.ListOfValuesConstraint;
import org.alfresco.web.bean.generator.BaseComponentGenerator;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.io.Serializable;
import javax.faces.model.SelectItem;

public class ListOfValuesQueryConstraint extends ListOfValuesConstraint implements Serializable {

    private static Log logger = LogFactory.getLog(BaseComponentGenerator.class);
   
    private static final long serialVersionUID=1;
   
    private List<String> allowedLabels;
   
    public void setAllowedValues(List allowedValues) {}
    public void setCaseSensitive(boolean caseSensitive) {}

    public void initialize() {
       super.setCaseSensitive(false);
        this.loadDB();
     }
   
    public List<String> getAllowedLabels() {
       return this.allowedLabels;
    }
   
    public void setAllowedLabels(List<String> allowedLabels) {
       this.allowedLabels=allowedLabels;
    }
   
     public List<SelectItem> getSelectItemList() {
       List<SelectItem> result = new ArrayList<SelectItem>(this.getAllowedValues().size());
       for(int i=0;i<this.getAllowedValues().size();i++) {
          result.add(new SelectItem((Object)this.getAllowedValues().get(i),this.allowedLabels.get(i)));
       }
       return result;
    }
   
     protected void loadDB() {
       
        String driverName = "org.postgresql.Driver";//o mysql si es lo que utilizaras
         String serverName = "167.175.55.207";
         String mydatabase = "alfresco";
         String username = "alfresco";
         String password = "alfresco";
         List<String> av = new ArrayList<String>();
         List<String> al=new ArrayList<String>();
         try {
            Connection connection = null;
             Class.forName(driverName);
             String url = "jdbc:postgresql://" + serverName +  "/" + mydatabase;
             connection = DriverManager.getConnection(url, username, password);
             Statement stmt = connection.createStatement();
             ResultSet rs = stmt.executeQuery("select code,label from codelabel");
             while (rs.next()) {
                 av.add(rs.getString("code"));
                 al.add(rs.getString("label"));
             }
         }
         catch (Exception e) {}
       
       super.setAllowedValues(av);
       this.setAllowedLabels(al);
    }
}

Los import
import org.alfresco.repo.dictionary.constraint.ListOfValuesConstraint;
import org.alfresco.web.bean.generator.BaseComponentGenerator;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
son las librerias que debes incluir en el proyecto;ésto lo harás de la siguiente forma (en Eclipse):
1. Despliega sobre el proyecto el menú contextual (con el segundo botón del ratón) y escoge Build Path -> Configure build Path -> Libraries -> Add External JARs
2. Incluye las siguientes librerías que están en el SDK que descargaste:
/lib/server/alfresco-core-3.2.jar
/lib/server/alfresco-repository-3.2.jar
/lib/server/alfresco-web-client-3.2.jar
/lib/server/dependencies/myfaces-api-1.1.5.jar
/lib/server/dependencies/commons/commons-logging-1.1.jar

No deberías tener ningún error, si es así exportas el proyecto. Del resultado de la exportación copias la carpeta alfresco que está dentro de /ListOfValuesQueryConstraint/org/ y lo ubicarás en /WEB-INF/classes/org/

Creo que resulto algo largo, espero te sirva
melongris
Member II

Re: Constraint

Muchísimas gracias por la explicación.

Ahora me pondré con ello, pero ten por seguro que sólo la lectura de tu post me ha sido de muchísima ayuda, porque por ejemplo el SDK lo tenía, pero no sabía ni que hacer con el XD.

Cualquier duda o error consultaré aquí
melongris
Member II

Re: Constraint

Bueno, ya me ha surgido una duda y es con respecto a aesta parte.

No deberías tener ningún error, si es así exportas el proyecto. Del resultado de la exportación copias la carpeta alfresco que está dentro de /ListOfValuesQueryConstraint/org/ y lo ubicarás en /WEB-INF/classes/org/

Le he dado a export, pero me sale un diálogo tal que así

[img]http://img85.imageshack.us/img85/9941/dibujoxke.jpg[/img]

Y la verdad es que no sé que hacer, porque tampoco sé demasiado de Eclipse.
xsaettone
Member II

Re: Constraint

Ummmmmm con flojerita de googlear???? jeje   http://eclipsetutorial.forge.os4os.org/proyecto.htm

Bueno, en la ventana exportar despliega la opcion Java y selecciona Jar… el archivo resultante lo descomprimes.

Saludos
melongris
Member II

Re: Constraint

No ha sido vagancia ni nada por estilo, es que he visto tantas opciones que realmente no sabía cual debía coger, como ya dije, no estoy puesto en Java (ni Eclipse).

He probado a poner la carpeta en la ruta que me has indidcado (presupongo que es la que está dento de /webapps/alfresco) Lo he probado, pero me da error. ¿Falta algún paso por hacer o en teoría debería de funcionar ya?

Por cierto, sí, tengo la versión 3.2.

Gracias de nuevo por la ayuda, me estás salvando la vida.
melongris
Member II

Re: Constraint

Al final ha sido una tontería de fallo. El constraint me estaba dando un error, así que se me ocurrió poner esto y funcionó

<constraints>
      <constraint name="tc:CodeLabel" type="org.alfresco.sample.CodeLabelExtend.ListOfValuesQueryConstraint"></constraint>
</constraints>

Muchas gracias por toda la ayuda
xsaettone
Member II

Re: Constraint

Disculpa si te molestó el comentario   :roll:   … mi intención no era llamarte vago… solo bromeaba!!

Fue un placer ayudarte….

a la orden  :wink: