5 // Created by Claudio Bisegni on
10/05/07.
6 // Copyright
(c
) 2007 INFN
- National Institute of Nuclear Physics.
All rights reserved.
9 #import "AFSCommanderPref.h"
10 #import "IpConfiguratorCommander.h"
11 #import "TokenCredentialController.h"
12 #import "InfoController.h"
14 #import "PListManager.h"
15 #import "DialogUtility.h"
16 #import "NSString
+search.h"
17 #include
<sys
/param.h
>
20 #include
<sys
/types.h
>
21 #include
<sys
/fcntl.h
>
22 #include
<sys
/errno.h
>
26 #import
<CoreServices
/CoreServices.h
>
29 #define ADD_CELL_CONTROL_TAG
1
30 #define REMOVE_CELL_CONTROL_TAG
2
32 #define TABLE_TOKENS_LIST
1
33 #define TABLE_CELL_LIST
2
34 #define TABLE_LINK_LIST
3
37 #define TAB_CELL_SERV_DB
2
42 #define CELLSRVDB_TABLE_USR_DFLT_CHECK_COLUMN
0
43 #define CELLSRVDB_TABLE_DFLT_CHECK_COLUMN
1
44 #define CELLSRVDB_TABLE_NAME_COLUMN
2
45 #define CELLSRVDB_TABLE_DESCRIPTION_COLUMN
3
48 #define TABLE_COLUMN_LINK_NAME
0
49 #define TABLE_COLUMN_LINK_PATH
1
52 @implementation AFSCommanderPref
54 // -------------------------------------------------------------------------------
56 // -------------------------------------------------------------------------------
57 - (id
)initWithBundle
:(NSBundle
*)bundle
59 if ( ( self
= [super initWithBundle
:bundle
] ) != nil
) {
60 //appID
= kAfsCommanderID
;
66 // -------------------------------------------------------------------------------
68 // -------------------------------------------------------------------------------
69 - (NSView
*) mainView
{
70 if (prefStartUp
== 1){
73 if (Gestalt
(gestaltSystemVersionMajor
, &osxMJVers
) == noErr
&& Gestalt
(gestaltSystemVersionMinor
, &osxMnVers
) == noErr
) {
74 if (osxMJVers
== 10 && osxMnVers
>= 5) {
75 [afsCommanderView setFrameSize
:NSMakeSize
(668, [afsCommanderView frame
].
size.height
)];
81 return afsCommanderView
;
84 // -------------------------------------------------------------------------------
86 // -------------------------------------------------------------------------------
87 - (void
) mainViewDidLoad
90 [cellList setDelegate
:self
];
91 [cellList setTarget
:self
];
92 [cellList setDoubleAction
:@selector
(tableDoubleAction
:)];
95 AuthorizationItem items
= {kAuthorizationRightExecute
, 0, NULL, 0};
96 AuthorizationRights rights
= {1, &items
};
97 [authView setAuthorizationRights
:&rights
];
98 authView.delegate
= self
;
99 [authView updateStatus
:nil
];
102 // -------------------------------------------------------------------------------
104 // -------------------------------------------------------------------------------
107 //try to install the launchd file
for backgrounder
108 //Remove launchd ctrl file
110 [PListManager installBackgrounderLaunchdFile
:YES
111 resourcePath
:[[self bundle
] resourcePath
]];
113 @
catch (NSException
* e
) {
114 NSDictionary
*excecptDic
= [e userInfo
];
115 NSNumber
*keyNum
= [excecptDic objectForKey
:@"agent_folder_error"
];
116 if(keyNum
&& [keyNum boolValue
]) {
117 // the
dir HOME_LAUNCHD_AGENT_FOLDER
(PListManager.h
) must be created
118 NSBeginAlertSheet
([[NSString stringWithString
:kDoYouWantCreateTheDirectory
] stringByAppendingString
:HOME_LAUNCHD_AGENT_FOLDER
],
119 @"Create"
, @"Cancel"
, nil
,
120 [[self mainView
] window
], self
, @selector
(credentialAtLoginTimeEventCreationLaunchAgentDir
:returnCode
:contextInfo
:), NULL,
129 // Set Developer
info
130 [textFieldDevInfoLabel setStringValue
:kDevelopInfo
];
132 tokensLock
= [[NSLock alloc
] init
];
134 //Initialization cellservdb and token list
135 filteredCellDB
= nil
;
138 [self readPreferenceFile
];
140 // alloc the afs property mananger
141 afsProperty
= [[AFSPropertyManager alloc
] init
];
143 // register preference pane to detect menuextra killed by user
144 [[NSDistributedNotificationCenter defaultCenter
] addObserver
:self
145 selector
:@selector
(refreshTokensNotify
:)
147 object
:kMExtraTokenOperation
];
149 [[NSDistributedNotificationCenter defaultCenter
] addObserver
:self
150 selector
:@selector
(refreshGui
:)
152 object
:kMenuExtraEventOccured
];
154 //Register
for mount
/unmount afs volume
155 [[[NSWorkspace sharedWorkspace
] notificationCenter
] addObserver
:self
156 selector
:@selector
(afsVolumeMountChange
:)
157 name
:NSWorkspaceDidMountNotification object
:nil
];
159 [[[NSWorkspace sharedWorkspace
] notificationCenter
] addObserver
:self
160 selector
:@selector
(afsVolumeMountChange
:)
161 name
:NSWorkspaceDidUnmountNotification object
:nil
];
163 // set self as table data source
164 [cellList setDataSource
:self
];
165 [tokensTable setDataSource
:self
];
166 //[tableViewLink setDataSource
:self
];
167 //check the afs state
170 // let show the configuration after prefpane is open
171 [self refreshConfiguration
:nil
];
173 // refresh the token list
174 //[self refreshTokens
:nil
];
176 //refresh table to reflect the NSSearchField contained
text
177 [self searchCellTextEvent
:nil
];
180 // -------------------------------------------------------------------------------
181 // credentialAtLoginTimeEventCreationLaunchAgentDir
:
182 // -------------------------------------------------------------------------------
183 - (void
) credentialAtLoginTimeEventCreationLaunchAgentDir
:(NSWindow
*)alert returnCode
:(int
)returnCode contextInfo
:(void
*)contextInfo
{
185 switch (returnCode
) {
187 if([[NSFileManager defaultManager
] createDirectoryAtPath
:[HOME_LAUNCHD_AGENT_FOLDER stringByExpandingTildeInPath
]
188 withIntermediateDirectories
:NO
193 [PListManager installBackgrounderLaunchdFile
:YES
194 resourcePath
:[[self bundle
] resourcePath
]];
195 [self showMessage
:kDirectoryCreated
];
197 [self showMessage
:kErrorCreatingDirectory
];
206 // -------------------------------------------------------------------------------
208 // -------------------------------------------------------------------------------
211 // remove self as datasource
212 [cellList setDataSource
:nil
];
213 [tokensTable setDataSource
:nil
];
215 //release the afs property manager
216 if(afsProperty
) [afsProperty release
];
217 //release tokens list
218 if(tokenList
) [tokenList release
];
219 //Remove the
cell temp array
220 if(filteredCellDB
) [filteredCellDB release
];
222 [self writePreferenceFile
];
224 // unregister preference pane to detect menuextra killed by user
225 [[NSDistributedNotificationCenter defaultCenter
] removeObserver
:self
227 object
:kMExtraClosedNotification
];
228 [[NSDistributedNotificationCenter defaultCenter
] removeObserver
:self
230 object
:kMExtraTokenOperation
];
231 [[NSDistributedNotificationCenter defaultCenter
] removeObserver
:self
233 object
:kMenuExtraEventOccured
];
234 [[[NSWorkspace sharedWorkspace
] notificationCenter
] removeObserver
:self
235 name
:NSWorkspaceDidMountNotification object
:nil
];
236 [[[NSWorkspace sharedWorkspace
] notificationCenter
] removeObserver
:self
237 name
:NSWorkspaceDidUnmountNotification object
:nil
];
240 [tokensLock release
];
244 // -------------------------------------------------------------------------------
246 // -------------------------------------------------------------------------------
248 //start the time
for check tokens validity
249 if(timerForCheckTokensList
) return;
250 timerForCheckTokensList
= [NSTimer scheduledTimerWithTimeInterval
:TOKENS_REFRESH_TIME_IN_SEC
252 selector
:@selector
(refreshTokens
:)
255 [timerForCheckTokensList fire
];
258 // -------------------------------------------------------------------------------
260 // -------------------------------------------------------------------------------
262 if(!timerForCheckTokensList
) return;
263 [timerForCheckTokensList invalidate
];
264 timerForCheckTokensList
= nil
;
268 // -------------------------------------------------------------------------------
269 // readPreferenceFile
:
270 // -------------------------------------------------------------------------------
271 - (void
) readPreferenceFile
273 // read the preference
for aklog use
274 NSNumber
*useAklogPrefValue
= (NSNumber
*)CFPreferencesCopyValue
((CFStringRef
)PREFERENCE_USE_AKLOG
, (CFStringRef
)kAfsCommanderID
,
275 kCFPreferencesCurrentUser
, kCFPreferencesAnyHost
);
276 NSNumber
*aklogTokenAtLogin
= (NSNumber
*)CFPreferencesCopyValue
((CFStringRef
)PREFERENCE_AKLOG_TOKEN_AT_LOGIN
, (CFStringRef
)kAfsCommanderID
,
277 kCFPreferencesCurrentUser
, kCFPreferencesAnyHost
);
278 [useAklogCheck setState
:[useAklogPrefValue intValue
]];
279 [aklogCredentialAtLoginTime setEnabled
:useAklogPrefValue
&& [useAklogPrefValue boolValue
]];
280 [aklogCredentialAtLoginTime setState
:aklogTokenAtLogin
&& [aklogTokenAtLogin boolValue
]];
282 //check krb5 at login time
283 [installKRB5AuthAtLoginButton setState
:[PListManager checkKrb5AtLoginTimeLaunchdEnable
]];
285 //check
for AFS enable at startup
286 NSNumber
*afsEnableStartupTime
= (NSNumber
*)CFPreferencesCopyValue
((CFStringRef
)PREFERENCE_START_AFS_AT_STARTUP
,
287 (CFStringRef
)kAfsCommanderID
, kCFPreferencesAnyUser
, kCFPreferencesAnyHost
);
288 if(afsEnableStartupTime
)
289 startAFSAtLogin
= [afsEnableStartupTime boolValue
];
291 startAFSAtLogin
= false
;
292 //set the check button state
293 [checkButtonAfsAtBootTime setState
:startAFSAtLogin
];
295 NSNumber
*showStatusMenu
= (NSNumber
*)CFPreferencesCopyValue
((CFStringRef
)PREFERENCE_SHOW_STATUS_MENU
, (CFStringRef
)kAfsCommanderID
, kCFPreferencesCurrentUser
, kCFPreferencesAnyHost
);
296 [(NSButton
*)afsMenucheckBox setState
: [showStatusMenu boolValue
]];
299 [backgrounderActivationCheck setState
:[PListManager launchdJobState
:BACKGROUNDER_P_FILE
]];
301 //link enabled status
302 NSNumber
*linkEnabledStatus
= (NSNumber
*)CFPreferencesCopyValue
((CFStringRef
)PREFERENCE_USE_LINK
, (CFStringRef
)kAfsCommanderID
, kCFPreferencesCurrentUser
, kCFPreferencesAnyHost
);
303 [checkEnableLink setState
:[linkEnabledStatus boolValue
]];
305 //check the user preference
for manage the renew
306 NSNumber
*checkRenew
= (NSNumber
*)CFPreferencesCopyValue
((CFStringRef
)PREFERENCE_KRB5_CHECK_ENABLE
, (CFStringRef
)kAfsCommanderID
, kCFPreferencesCurrentUser
, kCFPreferencesAnyHost
);
307 if(checkRenew
)[nsButtonEnableDisableKrb5RenewCheck setState
:[checkRenew intValue
]];
309 NSNumber
*renewTime
= (NSNumber
*)CFPreferencesCopyValue
((CFStringRef
)PREFERENCE_KRB5_RENEW_TIME
, (CFStringRef
)kAfsCommanderID
, kCFPreferencesCurrentUser
, kCFPreferencesAnyHost
);
310 if(!renewTime
) renewTime
= [NSNumber numberWithInt
:PREFERENCE_KRB5_RENEW_TIME_DEFAULT_VALUE
];
313 NSCalendar
*gregorian
= [[NSCalendar alloc
] initWithCalendarIdentifier
:NSGregorianCalendar
];
314 NSDateComponents
*weekdayComponents
= [gregorian components
:(NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit
)
315 fromDate
:[NSDate dateWithTimeIntervalSince1970
:[renewTime intValue
]]];
316 [nsTextFieldKrb5RenewTimeD setIntValue
:[weekdayComponents day
]-1];
317 [nsTextFieldKrb5RenewTimeH setIntValue
:[weekdayComponents hour
]-1];
318 [nsTextFieldKrb5RenewTimeM setIntValue
:[weekdayComponents minute
]];
319 [nsTextFieldKrb5RenewTimeS setIntValue
:[weekdayComponents second
]];
320 [nsStepperKrb5RenewTimeD setIntValue
:[weekdayComponents day
]-1];
321 [nsStepperKrb5RenewTimeH setIntValue
:[weekdayComponents hour
]-1];
322 [nsStepperKrb5RenewTimeM setIntValue
:[weekdayComponents minute
]];
323 [nsStepperKrb5RenewTimeS setIntValue
:[weekdayComponents second
]];
325 NSNumber
*renewCheckTimeInterval
= (NSNumber
*)CFPreferencesCopyValue
((CFStringRef
)PREFERENCE_KRB5_RENEW_CHECK_TIME_INTERVALL
, (CFStringRef
)kAfsCommanderID
, kCFPreferencesCurrentUser
, kCFPreferencesAnyHost
);
326 if(renewCheckTimeInterval
&& [renewCheckTimeInterval intValue
])[nsTextFieldKrb5RenewCheckIntervall setIntValue
:[renewCheckTimeInterval intValue
]];
327 else [nsTextFieldKrb5RenewCheckIntervall setIntValue
:PREFERENCE_KRB5_RENEW_CHECK_TIME_INTERVALL_DEFAULT_VALUE
];
329 NSNumber
*expireTimeForRenew
= (NSNumber
*)CFPreferencesCopyValue
((CFStringRef
)PREFERENCE_KRB5_SEC_TO_EXPIRE_TIME_FOR_RENEW
, (CFStringRef
)kAfsCommanderID
, kCFPreferencesCurrentUser
, kCFPreferencesAnyHost
);
330 if(expireTimeForRenew
&& [expireTimeForRenew intValue
])[nsTextFieldKrb5SecToExpireDateForRenew setIntValue
:[expireTimeForRenew intValue
]];
331 else [nsTextFieldKrb5SecToExpireDateForRenew setIntValue
:PREFERENCE_KRB5_SEC_TO_EXPIRE_TIME_FOR_RENEW_DEFAULT_VALUE
];
334 NSData
*prefData
= (NSData
*)CFPreferencesCopyValue
((CFStringRef
)PREFERENCE_LINK_CONFIGURATION
, (CFStringRef
)kAfsCommanderID
, kCFPreferencesCurrentUser
, kCFPreferencesAnyHost
);
335 NSDictionary
*linkDict
= (NSMutableDictionary
*)[NSPropertyListSerialization propertyListFromData
:prefData
336 mutabilityOption
:NSPropertyListMutableContainers
338 errorDescription
:nil
];
339 linkConfiguration
= [linkDict mutableCopy
];
342 // -------------------------------------------------------------------------------
344 // -------------------------------------------------------------------------------
345 - (void
) writePreferenceFile
347 //Set the preference
for afs
path
348 //Set the preference
for aklog use
349 CFPreferencesSetValue
((CFStringRef
)PREFERENCE_USE_AKLOG
,
350 (CFNumberRef
)[NSNumber numberWithInt
:[useAklogCheck state
]],
351 (CFStringRef
)kAfsCommanderID
, kCFPreferencesCurrentUser
, kCFPreferencesAnyHost
);
353 //set AFS enable state at startup
354 CFPreferencesSetValue
((CFStringRef
)PREFERENCE_START_AFS_AT_STARTUP
,
355 (CFNumberRef
)[NSNumber numberWithBool
:startAFSAtLogin
],
356 (CFStringRef
)kAfsCommanderID
, kCFPreferencesAnyUser
, kCFPreferencesAnyHost
);
359 CFPreferencesSetValue
((CFStringRef
)PREFERENCE_AKLOG_TOKEN_AT_LOGIN
,
360 (CFNumberRef
)[NSNumber numberWithBool
:[aklogCredentialAtLoginTime state
]],
361 (CFStringRef
)kAfsCommanderID
, kCFPreferencesCurrentUser
, kCFPreferencesAnyHost
);
364 CFPreferencesSetValue
((CFStringRef
)PREFERENCE_SHOW_STATUS_MENU
,
365 (CFNumberRef
)[NSNumber numberWithBool
:[(NSButton
*)afsMenucheckBox state
]],
366 (CFStringRef
)kAfsCommanderID
, kCFPreferencesCurrentUser
, kCFPreferencesAnyHost
);
368 //preference
for link
369 CFPreferencesSetValue
((CFStringRef
)PREFERENCE_USE_LINK
,
370 (CFNumberRef
)[NSNumber numberWithBool
:[checkEnableLink state
]],
371 (CFStringRef
)kAfsCommanderID
, kCFPreferencesCurrentUser
, kCFPreferencesAnyHost
);
373 //preference
for renew time
374 //NSLog
(@"
%d %d %d %d", [nsTextFieldKrb5RenewTimeD intValue],[nsTextFieldKrb5RenewTimeH intValue],[nsTextFieldKrb5RenewTimeM intValue],[nsTextFieldKrb5RenewTimeS intValue]);
375 NSInteger totalSeconds
= ([nsTextFieldKrb5RenewTimeD intValue
]*24*60*60)+
376 ([nsTextFieldKrb5RenewTimeH intValue
]*60*60)+
377 ([nsTextFieldKrb5RenewTimeM intValue
]*60)+
378 [nsTextFieldKrb5RenewTimeS intValue
];
380 CFPreferencesSetValue
((CFStringRef
)PREFERENCE_KRB5_RENEW_TIME
,
381 (CFNumberRef
)[NSNumber numberWithInt
:totalSeconds
],
382 (CFStringRef
)kAfsCommanderID
, kCFPreferencesCurrentUser
, kCFPreferencesAnyHost
);
384 //expire time
for renew
385 CFPreferencesSetValue
((CFStringRef
)PREFERENCE_KRB5_SEC_TO_EXPIRE_TIME_FOR_RENEW
,
386 (CFNumberRef
)[NSNumber numberWithInt
:[nsTextFieldKrb5SecToExpireDateForRenew intValue
]],
387 (CFStringRef
)kAfsCommanderID
, kCFPreferencesCurrentUser
, kCFPreferencesAnyHost
);
389 //sec to expiretime
for renew job
390 CFPreferencesSetValue
((CFStringRef
)PREFERENCE_KRB5_RENEW_CHECK_TIME_INTERVALL
,
391 (CFNumberRef
)[NSNumber numberWithInt
:[nsTextFieldKrb5RenewCheckIntervall intValue
]],
392 (CFStringRef
)kAfsCommanderID
, kCFPreferencesCurrentUser
, kCFPreferencesAnyHost
);
394 CFPreferencesSynchronize
((CFStringRef
)kAfsCommanderID
, kCFPreferencesAnyUser
, kCFPreferencesAnyHost
);
395 CFPreferencesSynchronize
((CFStringRef
)kAfsCommanderID
, kCFPreferencesCurrentUser
, kCFPreferencesAnyHost
);
396 [[NSDistributedNotificationCenter defaultCenter
] postNotificationName
:kAFSMenuExtraID object
:kPrefChangeNotification
];
399 // -------------------------------------------------------------------------------
400 // saveConfiguration
:
401 // -------------------------------------------------------------------------------
402 - (IBAction
) saveConfiguration
:(id
) sender
405 [afsProperty setCellName
:[afsProperty getDefaultCellName
]];
407 //save configurations
408 [afsProperty saveConfigurationFiles
:YES
];
410 //Reload
all configuration
411 [self refreshConfiguration
:nil
];
413 //refresh table to reflect the NSSearchField contained
text
414 [self searchCellTextEvent
:nil
];
416 //Show
dialog for notifity al saving process ar gone ell
417 [self showMessage
:kConfigurationSaved
];
418 }@
catch(NSException
*e
){
419 [self showMessage
:[e reason
]];
421 [cellList reloadData
];
425 // -------------------------------------------------------------------------------
426 // saveCacheManagerParam
:
427 // -------------------------------------------------------------------------------
428 - (IBAction
) saveCacheManagerParam
:(id
) sender
431 //Update the value form
view to afs property manager
class
432 [self updateCacheParamFromView
];
433 [afsProperty saveCacheConfigurationFiles
:YES
];
434 [self showMessage
:kSavedCacheConfiguration
];
435 }@
catch(NSException
*e
){
436 [self showMessage
:[e reason
]];
438 [cellList reloadData
];
442 // -------------------------------------------------------------------------------
443 // refreshConfiguration
:
444 // -------------------------------------------------------------------------------
445 - (IBAction
) refreshConfiguration
:(id
) sender
447 NSString
*afsBasePath
= PREFERENCE_AFS_SYS_PAT_STATIC
;
450 [afsProperty setPath
:afsBasePath
];
452 // load configuration
453 [afsProperty loadConfiguration
];
455 //set the afs
version label
456 [afsVersionLabel setStringValue
:[afsProperty getAfsVersion
]];
458 //set the current default
cell
459 [afsDefaultCellLabel setStringValue
:[afsProperty getDefaultCellName
]];
462 [self fillCacheParamView
];
464 //Filter the cellServDb and allocate filtered array
465 [self filterCellServDB
:nil
];
467 }@
catch(NSException
*e
){
468 [self showMessage
:[e reason
]];
470 [cellList reloadData
];
474 // -------------------------------------------------------------------------------
475 // fillCacheParamView
:
476 // -------------------------------------------------------------------------------
477 -(void
) fillCacheParamView
479 [dynRoot setState
:[afsProperty dynRoot
]?NSOnState
:NSOffState
];
480 [afsDB setState
:[afsProperty afsDB
]?NSOnState
:NSOffState
];
481 [statCacheEntry setIntValue
:[afsProperty statCacheEntry
]];
482 [dCacheDim setIntValue
:[afsProperty dCacheDim
]];
483 [cacheDimension setIntValue
:[afsProperty cacheDimension
]];
484 [daemonNumber setIntValue
:[afsProperty daemonNumber
]];
485 [afsRootMountPoint setStringValue
:[afsProperty afsRootMountPoint
]];
486 [nVolEntry setIntValue
:[afsProperty nVolEntry
]];
488 //new
version property
489 //[verbose setEnabled
:[afsProperty useAfsdConfConfigFile
]];
490 [verbose setState
:[afsProperty verbose
]?NSOnState
:NSOffState
];
494 // -------------------------------------------------------------------------------
495 // updateCacheParamFromView
:
496 // -------------------------------------------------------------------------------
497 -(void
) updateCacheParamFromView
499 NSString
*tmpAfsPath
= [afsRootMountPoint stringValue
];
500 if(!tmpAfsPath ||
([tmpAfsPath
length] == 0) ||
([tmpAfsPath characterAtIndex
:0] != '/'))
501 @throw
[NSException exceptionWithName
:@"updateCacheParamFromView"
502 reason
:kBadAfsRootMountPoint
505 [afsProperty setDynRoot
:[dynRoot state
]==NSOnState
];
506 [afsProperty setAfsDB
:[afsDB state
]==NSOnState
];
507 [afsProperty setStatCacheEntry
:[statCacheEntry intValue
]];
508 [afsProperty setDCacheDim
:[dCacheDim intValue
]];
509 [afsProperty setCacheDimension
:[cacheDimension intValue
]];
510 [afsProperty setDaemonNumber
:[daemonNumber intValue
]];
511 [afsProperty setAfsRootMountPoint
:tmpAfsPath
];
512 [afsProperty setNVolEntry
:[nVolEntry intValue
]];
513 [afsProperty setVerbose
:[verbose state
]==NSOnState
];
517 // -------------------------------------------------------------------------------
519 // -------------------------------------------------------------------------------
520 - (IBAction
) showCellIP
:(id
) sender
522 int rowSelected
= [((NSTableView
*) cellList
) selectedRow
];
523 [self modifyCellByIDX
:rowSelected
];
526 // -------------------------------------------------------------------------------
528 // -------------------------------------------------------------------------------
529 -(void
) modifyCellByIDX
:(int
) idx
531 [self modifyCell
:[self getCellByIDX
:idx
]];
534 // -------------------------------------------------------------------------------
536 // -------------------------------------------------------------------------------
537 -(void
) modifyCell
:(DBCellElement
*) cellElement
539 [NSBundle loadNibNamed
:@"IpPanel" owner
:self
];
540 [((IpConfiguratorCommander
*) ipConfControllerCommander
) setWorkCell
:cellElement
];
541 [NSApp beginSheet
: ipConfigurationSheet
542 modalForWindow
: [[self mainView
] window
]
544 didEndSelector
: @selector
(didEndSheet
:returnCode
:contextInfo
:)
548 // -------------------------------------------------------------------------------
550 // -------------------------------------------------------------------------------
551 - (IBAction
) addRemoveCell
:(id
) sender
553 switch([((NSControl
*) sender
) tag
]){
554 case ADD_CELL_CONTROL_TAG
:
556 DBCellElement
*newCell
= [[DBCellElement alloc
] init
];
559 [newCell setCellName
:kNewCellName
];
560 [newCell setCellComment
:kNewCellComment
];
562 [[afsProperty getCellList
] addObject
:newCell
];
566 [self modifyCell
:newCell
];
570 case REMOVE_CELL_CONTROL_TAG
:
573 NSIndexSet
*selectedIndex
= [(NSTableView
*)cellList selectedRowIndexes
];
574 if( [selectedIndex count
] > 0) {
575 index
= [selectedIndex firstIndex
];
577 DBCellElement
*cellElement
= (DBCellElement
*)[filteredCellDB objectAtIndex
:index
];
578 [[afsProperty getCellList
] removeObject
:cellElement
];
579 } while ((index
= [selectedIndex indexGreaterThanIndex
:index
]) != NSNotFound
);
584 //Filter the cellServDb and allocate filtered array
585 [self searchCellTextEvent
:nil
];
586 [cellList deselectAll
:nil
];
587 [cellList reloadData
];
590 // -------------------------------------------------------------------------------
592 // -------------------------------------------------------------------------------
593 - (IBAction
) startStopAfs
:(id
) sender
595 BOOL currentAfsState
= NO
;
597 currentAfsState
= [afsProperty checkAfsStatus
];
598 // make the parameter to call the root helper app
601 NSLog
(@"Shutting down afs"
);
602 [afsProperty shutdown
];
605 NSLog
(@"Starting up afs"
);
606 [afsProperty startup
];
608 [self refreshGui
:nil
];
610 @
catch (NSException
* e
) {
611 [self showMessage
:[e reason
]];
617 // -------------------------------------------------------------------------------
619 // -------------------------------------------------------------------------------
620 - (void
) refreshGui
:(NSNotification
*)notification
{
621 BOOL afsIsUp
= [afsProperty checkAfsStatus
];
623 [tokensButton setEnabled
:afsIsUp
];
624 [unlogButton setEnabled
:afsIsUp
];
628 // -------------------------------------------------------------------------------
629 // -(void
) refreshTokensNotify
:(NSNotification
*)notification
630 // -------------------------------------------------------------------------------
631 -(void
) refreshTokensNotify
:(NSNotification
*)notification
{
632 [self refreshTokens
:nil
];
635 // -------------------------------------------------------------------------------
636 // afsVolumeMountChange
: Track the afs volume state change
637 // -------------------------------------------------------------------------------
638 // XXX should use mountdir not
/afs
639 - (void
) afsVolumeMountChange
:(NSNotification
*)notification
{
640 // Check
if is mounted or unmounted afs
641 if([[[notification userInfo
] objectForKey
:@"NSDevicePath"
] isEqualToString
:@"
/afs"
]){
643 [self refreshTokens
:nil
];
647 // -------------------------------------------------------------------------------
649 // -------------------------------------------------------------------------------
650 - (IBAction
) info:(id
) sender
652 [infoController showHtmlResource
:[[self bundle
] pathForResource
:@"license" ofType
:@"rtf"
]];
654 [NSApp beginSheet
: infoSheet
655 modalForWindow
: [[self mainView
] window
]
657 didEndSelector
: @selector
(didEndInfoSheet
:returnCode
:contextInfo
:)
661 // -------------------------------------------------------------------------------
662 // tableDoubleAction
:
663 // -------------------------------------------------------------------------------
664 - (IBAction
) tableDoubleAction
:(id
) sender
666 [self showCellIP
:nil
];
669 // -------------------------------------------------------------------------------
671 // -------------------------------------------------------------------------------
672 - (IBAction
) getNewToken
:(id
) sender
674 BOOL useAklog
= [useAklogCheck state
] == NSOnState
;
676 //[AFSPropertyManager aklog
];
677 [afsProperty getTokens
:false
680 [self refreshTokens
:nil
];
681 //Inform afs menuextra to updata afs status
682 [[NSDistributedNotificationCenter defaultCenter
] postNotificationName
:kAFSMenuExtraID object
:kMExtraAFSStateChange
];
685 [NSBundle loadNibNamed
:@"CredentialPanel" owner
:self
];
686 [NSApp beginSheet
: credentialSheet
687 modalForWindow
: [[self mainView
] window
]
689 didEndSelector
: @selector
(didEndCredentialSheet
:returnCode
:contextInfo
:)
695 // -------------------------------------------------------------------------------
696 // getCurrentCellInDB
:
697 // -------------------------------------------------------------------------------
698 - (IBAction
) unlog
:(id
) sender
701 NSIndexSet
*selectedIndex
= [tokensTable selectedRowIndexes
];
702 if( [selectedIndex count
] > 0) {
703 index
= [selectedIndex firstIndex
];
705 NSString
*tokenDesc
= [tokenList objectAtIndex
:index
];
706 NSString
*cellToUnlog
= [tokenDesc estractTokenByDelimiter
:@"afs@"
708 [afsProperty unlog
:cellToUnlog
];
709 } while ((index
= [selectedIndex indexGreaterThanIndex
: index
]) != NSNotFound
);
711 [afsProperty unlog
:nil
];
713 [self refreshTokens
:nil
];
714 //Inform afs menuextra to updata afs status
715 [[NSDistributedNotificationCenter defaultCenter
] postNotificationName
:kAFSMenuExtraID object
:kMExtraAFSStateChange
];
719 // -------------------------------------------------------------------------------
721 // -------------------------------------------------------------------------------
722 - (IBAction
) aklogSwitchEvent
:(id
) sender
724 //afs
menu extra is loaded inform it to read preference
726 if(![useAklogCheck state
]) {
727 //deselect the checkbox
728 [aklogCredentialAtLoginTime setState
:NO
];
731 [self writePreferenceFile
];
733 //Enable disable aklog at login time checkbox according the useAklog checkbox
734 [aklogCredentialAtLoginTime setEnabled
:[useAklogCheck state
]];
737 @
catch (NSException
* e
) {
738 [self showMessage
:[e reason
]];
742 // -------------------------------------------------------------------------------
743 // credentialAtLoginTimeEvent
:
744 // -------------------------------------------------------------------------------
745 - (IBAction
) credentialAtLoginTimeEvent
:(id
) sender
{
746 [self writePreferenceFile
];
749 // -------------------------------------------------------------------------------
750 // afsStartupSwitchEvent
:
751 // -------------------------------------------------------------------------------
752 - (IBAction
) afsStartupSwitchEvent
:(id
) sender
{
753 NSString
*rootHelperApp
= [[self bundle
] pathForResource
:@"afshlp" ofType
:@""
];
755 startAFSAtLogin
= [checkButtonAfsAtBootTime state
];
756 [PListManager launchctlStringCommandAuth
:startAFSAtLogin?@"
load"
:@"unload"
757 option
:[NSArray arrayWithObjects
:@"
-w"
, nil
]
758 plistName
:@AFS_DAEMON_PATH
760 withAuthRef
:[[authView authorization
] authorizationRef
]];
764 // -------------------------------------------------------------------------------
765 // afsMenuActivationEvent
:
766 // -------------------------------------------------------------------------------
767 - (IBAction
) krb5KredentialAtLoginTimeEvent
:(id
) sender
{
768 NSString
*rootHelperApp
= [[self bundle
] pathForResource
:@"afshlp" ofType
:@""
];
769 [PListManager krb5TiketAtLoginTime
:[installKRB5AuthAtLoginButton state
] helper
:rootHelperApp
];
771 //check
if all is gone well
772 [installKRB5AuthAtLoginButton setState
:[PListManager checkKrb5AtLoginTimeLaunchdEnable
]];
775 // -------------------------------------------------------------------------------
776 // afsMenuActivationEvent
:
777 // -------------------------------------------------------------------------------
778 -(IBAction
) afsMenuActivationEvent
:(id
) sender
780 CFPreferencesSetValue
((CFStringRef
)PREFERENCE_SHOW_STATUS_MENU
,
781 (CFNumberRef
)[NSNumber numberWithBool
:[(NSButton
*)afsMenucheckBox state
]],
782 (CFStringRef
)kAfsCommanderID
, kCFPreferencesCurrentUser
, kCFPreferencesAnyHost
);
784 CFPreferencesSynchronize
((CFStringRef
)kAfsCommanderID
, kCFPreferencesAnyUser
, kCFPreferencesAnyHost
);
785 CFPreferencesSynchronize
((CFStringRef
)kAfsCommanderID
, kCFPreferencesCurrentUser
, kCFPreferencesAnyHost
);
787 //notify the backgrounder
788 [[NSDistributedNotificationCenter defaultCenter
] postNotificationName
:kAFSMenuExtraID object
:kMExtraAFSMenuChangeState
];
791 // -------------------------------------------------------------------------------
792 // searchCellTextEvent
:
793 // Fileter the CellServDB list according to NSSearch content
794 // -------------------------------------------------------------------------------
795 - (IBAction
) searchCellTextEvent
:(id
) sender
797 NSString
*searchText
= [[textSearchField stringValue
] lowercaseString
]; //filter string
798 [self filterCellServDB
:searchText
];
799 [((NSTableView
*)cellList
) reloadData
];
802 // -------------------------------------------------------------------------------
803 // clearCellServDBFiltering
:
804 // clear the NSSearchField and showw
all CellServDB table
805 // -------------------------------------------------------------------------------
806 - (void
) clearCellServDBFiltering
{
807 //Clear the
text search
808 [textSearchField setStringValue
:@""
];
809 //load the temp array with
all cell servdb
810 [self searchCellTextEvent
:nil
];
812 // --------------------------------------o
-----------------------------------------
814 // make the NSMutableArray with
all cellservdb or filtered element
815 // -------------------------------------------------------------------------------
816 - (void
) filterCellServDB
:(NSString
*)textToFilter
{
817 DBCellElement
*cellElement
; //Filtered element
818 BOOL doFilter
= !(textToFilter
== nil ||
([textToFilter
length] == 0));
820 // We can do filtering and make the temp array
822 [filteredCellDB release
];
824 filteredCellDB
= [[NSMutableArray alloc
] init
];
825 NSEnumerator
*e
= [[afsProperty getCellList
] objectEnumerator
];
826 while(cellElement
= (DBCellElement
*)[e nextObject
]) {
827 // check
if the element can be
get
829 //Get the CellServDB array enumerator
830 NSRange rsltRng
= [[[cellElement getCellName
] lowercaseString
] rangeOfString
:textToFilter
];
831 if(rsltRng.location
!= NSNotFound
) {
832 //we can add this
cell to filtered
833 [filteredCellDB addObject
:[cellElement retain
]];
836 [filteredCellDB addObject
:[cellElement retain
]];
842 // -------------------------------------------------------------------------------
843 // getCurrentCellInDB
:
844 // -------------------------------------------------------------------------------
845 - (DBCellElement
*) getCurrentCellInDB
847 int rowSelected
= [cellList selectedRow
];
848 return [self getCellByIDX
:rowSelected
];
851 // -------------------------------------------------------------------------------
852 // getCurrentCellInDB
:
853 // -------------------------------------------------------------------------------
854 - (DBCellElement
*) getCellByIDX
:(int
) idx
856 DBCellElement
*cellElement
= (DBCellElement
*)[filteredCellDB objectAtIndex
:idx
];
860 // -------------------------------------------------------------------------------
862 // -------------------------------------------------------------------------------
863 -(void
) showMessage
:(NSString
*) message
{
864 NSAlert
*alert
= [[NSAlert alloc
] init
];
866 [alert setMessageText
:message
];
867 [alert beginSheetModalForWindow
:[[self mainView
] window
]
874 // -------------------------------------------------------------------------------
876 // -------------------------------------------------------------------------------
879 BOOL afsIsUp
= [afsProperty checkAfsStatus
];
880 BOOL afsEnabledAtStartup
= NO
;
881 NSString
*rootHelperApp
= [[self bundle
] pathForResource
:@"afshlp" ofType
:@""
];
883 if ([self isUnlocked
]) {
884 afsEnabledAtStartup
= (
885 [TaskUtil executeTaskWithAuth
:@"
/bin
/launchctl"
886 arguments
:[NSArray arrayWithObjects
:@"list"
,
887 @"org.openafs.filesystems.afs"
, nil
]
889 withAuthRef
:[[authView authorization
] authorizationRef
]
891 [checkButtonAfsAtBootTime setState
:afsEnabledAtStartup
];
894 [startStopButton setTitle
: (afsIsUp?kAfsButtonShutdown
:kAfsButtonStartup
)];
896 NSMutableAttributedString
*colorTitle
=[[NSMutableAttributedString alloc
] initWithAttributedString
:[startStopButton attributedTitle
]];
897 NSRange titleRange
= NSMakeRange
(0, [colorTitle
length]);
899 [colorTitle addAttribute
:NSForegroundColorAttributeName
900 value
:(afsIsUp?
[NSColor redColor
]:[NSColor blackColor
])
903 [startStopButton setAttributedTitle
:colorTitle
];
911 // -------------------------------------------------------------------------------
913 // -------------------------------------------------------------------------------
914 - (void
) refreshTokens
:(NSTimer
*)theTimer
;
916 if(![tokensLock tryLock
]) return;
921 tokenList
= [afsProperty getTokenList
];
922 [tokensTable reloadData
];
926 // -------------------------------------------------------------------------------
928 // -------------------------------------------------------------------------------
929 - (IBAction
) addLink
:(id
) sender
{
930 [NSBundle loadNibNamed
:@"SymLinkEdit" owner
:self
];
932 [NSApp beginSheet
: lyncCreationSheet
933 modalForWindow
: [[self mainView
] window
]
935 didEndSelector
: @selector
(didEndSymlinkSheet
:returnCode
:contextInfo
:)
939 // -------------------------------------------------------------------------------
941 // -------------------------------------------------------------------------------
942 - (IBAction
) removeLink
:(id
) sender
{
943 if(!linkConfiguration
) return;
945 NSArray
*keys
= [linkConfiguration allKeys
];
946 NSIndexSet
*linkToRemove
= [tableViewLink selectedRowIndexes
];
947 if( [linkToRemove count
] > 0) {
948 index
= [linkToRemove firstIndex
];
950 [linkConfiguration removeObjectForKey
:[keys objectAtIndex
:index
]];
951 } while ((index
= [linkToRemove indexGreaterThanIndex
:index
]) != -1);
954 //write the new configuration
955 NSData
*prefData
= nil
;
956 if([linkConfiguration count
] > 0) {
957 prefData
= [NSPropertyListSerialization dataWithPropertyList
:linkConfiguration
958 format:NSPropertyListXMLFormat_v1_0
962 CFPreferencesSetValue
((CFStringRef
)PREFERENCE_LINK_CONFIGURATION
,
964 (CFStringRef
)kAfsCommanderID
, kCFPreferencesCurrentUser
, kCFPreferencesAnyHost
);
966 CFPreferencesSynchronize
((CFStringRef
)kAfsCommanderID
, kCFPreferencesCurrentUser
, kCFPreferencesAnyHost
);
968 //reload the new data
969 [tableViewLink reloadData
];
972 // -------------------------------------------------------------------------------
974 // -------------------------------------------------------------------------------
975 - (IBAction
) enableLink
:(id
) sender
{
976 [self writePreferenceFile
];
979 // -------------------------------------------------------------------------------
981 // -------------------------------------------------------------------------------
982 - (IBAction
) manageBackgrounderActivation
:(id
)sender
{
983 [PListManager launchctlCommand
:[(NSButton
*)sender state
]
985 option
:[NSArray arrayWithObjects
:@"
-S"
, @"Aqua"
, nil
]
986 plistName
:[NSString stringWithFormat
:@"
%@.plist", BACKGROUNDER_P_FILE]];
987 //read the status to check that
all is gone well
988 [backgrounderActivationCheck setState
:[PListManager launchdJobState
:BACKGROUNDER_P_FILE
]];
991 // -------------------------------------------------------------------------------
992 // tableViewLinkPerformClick
:
993 // -------------------------------------------------------------------------------
994 - (IBAction
) tableViewLinkPerformClick
:(id
) sender
{
995 NSLog
(@"tableViewLinkPerformClick"
);
998 // -------------------------------------------------------------------------------
999 // - (void
)tabView
:(NSTabView
*)tabView willSelectTabViewItem
: (NSTabViewItem
*)tabViewItem
1000 // -------------------------------------------------------------------------------
1001 - (void
)tabView
:(NSTabView
*)tabView willSelectTabViewItem
: (NSTabViewItem
*)tabViewItem
1003 //check to see
if the cache param tab is the tab that will be selected
1004 if([((NSString
*)[tabViewItem identifier
]) intValue
] == TAB_LINK
)
1006 [tableViewLink reloadData
];
1009 // -------------------------------------------------------------------------------
1010 // tableViewLinkPerformClick
:
1011 // -------------------------------------------------------------------------------
1012 - (IBAction
) enableDisableKrb5RenewCheck
:(id
) sender
{
1013 //NSLog
(@"enableDisableKrb5RenewCheck"
);
1014 CFPreferencesSetValue
((CFStringRef
)PREFERENCE_KRB5_CHECK_ENABLE
,
1015 (CFNumberRef
) [NSNumber numberWithInt
:[(NSButton
*)sender intValue
]],
1016 (CFStringRef
)kAfsCommanderID
, kCFPreferencesCurrentUser
, kCFPreferencesAnyHost
);
1017 CFPreferencesSynchronize
((CFStringRef
)kAfsCommanderID
, kCFPreferencesCurrentUser
, kCFPreferencesAnyHost
);
1018 //notify the backgrounder
1019 [[NSDistributedNotificationCenter defaultCenter
] postNotificationName
:kAFSMenuExtraID object
:kPrefChangeNotification
];
1021 // -------------------------------------------------------------------------------
1022 // tableViewLinkPerformClick
:
1023 // -------------------------------------------------------------------------------
1024 - (IBAction
) krb5RenewParamChange
:(id
) sender
{
1028 - (BOOL
)isUnlocked
{
1029 return [authView authorizationState
] == SFAuthorizationViewUnlockedState
;
1032 - (void
)authorizationViewDidAuthorize
:(SFAuthorizationView
*)view {
1034 [startStopButton setEnabled
:[self isUnlocked
]];
1035 [checkButtonAfsAtBootTime setEnabled
:[self isUnlocked
]];
1036 [self setAfsStatus
];
1037 [installKRB5AuthAtLoginButton setEnabled
:[self isUnlocked
]];
1040 - (void
)authorizationViewDidDeauthorize
:(SFAuthorizationView
*)view {
1042 [startStopButton setEnabled
:[self isUnlocked
]];
1043 [checkButtonAfsAtBootTime setEnabled
:[self isUnlocked
]];
1044 [installKRB5AuthAtLoginButton setEnabled
:[self isUnlocked
]];
1048 @implementation AFSCommanderPref
(NSTableDataSource
)
1051 // -------------------------------------------------------------------------------
1053 // Manage the checkbox of CellServDB Table
1055 // -------------------------------------------------------------------------------
1056 - (void
)tableView
:(NSTableView
*)table
1057 setObjectValue
:(id
)data
1058 forTableColumn
:(NSTableColumn
*)col
1061 NSString
*identifier
= (NSString
*)[col identifier
];
1062 switch([table tag
]){
1063 case TABLE_TOKENS_LIST
:
1066 case TABLE_CELL_LIST
:
1067 // we are editing checkbox
for cellservdb table
1068 if([identifier intValue
] == CELLSRVDB_TABLE_USR_DFLT_CHECK_COLUMN
) {
1069 // set the user default
cell
1070 DBCellElement
*cellElement
= (DBCellElement
*)[filteredCellDB objectAtIndex
:row
];
1071 [afsProperty setDefaultCellByName
:[cellElement getCellName
]];
1072 //[afsDefaultCellLabel setStringValue
:[afsProperty getDefaultCellName
]];
1073 [((NSTableView
*)cellList
) reloadData
];
1074 } else if([identifier intValue
] == CELLSRVDB_TABLE_DFLT_CHECK_COLUMN
) {
1075 // set the
cell for wich the user want to
get token
1076 DBCellElement
*cellElement
= (DBCellElement
*)[filteredCellDB objectAtIndex
:row
];
1077 [cellElement setUserDefaultForToken
:![cellElement userDefaultForToken
]];
1084 // -------------------------------------------------------------------------------
1086 // refresh delegate method
for two AFSCommander table
1087 // -------------------------------------------------------------------------------
1088 - (id
) tableView
:(NSTableView
*) aTableView
1089 objectValueForTableColumn
:(NSTableColumn
*) aTableColumn
1093 NSString
*identifier
= (NSString
*)[aTableColumn identifier
];
1094 switch([aTableView tag
]){
1095 case TABLE_TOKENS_LIST
:
1096 //We are refreshing tokens table
1097 result
= [self getTableTokensListValue
:[identifier intValue
] row
:rowIndex
];
1100 case TABLE_CELL_LIST
:
1101 //We are refreshing
cell db table
1102 result
= [self getTableCelListValue
:[identifier intValue
] row
:rowIndex
];
1105 case TABLE_LINK_LIST
:
1106 result
= [self getTableLinkValue
:[identifier intValue
] row
:rowIndex
];
1113 // -------------------------------------------------------------------------------
1114 // getTableCelListValue
:
1115 // -------------------------------------------------------------------------------
1116 - (id
)getTableTokensListValue
:(int
) colId row
:(int
)row
1119 if(!tokenList
) return nil
;
1122 result
= (NSString
*)[tokenList objectAtIndex
:row
];
1129 // -------------------------------------------------------------------------------
1130 // getTableCelListValue
:
1131 // -------------------------------------------------------------------------------
1132 - (id
)getTableCelListValue
:(int
) colId row
:(int
)row
1135 //NSMutableArray
*cellArray
= [afsProperty getCellList
];
1136 DBCellElement
*cellElement
= (DBCellElement
*)[filteredCellDB objectAtIndex
:row
];
1138 case CELLSRVDB_TABLE_USR_DFLT_CHECK_COLUMN
:
1139 result
= [NSNumber numberWithInt
:[cellElement userDefaultForCell
]];
1142 case CELLSRVDB_TABLE_DFLT_CHECK_COLUMN
:
1143 result
= [NSNumber numberWithInt
:[cellElement userDefaultForToken
]];
1145 case CELLSRVDB_TABLE_NAME_COLUMN
:
1146 result
= [cellElement getCellName
];
1149 case CELLSRVDB_TABLE_DESCRIPTION_COLUMN
:
1150 result
= [cellElement getCellComment
];
1156 // -------------------------------------------------------------------------------
1157 // getTableCelListValue
:
1158 // -------------------------------------------------------------------------------
1159 - (id
)getTableLinkValue
:(int
) colId row
:(int
)row
1162 NSArray
*allKey
= [linkConfiguration allKeys
];
1164 case TABLE_COLUMN_LINK_NAME
:
1165 result
= [allKey objectAtIndex
:row
];
1168 case TABLE_COLUMN_LINK_PATH
:
1169 result
= [linkConfiguration objectForKey
:[allKey objectAtIndex
:row
]];
1176 // -------------------------------------------------------------------------------
1177 // numberOfRowsInTableView
:
1178 // -------------------------------------------------------------------------------
1179 - (int
)numberOfRowsInTableView
:(NSTableView
*)aTableView
1182 switch([aTableView tag
]){
1183 case TABLE_TOKENS_LIST
:
1184 if(tokenList
) rowCount
= [tokenList count
];
1187 case TABLE_CELL_LIST
:
1188 if(filteredCellDB
) rowCount
= [filteredCellDB count
];
1191 case TABLE_LINK_LIST
:
1192 if(linkConfiguration
) rowCount
= [linkConfiguration count
];
1200 @implementation AFSCommanderPref
(TableDelegate
)
1201 // -------------------------------------------------------------------------------
1202 // selectionShouldChangeInTableView
:
1203 // -------------------------------------------------------------------------------
1204 - (BOOL
)selectionShouldChangeInTableView
:(NSTableView
*)aTable
1206 switch([aTable tag
]){
1207 case TABLE_TOKENS_LIST
:
1210 case TABLE_CELL_LIST
:
1211 [self tableViewCellmanageButtonState
:[aTable selectedRow
]];
1214 case TABLE_LINK_LIST
:
1223 // -------------------------------------------------------------------------------
1225 // -------------------------------------------------------------------------------
1226 - (BOOL
)tableView
:(NSTableView
*)aTable shouldSelectRow
:(int
)aRow
1228 switch([aTable tag
]){
1229 case TABLE_TOKENS_LIST
:
1232 case TABLE_CELL_LIST
:
1233 [self tableViewCellmanageButtonState
:aRow
];
1236 case TABLE_LINK_LIST
:
1242 // -------------------------------------------------------------------------------
1244 // -------------------------------------------------------------------------------
1245 - (void
)tableViewSelectionDidChange
:(NSNotification
*)aNotification
{
1246 NSTableView
*aTable
= [aNotification object
];
1247 switch([aTable tag
]){
1248 case TABLE_TOKENS_LIST
:
1251 case TABLE_CELL_LIST
:
1254 case TABLE_LINK_LIST
:
1255 [self tableViewLinkmanageButtonState
:[aTable selectedRowIndexes
]];
1259 // -------------------------------------------------------------------------------
1260 // manageButtonState
:
1261 // -------------------------------------------------------------------------------
1262 -(void
) tableViewCellmanageButtonState
:(int
) rowSelected
{
1263 [cellIpButton setEnabled
:rowSelected
>= 0];
1264 [removeCellButton setEnabled
:rowSelected
>= 0];
1267 // -------------------------------------------------------------------------------
1268 // manageButtonState
:
1269 // -------------------------------------------------------------------------------
1270 -(void
) tableViewLinkmanageButtonState
:(NSIndexSet
*) rowsSelectedIndex
{
1271 [buttonRemoveLink setEnabled
:[rowsSelectedIndex count
]>0];
1276 @implementation AFSCommanderPref
(ModalDelegate
)
1277 // -------------------------------------------------------------------------------
1279 // -------------------------------------------------------------------------------
1280 - (void
)didEndSheet
:(NSWindow
*)sheet returnCode
:(int
)returnCode contextInfo
:(void
*)contextInfo
1282 [sheet orderOut
:self
];
1283 //Filter the cellServDb and allocate filtered array
1284 [self searchCellTextEvent
:nil
];
1285 [cellList reloadData
];
1288 // -------------------------------------------------------------------------------
1289 // Klog credential request
1290 // -------------------------------------------------------------------------------
1291 - (void
)didEndCredentialSheet
:(NSWindow
*)sheet returnCode
:(int
)returnCode contextInfo
:(void
*)contextInfo
1293 if([((TokenCredentialController
*)credentialCommander
) takenToken
] == YES
){
1294 /*[AFSPropertyManager klog:[((TokenCredentialController*)credentialCommander) uName]
1295 uPwd:[((TokenCredentialController*)credentialCommander) uPwd] ];*/
1296 [afsProperty getTokens
:true
1297 usr
:[((TokenCredentialController
*)credentialCommander
) uName
]
1298 pwd:[((TokenCredentialController
*)credentialCommander
) uPwd
]];
1300 [sheet orderOut
:self
];
1301 [self refreshTokens
:nil
];
1302 //Inform afs menuextra to updata afs status
1303 [[NSDistributedNotificationCenter defaultCenter
] postNotificationName
:kAFSMenuExtraID object
:kMExtraAFSStateChange
];
1306 // -------------------------------------------------------------------------------
1307 // Klog credential request
1308 // -------------------------------------------------------------------------------
1309 - (void
)didEndInfoSheet
:(NSWindow
*)sheet returnCode
:(int
)returnCode contextInfo
:(void
*)contextInfo
1311 [sheet orderOut
:self
];
1314 // -------------------------------------------------------------------------------
1316 // -------------------------------------------------------------------------------
1317 - (void
)didEndSymlinkSheet
:(NSWindow
*)sheet returnCode
:(int
)returnCode contextInfo
:(void
*)contextInfo
1319 [lyncCreationSheet orderOut
:self
];
1320 [self readPreferenceFile
];
1321 [tableViewLink reloadData
];