summaryrefslogtreecommitdiff
path: root/projects/net.wotonomy.web/src/main/java/net/wotonomy/web/WOGenericElement.java
blob: 8894428d5fb0170a5685a74a7178a642bd056634 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
/*
 Wotonomy: OpenStep design patterns for pure Java applications.
 Copyright (C) 2000 Blacksmith, Inc.

 This library is free software; you can redistribute it and/or
 modify it under the terms of the GNU Lesser General Public
 License as published by the Free Software Foundation; either
 version 2.1 of the License, or (at your option) any later version.

 This library is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 Lesser General Public License for more details.

 You should have received a copy of the GNU Lesser General Public
 License along with this library; if not, see http://www.gnu.org
 */

package net.wotonomy.web;

import net.wotonomy.foundation.NSArray;
import net.wotonomy.foundation.NSDictionary;

/**
 * Used to generate any HTML element dynamically. It only creates the opening tag without a closing tag.
 * To generate HTML elements that have opening and closing tags, as well as some content in between,
 * use WOGenericContainer instead.
 * @author michael@mpowers.net
 * @author $Author: cgruber $
 * @version $Revision: 905 $
 */
public class WOGenericElement extends WODynamicElement {

    static NSArray bindings = new NSArray( new Object[] 
        { "elementName", "omitTags", "elementID", "otherTagString",
          "formValue", "formValues", "invokeAction" } );
          
    public WOGenericElement() {
        super();
    }

    public WOGenericElement(String n, NSDictionary m, WOElement t) {
        super(n, m, t);
    }

    public String elementName(WOContext c) {
        String x = (String)valueForProperty("elementName", c.component());
        if (x != null)
            return x;
        return c.elementID();
    }

    public void takeValuesFromRequest(WORequest r, WOContext c) {
        if ( c.elementID().equals( c.senderID() ) )
        {
            Object value;
            value = r.formValueForKey( c.elementID() );
            setValueForProperty( "formValue", value, c.component() );
            value = r.formValuesForKey( c.elementID() );
            setValueForProperty( "formValues", value, c.component() );
        }
    }

    public WOActionResults invokeAction(WORequest r, WOContext c) 
    {
        WOActionResults result = null;
        String action = stringForProperty( "invokeAction", c.component() );
        if ( action != null && c.elementID().equals( c.senderID() ) )
        {
            result = c.component().performAction( action );
        }
        return result;
    }
    
    public void appendToResponse(WOResponse r, WOContext c) {
        WOComponent component = c.component();
        if ( !booleanForProperty( "omitTags", component ) )
        {
            r.appendContentString("<");
            r.appendContentString(elementName(c));
            String other = stringForProperty( "otherTagString", component );
            if ( other != null )
            {
                r.appendContentString( " " );
                r.appendContentString( other );
            }
            String add = additionalHTMLProperties(component, bindings);
            if (add.length() > 0)
                r.appendContentString(add);
            r.appendContentString(">");
        }
        setValueForProperty( "elementID", c.elementID(), component );
    }

}