AbstractSettingsApplication.st
changeset 6444 2fea2d87fcff
parent 6431 6631f1406289
child 6473 d6f4af4e7277
--- a/AbstractSettingsApplication.st	Wed Dec 21 14:01:46 2005 +0100
+++ b/AbstractSettingsApplication.st	Wed Dec 21 16:34:57 2005 +0100
@@ -3241,7 +3241,7 @@
                               )
                              (InputFieldSpec
                                 name: 'EntryField1'
-                                layout: (LayoutFrame 40 0 20 0 100 0 42 0)
+                                layout: (LayoutFrame 40 0 20 0 111 0 42 0)
                                 model: portNumberChannel
                                 type: number
                                 immediateAccept: true
@@ -3250,39 +3250,53 @@
                                 acceptOnLostFocus: true
                                 acceptOnPointerLeave: false
                               )
-                             (ActionButtonSpec
-                                label: 'Create new HTTP Server'
-                                name: 'Button4'
-                                layout: (LayoutFrame 125 0 20 0 -5 1 42 0)
-                                translateLabel: true
-                                model: createServer
-                              )
-                             (ActionButtonSpec
-                                label: 'Create Server from Settingsfile...'
-                                name: 'Button6'
-                                layout: (LayoutFrame 125 0 51 0 -5 1 73 0)
-                                translateLabel: true
-                                model: createServerFromFile
-                              )
-                             (ActionButtonSpec
-                                label: 'Remove all HTTP Servers'
-                                name: 'Button5'
-                                layout: (LayoutFrame 125 0 82 0 -5 1 104 0)
-                                translateLabel: true
-                                model: removeAllServers
-                                enableChannel: hasCreatedServerChannel
-                              )
-                             (CheckBoxSpec
-                                label: 'FastCGI'
-                                name: 'CheckBox1'
-                                layout: (LayoutFrame 19 0 57 0 116 0 79 0)
-                                model: useFcgiHolder
-                                translateLabel: true
+                             (VerticalPanelViewSpec
+                                name: 'VerticalPanel5'
+                                layout: (LayoutFrame 136 0 14 0 -12 1 132 0)
+                                horizontalLayout: fit
+                                verticalLayout: spreadSpace
+                                horizontalSpace: 3
+                                verticalSpace: 3
+                                component: 
+                               (SpecCollection
+                                  collection: (
+                                   (ActionButtonSpec
+                                      label: 'Create new HTTP Server'
+                                      name: 'Button4'
+                                      translateLabel: true
+                                      model: createServer
+                                      useDefaultExtent: true
+                                    )
+                                   (ActionButtonSpec
+                                      label: 'Create new FastCGI Server'
+                                      name: 'Button7'
+                                      translateLabel: true
+                                      model: createFcgiServer
+                                      useDefaultExtent: true
+                                    )
+                                   (ActionButtonSpec
+                                      label: 'Create Server from Settings File...'
+                                      name: 'Button6'
+                                      translateLabel: true
+                                      model: createServerFromFile
+                                      useDefaultExtent: true
+                                    )
+                                   (ActionButtonSpec
+                                      label: 'Remove all Servers'
+                                      name: 'Button5'
+                                      translateLabel: true
+                                      model: removeAllServers
+                                      enableChannel: hasCreatedServerChannel
+                                      useDefaultExtent: true
+                                    )
+                                   )
+                                 
+                                )
                               )
                              )
                            
                           )
-                          extent: (Point 539 120)
+                          extent: (Point 539 142)
                         )
                        )
                      
@@ -3327,36 +3341,16 @@
     ^ self
 !
 
+createFcgiServer
+    "create a FastCGI server"
+
+    ^ self createServerForClass:FCGIServer.
+!
+
 createServer
