File: WOEntity.m

package info (click to toggle)
sope 5.12.4-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 16,588 kB
  • sloc: objc: 169,223; sh: 3,823; ansic: 3,409; javascript: 446; python: 318; makefile: 185
file content (129 lines) | stat: -rw-r--r-- 3,439 bytes parent folder | download | duplicates (10)
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
/*
  Copyright (C) 2000-2005 SKYRIX Software AG

  This file is part of SOPE.

  SOPE 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, or (at your option) any
  later version.

  SOPE 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 SOPE; see the file COPYING.  If not, write to the
  Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
  02111-1307, USA.
*/

#include <NGObjWeb/WOHTMLDynamicElement.h>
#include "WOElement+private.h"
#include <NGObjWeb/WOResourceManager.h>
#include <NGObjWeb/WOApplication.h>
#include <NGObjWeb/WOxElemBuilder.h>
#include <DOM/DOMProtocols.h>
#include "decommon.h"

@interface WOEntity : WOHTMLDynamicElement
{
  // WODynamicElement: extraAttributes
  // WODynamicElement: otherTagString
@protected
  WOAssociation *name;
}

@end /* WOEntity */

@implementation WOEntity

- (id)initWithElement:(id<DOMElement>)_element
  templateBuilder:(WOxElemBuilder *)_builder
{
  NSString            *tname;
  NSMutableDictionary *assocs;
  id<NSObject,DOMNamedNodeMap> attrs;
  unsigned count;
  
  tname = [_element tagName];
  
  /* construct associations */
  
  assocs = nil;
  attrs = [_element attributes];
  if ((count = [attrs length]) > 0)
    assocs = [_builder associationsForAttributes:attrs];

  if ([tname isEqualToString:@"nbsp"]) {
    WOAssociation *a;

    a = [_builder associationForValue:@"nbsp"];
    if (assocs)
      [assocs setObject:a forKey:@"name"];
    else
      assocs = [NSMutableDictionary dictionaryWithObject:a forKey:@"name"];
  }
  
  /* construct child elements */
  
  if ([_element hasChildNodes]) {
    [_builder logWithFormat:@"WARNING: element %@ has child-nodes (ignored)",
                _element];
  }
  
  /* construct self ... */
  self = [self initWithName:tname
               associations:assocs 
               contentElements:nil];
  [(id)self setExtraAttributes:assocs];
  return self;
}

- (id)initWithName:(NSString *)_name
  associations:(NSDictionary *)_config
  template:(WOElement *)_tmpl
{
  if ((self = [super initWithName:_name associations:_config template:_tmpl])) {
    if ((self->name = OWGetProperty(_config, @"name")) == nil) {
      NSLog(@"%s: missing 'name' binding for entity element %@ (assocs=%@)...",
            __PRETTY_FUNCTION__, _name, _config);
      RELEASE(self);
      return nil;
    }
  }
  return self;
}

#if !LIB_FOUNDATION_BOEHM_GC
- (void)dealloc {
  RELEASE(self->name);
  [super dealloc];
}
#endif

// ******************** responder ********************

- (void)appendToResponse:(WOResponse *)_response inContext:(WOContext *)_ctx {
  NSString *s;
  
  if ([_ctx isRenderingDisabled] || [[_ctx request] isFromClientComponent])
    return;

  s = [self->name stringValueInComponent:[_ctx component]];
  if ([s length] == 0)
    return;

  WOResponse_AddChar(_response, '&');
  WOResponse_AddString(_response, s);
  WOResponse_AddChar(_response, ';');
}

/* description */

- (NSString *)associationDescription {
  return [NSString stringWithFormat:@" name=%@",  self->name];
}

@end /* WOEntity */