[ 
https://issues.apache.org/jira/browse/WW-4594?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15123753#comment-15123753
 ] 

ASF GitHub Bot commented on WW-4594:
------------------------------------

Github user lukaszlenart commented on a diff in the pull request:

    https://github.com/apache/struts/pull/85#discussion_r51285068
  
    --- Diff: 
plugins/tiles/src/test/java/org/apache/struts2/tiles/StrutsTilesAnnotationProcessorTest.java
 ---
    @@ -0,0 +1,148 @@
    +package org.apache.struts2.tiles;
    +
    +import java.util.List;
    +import java.util.Set;
    +
    +import org.apache.struts2.tiles.annotation.TilesDefinition;
    +import org.apache.tiles.Attribute;
    +import org.apache.tiles.Definition;
    +import org.apache.tiles.Expression;
    +import org.junit.Test;
    +
    +import org.junit.Assert;
    +
    +public class StrutsTilesAnnotationProcessorTest {
    +
    +    @Test
    +    public void findAnnotationSingleAction() {
    +        StrutsTilesAnnotationProcessor annotationProcessor = new 
StrutsTilesAnnotationProcessor();
    +        TilesDefinition tilesDefinition = 
annotationProcessor.findAnnotation(new TilesTestActionSingleAnnotation(), null);
    +        Assert.assertNotNull(tilesDefinition);
    +        Assert.assertEquals("definition-name", tilesDefinition.name());
    +    }
    +
    +    @Test
    +    public void findAnnotationMultipleActionNameNull() {
    +        StrutsTilesAnnotationProcessor annotationProcessor = new 
StrutsTilesAnnotationProcessor();
    +        TilesDefinition tilesDefinition = 
annotationProcessor.findAnnotation(new TilesTestActionMultipleAnnotations(), 
null);
    +        Assert.assertNotNull(tilesDefinition);
    +        Assert.assertEquals("def1", tilesDefinition.name());
    +    }
    +
    +    @Test
    +    public void findAnnotationMultipleActionNameGiven() {
    +        StrutsTilesAnnotationProcessor annotationProcessor = new 
StrutsTilesAnnotationProcessor();
    +        TilesDefinition tilesDefinition = 
annotationProcessor.findAnnotation(new TilesTestActionMultipleAnnotations(), 
"def2");
    +        Assert.assertNotNull(tilesDefinition);
    +        Assert.assertEquals("def2", tilesDefinition.name());
    +    }
    +
    +    @Test
    +    public void findAnnotationMultipleActionNotFound() {
    +        StrutsTilesAnnotationProcessor annotationProcessor = new 
StrutsTilesAnnotationProcessor();
    +        TilesDefinition tilesDefinition = 
annotationProcessor.findAnnotation(new TilesTestActionMultipleAnnotations(), 
"def3");
    +        Assert.assertNull(tilesDefinition);
    +    }
    +
    +    @Test
    +    public void buildDefiniton() {
    +        StrutsTilesAnnotationProcessor annotationProcessor = new 
StrutsTilesAnnotationProcessor();
    +        TilesDefinition tilesDefinition = 
annotationProcessor.findAnnotation(new TilesTestActionSingleAnnotation(), null);
    +
    +        Definition definition = 
annotationProcessor.buildTilesDefinition("tileName", tilesDefinition);
    +
    +        Assert.assertNotNull(definition);
    +        Assert.assertEquals("tileName", definition.getName());
    +        Assert.assertEquals("preparer", definition.getPreparer());
    +        Assert.assertEquals("base-definition", definition.getExtends());
    +        Attribute templateAttribute = definition.getTemplateAttribute();
    +        Assert.assertEquals("template", templateAttribute.getValue());
    +        Assert.assertEquals("type", templateAttribute.getRenderer());
    +        Assert.assertEquals("role", templateAttribute.getRole());
    +        Expression definitionExpressionObject = 
templateAttribute.getExpressionObject();
    +        Assert.assertEquals("templ*", 
definitionExpressionObject.getExpression());
    +        Assert.assertNull(definitionExpressionObject.getLanguage());
    +
    +        Attribute putAttribute = definition.getAttribute("put-attr");
    +        Assert.assertNotNull(putAttribute);
    +        Assert.assertEquals("attr-val", putAttribute.getValue());
    +        Assert.assertEquals("attr-type", putAttribute.getRenderer());
    +        Assert.assertEquals("attr-role", putAttribute.getRole());
    +        Expression putAttrExpressionObject = 
putAttribute.getExpressionObject();
    +        Assert.assertEquals("expr", 
putAttrExpressionObject.getExpression());
    +        Assert.assertEquals("lang", putAttrExpressionObject.getLanguage());
    +
    +        Attribute listAttribute = definition.getAttribute("list-name");
    +        Assert.assertEquals("list-role", listAttribute.getRole());
    +        List<Attribute> listValue = getListValue(listAttribute);
    +        Assert.assertEquals(2, listValue.size());
    +
    +        Attribute addAttribute = listValue.get(0);
    +        Assert.assertEquals("list-attr-role", addAttribute.getRole());
    +        Assert.assertEquals("list-attr-val", addAttribute.getValue());
    +        Assert.assertEquals("list-attr-type", addAttribute.getRenderer());
    +        Expression addAttrExpressionObject = 
addAttribute.getExpressionObject();
    +        Assert.assertEquals("list-attr-expr", 
addAttrExpressionObject.getExpression());
    +
    +        Attribute addListAttribute = listValue.get(1);
    +        Assert.assertEquals("list-list-attr-role", 
addListAttribute.getRole());
    +        List<Attribute> addListValue = getListValue(addListAttribute);
    +        Assert.assertEquals(1, addListValue.size());
    +        Assert.assertEquals("list-list-add-attr", 
addListValue.get(0).getValue());
    +
    +        Set<String> cascadedAttributeNames = 
definition.getCascadedAttributeNames();
    +        Assert.assertEquals(2, cascadedAttributeNames.size());
    +        Assert.assertTrue(cascadedAttributeNames.contains("put-attr"));
    +        Assert.assertTrue(cascadedAttributeNames.contains("list-name"));
    +    }
    +
    +    @Test
    +    public void buildDefinitonAllEmpty() {
    +        StrutsTilesAnnotationProcessor annotationProcessor = new 
StrutsTilesAnnotationProcessor();
    +        TilesDefinition tilesDefinition = 
annotationProcessor.findAnnotation(new 
TilesTestActionSingleAnnotationAllEmpty(), null);
    +
    +        Definition definition = 
annotationProcessor.buildTilesDefinition(null, tilesDefinition);
    +
    +        Assert.assertNotNull(definition);
    +        Assert.assertNull(definition.getName());
    +        Assert.assertNull(definition.getPreparer());
    +        Assert.assertNull(definition.getExtends());
    +        Attribute templateAttribute = definition.getTemplateAttribute();
    +        Assert.assertNull(templateAttribute.getValue());
    +        //Assert.assertNull(templateAttribute.getRenderer());
    --- End diff --
    
    If not used maybe it can be dropped?


> Configure TilesDefs by annotating Actions
> -----------------------------------------
>
>                 Key: WW-4594
>                 URL: https://issues.apache.org/jira/browse/WW-4594
>             Project: Struts 2
>          Issue Type: New Feature
>          Components: Plugin - Tiles
>            Reporter: Christoph Nenning
>            Assignee: Christoph Nenning
>             Fix For: 2.5
>
>
> Large applications often consist of hundrets of actions. IMO it is a major 
> benefit of struts-convention-plugin that it is not necessary to configure all 
> those actions in xml files. As xml files would become huge and hard to 
> maintain. The same applies to tiles xml files. Currently it is necessary to 
> configure tiles-definitions for all those actions in xml files which makes 
> them huge and hard to maintain.
> It would be great if configuration of tiles-definitions could be done by 
> annotating actions, in a similar way actions can be configured with 
> annotations from convention-plugin.
> This somewhat relates to WW-3937 and WW-4161



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to