Index: topia2/src/java/org/codelutin/topia/generator/DAOAbstractGenerator.java diff -u topia2/src/java/org/codelutin/topia/generator/DAOAbstractGenerator.java:1.15 topia2/src/java/org/codelutin/topia/generator/DAOAbstractGenerator.java:1.16 --- topia2/src/java/org/codelutin/topia/generator/DAOAbstractGenerator.java:1.15 Thu Nov 8 20:14:59 2007 +++ topia2/src/java/org/codelutin/topia/generator/DAOAbstractGenerator.java Tue Dec 4 16:42:58 2007 @@ -24,10 +24,10 @@ * Created: 12 déc. 2005 * * @author Arnaud Thimel -* @version $Revision: 1.15 $ +* @version $Revision: 1.16 $ * -* Mise a jour: $Date: 2007-11-08 20:14:59 $ -* par : $Author: thimel $ +* Mise a jour: $Date: 2007-12-04 16:42:58 $ +* par : $Author: ruchaud $ */ package org.codelutin.topia.generator; @@ -35,7 +35,12 @@ import java.io.File; import java.io.IOException; import java.io.Writer; +import java.security.Permission; +import java.util.ArrayList; import java.util.Iterator; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import org.codelutin.generator.Generator; import org.codelutin.generator.ObjectModelGenerator; @@ -44,6 +49,10 @@ import org.codelutin.generator.models.object.ObjectModelAttribute; import org.codelutin.generator.models.object.ObjectModelClass; import org.codelutin.generator.models.object.ObjectModelClassifier; +import org.codelutin.topia.TopiaException; +import org.codelutin.topia.framework.TopiaContextImplementor; +import org.codelutin.topia.persistence.TopiaDAO; +import org.codelutin.util.StringUtil; /** * Genere des DAOs abstrait par defaut, l'utilisateur peut ensuite en herite @@ -81,7 +90,18 @@ import java.util.Arrays; import org.codelutin.topia.TopiaException; import org.codelutin.topia.framework.TopiaContextImplementor; - +}*/ + String security = clazz.getTagValue("security"); + if(GeneratorUtil.notEmpty(security)) { +/*{ +import java.util.ArrayList; +import java.security.Permission; +import org.codelutin.topia.taas.entities.TaasAuthorizationImpl; +import org.codelutin.topia.taas.jaas.TaasPermission; +import org.codelutin.topia.persistence.TopiaDAO; +}*/ + } +/*{ /** * Implantation DAO pour l'entité <%=Util.toUpperCaseFirstLetter(clazz.getName())%>. * Cette classe contient une implantation de TopiaDAO a laquel elle peut @@ -202,6 +222,74 @@ } } + if(GeneratorUtil.notEmpty(security)) { + Pattern propertiesPattern = Pattern + .compile("((?:[_a-zA-Z0-9]+\\.)+(?:_?[A-Z][_a-zA-Z0-9]*\\.)+)attribute\\.(?:([_a-z0-9][_a-zA-Z0-9]*))"); + String[] valuesSecurity = security.split(":"); +/*{ + /** + * Retourne les permissions a verifier pour l'acces a l'entite pour le service Taas + * @param topiaId topiaId d'une entite + * @param actions actions souhaitées + * @return la liste des permissions + *) + public List getRequestPermission(String topiaId, int actions) throws TopiaException { + List resultPermissions = new ArrayList();}*/ + for (String valueSecurity : valuesSecurity) { + Matcher matcher = propertiesPattern.matcher(valueSecurity); + matcher.find(); + // className is fully qualified name of class + String className = matcher.group(1); + className = StringUtil.substring(className, 0, -1); // remove ended + // . + // target is class, attribute or operation + String attributeName = matcher.group(2); + + String query = ""; + String daoClass = ""; + if(className.equals(clazz.getQualifiedName())) { + query = "select " + attributeName + ".topiaId from " + clazz.getQualifiedName() + " where topiaId = ?"; + daoClass = clazz.getAttribute(attributeName).getClassifier().getQualifiedName(); + } else { + query = "select at.topiaId from " + clazz.getQualifiedName() + " cl, " + className + " at where topiaId = ? and at." + attributeName + " in cl"; + daoClass = className; + } +/*{ + resultPermissions.addAll(getRequestPermission(topiaId, actions, "<%=query%>", <%=daoClass%>.class));}*/ + } +/*{ + return resultPermissions; + } + + /** + * Retourne les permissions a verifier pour l'acces a l'entite pour le service Taas + * @param topiaId topiaId d'une entite + * @param actions actions souhaitées + * @param query requete pour avoir le prochain topiaId + * @param daoClass delegation du getRequestPermission + * @return la liste des permissions + *) + private List getRequestPermission(String topiaId, int actions, String query, Class daoClass) throws TopiaException { + TopiaContextImplementor context = getParentDAO().getContext(); + List result = context.find(query, topiaId); + + List resultPermissions = new ArrayList(); + for (String topiaIdPermission : result) { + TopiaDAO dao = context.getDAO(daoClass); + List permissions = dao.getRequestPermission(topiaIdPermission, actions); + if(permissions != null) { + resultPermissions.addAll(permissions); + } else { + TaasAuthorizationImpl authorization = new TaasAuthorizationImpl(topiaIdPermission, actions); + TaasPermission permission = new TaasPermission(authorization); + resultPermissions.add(permission); + } + } + return resultPermissions; + } + +}*/ + } /*{ } //<%=clazz.getName()%>DAOAbstract }*/