-
-    | newServer port runningServers|
-
-    self withWaitCursorDo:[
-        self serverClass isNil ifTrue:[
-            self warn:'The "HTTPServer" class is missing - cannot create server.'.
-            ^ self.
-        ].
-
-        port := self portNumberChannel value.
-        runningServers := self serverClass runningServers.
-        runningServers notEmpty ifTrue:[
-            runningServers do:[:aServer |
-                aServer port = port asInteger ifTrue:[
-                    Dialog warn:'There is already a Server for port ', port asString.
-                    ^ self
-                ]
-            ]
-        ].
-        runningServers addDependent:self.
-
-        (port = self serverClass defaultPort) ifTrue:[
-            newServer := self serverClass newServerWithDefaultServiceListOn:port.
-        ] ifFalse:[
-            newServer := self serverClass newServerOnPort:port.
-        ].
-        self class addCreatedServer:newServer.
-        self createServerApplicationFor:newServer.
-    ]
+    "create a default server - i.e. a HTTP server"
+
+    ^ self createServerForClass:self serverClass.
 !
 
 createServerApplicationFor:aServerInstance
@@ -3382,26 +3376,58 @@
     settingsApp initialize.
 !
 
+createServerForClass:serverClass
+
+    |newServer port runningServers|
+
+    serverClass isNil ifTrue:[
+        self warn:'The server class is missing - cannot create server.'.
+        ^ self.
+    ].
+
+    self withWaitCursorDo:[
+        port := self portNumberChannel value.
+        runningServers := serverClass runningServers.
+        runningServers notEmpty ifTrue:[
+            runningServers do:[:aServer |
+                aServer port = port asInteger ifTrue:[
+                    Dialog warn:'There is already a server for port ', port asString.
+                    ^ self
+                ]
+            ]
+        ].
+        runningServers addDependent:self.
+
+        (port = serverClass defaultPort) ifTrue:[
+            newServer := serverClass newServerWithDefaultServiceListOn:port.
+        ] ifFalse:[
+            newServer := serverClass newServerOnPort:port.
+        ].
+        self class addCreatedServer:newServer.
+        self createServerApplicationFor:newServer.
+    ]
+!
+
 createServerFromFile
 
     | newServer fileName runningServers newServerPort answer|
 
-    runningServers := self serverClass runningServers.
-    fileName := Dialog requestFileName:'Select a HTTPServer Settings File'
+    fileName := Dialog requestFileName:'Select a Server Settings File'
             default:(self serverClass settingsFilename)
