appjam 0.1.0.pre4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. data/LICENSE.txt +20 -0
  2. data/README.rdoc +27 -0
  3. data/bin/appjam +17 -0
  4. data/lib/appjam.rb +50 -0
  5. data/lib/appjam/generators/Classes/ContactsAppDelegate.h.tt +18 -0
  6. data/lib/appjam/generators/Classes/ContactsAppDelegate.m.tt +88 -0
  7. data/lib/appjam/generators/Classes/org/puremvc/objectivec/core/Controller.h +54 -0
  8. data/lib/appjam/generators/Classes/org/puremvc/objectivec/core/Controller.m +145 -0
  9. data/lib/appjam/generators/Classes/org/puremvc/objectivec/core/Model.h +47 -0
  10. data/lib/appjam/generators/Classes/org/puremvc/objectivec/core/Model.m +117 -0
  11. data/lib/appjam/generators/Classes/org/puremvc/objectivec/core/View.h +39 -0
  12. data/lib/appjam/generators/Classes/org/puremvc/objectivec/core/View.m +207 -0
  13. data/lib/appjam/generators/Classes/org/puremvc/objectivec/interfaces/ICommand.h +16 -0
  14. data/lib/appjam/generators/Classes/org/puremvc/objectivec/interfaces/IController.h +57 -0
  15. data/lib/appjam/generators/Classes/org/puremvc/objectivec/interfaces/IFacade.h +135 -0
  16. data/lib/appjam/generators/Classes/org/puremvc/objectivec/interfaces/IMediator.h +84 -0
  17. data/lib/appjam/generators/Classes/org/puremvc/objectivec/interfaces/IModel.h +50 -0
  18. data/lib/appjam/generators/Classes/org/puremvc/objectivec/interfaces/INotification.h +57 -0
  19. data/lib/appjam/generators/Classes/org/puremvc/objectivec/interfaces/INotifier.h +41 -0
  20. data/lib/appjam/generators/Classes/org/puremvc/objectivec/interfaces/IObserver.h +67 -0
  21. data/lib/appjam/generators/Classes/org/puremvc/objectivec/interfaces/IProxy.h +53 -0
  22. data/lib/appjam/generators/Classes/org/puremvc/objectivec/interfaces/IView.h +96 -0
  23. data/lib/appjam/generators/Classes/org/puremvc/objectivec/patterns/command/MacroCommand.h +50 -0
  24. data/lib/appjam/generators/Classes/org/puremvc/objectivec/patterns/command/MacroCommand.m +101 -0
  25. data/lib/appjam/generators/Classes/org/puremvc/objectivec/patterns/command/SimpleCommand.h +28 -0
  26. data/lib/appjam/generators/Classes/org/puremvc/objectivec/patterns/command/SimpleCommand.m +34 -0
  27. data/lib/appjam/generators/Classes/org/puremvc/objectivec/patterns/facade/Facade.h +52 -0
  28. data/lib/appjam/generators/Classes/org/puremvc/objectivec/patterns/facade/Facade.m +304 -0
  29. data/lib/appjam/generators/Classes/org/puremvc/objectivec/patterns/mediator/Mediator.h +35 -0
  30. data/lib/appjam/generators/Classes/org/puremvc/objectivec/patterns/mediator/Mediator.m +101 -0
  31. data/lib/appjam/generators/Classes/org/puremvc/objectivec/patterns/observer/Notification.h +52 -0
  32. data/lib/appjam/generators/Classes/org/puremvc/objectivec/patterns/observer/Notification.m +71 -0
  33. data/lib/appjam/generators/Classes/org/puremvc/objectivec/patterns/observer/Notifier.h +40 -0
  34. data/lib/appjam/generators/Classes/org/puremvc/objectivec/patterns/observer/Notifier.m +54 -0
  35. data/lib/appjam/generators/Classes/org/puremvc/objectivec/patterns/observer/Observer.h +42 -0
  36. data/lib/appjam/generators/Classes/org/puremvc/objectivec/patterns/observer/Observer.m +67 -0
  37. data/lib/appjam/generators/Classes/org/puremvc/objectivec/patterns/proxy/Proxy.h +51 -0
  38. data/lib/appjam/generators/Classes/org/puremvc/objectivec/patterns/proxy/Proxy.m +73 -0
  39. data/lib/appjam/generators/Classes/users/ApplicationFacade.h.tt +31 -0
  40. data/lib/appjam/generators/Classes/users/ApplicationFacade.m.tt +33 -0
  41. data/lib/appjam/generators/Classes/users/controller/CreateUserCommand.h.tt +16 -0
  42. data/lib/appjam/generators/Classes/users/controller/CreateUserCommand.m.tt +27 -0
  43. data/lib/appjam/generators/Classes/users/controller/DeleteUserCommand.h.tt +16 -0
  44. data/lib/appjam/generators/Classes/users/controller/DeleteUserCommand.m.tt +21 -0
  45. data/lib/appjam/generators/Classes/users/controller/GetUsersCommand.h.tt +17 -0
  46. data/lib/appjam/generators/Classes/users/controller/GetUsersCommand.m.tt +21 -0
  47. data/lib/appjam/generators/Classes/users/controller/StartupCommand.h.tt +16 -0
  48. data/lib/appjam/generators/Classes/users/controller/StartupCommand.m.tt +29 -0
  49. data/lib/appjam/generators/Classes/users/controller/UpdateUserCommand.h.tt +16 -0
  50. data/lib/appjam/generators/Classes/users/controller/UpdateUserCommand.m.tt +27 -0
  51. data/lib/appjam/generators/Classes/users/model/UserProxy.h.tt +19 -0
  52. data/lib/appjam/generators/Classes/users/model/UserProxy.m.tt +59 -0
  53. data/lib/appjam/generators/Classes/users/model/vo/UserVO.h.tt +22 -0
  54. data/lib/appjam/generators/Classes/users/model/vo/UserVO.m.tt +47 -0
  55. data/lib/appjam/generators/Classes/users/view/ContactsMediator.h.tt +15 -0
  56. data/lib/appjam/generators/Classes/users/view/ContactsMediator.m.tt +43 -0
  57. data/lib/appjam/generators/Classes/users/view/UserFormMediator.h.tt +17 -0
  58. data/lib/appjam/generators/Classes/users/view/UserFormMediator.m.tt +57 -0
  59. data/lib/appjam/generators/Classes/users/view/UserListMediator.h.tt +17 -0
  60. data/lib/appjam/generators/Classes/users/view/UserListMediator.m.tt +59 -0
  61. data/lib/appjam/generators/Classes/users/view/components/Contacts.h.tt +27 -0
  62. data/lib/appjam/generators/Classes/users/view/components/Contacts.m.tt +46 -0
  63. data/lib/appjam/generators/Classes/users/view/components/UserForm.h.tt +37 -0
  64. data/lib/appjam/generators/Classes/users/view/components/UserForm.m.tt +118 -0
  65. data/lib/appjam/generators/Classes/users/view/components/UserList.h.tt +31 -0
  66. data/lib/appjam/generators/Classes/users/view/components/UserList.m.tt +77 -0
  67. data/lib/appjam/generators/Contacts-Info.plist.tt +28 -0
  68. data/lib/appjam/generators/Contacts.xcodeproj/eiffel.pbxuser +1671 -0
  69. data/lib/appjam/generators/Contacts.xcodeproj/eiffel.perspectivev3 +1638 -0
  70. data/lib/appjam/generators/Contacts.xcodeproj/project.pbxproj +574 -0
  71. data/lib/appjam/generators/Contacts_Prefix.pch.tt +8 -0
  72. data/lib/appjam/generators/app.rb +78 -0
  73. data/lib/appjam/generators/main.m.tt +17 -0
  74. data/lib/appjam/generators/utils/NSStringWhiteSpace.h +17 -0
  75. data/lib/appjam/generators/utils/NSStringWhiteSpace.m +31 -0
  76. data/lib/appjam/generators/utils/UIDevice.h +17 -0
  77. data/lib/appjam/generators/utils/UIDevice.m +83 -0
  78. data/lib/appjam/generators/utils/URLEncodeString.h +16 -0
  79. data/lib/appjam/generators/utils/URLEncodeString.m +29 -0
  80. data/lib/appjam/version.rb +10 -0
  81. data/spec/appjam_spec.rb +7 -0
  82. data/spec/spec_helper.rb +12 -0
  83. metadata +270 -0
@@ -0,0 +1,50 @@
1
+ //
2
+ // MacroCommand.h
3
+ // PureMVC_ObjectiveC
4
+ //
5
+ // PureMVC Port to ObjectiveC by Brian Knorr <brian.knorr@puremvc.org>
6
+ // PureMVC - Copyright(c) 2006-2008 Futurescale, Inc., Some rights reserved.
7
+ //
8
+
9
+ #import <Foundation/Foundation.h>
10
+ #import "INotification.h"
11
+ #import "Notifier.h"
12
+ #import "ICommand.h"
13
+
14
+ /**
15
+ * A base <code>ICommand</code> implementation that executes other <code>ICommand</code>s.
16
+ *
17
+ * <P>
18
+ * A <code>MacroCommand</code> maintains an list of
19
+ * <code>ICommand</code> Class references called <i>SubCommands</i>.</P>
20
+ *
21
+ * <P>
22
+ * When <code>execute</code> is called, the <code>MacroCommand</code>
23
+ * instantiates and calls <code>execute</code> on each of its <i>SubCommands</i> turn.
24
+ * Each <i>SubCommand</i> will be passed a reference to the original
25
+ * <code>INotification</code> that was passed to the <code>MacroCommand</code>'s
26
+ * <code>execute</code> method.</P>
27
+ *
28
+ * <P>
29
+ * Unlike <code>SimpleCommand</code>, your subclass
30
+ * should not override <code>execute</code>, but instead, should
31
+ * override the <code>initializeMacroCommand</code> method,
32
+ * calling <code>addSubCommand</code> once for each <i>SubCommand</i>
33
+ * to be executed.</P>
34
+ *
35
+ * <P>
36
+ *
37
+ * @see Controller, Notification, SimpleCommand
38
+ */
39
+ @interface MacroCommand : Notifier <ICommand> {
40
+ NSMutableArray *subCommands;
41
+ }
42
+
43
+ @property(nonatomic, retain) NSMutableArray *subCommands;
44
+
45
+ -(id)init;
46
+ -(void)initializeMacroCommand;
47
+ -(void)addSubCommand:(Class)commandClassRef;
48
+ +(id)command;
49
+
50
+ @end
@@ -0,0 +1,101 @@
1
+ //
2
+ // MacroCommand.m
3
+ // PureMVC_ObjectiveC
4
+ //
5
+ // PureMVC Port to ObjectiveC by Brian Knorr <brian.knorr@puremvc.org>
6
+ // PureMVC - Copyright(c) 2006-2008 Futurescale, Inc., Some rights reserved.
7
+ //
8
+
9
+ #import "MacroCommand.h"
10
+
11
+
12
+ @implementation MacroCommand
13
+
14
+ @synthesize subCommands;
15
+
16
+ /**
17
+ * Static Convenience Constructor.
18
+ */
19
+ +(id)command {
20
+ return [[[self alloc] init] autorelease];
21
+ }
22
+
23
+ /**
24
+ * Constructor.
25
+ *
26
+ * <P>
27
+ * You should not need to define a constructor,
28
+ * instead, override the <code>initializeMacroCommand</code>
29
+ * method.</P>
30
+ *
31
+ * <P>
32
+ * If your subclass does define a constructor, be
33
+ * sure to call <code>[super init]</code>.</P>
34
+ */
35
+ -(id)init {
36
+ if (self = [super init]) {
37
+ self.subCommands = [NSMutableArray array];
38
+ [self initializeMacroCommand];
39
+ }
40
+ return self;
41
+ }
42
+
43
+ /**
44
+ * Initialize the <code>MacroCommand</code>.
45
+ *
46
+ * <P>
47
+ * In your subclass, override this method to
48
+ * initialize the <code>MacroCommand</code>'s <i>SubCommand</i>
49
+ * list with <code>ICommand</code> class references like
50
+ * this:</P>
51
+ *
52
+ * @code
53
+ * // Initialize MyMacroCommand
54
+ * -(void)initializeMacroCommand {
55
+ * [self addSubCommand:[FirstCommand class]];
56
+ * [self addSubCommand:[SecondCommand class]];
57
+ * [self addSubCommand:[ThirdCommand class]];
58
+ * }
59
+ * @endcode
60
+ *
61
+ * <P>
62
+ * Note that <i>SubCommand</i>s may be any <code>ICommand</code> implementor,
63
+ * <code>MacroCommand</code>s or <code>SimpleCommands</code> are both acceptable.
64
+ */
65
+ -(void)initializeMacroCommand {
66
+ }
67
+
68
+ /**
69
+ * Add a <i>SubCommand</i>.
70
+ *
71
+ * <P>
72
+ * The <i>SubCommands</i> will be called in First In/First Out (FIFO)
73
+ * order.</P>
74
+ *
75
+ * @param commandClassRef a reference to the <code>Class</code> of the <code>ICommand</code>.
76
+ */
77
+ -(void)addSubCommand:(Class)commandClassRef {
78
+ [subCommands addObject:commandClassRef];
79
+ }
80
+
81
+ /**
82
+ * Execute this <code>MacroCommand</code>'s <i>SubCommands</i>.
83
+ *
84
+ * <P>
85
+ * The <i>SubCommands</i> will be called in First In/First Out (FIFO)
86
+ * order.
87
+ *
88
+ * @param notification the <code>INotification</code> object to be passsed to each <i>SubCommand</i>.
89
+ */
90
+ -(void)execute:(id<INotification>)notification {
91
+ for (Class commandClassRef in subCommands) {
92
+ [[[[commandClassRef alloc] init] autorelease] execute:notification];
93
+ }
94
+ }
95
+
96
+ -(void)dealloc {
97
+ self.subCommands = nil;
98
+ [super dealloc];
99
+ }
100
+
101
+ @end
@@ -0,0 +1,28 @@
1
+ //
2
+ // SimpleCommand.h
3
+ // PureMVC_ObjectiveC
4
+ //
5
+ // PureMVC Port to ObjectiveC by Brian Knorr <brian.knorr@puremvc.org>
6
+ // PureMVC - Copyright(c) 2006-2008 Futurescale, Inc., Some rights reserved.
7
+ //
8
+
9
+ #import <Foundation/Foundation.h>
10
+ #import "INotification.h"
11
+ #import "Notifier.h"
12
+ #import "ICommand.h"
13
+
14
+ /**
15
+ * A base <code>ICommand</code> implementation.
16
+ *
17
+ * <P>
18
+ * Your subclass should override the <code>execute</code>
19
+ * method where your business logic will handle the <code>INotification</code>. </P>
20
+ *
21
+ * @see Controller, Notification, MacroCommand
22
+ */
23
+ @interface SimpleCommand : Notifier <ICommand> {
24
+ }
25
+
26
+ +(id)command;
27
+
28
+ @end
@@ -0,0 +1,34 @@
1
+ //
2
+ // SimpleCommand.m
3
+ // PureMVC_ObjectiveC
4
+ //
5
+ // PureMVC Port to ObjectiveC by Brian Knorr <brian.knorr@puremvc.org>
6
+ // PureMVC - Copyright(c) 2006-2008 Futurescale, Inc., Some rights reserved.
7
+ //
8
+
9
+ #import "SimpleCommand.h"
10
+
11
+
12
+ @implementation SimpleCommand
13
+
14
+ /**
15
+ * Static Convenience Constructor.
16
+ */
17
+ +(id)command {
18
+ return [[[self alloc] init] autorelease];
19
+ }
20
+
21
+ /**
22
+ * Fulfill the use-case initiated by the given <code>INotification</code>.
23
+ *
24
+ * <P>
25
+ * In the Command Pattern, an application use-case typically
26
+ * begins with some user action, which results in an <code>INotification</code> being broadcast, which
27
+ * is handled by business logic in the <code>execute</code> method of an
28
+ * <code>ICommand</code>.</P>
29
+ *
30
+ * @param notification the <code>INotification</code> to handle.
31
+ */
32
+ -(void)execute:(id<INotification>)notification {}
33
+
34
+ @end
@@ -0,0 +1,52 @@
1
+ //
2
+ // Facade.h
3
+ // PureMVC_ObjectiveC
4
+ //
5
+ // PureMVC Port to ObjectiveC by Brian Knorr <brian.knorr@puremvc.org>
6
+ // PureMVC - Copyright(c) 2006-2008 Futurescale, Inc., Some rights reserved.
7
+ //
8
+
9
+ #import <Foundation/Foundation.h>
10
+ #import "IFacade.h"
11
+ #import "IController.h"
12
+ #import "IModel.h"
13
+ #import "IView.h"
14
+
15
+ /**
16
+ * A base Singleton <code>IFacade</code> implementation.
17
+ *
18
+ * <P>
19
+ * In PureMVC, the <code>Facade</code> class assumes these
20
+ * responsibilities:
21
+ * <UL>
22
+ * <LI>Initializing the <code>Model</code>, <code>View</code>
23
+ * and <code>Controller</code> Singletons.</LI>
24
+ * <LI>Providing all the methods defined by the <code>IModel,
25
+ * IView, & IController</code> interfaces.</LI>
26
+ * <LI>Providing the ability to override the specific <code>Model</code>,
27
+ * <code>View</code> and <code>Controller</code> Singletons created.</LI>
28
+ * <LI>Providing a single point of contact to the application for
29
+ * registering <code>Commands</code> and notifying <code>Observers</code></LI>
30
+ * </UL>
31
+ * <P>
32
+ *
33
+ * @see Model, View, Controller, Notification, Mediator, Proxy, SimpleCommand, MacroCommand
34
+ */
35
+ @interface Facade : NSObject <IFacade> {
36
+ id<IController> controller;
37
+ id<IModel> model;
38
+ id<IView> view;
39
+ }
40
+
41
+ @property(nonatomic, retain) id<IController> controller;
42
+ @property(nonatomic, retain) id<IModel> model;
43
+ @property(nonatomic, retain) id<IView> view;
44
+
45
+ -(id)init;
46
+ -(void)initializeFacade;
47
+ +(id<IFacade>)getInstance;
48
+ -(void)initializeController;
49
+ -(void)initializeView;
50
+ -(void)initializeModel;
51
+
52
+ @end
@@ -0,0 +1,304 @@
1
+ //
2
+ // Facade.m
3
+ // PureMVC_ObjectiveC
4
+ //
5
+ // PureMVC Port to ObjectiveC by Brian Knorr <brian.knorr@puremvc.org>
6
+ // PureMVC - Copyright(c) 2006-2008 Futurescale, Inc., Some rights reserved.
7
+ //
8
+
9
+ #import "Facade.h"
10
+ #import "Model.h"
11
+ #import "View.h"
12
+ #import "Controller.h"
13
+ #import "Notification.h"
14
+
15
+ static id<IFacade> instance;
16
+
17
+ @implementation Facade
18
+
19
+ @synthesize model, controller, view;
20
+
21
+ /**
22
+ * Constructor.
23
+ *
24
+ * <P>
25
+ * This <code>IFacade</code> implementation is a Singleton,
26
+ * so you should not call the constructor
27
+ * directly, but instead call the static Singleton
28
+ * Factory method <code>[Facade getInstance]</code>
29
+ *
30
+ * @throws NSException if Singleton instance has already been constructed
31
+ *
32
+ */
33
+ -(id)init {
34
+ if (instance != nil) {
35
+ [NSException raise:@"Facade Singleton already constructed! Use getInstance instead." format:@""];
36
+ } else if (self = [super init]) {
37
+ [self initializeFacade];
38
+ }
39
+ return self;
40
+ }
41
+
42
+ /**
43
+ * Initialize the Singleton <code>Facade</code> instance.
44
+ *
45
+ * <P>
46
+ * Called automatically by the constructor. Override in your
47
+ * subclass to do any subclass specific initializations. Be
48
+ * sure to call <code>[super initializeFacade]</code>, though.</P>
49
+ */
50
+ -(void)initializeFacade {
51
+ [self initializeModel];
52
+ [self initializeController];
53
+ [self initializeView];
54
+ }
55
+
56
+ /**
57
+ * Facade Singleton Factory method
58
+ *
59
+ * @return the Singleton instance of the Facade
60
+ */
61
+ +(id<IFacade>)getInstance {
62
+ if (instance == nil) {
63
+ instance = [[self alloc] init];
64
+ }
65
+ return instance;
66
+ }
67
+
68
+ /**
69
+ * Initialize the <code>Model</code>.
70
+ *
71
+ * <P>
72
+ * Called by the <code>initializeFacade</code> method.
73
+ * Override this method in your subclass of <code>Facade</code>
74
+ * if one or both of the following are true:
75
+ * <UL>
76
+ * <LI> You wish to initialize a different <code>IModel</code>.</LI>
77
+ * <LI> You have <code>Proxy</code>s to register with the Model that do not
78
+ * retrieve a reference to the Facade at construction time.</code></LI>
79
+ * </UL>
80
+ * If you don't want to initialize a different <code>IModel</code>,
81
+ * call <code>[super initializeModel]</code> at the beginning of your
82
+ * method, then register <code>Proxy</code>s.
83
+ * <P>
84
+ * Note: This method is <i>rarely</i> overridden; in practice you are more
85
+ * likely to use a <code>Command</code> to create and register <code>Proxy</code>s
86
+ * with the <code>Model</code>, since <code>Proxy</code>s with mutable data will likely
87
+ * need to send <code>INotification</code>s and thus will likely want to fetch a reference to
88
+ * the <code>Facade</code> during their construction.
89
+ * </P>
90
+ */
91
+ -(void)initializeModel {
92
+ if (model != nil) return;
93
+ self.model = [Model getInstance];
94
+ }
95
+
96
+ /**
97
+ * Initialize the <code>Controller</code>.
98
+ *
99
+ * <P>
100
+ * Called by the <code>initializeFacade</code> method.
101
+ * Override this method in your subclass of <code>Facade</code>
102
+ * if one or both of the following are true:
103
+ * <UL>
104
+ * <LI> You wish to initialize a different <code>IController</code>.</LI>
105
+ * <LI> You have <code>Commands</code> to register with the <code>Controller</code> at startup.</code>. </LI>
106
+ * </UL>
107
+ * If you don't want to initialize a different <code>IController</code>,
108
+ * call <code>[super initializeController]</code> at the beginning of your
109
+ * method, then register <code>Command</code>s.
110
+ * </P>
111
+ */
112
+ -(void)initializeController {
113
+ if (controller != nil) return;
114
+ self.controller = [Controller getInstance];
115
+ }
116
+
117
+ /**
118
+ * Initialize the <code>View</code>.
119
+ *
120
+ * <P>
121
+ * Called by the <code>initializeFacade</code> method.
122
+ * Override this method in your subclass of <code>Facade</code>
123
+ * if one or both of the following are true:
124
+ * <UL>
125
+ * <LI> You wish to initialize a different <code>IView</code>.</LI>
126
+ * <LI> You have <code>Observers</code> to register with the <code>View</code></LI>
127
+ * </UL>
128
+ * If you don't want to initialize a different <code>IView</code>,
129
+ * call <code>[super initializeView]</code> at the beginning of your
130
+ * method, then register <code>IMediator</code> instances.
131
+ * <P>
132
+ * Note: This method is <i>rarely</i> overridden; in practice you are more
133
+ * likely to use a <code>Command</code> to create and register <code>Mediator</code>s
134
+ * with the <code>View</code>, since <code>IMediator</code> instances will need to send
135
+ * <code>INotification</code>s and thus will likely want to fetch a reference
136
+ * to the <code>Facade</code> during their construction.
137
+ * </P>
138
+ */
139
+ -(void)initializeView {
140
+ if (view != nil) return;
141
+ self.view = [View getInstance];
142
+ }
143
+
144
+
145
+ /**
146
+ * Create and send an <code>INotification</code>.
147
+ *
148
+ * <P>
149
+ * Keeps us from having to construct new notification
150
+ * instances in our implementation code.
151
+ * @param notificationName the name of the notiification to send
152
+ * @param body the body of the notification
153
+ * @param type the type of the notification
154
+ */
155
+ -(void)sendNotification:(NSString *)notificationName body:(id)body type:(NSString *)type {
156
+ [self notifyObservers:[Notification withName:notificationName body:body type:type]];
157
+ }
158
+
159
+ -(void)sendNotification:(NSString *)notificationName {
160
+ [self sendNotification:notificationName body:nil type:nil];
161
+ }
162
+
163
+ -(void)sendNotification:(NSString *)notificationName body:(id)body {
164
+ [self sendNotification:notificationName body:body type:nil];
165
+ }
166
+
167
+ -(void)sendNotification:(NSString *)notificationName type:(NSString *)type {
168
+ [self sendNotification:notificationName body:nil type:type];
169
+ }
170
+
171
+ /**
172
+ * Check if a Command is registered for a given Notification
173
+ *
174
+ * @param notificationName
175
+ * @return whether a Command is currently registered for the given <code>notificationName</code>.
176
+ */
177
+ -(BOOL)hasCommand:(NSString *)notificationName {
178
+ return [controller hasCommand:notificationName];
179
+ }
180
+
181
+ /**
182
+ * Check if a Mediator is registered or not
183
+ *
184
+ * @param mediatorName
185
+ * @return whether a Mediator is registered with the given <code>mediatorName</code>.
186
+ */
187
+ -(BOOL)hasMediator:(NSString *)mediatorName {
188
+ return [view hasMediator:mediatorName];
189
+ }
190
+
191
+ /**
192
+ * Check if a Proxy is registered
193
+ *
194
+ * @param proxyName
195
+ * @return whether a Proxy is currently registered with the given <code>proxyName</code>.
196
+ */
197
+ -(BOOL)hasProxy:(NSString *)proxyName {
198
+ return [model hasProxy:proxyName];
199
+ }
200
+
201
+ /**
202
+ * Notify <code>Observer</code>s.
203
+ * <P>
204
+ * This method is left public mostly for backward
205
+ * compatibility, and to allow you to send custom
206
+ * notification classes using the facade.</P>
207
+ *<P>
208
+ * Usually you should just call sendNotification
209
+ * and pass the parameters, never having to
210
+ * construct the notification yourself.</P>
211
+ *
212
+ * @param notification the <code>INotification</code> to have the <code>View</code> notify <code>Observers</code> of.
213
+ */
214
+ -(void)notifyObservers:(id<INotification>)notification {
215
+ [view notifyObservers:notification];
216
+ }
217
+
218
+ /**
219
+ * Register an <code>ICommand</code> with the <code>Controller</code> by Notification name.
220
+ *
221
+ * @param notificationName the name of the <code>INotification</code> to associate the <code>ICommand</code> with
222
+ * @param commandClassRef a reference to the Class of the <code>ICommand</code>
223
+ */
224
+ -(void)registerCommand:(NSString *)notificationName commandClassRef:(Class)commandClassRef {
225
+ [controller registerCommand:notificationName commandClassRef:commandClassRef];
226
+ }
227
+
228
+ /**
229
+ * Register a <code>IMediator</code> with the <code>View</code>.
230
+ *
231
+ * @param mediator a reference to the <code>IMediator</code>
232
+ */
233
+ -(void)registerMediator:(id<IMediator>)mediator {
234
+ [view registerMediator:mediator];
235
+ }
236
+
237
+ /**
238
+ * Register an <code>IProxy</code> with the <code>Model</code> by name.
239
+ *
240
+ * @param proxy the <code>IProxy</code> instance to be registered with the <code>Model</code>.
241
+ */
242
+ -(void)registerProxy:(id<IProxy>)proxy {
243
+ [model registerProxy:proxy];
244
+ }
245
+
246
+ /**
247
+ * Remove a previously registered <code>ICommand</code> to <code>INotification</code> mapping from the Controller.
248
+ *
249
+ * @param notificationName the name of the <code>INotification</code> to remove the <code>ICommand</code> mapping for
250
+ */
251
+ -(void)removeCommand:(NSString *)notificationName {
252
+ [controller removeCommand:notificationName];
253
+ }
254
+
255
+ /**
256
+ * Remove an <code>IMediator</code> from the <code>View</code>.
257
+ *
258
+ * @param mediatorName name of the <code>IMediator</code> to be removed.
259
+ * @return the <code>IMediator</code> that was removed from the <code>View</code>
260
+ */
261
+ -(id<IMediator>)removeMediator:(NSString *)mediatorName {
262
+ return [view removeMediator:mediatorName];
263
+ }
264
+
265
+ /**
266
+ * Remove an <code>IProxy</code> from the <code>Model</code> by name.
267
+ *
268
+ * @param proxyName the <code>IProxy</code> to remove from the <code>Model</code>.
269
+ * @return the <code>IProxy</code> that was removed from the <code>Model</code>
270
+ */
271
+ -(id<IProxy>)removeProxy:(NSString *)proxyName {
272
+ return [model removeProxy:proxyName];
273
+ }
274
+
275
+ /**
276
+ * Retrieve an <code>IMediator</code> from the <code>View</code>.
277
+ *
278
+ * @param mediatorName
279
+ * @return the <code>IMediator</code> previously registered with the given <code>mediatorName</code>.
280
+ */
281
+ -(id<IMediator>)retrieveMediator:(NSString *)mediatorName {
282
+ return [view retrieveMediator:mediatorName];
283
+ }
284
+
285
+ /**
286
+ * Retrieve an <code>IProxy</code> from the <code>Model</code> by name.
287
+ *
288
+ * @param proxyName the name of the proxy to be retrieved.
289
+ * @return the <code>IProxy</code> instance previously registered with the given <code>proxyName</code>.
290
+ */
291
+ -(id<IProxy>)retrieveProxy:(NSString *)proxyName {
292
+ return [model retrieveProxy:proxyName];
293
+ }
294
+
295
+ -(void)dealloc {
296
+ self.model = nil;
297
+ self.controller = nil;
298
+ self.view = nil;
299
+ [(id)instance release];
300
+ instance = nil;
301
+ [super dealloc];
302
+ }
303
+
304
+ @end