05-10-2007 06:30 AM
org.alfresco.repo.dictionary.constraint.ListOfValuesConstraintCette classe me permet d'aller chercher dans une nouvelle instance mysql les données contenues dans une table, mettre ces données dans une ArrayList et de passer cette liste à la méthode
setAllowedValuesde la classe héritée. De cette manière je peux bénéficier d'une contrainte de type LIST dynamique. Voici le code de ma classe
package be.test.alfresco.constraint;
import java.sql.Connection;
import java.util.ArrayList;
import org.alfresco.repo.dictionary.constraint.ListOfValuesConstraint;
import org.apache.commons.logging.Log;[quote]import org.apache.commons.logging.LogFactory;
import be.test.alfresco.utility.db.DbUtils;
import be.test.alfresco.utility.db.SqlHelper;
public class ListCiviliteConstraint extends ListOfValuesConstraint {
private static Log logger = LogFactory.getLog("be.nsi.alfresco.constraint.DbUtils");
public ListCiviliteConstraint() {
super();
super.setAllowedValues(getCivilite());
}
/**
* Va rechercher la liste des Civilites dans la base de donnée
* @return la liste des Civilites
*/
private ArrayList getCivilite(){
ArrayList civilites=null;
Connection conn=null;
try {
conn = DbUtils.getDbConnection();
civilites = SqlHelper.getAllCivilitesType(conn);
DbUtils.closeDbConnection(conn);
} catch (Exception e) {
logger.error(e.getMessage());
}[/quote]
return civilites;
}
}
Aprés avoir testé (avec une classe test) cette classe tout fonctionne correctement.<constraints>
[b]<constraint name="Identification:ctrCivilite" type="be.test.alfresco.constraint.ListCiviliteConstraint">
</constraint>[/b]
</constraints>
J’applique cette contrainte sur un custom aspect<aspect name="Identification:Personne">
<title>Identification Personne</title>
<properties>
<property name="Identification:Civilite">
<title>Civilite</title>
<type>d:text</type>
<constraints>
[b]<constraint ref="Identification:ctrCivilite" />[/b]
</constraints>
………
</property>
Je génère un jar avec mes nouvelles classes que je place dans le répertoire webappsalfrescoWEB-INFlibde tomcat
org.alfresco.service.cmr.dictionary.DictionaryException: Constraint type 'be.test.alfresco.constraint.ListCiviliteConstraint' on constraint 'Identification:ctrCivilite' is not a well-known type or a valid Constraint implementationOn dirait que ma nouvelle classe n'a pas été correctement déployée.
at org.alfresco.repo.dictionary.M2ConstraintDefinition.resolveInternal(M2ConstraintDefinition.java:176)
at org.alfresco.repo.dictionary.M2ConstraintDefinition.resolveDependencies(M2ConstraintDefinition.java:117)
at org.alfresco.repo.dictionary.CompiledModel.<init>(CompiledModel.java:107)
03-27-2008 05:52 AM
Constraint type 'org.contezza.customConstraints.ListOfValuesQueryConstraint' on constraint 'test:CodeLabel' is not a well-known type or a valid Constraint implementation
package org.contezza.customConstraints;
import java.util.ArrayList;
import java.util.List;
import java.sql.*;
//import org.alfresco.i18n.I18NUtil;
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.gjt.mm.mysql.Driver";
String serverName = "localhost";
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:mysql://" + 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);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<model name="test:test" xmlns="http://www.alfresco.org/model/dictionary/1.0">
<description></description>
<author>Contezza InformatieManagement</author>
<version>0.1</version>
<imports>
<import uri="http://www.alfresco.org/model/dictionary/1.0" prefix="d" />
<import uri="http://www.alfresco.org/model/content/1.0" prefix="cm" />
</imports>
<namespaces>
<namespace uri="http://www.contezza.nl/model/test/1.0" prefix="test" />
</namespaces>
<constraints>
<constraint name="test:CodeLabel" type="org.contezza.customConstraints.ListOfValuesQueryConstraint">
<parameter name="allowedValues">
<list>
</list>
</parameter>
<parameter name="caseSensitive"><value>true</value></parameter>
</constraint>
</constraints>
<types>
<type name="test:codecontent">
<title>Contenu étendu</title>
<parent>cm:content</parent>
<properties>
<property name="test:codestr">
<title>Code str</title>
<type>d:text</type>
<constraints>
<constraint ref="test:CodeLabel" />
</constraints>
</property>
</properties>
</type>
</types>
</model>
03-27-2008 12:22 PM
03-27-2008 12:35 PM
Tags
Find what you came for
We want to make your experience in Hyland Connect as valuable as possible, so we put together some helpful links.