-            pattern:'*xml'
-            fromDirectory:(Filename currentDirectory).
+            pattern:'*.xml'.
+
     fileName isEmptyOrNil ifTrue:[ ^ self].
     self withWaitCursorDo:[
         newServer := self serverClass serverFromSettingsFile:(fileName asFilename).
         newServer notNil ifTrue:[
             newServerPort := newServer port.
+            runningServers := self serverClass runningServers.
             runningServers notEmpty ifTrue:[
                 [self hasServerForPort:newServerPort] whileTrue:[
                     answer := Dialog 
-                        request:('There is already a Server for port ', newServerPort asString, ' Please select another one') 
-                        initialAnswer:self portNumberChannel value asString.  
-                    answer isEmpty ifTrue:[
+                        request:('There is already a server for port <1p>. Please select another one' expandMacrosWith:newServerPort) 
+                        initialAnswer:self portNumberChannel value printString.  
+                    answer isEmptyOrNil ifTrue:[
                         ^ self
                     ].
                     newServerPort := answer asNumber.
@@ -3417,29 +3443,25 @@
 
 createServerSubApplicationsForRunningServers
 
-    |runningServers serverToStart|
-
-    (self serverClass notNil and:[self serverClass isLoaded]) ifFalse:[ ^ self].
-
-    runningServers := self serverClass runningServers.
-    serverToStart := runningServers asSet.
+    |serverToStart|
+
+    (self serverClass isNil or:[self serverClass isLoaded not]) ifTrue:[
+        ^ self 
+    ].
+
+    serverToStart := self serverClass runningServers asSet.
     serverToStart addAll:self class createdServers.
-    serverToStart isEmpty ifTrue:[ ^ self].
-    serverToStart := serverToStart asOrderedCollection.
-    serverToStart sort:[:a :b | a port < b port].
-    serverToStart do:[:aHttpServerInstance |
-        self createServerApplicationFor:aHttpServerInstance.
+    serverToStart isEmpty ifTrue:[ 
+        ^ self
+    ].
+    serverToStart := serverToStart asSortedCollection:[:a :b | a port < b port].
+    serverToStart do:[:eachServerInstance |
+        self createServerApplicationFor:eachServerInstance.
     ]
 !
 
 hasServerForPort:newServerPort
-
-    self serverClass runningServers do:[:aServer |
-        aServer port = newServerPort ifTrue:[
-            ^ true
-        ]
-    ].
-    ^ false
+    ^ self serverClass runningServers contains:[:eachServer| eachServer port = newServerPort].
 !
 
 helpFilename
@@ -3448,8 +3470,9 @@
 
 readSettings
     (self serverClass notNil and:[HTTPServer isLoaded]) ifTrue:[
-        self serverClass runningServers removeDependent:self.
-        self serverClass runningServers addDependent:self.
+        self serverClass runningServers 
+            removeDependent:self;
+            addDependent:self.
     ].
     self createServerSubApplicationsForRunningServers.
     self createdServerChanged.
@@ -3472,16 +3495,17 @@
 setPortOnFreePort
     |highestUsedPortNr portToUse instances|
 
-    (self serverClass notNil and:[self serverClass isLoaded]) ifFalse:[
-        portToUse := 8080
-    ] ifTrue:[
+    (self serverClass notNil and:[self serverClass isLoaded]) ifTrue:[
         instances := self serverClass runningServers asSet.
-        instances addAll:((settingsDialog getAllChildrenAppsForApplication:self) collect:[:aApp| aApp httpServerInstance]).
+        instances addAll:((settingsDialog getAllChildrenAppsForApplication:self) 
+                          collect:[:aApp| aApp httpServerInstance]).
         highestUsedPortNr := instances 
                                 inject:(self serverClass defaultPort - 1) 
                                 into:[:maxSoFar :thisServer | thisServer port max:maxSoFar].
 
         portToUse := highestUsedPortNr + 1
+    ] ifFalse:[
+        portToUse := 8080
     ].
     self portNumberChannel value:portToUse.
 ! !
@@ -3522,13 +3546,6 @@
         portNumberChannel := ValueHolder new.
     ].
     ^ portNumberChannel.
-!
-
-useFcgiHolder
-    useFcgiHolder isNil ifTrue:[
-        useFcgiHolder := false asValue.
-    ].
-    ^ useFcgiHolder.
 ! !
 
 !AbstractSettingsApplication::HTTPStartServerSettingsApplication methodsFor:'change & update'!
@@ -3545,11 +3562,9 @@
 !
 
 update:something with:aParameter from:changedObject
-    self serverClass isLoaded ifTrue:[
-        changedObject == self serverClass runningServers ifTrue:[
-            self runningServersChanged.
-            ^ self.
-        ]
+    (self serverClass isLoaded and:[changedObject == self serverClass runningServers]) ifTrue:[
+        self runningServersChanged.
+        ^ self.
     ].
     super update:something with:aParameter from:changedObject
 ! !
@@ -3575,9 +3590,9 @@
 !
 
 serverClass
-    self useFcgiHolder value ifTrue:[
-        ^ FCGIServer.
-    ].
+    "answer the default class for instanciating servers.
+     Note that we may instanciate FCGIServer as well"
+
     ^ HTTPServer
 ! !
 
@@ -11833,5 +11848,5 @@
 !AbstractSettingsApplication class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libtool/AbstractSettingsApplication.st,v 1.208 2005-11-30 17:34:06 cg Exp $'
-! !
+    ^ '$Header: /cvs/stx/stx/libtool/AbstractSettingsApplication.st,v 1.209 2005-12-21 15:34:57 stefan Exp $'
+! !