On 2011-03-30, at 11:28 AM, Mike Schrag wrote:

> you can also just use regular query parameters if you really want ... to hell 
> with purists.

+1 :-)

> 
> ms
> 
> On Mar 30, 2011, at 11:21 AM, Andrew Kinnie wrote:
> 
>> OK.  I'm now in a bit of  time crunch, so I just want to get something 
>> working.
>> 
>> assuming I have a route
>> 
>> new ERXRoute(NoteType.ENTITY_NAME, "/NoteType/{name:String}", 
>> ERXRoute.Method.Get, NoteTypeController.class, "fetchByName")
>> 
>> What is the url I need to actually pass in a string using this 
>> fetchByNameAction?
>> 
>> If I do /ra/NotificationType/fetchByName I get 0 objects (because name == 
>> null)
>> 
>> How do I pass in a string?  What is the url I need to use for this?  (every 
>> rest tutorial I have looked at either doesn't apply at all, or doesn't help)
>> 
>> Thanks
>> 
>> On Mar 30, 2011, at 11:12 AM, Mike Schrag wrote:
>> 
>>> admittedly i've only sort of half-read this thread, but i would think you 
>>> could make a custom NodeTypeRestDelegate that has your own implementation 
>>> of createObjectOfID that checks to see if there already is one and just 
>>> returns it ... maybe. there are a bunch of ways you can do things by 
>>> hooking into those delegates. you can also probably do some tricks by using 
>>> key filter delegates.
>>> 
>>> ms
>>> 
>>> On Mar 30, 2011, at 10:58 AM, Andrew Kinnie wrote:
>>> 
>>>> Sorry about all this, Pascal.  Didn't mean to make you write your session 
>>>> early.  :-)  I guess I'm just dense about this stuff, never having used 
>>>> Rest before, ERRest in particular, or, for that matter, ever had to deal 
>>>> directly with HTTP response codes.  This seems to suggest that you can't, 
>>>> from within a controller for a given entity (in this case "Device"), 
>>>> create a method with, based on a passed in String, fetch an object of a 
>>>> different entity ("DeviceNoteType") which points to (via a to-one) a 
>>>> NoteType object with the name passed in as a variable?  
>>>> 
>>>> Basically I want to do this:
>>>> - create a single action method (in my DeviceController) which allows the 
>>>> client to pass in a String variable "noteTypeName", then 
>>>> - uses that String to fetch a DeviceNoteType object where the noteType has 
>>>> that noteTypeName, and the device is the current device
>>>> --> If there is, set the status to active,
>>>> --> if not, create a new DeviceNoteType
>>>> 
>>>> The issue I am having is that the passed in string ("noteTypeName") is not 
>>>> a key on Device, but is rather used for fetching a different object of a 
>>>> different entity.  I am always getting null from the routeObjectForKey 
>>>> method.
>>>> 
>>>> I would really rather not have the client make two requests, and have to 
>>>> figure out http return calls.  I'd rather have them be able to simply call 
>>>> the addNoteType action and pass in a typeName (and eventually, be able to 
>>>> do this with an array of typeNames)
>>>> 
>>>> __________________________________________
>>>> 
>>>> I am willing to make the client call several action methods via curl if 
>>>> needed.
>>>> 
>>>> In any event, I don't seem to know how to actually call the route you 
>>>> mentioned in your post.  In my Application class I added the route:
>>>> 
>>>>            routeRequestHandler.addRoute(new ERXRoute(NoteType.ENTITY_NAME, 
>>>> "/NoteType/{name:String}", ERXRoute.Method.Get, NoteTypeController.class, 
>>>> "fetchByName"));
>>>> 
>>>> Thing is, I have no idea at all how to call this from the command line to 
>>>> see if it returns anything.  (and I have no idea how the http response 
>>>> codes would appear)
>>>> 
>>>> I tried:
>>>> 
>>>> curl -X GET 
>>>> http://MacBook-Pro.local:9001/cgi-bin/WebObjects/ra/NoteType/[name='alert'].json
>>>> (curl: (3) [globbing] error: bad range specification after pos 80)
>>>> curl -X GET 
>>>> http://MacBook-Pro.local:9001/cgi-bin/WebObjects/ra/NoteType/'alert'.json
>>>> (- Unable to get contents of file 
>>>> '/Library/WebServer/Documents/cgi-bin/WebObjects/ra/NoteType/alert.json' 
>>>> for uri: /cgi-bin/WebObjects/ra/NoteType/alert.json)
>>>> curl -X GET 
>>>> http://MacBook-Pro.local:9001/cgi-bin/WebObjects/ra/NoteType/'alert'
>>>> (no alertAction method)
>>>> 
>>>> And various other things.  I've tried to find rest tutorials to indicate 
>>>> what the syntax is supposed to be, but everything seems to be assuming 
>>>> you're passing in an id, which, obviously, I don't have.
>>>> 
>>>> Assuming I eventually get this basic bit of syntax down, it looks like the 
>>>> client would need to call the create on the DeviceNoteType and pass in 
>>>> fully formed json representations of the NoteType and the Device?  
>>>> Presumably they would do this by getting the json from the response?
>>>> 
>>>> Sorry for not getting this stuff.
>>>> 
>>>> Andrew
>>>> 
>>>> 
>>>> On Mar 29, 2011, at 4:21 PM, Pascal Robert wrote:
>>>> 
>>>>> 
>>>>> Le 2011-03-29 à 16:03, Andrew Kinnie a écrit :
>>>>> 
>>>>>> Thanks for the tip on using create that way.  I didn't know you could do 
>>>>>> that.  In any event, that's the problem.  NoteType is basically a lookup 
>>>>>> table.  I would want to fetch an existing noteType based on some unique 
>>>>>> attribute, such as "typeName" (which ensure is unique in the EO class)  
>>>>>> I don't want to create a new noteType, I want to create the intervening 
>>>>>> object (DeviceNoteType) which has a to-one to NoteType and a to-one to 
>>>>>> Device.  AND (here's the tough part - for me at least) I want to only 
>>>>>> create a new one if one doesn't already exist.  So I need to fetch 
>>>>>> first, and I want to fetch based on the value passed in for the name key
>>>>> 
>>>>> So you will do:
>>>>> 
>>>>>  new ERXRoute(NoteType.ENTITY_NAME, "/NoteType/{name:String}", 
>>>>> ERXRoute.Method.Get, NoteTypesController.class, "fetchByName");
>>>>> 
>>>>>  public WOActionResults fetchByNameAction() {
>>>>>    String typeName = routeObjectForKey("name");
>>>>>    NoteType type = NoteType.fetchNoteType(editingContext(), 
>>>>> User.NAME.eq(typeName));
>>>>>    return response(type, yourerxkeyfilter());
>>>>>  }
>>>>> 
>>>>> If fetchByNameAction didn't find an object, ERRest will return the HTTP 
>>>>> code 404, so your client can know that the object was not found, and call:
>>>>> 
>>>>>  new ERXRoute(NoteType.ENTITY_NAME, "/NoteType/", ERXRoute.Method.Post, 
>>>>> NoteTypesController.class, "create");  // If you called addDefaultRoutes 
>>>>> for the NoteType entity, that route already exist)
>>>>> 
>>>>>  public WOActionResults createAction() {
>>>>>    NoteType type = create(NoteType.ENTITY_NAME, yourerxkeyfilter());
>>>>>    editingContext().saveChanges();
>>>>>    return response(type, yourerxkeyfilter());
>>>>>  }
>>>>> 
>>>>> If you get a response with HTTP code in the 20x range, the object was 
>>>>> created and now you can create your DeviceNoteType with a route like this:
>>>>> 
>>>>>  new ERXRoute(DeviceNoteType.ENTITY_NAME, "/DeviceNoteType", 
>>>>> ERXRoute.Method.Post, DeviceNoteTypesController.class, "create");
>>>>> 
>>>>> When you call POST /cgi-bin/WebObjects/MyApp.woa/ra/DeviceNoteType, you 
>>>>> will have to pass the a Device and a NoteType object in JSON as the body 
>>>>> of the request.
>>>>> 
>>>>> I feel like I'm writing my WOWODC session in real-time :-P
>>>> _______________________________________________
>>>> Do not post admin requests to the list. They will be ignored.
>>>> Webobjects-dev mailing list      ([email protected])
>>>> Help/Unsubscribe/Update your Subscription:
>>>> http://lists.apple.com/mailman/options/webobjects-dev/mschrag%40pobox.com
>>>> 
>>>> This email sent to [email protected]
>>> 
>> 
> 
> _______________________________________________
> Do not post admin requests to the list. They will be ignored.
> Webobjects-dev mailing list      ([email protected])
> Help/Unsubscribe/Update your Subscription:
> http://lists.apple.com/mailman/options/webobjects-dev/dleber_wodev%40codeferous.com
> 
> This email sent to [email protected]

;david

--
David LeBer
Codeferous Software
'co-def-er-ous' adj. Literally 'code-bearing'
site:   http://codeferous.com
blog:   http://davidleber.net
profile:        http://www.linkedin.com/in/davidleber
twitter:        http://twitter.com/rebeld
--
Toronto Area Cocoa / WebObjects developers group:
http://tacow.org




 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      ([email protected])
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to