kobra2 webapp framework. webservice.sos.ocl context servicecontroller::process(request: request):...
TRANSCRIPT
![Page 1: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/1.jpg)
KobrA2
WebApp Framework
![Page 2: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/2.jpg)
![Page 3: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/3.jpg)
![Page 4: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/4.jpg)
![Page 5: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/5.jpg)
![Page 6: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/6.jpg)
![Page 7: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/7.jpg)
![Page 8: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/8.jpg)
WebService.SOS.ocl
context ServiceController::process(request: Request): Response
post: let act = mvcAction->any(e | e.name =
request.get('action').value) in result = act.do(request)
![Page 9: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/9.jpg)
![Page 10: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/10.jpg)
WebService.SOT.oclcontext Response::write(value: String)post: responseBody = [email protected](value)
context StringDictionary::get(key: String):Stringpost: result = attribute->any(e | e.key = key).value
context StringDictionary::set(key: String, value:String):Stringpost: result = attribute@pre->any(e | e.key = key).value
and attribute->select(e | e.key = key)->size() > 0 and attribute->select(e | e.key = key).value = value
context StringDictionary::remove(key: String):Stringpost: result = attribute@pre->any(e | e.key = key).value
and attribute->select(e | e.key = key)->size() = 0
![Page 11: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/11.jpg)
![Page 12: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/12.jpg)
![Page 13: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/13.jpg)
WebService.ROS.ocl
context WebService::process(request: Resquest):Response
post: result = serviceController.process(request)
![Page 14: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/14.jpg)
![Page 15: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/15.jpg)
![Page 16: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/16.jpg)
ServiceController.SOS.ocl
context ServiceController::process(request: Request): Response
post: let act = mvcAction->any(e | e.name =
request.get('action').value) in result = act.do(request)
![Page 17: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/17.jpg)
![Page 18: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/18.jpg)
![Page 19: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/19.jpg)
![Page 20: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/20.jpg)
![Page 21: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/21.jpg)
MVCModel.SOT.oclcontext ModelEntity::all():Sequence(ModelEntity)post:result = entity
context ModelEntity::put():ModelEntitypost: models->includes(self)
context ModelEntity::delete():ModelEntitypost: models->excludes(self)
context ModelEntity::get(eid : String):ModelEntitypost: result = models->select(e | e.id = eid)
![Page 22: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/22.jpg)
![Page 23: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/23.jpg)
![Page 24: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/24.jpg)
![Page 25: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/25.jpg)
![Page 26: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/26.jpg)
![Page 27: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/27.jpg)
![Page 28: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/28.jpg)
KobrA2
PhotoAlbum as instance of WebApp Framework
![Page 29: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/29.jpg)
![Page 30: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/30.jpg)
![Page 31: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/31.jpg)
![Page 32: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/32.jpg)
![Page 33: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/33.jpg)
![Page 34: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/34.jpg)
![Page 35: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/35.jpg)
![Page 36: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/36.jpg)
AddComment.SOS-- do() simply calls addComment() method of PhotoManagercontext AddComment::do(request:Request):Response
post: let id:Integer = K2Library.createFromString(Integer, request.attribute-
>any( a:Attribute | a.key = 'photoId').value), us: String = request.attribute->any(a:Attribute | a.key =
'userName'), text:String = request.attribute->any(a:Attribute | a.key = 'text'), date: Timestamp = K2Library.createFromString(Timestamp,
request.attribute->any( a:Attribute | a.key = 'date').value) in PhotoManager^addComment(id,us,date,text)
![Page 37: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/37.jpg)
![Page 38: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/38.jpg)
![Page 39: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/39.jpg)
![Page 40: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/40.jpg)
AddPhoto.SOS
-- do() simply calls addPhoto() method of PhotoManagercontext AddPhotos::do(request:Request):Responsepost: let photo:Photo = Photo.createFromString(request.attribute-
>any( a:Attribute | a.key = 'photo').value) inPhotoManager.addPhoto(photo)
![Page 41: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/41.jpg)
![Page 42: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/42.jpg)
![Page 43: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/43.jpg)
ListPhotos.SOS
-- do() simply calls getAllPhotos() method of PhotoManagercontext ListPhotos::do(request:Request):Responsepost: let photos:Sequence(Photo) =
PhotoManager.getAllPhotos() inresult.oclAsType(Response).write(K2Library.convertToStrin
g(Sequence(Photo), photos)) andresult.header.kind = HeaderKind::contentType andresult.header.value = 'binary/octet-stream'
![Page 44: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/44.jpg)
![Page 45: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/45.jpg)
PhotoManager.SOS (1/3)-- retrieve all photoscontext PhotoManager::getAllPhotos():Sequence(Photo)post: result = photos
-- add a photocontext PhotoManager::addPhoto(photo:Photo)pre: not photos->includes( photo) post: photos = photos@pre->including(photo)
-- updates a photo's informations (ex. name, description)context PhotoManager::updatePhoto(photo:Photo)pre: self.photos->exists( e:Photo | e.id = photo.id)post: self.photos->any( e:Photo | e.name = photo.name).data = photo.data and self.photos->any( e:Photo | e.name = photo.name).description = photo.description
![Page 46: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/46.jpg)
PhotoManager.SOS (2/3)-- add a comment to a photo - Breno's versioncontext PhotoManager::addComment(id:Integer, us:String, c:String, data:Timestamp)pre: self.photos->exists( e:Photo | e.id = photo.id)post: let comment:Comment and comment.oclIsNew() and comment.userName = us and comment.date = data and comment.text = s in self.photos->any( e:Photo | e.id = id).comment->includes(comment)
-- add a comment to a photo - Ramon's versioncontext PhotoManager::addComment(photoId:Integer, userName:String, date:Timestamp, text:String)pre: self.photos->exists( e:Photo | e.id = photo.id)post: let photo:Photo = self.photos->any( e:Photo | e.photoId = photoId), c:Comment in c.oclIsNew() and c.userName = userName and c.date = date and c.text = text and photo.comments->includes(c) and photo.comments->size() = photo.comments@pre->size() + 1
![Page 47: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/47.jpg)
PhotoManager.SOS (3/3) -- completely removes a photocontext PhotoManager::removePhoto(photo:Photo)pre: self.photos->exists( e:Photo | e.id = photo.id) post: self.photos->size() = self.photos@pre->size() - 1 and self.photos->excludes(photo)
![Page 48: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/48.jpg)
![Page 49: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/49.jpg)
![Page 50: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/50.jpg)
![Page 51: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/51.jpg)
![Page 52: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/52.jpg)
![Page 53: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/53.jpg)
![Page 54: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/54.jpg)
![Page 55: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/55.jpg)
OkButtonActionEvent.SOS
context OkButtonActionEvent::actionPerformed()
pre: source.name = 'btOk'post: let window = self.getWindow() in window^close()
![Page 56: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/56.jpg)
![Page 57: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/57.jpg)
PAWindowEvent.SOScontext PhViewWindowEvent::opened()pre: source.name = 'PhotoView'post: let elements = source.getNestedElements(), cell = elements->select(oclIsKindOf(GridCell))->any(c | c.photoImage.isSelected), ind = cell.position.x * 2 + cell.position.y + 1 in rq:Request and rq.oclIsNew() and rq.set('action', 'GetPhoto') and rq.set('id', ind) and ph = Photo.createFromString(PhotoAlbumWebService^process(rq).responseBody) and ev.photoImage = ph.data and ev.title = ph.description and ph->comment->forAll(c |
ev.comments.text.concat(c.username).concat(‘:').concat(c.text).concat('/n'))
context PAWindowEvent::closed()pre: source.name = 'ImageChooser'post: source.confirmDialog implies ph:Photo and ph.oclIsNew() and ph.data = Image.fromFile(source.file).content and ph.description = 'Enter your description here' and rq:Request and rq.oclIsNew() and rq.set('action', 'AddPhoto') and rq.set('photo',
Photo.convertToString(ph)) and PhotoAlbumWebService^process(rq)
![Page 58: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/58.jpg)
![Page 59: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/59.jpg)
RemoveButtonAction.SOS
context RemoveButtonActionEvent::actionPerformed()pre: source.name = 'removePhotoBt'post: let elements =
source.getWindow().getNestedElements(), cell = elements->select(oclIsKindOf(GridCell))->any(c |
c.photoImage.isSelected), ind = cell.position.x * 2 + cell.position.y + 1 in rq:Request and rq.oclIsNew() and rq.set('action',
'DeletePhoto') and rq.set('photoId', ind) and PhotoAlbumWebService^process(rq)
![Page 60: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/60.jpg)
![Page 61: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/61.jpg)
SendButtonActionEvent.SOScontext SendButtonActionEvent::actionPerformed()pre: source.name = 'sendBt'post: let elements = source.getWindow().getNestedElements(), cell = elements->select(oclIsKindOf(GridCell))->any(c |
c.photoImage.isSelected), ind = cell.position.x * 2 + cell.position.y + 1, nm = elements->select(oclIsKindOf(TextField))->any(c | c.name =
'nameField').text, tx = elements->select(oclIsKindOf(TextArea)->any(c | c.name =
'messageField').text in rq:Request and rq.oclIsNew() and rq.set('action', 'AddComment') and
rq.set('photoId', ind) and rq.set('userName', nm) and rq.set('text', tx) and rq.set('date', Date.now)
and PhotoAlbumWebService^process(rq)
![Page 62: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/62.jpg)
![Page 63: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/63.jpg)
![Page 64: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/64.jpg)
![Page 65: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/65.jpg)
![Page 66: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/66.jpg)
![Page 67: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/67.jpg)
![Page 68: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/68.jpg)
Resources• KobrA2 Specification - 2009-03-13 out-kobra-mm.pdf
• KobrA2 Models on Google Project Hosting - http://code.google.com/p/kobra2/
• Kobra2MM (RSM)- http://kobra2.googlecode.com/svn/trunk/workspace/KobrA2MM
• WebApp Model (RSM) – http:// kobra2.googlecode.com/svn/trunk/workspace/WebApp
• GUI-PIM-UF (RSM) – http:// kobra2.googlecode.com/svn/trunk/workspace/GUI-
PIM-UF
![Page 69: KobrA2 WebApp Framework. WebService.SOS.ocl context ServiceController::process(request: Request): Response post: let act = mvcAction->any(e](https://reader036.vdocuments.site/reader036/viewer/2022062515/56649f495503460f94c6ae9b/html5/thumbnails/69.jpg)
Resources• KobrA2 Specification - 2009-03-13 out-kobra-mm.pdf
• KobrA2 Models on Google Project Hosting - http://code.google.com/p/kobra2/
• Kobra2MM (RSM)- http://kobra2.googlecode.com/svn/trunk/workspace/KobrA2MM
• WebApp Model (RSM) – http:// kobra2.googlecode.com/svn/trunk/workspace/WebApp
• PhotoAlbum Model (RSM) – http://
kobra2.googlecode.com/svn/trunk/workspace/PhotoAlbum
• GUI-PIM-UF (RSM) – http:// kobra2.googlecode.com/svn/trunk/workspace/GUI-
PIM-UF