File: ULViewControllerSimulationCommands.m

package info (click to toggle)
adun.app 0.81-13
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 16,600 kB
  • sloc: objc: 70,912; ansic: 6,662; yacc: 394; python: 75; cpp: 36; makefile: 33; xml: 15; awk: 3
file content (143 lines) | stat: -rw-r--r-- 3,235 bytes parent folder | download | duplicates (2)
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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#include "ULViewControllerSimulationCommands.h"

@implementation ViewController (SimulationCommands)

- (void) halt: (id) sender
{
	id process;


	NS_DURING
	{
		process = [[activeDelegate objectsForType: @"ULProcess"]
				objectAtIndex: 0];
		[processManager haltProcess: process];
	}
	NS_HANDLER
	{
		NSRunAlertPanel(@"Alert", [localException reason], @"Dismiss", nil, nil);
}
	NS_ENDHANDLER
}

- (void) restart: (id) sender
{
	id process;

	NS_DURING
	{
		process = [[activeDelegate objectsForType: @"ULProcess"]
				objectAtIndex: 0];
		[processManager restartProcess: process];
	}
	NS_HANDLER
	{
		NSRunAlertPanel(@"Alert", [localException reason], @"Dismiss", nil, nil);
	}
	NS_ENDHANDLER
}

- (void) terminateProcess: (id) sender
{
	id process;

	NS_DURING
	{
		process = [[activeDelegate objectsForType: @"ULProcess"]
				objectAtIndex: 0];
		[processManager terminateProcess: process];
	}
	NS_HANDLER
	{
		NSRunAlertPanel(@"Alert", [localException reason], @"Dismiss", nil, nil);
	}
	NS_ENDHANDLER
}

- (void) start: (id) sender
{
	id process;
	NSString* simulationHost;

	NS_DURING
	{
		process = [[activeDelegate objectsForType: @"ULProcess"]
				objectAtIndex: 0];
		[processManager startProcess: process];
	}
	NS_HANDLER
	{
		if([[localException name] isEqual: @"ULCouldNotConnectToServerException"])
		{
			simulationHost = [[localException userInfo] objectForKey: @"host"];

			if([simulationHost isEqual: [[NSHost currentHost] name]])
				[self startAdunServer];
			else
				NSRunAlertPanel(@"Alert", [localException reason], @"Dismiss", nil, nil);
		}	
	
		NSWarnLog(@"%@ %@", [localException reason], [localException userInfo]);
	}
	NS_ENDHANDLER
}

- (void) execute: (id) sender
{
	NSString *alertTitle, *name;
	NSMutableArray* strings;
	NSError* error;
	NSMutableDictionary* commandDict = [NSMutableDictionary dictionaryWithCapacity: 1];
	id result, process;

	error = nil;
	result = nil;
	NS_DURING
	{
		//We change the buttons title into camelCase to 
		//create command name
		strings = [[[sender title] componentsSeparatedByString: @" "] 
				mutableCopy];
		name = [[strings objectAtIndex: 0] lowercaseString];
		[strings removeObjectAtIndex: 0];
		[strings insertObject: name atIndex: 0];
		name = [strings componentsJoinedByString: @""];
		
		[commandDict setObject: name
			forKey: @"command"];
		process = [[activeDelegate objectsForType: @"ULProcess"]
				objectAtIndex: 0];
		result = [processManager execute: commandDict 
		 		error: &error 
				process: process];
	}
	NS_HANDLER
	{
		NSRunAlertPanel(@"Alert", [localException reason], @"Dismiss", nil, nil);
		NSWarnLog(@"Local exception user info %@. Reason %@", [localException userInfo],
				[localException reason]);
	}	
	NS_ENDHANDLER

	//display the error if there is one
	//\todo expand the options available here
		
	if(error != nil)
	{
		alertTitle = [NSString stringWithFormat: @"Alert: %@", [error domain]];
		NSRunAlertPanel(alertTitle,
			 [[error userInfo] objectForKey: NSLocalizedDescriptionKey], 
			@"Dismiss", 
			nil, 
			nil);
	}

	if(result != nil)
		[self logString: [NSString stringWithFormat: @"%@:\n%@\n",
					[sender title], 
					[result valueForKey:@"stringDescription"]] 
			newline: YES
			forProcess: process];
}

@end