OSErrorHolder.st
changeset 6297 7d0a04fb50be
parent 6294 ed57cb59db27
child 7593 e7550b9ef84a
equal deleted inserted replaced
6296:03945cc43a97 6297:7d0a04fb50be
    65 "
    65 "
    66 ! !
    66 ! !
    67 
    67 
    68 !OSErrorHolder class methodsFor:'Signal constants'!
    68 !OSErrorHolder class methodsFor:'Signal constants'!
    69 
    69 
       
    70 allocRetrySignal
       
    71     ^ Signals at:#allocRetrySignal
       
    72 !
       
    73 
       
    74 badAccessorSignal
       
    75     ^ Signals at:#badAccessorSignal
       
    76 !
       
    77 
       
    78 badArgumentsSignal
       
    79     ^ Signals at:#badArgumentsSignal
       
    80 !
       
    81 
       
    82 existingReferentSignal
       
    83     ^ Signals at:#existingReferentSignal
       
    84 !
       
    85 
       
    86 illegalOperationSignal
       
    87     ^ Signals at:#illegalOperationSignal
       
    88 !
       
    89 
       
    90 inaccessibleSignal
       
    91     ^ Signals at:#inaccessibleSignal
       
    92 !
       
    93 
       
    94 inappropriateOperationSignal
       
    95     ^ Signals at:#inappropriateOperationSignal
       
    96 !
       
    97 
       
    98 inappropriateReferentSignal
       
    99     ^ Signals at:#inappropriateReferentSignal
       
   100 !
       
   101 
    70 invalidArgumentsSignal
   102 invalidArgumentsSignal
    71     "return the signal for invalid arguments (e.g. right class, wrong value)."
   103     "return the signal for invalid arguments (e.g. right class, wrong value)."
    72 
   104 
    73     ^ OsInvalidArgumentsError
   105     ^ OsInvalidArgumentsError
       
   106 !
       
   107 
       
   108 needRetrySignal
       
   109     ^ Signals at:#needRetrySignal
       
   110 !
       
   111 
       
   112 noDataSignal
       
   113     ^ Signals at:#noDataSignal
       
   114 !
       
   115 
       
   116 noMemorySignal
       
   117     ^ Signals at:#noMemorySignal
       
   118 !
       
   119 
       
   120 noPermissionsSignal
       
   121     ^ Signals at:#noPermissionsSignal
       
   122 !
       
   123 
       
   124 noResourcesSignal
       
   125     ^ Signals at:#noResourcesSignal
       
   126 !
       
   127 
       
   128 nonexistentSignal
       
   129     "return the signal for non existing referents (i.e. device, file etc.)."
       
   130 
       
   131     ^ Signals at:#nonexistentSignal
       
   132 !
       
   133 
       
   134 notReadySignal
       
   135     ^ Signals at:#notReadySignal
       
   136 !
       
   137 
       
   138 peerFaultSignal
       
   139     ^ Signals at:#peerFaultSignal
       
   140 !
       
   141 
       
   142 rangeErrorSignal
       
   143     ^ Signals at:#rangeErrorSignal
       
   144 !
       
   145 
       
   146 transferFaultSignal
       
   147     ^ Signals at:#transferFaultSignal
       
   148 !
       
   149 
       
   150 transientErrorSignal
       
   151     ^ Signals at:#transientErrorSignal
       
   152 !
       
   153 
       
   154 unavailableReferentSignal
       
   155     ^ Signals at:#unavailableReferentSignal
       
   156 !
       
   157 
       
   158 underSpecifiedSignal
       
   159     ^ Signals at:#underSpecifiedSignal
       
   160 !
       
   161 
       
   162 unpreparedOperationSignal
       
   163     ^ Signals at:#unpreparedOperationSignal
       
   164 !
       
   165 
       
   166 unsupportedOperationSignal
       
   167     ^ Signals at:#unsupportedOperationSignal
       
   168 !
       
   169 
       
   170 volumeFullSignal
       
   171     ^ Signals at:#volumeFullSignal
       
   172 !
       
   173 
       
   174 wrongSubtypeForOperationSignal
       
   175     ^ Signals at:#wrongSubtypeForOperationSignal
    74 ! !
   176 ! !
    75 
   177 
    76 !OSErrorHolder class methodsFor:'accessing'!
   178 !OSErrorHolder class methodsFor:'accessing'!
    77 
   179 
    78 errorSignal
   180 errorSignal
    79     ^ OperatingSystem errorSignal
   181     ^ OperatingSystem errorSignal
    80 
   182 
    81     "Created: 25.1.1997 / 18:07:55 / cg"
   183     "Created: 25.1.1997 / 18:07:55 / cg"
    82 !
       
    83 
       
    84 peerFaultSignal
       
    85     ^ OperatingSystem errorSignal
       
    86 
       
    87     "Created: 25.1.1997 / 18:07:55 / cg"
       
    88 ! !
   184 ! !
    89 
   185 
    90 !OSErrorHolder class methodsFor:'class initialization'!
   186 !OSErrorHolder class methodsFor:'class initialization'!
    91 
   187 
    92 initialize
   188 initialize
    93     "init signals etc."
   189     "init signals etc."
    94 
   190 
    95     |s|
   191     |s|
    96 
   192 
    97     OSErrorSignal isNil ifTrue:[
   193     OSErrorSignal isNil ifTrue:[
    98         OSErrorSignal := Error newSignalMayProceed:true.
   194         OSErrorSignal := OsError.
    99         OSErrorSignal nameClass:self message:#errorSignal.
       
   100         OSErrorSignal notifierString:'OperatingSystem error'.
   195         OSErrorSignal notifierString:'OperatingSystem error'.
   101 
   196 
   102 
       
   103         Signals := Dictionary new:28.
   197         Signals := Dictionary new:28.
       
   198 
       
   199         OsNoResourcesError notifierString:'Not enough resources'.
       
   200         Signals at:#noResourcesSignal put:OsNoResourcesError.
       
   201 
       
   202         OsIllegalOperation notifierString:'Illegal Operation'.
       
   203         Signals at:#illegalOperationSignal put:OsIllegalOperation. 
       
   204 
       
   205         OsInvalidArgumentsError notifierString:'Invalid Arguments'.
       
   206         Signals at:#invalidArgumentsSignal put:OsInvalidArgumentsError. 
       
   207 
       
   208         OsInaccessibleError notifierString:'Referent inaccessible'.
       
   209         Signals at:#inaccessibleSignal put:OsInaccessibleError. 
       
   210 
       
   211         OsTransferFaultError notifierString:'Transfer fault'.
       
   212         Signals at:#transferFaultSignal put:OsTransferFaultError. 
       
   213 
       
   214         OsNeedRetryError notifierString:'Retry Operation'.
       
   215         Signals at:#needRetrySignal put:OsNeedRetryError. 
   104 
   216 
   105 false ifTrue:[
   217 false ifTrue:[
   106         "/ Information signals
   218         "/ Information signals
   107 
   219 
   108         s := self setupSignal:#informationSignal parent:OSErrorSignal 
   220         s := self setupSignal:#informationSignal parent:OSErrorSignal 
   109                      notifier:'Information'.
   221                      notifier:'Information'.
   110         self setupSignal:#operationStartedSignal parent:s 
   222         self setupSignal:#operationStartedSignal parent:s 
   111                      notifier:'Operation started'.
   223                      notifier:'Operation started'.
   112 
   224 ].
   113         "/ Retry signals
   225         "/ Retry signals
   114 
   226 
   115         s := self setupSignal:#needRetrySignal parent:OSErrorSignal 
   227         self setupSignal:#notReadySignal parent:OsNeedRetryError 
   116                      notifier:'Retry Operation'.
       
   117         self setupSignal:#notReadySignal parent:s 
       
   118                      notifier:' -- referent not ready'.
   228                      notifier:' -- referent not ready'.
   119         self setupSignal:#transientErrorSignal parent:s 
   229         self setupSignal:#transientErrorSignal parent:OsNeedRetryError 
   120                      notifier:' -- transient error'.
   230                      notifier:' -- transient error'.
   121         self setupSignal:#allocRetrySignal parent:s 
   231         self setupSignal:#allocRetrySignal parent:OsNeedRetryError 
   122                      notifier:' -- allocation failure'.
   232                      notifier:' -- allocation failure'.
   123 
   233 
   124         "/ Resource signals
   234         "/ Resource signals
   125 
   235 
   126         s := self setupSignal:#noResourcesSignal parent:OSErrorSignal 
   236         self setupSignal:#noMemorySignal parent:OsNoResourcesError 
   127                      notifier:'Not enough resources'.
       
   128         self setupSignal:#noMemorySignal parent:s 
       
   129                      notifier:' -- memory'.
   237                      notifier:' -- memory'.
   130 
   238 
   131         "/ Transfer faults
   239         "/ Transfer faults
   132 
   240 
   133         s := self setupSignal:#transferFaultSignal parent:OSErrorSignal 
   241         self setupSignal:#noDataSignal parent:OsTransferFaultError 
   134                      notifier:'Transfer fault'.
       
   135         self setupSignal:#noDataSignal parent:s 
       
   136                      notifier:'Data unavailable/EOF reached'.
   242                      notifier:'Data unavailable/EOF reached'.
   137         self setupSignal:#peerFaultSignal parent:s 
   243         self setupSignal:#peerFaultSignal parent:OsTransferFaultError 
   138                      notifier:'Communication with peer failed'.
   244                      notifier:'Communication with peer failed'.
   139         self setupSignal:#volumeFullSignal parent:s 
   245         self setupSignal:#volumeFullSignal parent:OsTransferFaultError 
   140                      notifier:'Volume full'.
   246                      notifier:'Volume full'.
   141 
   247 
   142         "/ Inaccesible faults
   248         "/ Inaccesible faults
   143 
   249 
   144         s := self setupSignal:#inaccessibleSignal parent:OSErrorSignal 
   250         self setupSignal:#nonexistentSignal parent:OsInaccessibleError 
   145                      notifier:'Referent inaccessible'.
       
   146         self setupSignal:#nonExistantSignal parent:s 
       
   147                      notifier:'File does not exist'.
   251                      notifier:'File does not exist'.
   148         self setupSignal:#unavailableReferentSignal parent:s 
   252         self setupSignal:#unavailableReferentSignal parent:OsInaccessibleError 
   149                      notifier:' currently'.
   253                      notifier:' currently'.
   150         self setupSignal:#noPermissionsSignal parent:s 
   254         self setupSignal:#noPermissionsSignal parent:OsInaccessibleError 
   151                      notifier:'Permission denied'.
   255                      notifier:'Permission denied'.
   152         self setupSignal:#existingReferentSignal parent:s 
   256         self setupSignal:#existingReferentSignal parent:OsInaccessibleError 
   153                      notifier:' -- already exists or currently in use'.
   257                      notifier:' -- already exists or currently in use'.
   154         self setupSignal:#inappropriateReferentSignal parent:s 
   258         self setupSignal:#inappropriateReferentSignal parent:OsInaccessibleError 
   155                      notifier:' -- operation inappropriate'.
   259                      notifier:' -- operation inappropriate'.
   156 
   260 
   157         "/ Illegal operations
   261         "/ Illegal operations
   158 
   262 
   159         s := self setupSignal:#illegalOperationSignal parent:OSErrorSignal 
   263         self setupSignal:#inappropriateOperationSignal parent:OsIllegalOperation 
   160                      notifier:'Illegal Operation'.
       
   161         self setupSignal:#inappropriateOperationSignal parent:s 
       
   162                      notifier:'Inappropriate operation'.
   264                      notifier:'Inappropriate operation'.
   163         self setupSignal:#wrongSubtypeForOperationSignal parent:s 
   265         self setupSignal:#wrongSubtypeForOperationSignal parent:OsIllegalOperation 
   164                      notifier:' -- wrong subtype'.
   266                      notifier:' -- wrong subtype'.
   165         self setupSignal:#unsupportedOperationSignal parent:s 
   267         self setupSignal:#unsupportedOperationSignal parent:OsIllegalOperation 
   166                      notifier:' -- on this platform'.
   268                      notifier:' -- on this platform'.
   167         self setupSignal:#unpreparedOperationSignal parent:s 
   269         self setupSignal:#unpreparedOperationSignal parent:OsIllegalOperation 
   168                      notifier:' -- wrong sequence'.
   270                      notifier:' -- wrong sequence'.
   169 
   271 
   170         "/ Illegal arguments
   272         "/ Illegal arguments
   171 
   273 
   172         s := self setupSignal:#invalidArgumentsSignal parent:OSErrorSignal 
   274         self setupSignal:#badArgumentsSignal parent:OsInvalidArgumentsError 
   173                      notifier:'Invalid Arguments'.
       
   174         self setupSignal:#badArgumentsSignal parent:s 
       
   175                      notifier:' -- wrong class'.
   275                      notifier:' -- wrong class'.
   176         self setupSignal:#badAccessorSignal parent:s 
   276         self setupSignal:#badAccessorSignal parent:OsInvalidArgumentsError 
   177                      notifier:' -- accessor invalid'.
   277                      notifier:' -- accessor invalid'.
   178         self setupSignal:#rangeErrorSignal parent:s 
   278         self setupSignal:#rangeErrorSignal parent:OsInvalidArgumentsError 
   179                      notifier:' -- out of range'.
   279                      notifier:' -- out of range'.
   180         self setupSignal:#underSpecifiedSignal parent:s 
   280         self setupSignal:#underSpecifiedSignal parent:OsInvalidArgumentsError 
   181                      notifier:' -- operation not fully specified'.
   281                      notifier:' -- operation not fully specified'.
   182 ].
       
   183    ].
   282    ].
   184 
       
   185 
   283 
   186    "
   284    "
   187     OSErrorSignal := nil.
   285     OSErrorSignal := nil.
   188     self initialize
   286     self initialize
   189    "
   287    "
       
   288 !
       
   289 
       
   290 setupSignal:aSymbol parent:parentSignal notifier:aString
       
   291     "setup a signal, which can be retrieved by sending aSymbol to self.
       
   292      Return the new signal"
       
   293 
       
   294     |s|
       
   295 
       
   296     Signals at:aSymbol
       
   297            put:(s := parentSignal newSignal
       
   298                         notifierString:aString;
       
   299                         nameClass:self message:aSymbol).
       
   300     ^ s
   190 ! !
   301 ! !
   191 
   302 
   192 !OSErrorHolder methodsFor:'accessing'!
   303 !OSErrorHolder methodsFor:'accessing'!
   193 
   304 
   194 errorSymbol:sym errorCategory:typ
   305 errorSymbol:sym errorCategory:typ