| 
  
   Size: 264 
  
  Comment:  
 | 
    ← Revision 31 as of 2023-05-29 09:15:33  ⇥ 
  Size: 8567 
  
  Comment:  
 | 
| Deletions are marked like this. | Additions are marked like this. | 
| Line 1: | Line 1: | 
| ## page was renamed from Cappuccino | |
| Line 3: | Line 4: | 
| Line 5: | Line 7: | 
| == Init String, CPString == {{{  | 
Objective-J is a powerful object-oriented language which compiles to run in the browser.  API [[http://www.cappuccino-project.org/learn/documentation/]] == Get the code == Clone it using git: {{{#!highlight sh cd ~ mkdir gitCappuccino cd gitCappuccino git clone git://github.com/cappuccino/cappuccino.git cd ~/gitCappuccino/cappuccino }}} == Vim editor Objective-J plugin == Run the following commands after fetching code from github: {{{#!highlight sh mkdir -p ~/.vim/plugin cd ~/gitCappuccino/cappuccino/Tools/Editors/Vim] cp objj.vim ~/.vim/plugin }}} == Emacs editor Objective-J plugin == {{{#!highlight sh mkdir ~/cappuccinoEmacs cd ~/gitCappuccino/cappuccino/Tools/Editors/Emacs cp *.el ~/cappuccinoEmacs/ touch ~/.emacs nano ~/.emacs #(add-to-list 'load-path "~/cappuccinoEmacs") #(require 'objj-mode) }}} == Init String, stringWithFormat, CPString == {{{#!highlight objectivej  | 
| Line 9: | Line 43: | 
| var str2 = [CPString initWithString: @""]; }}}  | 
var str2 = [CPString initWithString: @""];  var str3 = [CPString stringWithFormat:"StrX %s %s %s" , [obj field1] , [obj field2] , [obj field3] ]; var strLen [str3 length]; }}} == Mutable Array == {{{#!highlight objectivej @import <Foundation/CPMutableArray.j> var arrayX = [[CPMutableArray alloc] init]; }}} == Callbacks == {{{#!highlight objectivej @implementation TestObject : CPObject { } -(void)helloWorld{ CPLogConsole("Called hello world"); } //(...) @end //-------------------- var selectorHelloWorld = @selector(helloWorld) ; var signature = [self methodSignatureForSelector: aSelector]; var invocation = [CPInvocation invocationWithMethodSignature:signature]; [invocation setSelector: selectorHelloWorld]; [invocation invokeWithTarget: self]; //self -> instance of TestObject }}} {{{#!highlight objectivej @implementation TestObject : CPObject { } -(void)helloWorldMsg:(CPString) message p1:(int)intVal { CPLogConsole( message ); CPLogConsole( intVal ); } //(...) @end //-------------------- var selectorHelloWorldMsg = @selector(helloWorldMsg:p1:) ; var sig = [self methodSignatureForSelector: selectorHelloWorldMsg]; var invocation = [CPInvocation invocationWithMethodSignature:sig]; [invocation setSelector: selectorHelloWorldMsg]; [invocation setArgument:@"Message" atIndex:2 ]; //0-> self 1->_cmd [invocation setArgument: 1234 atIndex:3 ]; //0-> self 1->_cmd [invocation invokeWithTarget: self]; }}} == Dates == {{{#!highlight objectivej var datex = [CPDate dateWithTimeIntervalSince1970: dateInSeconds]; //set CPDate with seconds since 01-01-1970 UTC var strDate = [instanceCPDate description];// get string with date in format YYYY-MM-DD HH:MM:SS TZ±HHMM. }}} == Dictionary from JSON object == {{{#!highlight objectivej - (void)connection:(CPURLConnection) connection didReceiveData:(CPString)data { var dict = [CPDictionary dictionaryWithJSObject: [data objectFromJSON] ]; [textField setStringValue: [dict valueForKey:@"lkeyx"] ]; } - (void)connection:(CPURLConnection)connection didFailWithError:(CPString)error { } }}} When a number is defined on a JSON object, a CPNumber is returned in valueForKey. {{{#!highlight javascript // JSON for aData { "subDocument": { "dateValue":12345 } } }}} {{{#!highlight objectivej var otherDict = [CPDictionary dictionaryWithJSObject: [aData objectFromJSON] ]; var dictx = [CPDictionary dictionaryWithJSObject: [otherdict valueForKey:@"subDocument"] ]; var dateValue = [ [dictx valueForKey:@"dateValue"] doubleValue]; }}} == Load JSON array == JSON array {{{#!highlight javascript [ {"paramx":"aaaa","valuex":"aaaaaddd"} , {"paramx":"asassassa","valuex":"ggghfghf"} ] }}} Acme class {{{#!highlight objectivej @implementation Acme : CPObject { CPString paramx @accessors; CPString valuex @accessors; } @end }}} Receive data from web service {{{#!highlight objectivej -(void) connection:(CPURLConnection) connection didReceiveData:(CPString)aData { var jsonArray = [aData objectFromJSON]; _tableData = [[CPMutableArray alloc] init]; for(var idx=0;idx< jsonArray.length;idx++){ var objx = jsonArray[idx]; var dictx = [CPDictionary dictionaryWithJSObject: objx ]; var acme = [Acme alloc]; [acme setParamx: [dictx valueForKey:@"paramx"] ]; [acme setValuex: [dictx valueForKey:@"valuex"] ]; [_tableData addObject: acme]; } [_tableView reloadData]; } }}} == URL request == {{{#!highlight objectivej var url = [CPString stringWithFormat:"/JEE-war/rest/getInfo/%@", [textField stringValue] ] ; var request = [CPURLRequest requestWithURL: url ]; var connection = [CPURLConnection connectionWithRequest:request delegate:self]; //calls didFailWithError and didReceiveData }}} == Mime types Glassfish + JBoss == Adapted from [[https://github.com/cappuccino/cappuccino/wiki/Server-Side-Issues]] You need to have the mime type of file types it doesn’t understand set to something for Cappuccino to work. Specifically, you should set the following mime-type/extension pairs. This can be done in the '''web.xml''': {{{#!highlight xml <mime-mapping> <extension>j</extension> <mime-type>text/javascript</mime-type> </mime-mapping> <mime-mapping> <extension>plist</extension> <mime-type>text/xml</mime-type> </mime-mapping> <mime-mapping> <extension>sj</extension> <mime-type>text/javascript</mime-type> </mime-mapping> }}} == Download file == [[http://ique.github.io/2009/11/cptableview-uploading-and-downloading-in-cappuccino/]] {{{#!highlight objectivej DownloadIFrame = document.createElement("iframe"); DownloadIFrame.style.position = "absolute"; DownloadIFrame.style.top = "-100px"; DownloadIFrame.style.left = "-100px"; DownloadIFrame.style.height = "0px"; DownloadIFrame.style.width = "0px"; document.body.appendChild(DownloadIFrame); //.... DownloadIFrame.src = "http://localhost:3000/uploads/fileXpto"; }}} == Index of string == [[https://developer.apple.com/library/ios/documentation/cocoa/reference/foundation/Miscellaneous/Foundation_DataTypes/Reference/reference.html|Apple Foundation data types]] {{{#!highlight objectivej var range = [data rangeOfString:@"str xyz"]; CPLogConsole( JSON.stringify(range) ); // CPrange has fields location and length // If location >=0 the string has been found }}} == TableView == {{{#!highlight objectivej //allow multiple selections , CPTableView (NSTableView) [tableviewx setAllowsMultipleSelection:YES]; }}} == Timer == {{{#!highlight objectivej @import <Foundation/CPTimer.j> CPTimer _timer; // timer each 5 seconds _timer = [CPTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(timerHandler:) userInfo:nil repeats:YES]; -(void)timerHandler:(id)sender { [self updateData]; if( [self isVisible]==false ){ // terminates the timer [_timer invalidate]; } } }}} == Button == {{{#!highlight objectivej // create button CPButton cpbutton = [CPButton alloc]; [cpbutton initWithFrame:CGRectMakeZero()]; [cpbutton setFrameOrigin:CGPointMake(10,10)]; [cpbutton setFrameSize:CGSizeMake(100,25)]; [cpbutton setTitle: @"Buttonx"]; [cpbutton setTarget: self]; [cpbutton setAction: @selector(cpbuttonClicked:)]; [aView addSubview: cpbutton]; // clicked handler -(void)cpbuttonClicked:(id)sender { //(...) } //enable button [cpbutton setEnabled:YES]; //disable button [cpbutton setEnabled:NO]; }}} == Data transfer object == {{{#!highlight objectivej @implementation SampleDTO : CPObject { CPString date @accessors; CPString text @accessors; CPString origin @accessors; CPString destination @accessors; } @end }}} To get data in the fields: {{{#!highlight objectivej [obj date]; [obj text]; [obj origin]; [obj destination]; }}} To set data in the fields: {{{#!highlight objectivej [obj setDate @"datex"]; [obj setText @"textx"]; [obj setOrigin @"originx"]; [obj setDestination @"destinationx"]; }}} == Starter == * wget http://www.cappuccino-project.org/downloads/CappuccinoStarter-0.9.7-1.zip  | 
Cappuccino
Cappuccino is a framework which makes it easy to create advanced web apps.
http://www.cappuccino-project.org/
Objective-J is a powerful object-oriented language which compiles to run in the browser.
API http://www.cappuccino-project.org/learn/documentation/
Get the code
Clone it using git:
Vim editor Objective-J plugin
Run the following commands after fetching code from github:
Emacs editor Objective-J plugin
Init String, stringWithFormat, CPString
Mutable Array
Callbacks
   1 @implementation TestObject : CPObject
   2 {
   3 }
   4 
   5 -(void)helloWorld{
   6   CPLogConsole("Called hello world");
   7 }
   8 //(...)
   9 @end
  10 
  11 //--------------------
  12 var selectorHelloWorld =  @selector(helloWorld) ;
  13 var signature = [self methodSignatureForSelector: aSelector];
  14 var invocation = [CPInvocation invocationWithMethodSignature:signature];
  15 [invocation setSelector: selectorHelloWorld];
  16 [invocation invokeWithTarget: self]; //self -> instance of TestObject
  17 
   1 @implementation TestObject : CPObject
   2 {
   3 }
   4 
   5 -(void)helloWorldMsg:(CPString) message p1:(int)intVal {
   6   CPLogConsole( message  );
   7   CPLogConsole( intVal  );
   8 }
   9 //(...)
  10 @end
  11 
  12 //--------------------
  13 var selectorHelloWorldMsg =  @selector(helloWorldMsg:p1:) ;
  14 var sig = [self methodSignatureForSelector: selectorHelloWorldMsg];
  15 var invocation = [CPInvocation invocationWithMethodSignature:sig];
  16 [invocation setSelector: selectorHelloWorldMsg];
  17 [invocation setArgument:@"Message" atIndex:2 ]; //0-> self 1->_cmd 
  18 [invocation setArgument: 1234 atIndex:3 ]; //0-> self 1->_cmd 
  19 [invocation invokeWithTarget: self]; 
Dates
Dictionary from JSON object
   1 - (void)connection:(CPURLConnection) connection didReceiveData:(CPString)data
   2 {
   3   var dict = [CPDictionary dictionaryWithJSObject: [data objectFromJSON]  ];    
   4   [textField setStringValue:  [dict valueForKey:@"lkeyx"] ];
   5 }
   6 
   7 - (void)connection:(CPURLConnection)connection didFailWithError:(CPString)error
   8 {
   9 }
When a number is defined on a JSON object, a CPNumber is returned in valueForKey.
Load JSON array
JSON array
Acme class
Receive data from web service
   1 -(void) connection:(CPURLConnection) connection didReceiveData:(CPString)aData {
   2     var jsonArray = [aData objectFromJSON];
   3     
   4     _tableData = [[CPMutableArray alloc] init];
   5     
   6     for(var idx=0;idx< jsonArray.length;idx++){
   7         var objx = jsonArray[idx];
   8         var dictx = [CPDictionary dictionaryWithJSObject: objx ];
   9         
  10         var acme = [Acme alloc];
  11         [acme setParamx: [dictx valueForKey:@"paramx"] ];
  12         [acme setValuex: [dictx valueForKey:@"valuex"] ];
  13         [_tableData addObject: acme];
  14     }
  15     
  16     [_tableView reloadData];
  17 }
URL request
Mime types Glassfish + JBoss
Adapted from https://github.com/cappuccino/cappuccino/wiki/Server-Side-Issues
You need to have the mime type of file types it doesn’t understand set to something for Cappuccino to work. Specifically, you should set the following mime-type/extension pairs. This can be done in the web.xml:
   1 <mime-mapping>
   2      <extension>j</extension>
   3      <mime-type>text/javascript</mime-type>
   4 </mime-mapping>
   5 <mime-mapping>
   6      <extension>plist</extension>
   7      <mime-type>text/xml</mime-type>
   8 </mime-mapping>
   9 <mime-mapping>
  10       <extension>sj</extension>
  11       <mime-type>text/javascript</mime-type>
  12 </mime-mapping>
Download file
http://ique.github.io/2009/11/cptableview-uploading-and-downloading-in-cappuccino/
   1     DownloadIFrame = document.createElement("iframe");
   2     DownloadIFrame.style.position = "absolute";
   3     DownloadIFrame.style.top    = "-100px";
   4     DownloadIFrame.style.left   = "-100px";
   5     DownloadIFrame.style.height = "0px";
   6     DownloadIFrame.style.width  = "0px";
   7     document.body.appendChild(DownloadIFrame);
   8     //....
   9     DownloadIFrame.src = "http://localhost:3000/uploads/fileXpto";
Index of string
TableView
Timer
   1 @import <Foundation/CPTimer.j>
   2 
   3 CPTimer _timer;
   4 
   5 // timer each 5 seconds
   6 _timer = [CPTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(timerHandler:) userInfo:nil repeats:YES];
   7 
   8 -(void)timerHandler:(id)sender {
   9     [self updateData];
  10         
  11     if( [self isVisible]==false ){
  12         // terminates the timer
  13         [_timer invalidate];
  14     }
  15 }
Button
   1 // create button
   2 CPButton cpbutton = [CPButton alloc];
   3 [cpbutton initWithFrame:CGRectMakeZero()];
   4 [cpbutton setFrameOrigin:CGPointMake(10,10)];                
   5 [cpbutton setFrameSize:CGSizeMake(100,25)];                
   6 [cpbutton setTitle: @"Buttonx"];
   7 [cpbutton setTarget: self];
   8 [cpbutton setAction: @selector(cpbuttonClicked:)];      
   9 [aView addSubview: cpbutton];
  10 // clicked handler
  11 -(void)cpbuttonClicked:(id)sender {
  12 //(...)
  13 }
  14 //enable button
  15 [cpbutton setEnabled:YES];
  16 //disable button
  17 [cpbutton setEnabled:NO];
Data transfer object
To get data in the fields:
To set data in the fields:
