From: <ms...@us...> - 2010-02-12 17:50:52
|
Revision: 10598 http://wonder.svn.sourceforge.net/wonder/?rev=10598&view=rev Author: mschrag Date: 2010-02-12 17:50:43 +0000 (Fri, 12 Feb 2010) Log Message: ----------- ERRestRouteExample Added Paths: ----------- trunk/Wonder/Examples/Misc/ERRestRouteExample/ trunk/Wonder/Examples/Misc/ERRestRouteExample/.classpath trunk/Wonder/Examples/Misc/ERRestRouteExample/.project trunk/Wonder/Examples/Misc/ERRestRouteExample/.settings/ trunk/Wonder/Examples/Misc/ERRestRouteExample/.settings/org.eclipse.core.resources.prefs trunk/Wonder/Examples/Misc/ERRestRouteExample/Components/ trunk/Wonder/Examples/Misc/ERRestRouteExample/Components/Main.api trunk/Wonder/Examples/Misc/ERRestRouteExample/Components/Main.wo/ trunk/Wonder/Examples/Misc/ERRestRouteExample/Components/Main.wo/Main.html trunk/Wonder/Examples/Misc/ERRestRouteExample/Components/Main.wo/Main.wod trunk/Wonder/Examples/Misc/ERRestRouteExample/Components/Main.wo/Main.woo trunk/Wonder/Examples/Misc/ERRestRouteExample/Components/PersonShowPage.wo/ trunk/Wonder/Examples/Misc/ERRestRouteExample/Components/PersonShowPage.wo/PersonShowPage.html trunk/Wonder/Examples/Misc/ERRestRouteExample/Components/PersonShowPage.wo/PersonShowPage.wod trunk/Wonder/Examples/Misc/ERRestRouteExample/Components/PersonShowPage.wo/PersonShowPage.woo trunk/Wonder/Examples/Misc/ERRestRouteExample/Libraries/ trunk/Wonder/Examples/Misc/ERRestRouteExample/Resources/ trunk/Wonder/Examples/Misc/ERRestRouteExample/Resources/Properties trunk/Wonder/Examples/Misc/ERRestRouteExample/Resources/RestExample.eogen trunk/Wonder/Examples/Misc/ERRestRouteExample/Resources/RestExample.eomodeld/ trunk/Wonder/Examples/Misc/ERRestRouteExample/Resources/RestExample.eomodeld/Animal.plist trunk/Wonder/Examples/Misc/ERRestRouteExample/Resources/RestExample.eomodeld/Company.plist trunk/Wonder/Examples/Misc/ERRestRouteExample/Resources/RestExample.eomodeld/Person.plist trunk/Wonder/Examples/Misc/ERRestRouteExample/Resources/RestExample.eomodeld/index.eomodeld trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/ trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/ trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/ trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/ trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/Application.java trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/DirectAction.java trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/Session.java trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/components/ trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/components/Main.java trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/components/PersonShowPage.java trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/controllers/ trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/controllers/AnimalController.java trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/controllers/CarController.java trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/controllers/CompanyController.java trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/controllers/ManufacturerController.java trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/controllers/PersonController.java trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/delegates/ trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/delegates/CarRestDelegate.java trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/delegates/ManufacturerRestDelegate.java trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/migrations/ trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/migrations/RestExample0.java trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/model/ trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/model/Animal.java trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/model/Car.java trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/model/Company.java trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/model/Manufacturer.java trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/model/Person.java trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/model/_Animal.java trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/model/_Company.java trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/model/_Person.java trunk/Wonder/Examples/Misc/ERRestRouteExample/WebServerResources/ trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ trunk/Wonder/Examples/Misc/ERRestRouteExample/build/.version trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/ trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/Contents/ trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/Contents/Info.plist trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/Contents/Resources/ trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/Contents/Resources/Java/ trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/Contents/Resources/Java/er/ trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/Contents/Resources/Java/er/rest/ trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/Contents/Resources/Java/er/rest/example/ trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/Contents/Resources/Java/er/rest/example/Application.class trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/Contents/Resources/Java/er/rest/example/DirectAction.class trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/Contents/Resources/Java/er/rest/example/Session.class trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/Contents/Resources/Java/er/rest/example/components/ trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/Contents/Resources/Java/er/rest/example/components/Main.class trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/Contents/Resources/Java/er/rest/example/components/PersonShowPage.class trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/Contents/Resources/Java/er/rest/example/controllers/ trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/Contents/Resources/Java/er/rest/example/controllers/AnimalController.class trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/Contents/Resources/Java/er/rest/example/controllers/CarController.class trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/Contents/Resources/Java/er/rest/example/controllers/CompanyController.class trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/Contents/Resources/Java/er/rest/example/controllers/ManufacturerController.class trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/Contents/Resources/Java/er/rest/example/controllers/PersonController.class trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/Contents/Resources/Java/er/rest/example/delegates/ trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/Contents/Resources/Java/er/rest/example/delegates/CarRestDelegate.class trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/Contents/Resources/Java/er/rest/example/delegates/ManufacturerRestDelegate.class trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/Contents/Resources/Java/er/rest/example/migrations/ trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/Contents/Resources/Java/er/rest/example/migrations/RestExample0.class trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/Contents/Resources/Java/er/rest/example/model/ trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/Contents/Resources/Java/er/rest/example/model/Animal.class trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/Contents/Resources/Java/er/rest/example/model/Car.class trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/Contents/Resources/Java/er/rest/example/model/Company.class trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/Contents/Resources/Java/er/rest/example/model/Manufacturer.class trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/Contents/Resources/Java/er/rest/example/model/Person.class trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/Contents/Resources/Java/er/rest/example/model/_Animal.class trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/Contents/Resources/Java/er/rest/example/model/_Company.class trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/Contents/Resources/Java/er/rest/example/model/_Person.class trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/Contents/Resources/Main.api trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/Contents/Resources/Main.wo/ trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/Contents/Resources/Main.wo/Main.html trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/Contents/Resources/Main.wo/Main.wod trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/Contents/Resources/Main.wo/Main.woo trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/Contents/Resources/PersonShowPage.wo/ trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/Contents/Resources/PersonShowPage.wo/PersonShowPage.html trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/Contents/Resources/PersonShowPage.wo/PersonShowPage.wod trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/Contents/Resources/PersonShowPage.wo/PersonShowPage.woo trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/Contents/Resources/Properties trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/Contents/Resources/RestExample.eogen trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/Contents/Resources/RestExample.eomodeld/ trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/Contents/Resources/RestExample.eomodeld/Animal.plist trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/Contents/Resources/RestExample.eomodeld/Company.plist trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/Contents/Resources/RestExample.eomodeld/Person.plist trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/Contents/Resources/RestExample.eomodeld/index.eomodeld trunk/Wonder/Examples/Misc/ERRestRouteExample/build/ERRestRouteExample.woa/Contents/WebServerResources/ trunk/Wonder/Examples/Misc/ERRestRouteExample/build.properties trunk/Wonder/Examples/Misc/ERRestRouteExample/build.xml trunk/Wonder/Examples/Misc/ERRestRouteExample/woproject/ trunk/Wonder/Examples/Misc/ERRestRouteExample/woproject/classes.exclude.patternset trunk/Wonder/Examples/Misc/ERRestRouteExample/woproject/classes.include.patternset trunk/Wonder/Examples/Misc/ERRestRouteExample/woproject/resources.exclude.patternset trunk/Wonder/Examples/Misc/ERRestRouteExample/woproject/resources.include.patternset trunk/Wonder/Examples/Misc/ERRestRouteExample/woproject/wsresources.exclude.patternset trunk/Wonder/Examples/Misc/ERRestRouteExample/woproject/wsresources.include.patternset Added: trunk/Wonder/Examples/Misc/ERRestRouteExample/.classpath =================================================================== --- trunk/Wonder/Examples/Misc/ERRestRouteExample/.classpath (rev 0) +++ trunk/Wonder/Examples/Misc/ERRestRouteExample/.classpath 2010-02-12 17:50:43 UTC (rev 10598) @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<classpath> + <classpathentry kind="src" path="Sources"/> + <classpathentry kind="con" path="WOFramework/ERExtensions"/> + <classpathentry kind="con" path="WOFramework/ERJars"/> + <classpathentry kind="con" path="WOFramework/ERPrototypes"/> + <classpathentry kind="con" path="WOFramework/JavaWOExtensions"/> + <classpathentry kind="con" path="WOFramework/WOOgnl"/> + <classpathentry kind="con" path="WOFramework/JavaEOAccess"/> + <classpathentry kind="con" path="WOFramework/JavaEOControl"/> + <classpathentry kind="con" path="WOFramework/JavaFoundation"/> + <classpathentry kind="con" path="WOFramework/JavaJDBCAdaptor"/> + <classpathentry kind="con" path="WOFramework/JavaWebObjects"/> + <classpathentry kind="con" path="WOFramework/JavaXML"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> + <classpathentry kind="con" path="WOFramework/ERRest"/> + <classpathentry kind="con" path="WOFramework/Ajax"/> + <classpathentry kind="con" path="WOFramework/JavaMemoryAdaptor"/> + <classpathentry kind="output" path="bin"/> +</classpath> Added: trunk/Wonder/Examples/Misc/ERRestRouteExample/.project =================================================================== --- trunk/Wonder/Examples/Misc/ERRestRouteExample/.project (rev 0) +++ trunk/Wonder/Examples/Misc/ERRestRouteExample/.project 2010-02-12 17:50:43 UTC (rev 10598) @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>ERRestRouteExample</name> + <comment></comment> + <projects> + </projects> + <buildSpec> + <buildCommand> + <name>org.eclipse.jdt.core.javabuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>org.objectstyle.wolips.incrementalbuilder</name> + <arguments> + </arguments> + </buildCommand> + </buildSpec> + <natures> + <nature>org.eclipse.jdt.core.javanature</nature> + <nature>org.objectstyle.wolips.incrementalapplicationnature</nature> + </natures> +</projectDescription> Added: trunk/Wonder/Examples/Misc/ERRestRouteExample/.settings/org.eclipse.core.resources.prefs =================================================================== --- trunk/Wonder/Examples/Misc/ERRestRouteExample/.settings/org.eclipse.core.resources.prefs (rev 0) +++ trunk/Wonder/Examples/Misc/ERRestRouteExample/.settings/org.eclipse.core.resources.prefs 2010-02-12 17:50:43 UTC (rev 10598) @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding//Components=UTF-8 Added: trunk/Wonder/Examples/Misc/ERRestRouteExample/Components/Main.api =================================================================== --- trunk/Wonder/Examples/Misc/ERRestRouteExample/Components/Main.api (rev 0) +++ trunk/Wonder/Examples/Misc/ERRestRouteExample/Components/Main.api 2010-02-12 17:50:43 UTC (rev 10598) @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<wodefinitions> + <wo wocomponentcontent="false" class="Main.java"> + </wo> +</wodefinitions> Added: trunk/Wonder/Examples/Misc/ERRestRouteExample/Components/Main.wo/Main.html =================================================================== --- trunk/Wonder/Examples/Misc/ERRestRouteExample/Components/Main.wo/Main.html (rev 0) +++ trunk/Wonder/Examples/Misc/ERRestRouteExample/Components/Main.wo/Main.html 2010-02-12 17:50:43 UTC (rev 10598) @@ -0,0 +1,22 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<html> + <head> + <title>ERRestRouteExample</title> + </head> + <body> + +<ul> + <li><wo:ERXRouteLink entityName="Company" action="index" format="plist">Show all Companies in plist format</wo:ERXRouteLink></li> + <li><wo:ERXRouteLink entityName="Company" action="index" format="xml">Show all Companies in XML format</wo:ERXRouteLink></li> + <li><wo:ERXRouteLink entityName="Company" action="index" format="json">Show all Companies in JSON format</wo:ERXRouteLink></li> + <li><wo:ERXRouteLink entityName="Company" action="index" format="sc">Show all Companies in SproutCore format</wo:ERXRouteLink></li> + <li><wo:ERXRouteLink entityName="Company" action="index" format="gndp">Show all Companies in Gianduia format</wo:ERXRouteLink></li> + <li><wo:ERXRouteLink entityName="Person" id="1" action="show" format="plist">Show Person 1 in plist format</wo:ERXRouteLink></li> + <li><wo:ERXRouteLink entityName="Person" id="1" action="show">Show Person 1 in HTML (goes to PersonShowPage)</wo:ERXRouteLink></li> + <li>curl -X PUT -d "{ name: 'Updated Name' }" <wo:str value="$personJsonURL"/></li> + <li>curl -X PUT -d "{ company: { type:'Company', id:1 } }" <wo:str value="$personJsonURL"/></li> + <li>curl -X DELETE <wo:str value="$companyURL"/></li> +</ul> + + </body> +</html> Added: trunk/Wonder/Examples/Misc/ERRestRouteExample/Components/Main.wo/Main.wod =================================================================== Added: trunk/Wonder/Examples/Misc/ERRestRouteExample/Components/Main.wo/Main.woo =================================================================== --- trunk/Wonder/Examples/Misc/ERRestRouteExample/Components/Main.wo/Main.woo (rev 0) +++ trunk/Wonder/Examples/Misc/ERRestRouteExample/Components/Main.wo/Main.woo 2010-02-12 17:50:43 UTC (rev 10598) @@ -0,0 +1,4 @@ +{ + "WebObjects Release" = "WebObjects 5.0"; + encoding = "UTF-8"; +} \ No newline at end of file Added: trunk/Wonder/Examples/Misc/ERRestRouteExample/Components/PersonShowPage.wo/PersonShowPage.html =================================================================== --- trunk/Wonder/Examples/Misc/ERRestRouteExample/Components/PersonShowPage.wo/PersonShowPage.html (rev 0) +++ trunk/Wonder/Examples/Misc/ERRestRouteExample/Components/PersonShowPage.wo/PersonShowPage.html 2010-02-12 17:50:43 UTC (rev 10598) @@ -0,0 +1,12 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> + <title>untitled</title> +</head> +<body> +Person = <wo:str value = "$person.name"/> +</body> +</html> Added: trunk/Wonder/Examples/Misc/ERRestRouteExample/Components/PersonShowPage.wo/PersonShowPage.wod =================================================================== Added: trunk/Wonder/Examples/Misc/ERRestRouteExample/Components/PersonShowPage.wo/PersonShowPage.woo =================================================================== --- trunk/Wonder/Examples/Misc/ERRestRouteExample/Components/PersonShowPage.wo/PersonShowPage.woo (rev 0) +++ trunk/Wonder/Examples/Misc/ERRestRouteExample/Components/PersonShowPage.wo/PersonShowPage.woo 2010-02-12 17:50:43 UTC (rev 10598) @@ -0,0 +1,4 @@ +{ + "WebObjects Release" = "WebObjects 5.0"; + encoding = "UTF-8"; +} \ No newline at end of file Added: trunk/Wonder/Examples/Misc/ERRestRouteExample/Resources/Properties =================================================================== --- trunk/Wonder/Examples/Misc/ERRestRouteExample/Resources/Properties (rev 0) +++ trunk/Wonder/Examples/Misc/ERRestRouteExample/Resources/Properties 2010-02-12 17:50:43 UTC (rev 10598) @@ -0,0 +1,68 @@ +# OGNL +ognl.helperFunctions=true +ognl.inlineBindings=true + +# Misc +er.extensions.stackTrace.cleanup=true + +# EOF +er.extensions.ERXEC.safeLocking=true +er.extensions.ERXEC.useSharedEditingContext=false +er.extensions.ERXEnterpriseObject.applyRestrictingQualifierOnInsert=true +er.extensions.ERXEnterpriseObject.updateInverseRelationships=true +#dbConnectURLGLOBAL= +#dbConnectUserGLOBAL= +#dbConnectPasswordGLOBAL= + +# Migrations +er.migration.migrateAtStartup=true +er.migration.createTablesIfNecessary=true +#er.migration.modelNames=YourModel + +# Misc Components +#er.extensions.ERXWOForm.multipleSubmitDefault=true +#er.extensions.ERXWORepetition.checkHashCodes=true +#er.extensions.ERXWORepetition.raiseOnUnmatchedObject=true +#er.extensions.ERXWORepetition.eoSupport=true +#er.component.clickToOpen=true +#wolips.password=wo + +# ERJavaMail +er.javamail.centralize=true +er.javamail.adminEmail=ad...@yo... +er.javamail.debugEnabled=false +er.javamail.smtpHost=your.smtpserver.com +er.javamail.smtpAuth=false +er.javamail.smtpUser= +er.javamail.smtpPassword= + +# Log4j Configuration +log4j.loggerFactory=er.extensions.logging.ERXLogger$Factory +log4j.rootCategory=INFO,A1 +log4j.appender.A1=er.extensions.logging.ERXConsoleAppender +log4j.appender.A1.layout=er.extensions.logging.ERXPatternLayout +log4j.appender.A1.layout.ConversionPattern=%d{MMM dd HH:mm:ss} %$[%#] %-5p %c %x - %m%n + +# Log4j Categories +# Here are a few log4j sub-categories that are interesting. +# Don't forget that in developement mode this file will get reloaded +# everytime it changes, so if you say want to turn adaptor debugging +# on in the middle of the app simply set the below category to debug. +# Very handy. +# Base Category +log4j.logger.er=INFO + +# ERExtensions +# Transaction - Switching this to debug will start the sql ouputting. +log4j.logger.er.transaction.adaptor.EOAdaptorDebugEnabled=DEBUG + +# Fixes - Turning this on will show all the models that are loaded +log4j.logger.er.extensions.fixes.ERSharedEOLoader=INFO + +er.extensions.ERXNSLogLog4jBridge=INFO +#log4j.logger.er.eo.ERXGenericRecord=DEBUG +#log4j.logger.er.validation.ERXEntityClassDescription=DEBUG +#log4j.logger.er.default.ERXEntityClassDescription=DEBUG +log4j.logger.er.extensions.ERXDatabaseContextDelegate=WARN +log4j.logger.er.extensions.ERXConfigurationManager=INFO +#log4j.logger.er.extensions.ERXApplication.RequestHandling=DEBUG Added: trunk/Wonder/Examples/Misc/ERRestRouteExample/Resources/RestExample.eogen =================================================================== --- trunk/Wonder/Examples/Misc/ERRestRouteExample/Resources/RestExample.eogen (rev 0) +++ trunk/Wonder/Examples/Misc/ERRestRouteExample/Resources/RestExample.eogen 2010-02-12 17:50:43 UTC (rev 10598) @@ -0,0 +1 @@ + -destination Sources -extension java -java -javaTemplate _WonderEntity.java -model Resources/RestExample.eomodeld -packagedirs -subclassDestination Sources -subclassJavaTemplate WonderEntity.java -verbose -loadModelGroup \ No newline at end of file Added: trunk/Wonder/Examples/Misc/ERRestRouteExample/Resources/RestExample.eomodeld/Animal.plist =================================================================== --- trunk/Wonder/Examples/Misc/ERRestRouteExample/Resources/RestExample.eomodeld/Animal.plist (rev 0) +++ trunk/Wonder/Examples/Misc/ERRestRouteExample/Resources/RestExample.eomodeld/Animal.plist 2010-02-12 17:50:43 UTC (rev 10598) @@ -0,0 +1,24 @@ +{ + attributes = ( + {allowsNull = N; name = id; prototypeName = id; }, + {allowsNull = N; columnName = name; name = name; prototypeName = varchar255; }, + {allowsNull = N; columnName = ownerID; name = ownerID; prototypeName = id; } + ); + attributesUsedForLocking = (id, name, ownerID); + className = "er.rest.example.model.Animal"; + classProperties = (name, owner); + externalName = Animal; + fetchSpecificationDictionary = {}; + name = Animal; + primaryKeyAttributes = (id); + relationships = ( + { + destination = Person; + isMandatory = Y; + isToMany = N; + joinSemantic = EOInnerJoin; + joins = ({destinationAttribute = id; sourceAttribute = ownerID; }); + name = owner; + } + ); +} Added: trunk/Wonder/Examples/Misc/ERRestRouteExample/Resources/RestExample.eomodeld/Company.plist =================================================================== --- trunk/Wonder/Examples/Misc/ERRestRouteExample/Resources/RestExample.eomodeld/Company.plist (rev 0) +++ trunk/Wonder/Examples/Misc/ERRestRouteExample/Resources/RestExample.eomodeld/Company.plist 2010-02-12 17:50:43 UTC (rev 10598) @@ -0,0 +1,22 @@ +{ + attributes = ( + {allowsNull = N; name = id; prototypeName = id; }, + {allowsNull = N; columnName = name; name = name; prototypeName = varchar255; } + ); + attributesUsedForLocking = (id, name); + className = "er.rest.example.model.Company"; + classProperties = (employees, name); + externalName = Company; + fetchSpecificationDictionary = {}; + name = Company; + primaryKeyAttributes = (id); + relationships = ( + { + destination = Person; + isToMany = Y; + joinSemantic = EOInnerJoin; + joins = ({destinationAttribute = companyID; sourceAttribute = id; }); + name = employees; + } + ); +} Added: trunk/Wonder/Examples/Misc/ERRestRouteExample/Resources/RestExample.eomodeld/Person.plist =================================================================== --- trunk/Wonder/Examples/Misc/ERRestRouteExample/Resources/RestExample.eomodeld/Person.plist (rev 0) +++ trunk/Wonder/Examples/Misc/ERRestRouteExample/Resources/RestExample.eomodeld/Person.plist 2010-02-12 17:50:43 UTC (rev 10598) @@ -0,0 +1,36 @@ +{ + attributes = ( + { + allowsNull = N; + columnName = companyID; + name = companyID; + prototypeName = id; + }, + {allowsNull = N; name = id; prototypeName = id; }, + {allowsNull = N; columnName = name; name = name; prototypeName = varchar255; } + ); + attributesUsedForLocking = (companyID, id, name); + className = "er.rest.example.model.Person"; + classProperties = (company, name, pets); + externalName = Person; + fetchSpecificationDictionary = {}; + name = Person; + primaryKeyAttributes = (id); + relationships = ( + { + destination = Company; + isMandatory = Y; + isToMany = N; + joinSemantic = EOInnerJoin; + joins = ({destinationAttribute = id; sourceAttribute = companyID; }); + name = company; + }, + { + destination = Animal; + isToMany = Y; + joinSemantic = EOInnerJoin; + joins = ({destinationAttribute = ownerID; sourceAttribute = id; }); + name = pets; + } + ); +} Added: trunk/Wonder/Examples/Misc/ERRestRouteExample/Resources/RestExample.eomodeld/index.eomodeld =================================================================== --- trunk/Wonder/Examples/Misc/ERRestRouteExample/Resources/RestExample.eomodeld/index.eomodeld (rev 0) +++ trunk/Wonder/Examples/Misc/ERRestRouteExample/Resources/RestExample.eomodeld/index.eomodeld 2010-02-12 17:50:43 UTC (rev 10598) @@ -0,0 +1,19 @@ +{ + EOModelVersion = "2.1"; + adaptorName = Memory; + connectionDictionary = {}; + entities = ( + {className = "er.rest.example.model.Animal"; name = Animal; }, + {className = "er.rest.example.model.Company"; name = Company; }, + {className = "er.rest.example.model.Person"; name = Person; } + ); + internalInfo = {"_deletedEntityNamesInObjectStore" = (Pet); }; + userInfo = { + "_EntityModeler" = { + activeDatabaseConfigName = Default; + databaseConfigs = { + Default = {adaptorName = Memory; prototypeEntityName = EOMemoryPrototypes; }; + }; + }; + }; +} Added: trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/Application.java =================================================================== --- trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/Application.java (rev 0) +++ trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/Application.java 2010-02-12 17:50:43 UTC (rev 10598) @@ -0,0 +1,59 @@ +package er.rest.example; + +import er.extensions.appserver.ERXApplication; +import er.rest.ERXRestNameRegistry; +import er.rest.example.controllers.CarController; +import er.rest.example.controllers.ManufacturerController; +import er.rest.example.controllers.PersonController; +import er.rest.example.model.Animal; +import er.rest.example.model.Company; +import er.rest.example.model.Person; +import er.rest.routes.ERXRoute; +import er.rest.routes.ERXRouteRequestHandler; + +/** + * This sets up a simple ERRest application with three entities -- Company, Person, and Animal. Note that this example app does not demonstrate any authentication checks. Authentication with rest can be achieved through any of the normal approaches -- + * basic auth, token. + * + * @author mschrag + */ +public class Application extends ERXApplication { + public static void main(String[] argv) { + ERXApplication.main(argv, Application.class); + } + + public Application() { + // They entity is "Animal" internally, but we want to name it "Pet" to the rest of the world + ERXRestNameRegistry.registry().setExternalNameForInternalName("Pet", "Animal"); + + // Register a route request handler and use the WO URL naming conventions (capitalized entity names, singular form, camel case -- i.e. /Company.plist) + ERXRouteRequestHandler routeRequestHandler = new ERXRouteRequestHandler(ERXRouteRequestHandler.WO); + + // Add the default routes for Company -- CompanyController does some JSR-311 annotations + routeRequestHandler.addDefaultRoutes(Company.ENTITY_NAME); + + // Add the default routes for Animal -- AnimalController is a ERXDefaultRouteController, and is exposed as "Pet" externally + routeRequestHandler.addDefaultRoutes(Animal.ENTITY_NAME); + + // This is showing what addDefaultRoutes actually does and that you add your own custom routes this way as well. + // routeRequestHandler.addDefaultRoutes(Person.ENTITY_NAME); + routeRequestHandler.addRoute(new ERXRoute(Person.ENTITY_NAME, "/Person", ERXRoute.Method.Head, PersonController.class, "head")); + routeRequestHandler.addRoute(new ERXRoute(Person.ENTITY_NAME, "/Person", ERXRoute.Method.Post, PersonController.class, "create")); + routeRequestHandler.addRoute(new ERXRoute(Person.ENTITY_NAME, "/Person", ERXRoute.Method.All, PersonController.class, "index")); + // MS: this only works with numeric ids + routeRequestHandler.addRoute(new ERXRoute(Person.ENTITY_NAME, "/Person/{action:identifier}", ERXRoute.Method.Get, PersonController.class)); + routeRequestHandler.addRoute(new ERXRoute(Person.ENTITY_NAME, "/Person/{person:Person}", ERXRoute.Method.Get, PersonController.class, "show")); + routeRequestHandler.addRoute(new ERXRoute(Person.ENTITY_NAME, "/Person/{person:Person}", ERXRoute.Method.Put, PersonController.class, "update")); + routeRequestHandler.addRoute(new ERXRoute(Person.ENTITY_NAME, "/Person/{person:Person}", ERXRoute.Method.Delete, PersonController.class, "destroy")); + routeRequestHandler.addRoute(new ERXRoute(Person.ENTITY_NAME, "/Person/{person:Person}/{action:identifier}", ERXRoute.Method.All, PersonController.class)); + + // Car and Manufacturer are two non-EO classes. For this to work properly, you need to either manually register + // delegates for them via IERXRestDelegate.Factory or create classes named <EntityName>RestDelegate, which is + // how this project works -- CarRestDelegate and ManufacturerRestDelegate. + routeRequestHandler.addDefaultRoutes("Car", false, CarController.class); + routeRequestHandler.addDefaultRoutes("Manufacturer", false, ManufacturerController.class); + + // Register the request handler with the application -- it becomse the "ra" request handler + ERXRouteRequestHandler.register(routeRequestHandler); + } +} Added: trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/DirectAction.java =================================================================== --- trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/DirectAction.java (rev 0) +++ trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/DirectAction.java 2010-02-12 17:50:43 UTC (rev 10598) @@ -0,0 +1,23 @@ +package er.rest.example; + +import com.webobjects.appserver.WOActionResults; +import com.webobjects.appserver.WORequest; + +import er.extensions.appserver.ERXDirectAction; +import er.rest.example.components.Main; + +/** + * Nothing interesting to see here. + * + * @author mschrag + */ +public class DirectAction extends ERXDirectAction { + public DirectAction(WORequest request) { + super(request); + } + + @Override + public WOActionResults defaultAction() { + return pageWithName(Main.class.getName()); + } +} Added: trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/Session.java =================================================================== --- trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/Session.java (rev 0) +++ trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/Session.java 2010-02-12 17:50:43 UTC (rev 10598) @@ -0,0 +1,15 @@ +package er.rest.example; + +import er.extensions.appserver.ERXSession; + +/** + * Nothing interesting to see here, either, though you are free to use sessions with ERRest if you want. + * + * @author mschrag + */ +public class Session extends ERXSession { + private static final long serialVersionUID = 1L; + + public Session() { + } +} Added: trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/components/Main.java =================================================================== --- trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/components/Main.java (rev 0) +++ trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/components/Main.java 2010-02-12 17:50:43 UTC (rev 10598) @@ -0,0 +1,35 @@ +package er.rest.example.components; + +import com.webobjects.appserver.WOContext; + +import er.extensions.components.ERXComponent; +import er.rest.routes.ERXRouteRequestHandler; + +public class Main extends ERXComponent { + public Main(WOContext context) { + super(context); + } + + protected String url(String path) { + context()._generateCompleteURLs(); + String url = context().urlWithRequestHandlerKey(ERXRouteRequestHandler.Key, path, null); + context()._generateRelativeURLs(); + return url; + } + + public String personXmlURL() { + return url("Person/1.xml"); + } + + public String personPlistURL() { + return url("Person/1.plist"); + } + + public String personJsonURL() { + return url("Person/1.json"); + } + + public String companyURL() { + return url("Company/2.plist"); + } +} Added: trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/components/PersonShowPage.java =================================================================== --- trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/components/PersonShowPage.java (rev 0) +++ trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/components/PersonShowPage.java 2010-02-12 17:50:43 UTC (rev 10598) @@ -0,0 +1,38 @@ +package er.rest.example.components; + +import com.webobjects.appserver.WOContext; + +import er.extensions.components.ERXComponent; +import er.rest.example.model.Person; +import er.rest.routes.ERXRouteParameter; +import er.rest.routes.IERXRouteComponent; + +/** + * Because PersonController has automatic HTML routing enabled, we didn't have to do anything special to + * have a /Person/1.html URL route to this page. It has to implement IERXRouteComponent as a security + * precaution. + * + * @author mschrag + */ +public class PersonShowPage extends ERXComponent implements IERXRouteComponent { + private Person _person; + + public PersonShowPage(WOContext context) { + super(context); + } + + /** + * By specifying this method is an ERXRouteParameter, the route controller will automatically + * bind the value of the "person" router parameter to this method. + * + * @param person + */ + @ERXRouteParameter + public void setPerson(Person person) { + _person = person; + } + + public Person person() { + return _person; + } +} \ No newline at end of file Added: trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/controllers/AnimalController.java =================================================================== --- trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/controllers/AnimalController.java (rev 0) +++ trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/controllers/AnimalController.java 2010-02-12 17:50:43 UTC (rev 10598) @@ -0,0 +1,103 @@ +package er.rest.example.controllers; + +import com.webobjects.appserver.WOActionResults; +import com.webobjects.appserver.WORequest; + +import er.extensions.eof.ERXKeyFilter; +import er.rest.ERXRestFetchSpecification; +import er.rest.example.model.Animal; +import er.rest.routes.ERXDefaultRouteController; + +/** + * AnimalController uses the non-annotation-based approach to routing and accessing objects. + * + * @author mschrag + */ +public class AnimalController extends ERXDefaultRouteController { + public AnimalController(WORequest request) { + super(request); + } + + /** + * Returns the value of the "pet" variable from the route. + * @return + */ + public Animal pet() { + Animal pet = (Animal) routeObjectForKey("pet"); + return pet; + } + + /** + * The query filter is used in indexAction to control what attributes and relationships + * you expose to qualifiers through query parameters + * + * @return + */ + public static ERXKeyFilter queryFilter() { + ERXKeyFilter filter = ERXKeyFilter.filterWithAllRecursive(); + return filter; + } + + /** + * This showFilter is used by indexAction and showAction and says to return all attributes + * of an Animal as well as the Owner relationship, and for the owner, include all of its attributes. + */ + public static ERXKeyFilter showFilter() { + ERXKeyFilter filter = ERXKeyFilter.filterWithAttributes(); + filter.include(Animal.OWNER).includeAttributes(); + return filter; + } + + /** + * The updateFilter us used by updateAction and createAction and says to allow updating any attributes of an + * Animal as well as the Owner relationship. + * @return + */ + public static ERXKeyFilter updateFilter() { + ERXKeyFilter filter = ERXKeyFilter.filterWithAttributes(); + filter.include(Animal.OWNER); + return filter; + } + + @Override + public WOActionResults createAction() { + Animal pet = (Animal) create(Animal.ENTITY_NAME, updateFilter()); + editingContext().saveChanges(); + return response(pet, showFilter()); + } + + @Override + public WOActionResults updateAction() { + Animal pet = pet(); + update(pet, updateFilter()); + editingContext().saveChanges(); + return response(pet, showFilter()); + } + + @Override + public WOActionResults destroyAction() throws Throwable { + Animal pet = pet(); + pet.delete(); + editingContext().saveChanges(); + return response(pet.primaryKey(), null); + } + + @Override + public WOActionResults newAction() throws Throwable { + return null; + } + + @Override + public WOActionResults showAction() { + return response(pet(), showFilter()); + } + + /** + * indexAction uses an ERXRestFetchSpecification, which optionally allows you to expose sorting, qualifying, and batching in query parameters + */ + @Override + public WOActionResults indexAction() { + ERXRestFetchSpecification<Animal> fetchSpec = new ERXRestFetchSpecification<Animal>(Animal.ENTITY_NAME, null, null, queryFilter(), Animal.NAME.ascs(), 25); + return response(editingContext(), Animal.ENTITY_NAME, fetchSpec.objects(editingContext(), options()), showFilter()); + } +} Added: trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/controllers/CarController.java =================================================================== --- trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/controllers/CarController.java (rev 0) +++ trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/controllers/CarController.java 2010-02-12 17:50:43 UTC (rev 10598) @@ -0,0 +1,48 @@ +package er.rest.example.controllers; + +import com.webobjects.appserver.WOActionResults; +import com.webobjects.appserver.WORequest; + +import er.extensions.eof.ERXKey; +import er.extensions.eof.ERXKeyFilter; +import er.rest.example.model.Car; +import er.rest.example.model.Manufacturer; +import er.rest.routes.ERXRouteController; +import er.rest.routes.jsr311.PathParam; + +/** + * CarController is the controller for Cars, which is a non-EO class. This works + * because there is a CarRestDelegate class that is magically loaded by name. See the Application constructor + * for more details. + * + * @author mschrag + */ +public class CarController extends ERXRouteController { + public CarController(WORequest request) { + super(request); + } + + protected ERXKeyFilter showFilter() { + ERXKeyFilter filter = ERXKeyFilter.filterWithAttributes(); + filter.include(new ERXKey<Manufacturer>("manufacturer")); + return filter; + } + + public WOActionResults indexAction() throws Throwable { + return response(Car.cars(), showFilter()); + } + + /** + * showAction is using the JSR-311 annotation @PathParam, which will automatically + * have the "car" variable passed in as the parameter (from the URL of the form /Car/{car}). The + * variable names are determined by your routes. The default routes add a bunch of common forms for + * you. See ERXRouteRequestHandler for more information on which default routes are added. + * + * @param car + * @return + * @throws Throwable + */ + public WOActionResults showAction(@PathParam("car") Car car) throws Throwable { + return response(car, showFilter()); + } +} Added: trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/controllers/CompanyController.java =================================================================== --- trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/controllers/CompanyController.java (rev 0) +++ trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/controllers/CompanyController.java 2010-02-12 17:50:43 UTC (rev 10598) @@ -0,0 +1,85 @@ +package er.rest.example.controllers; + +import com.webobjects.appserver.WOActionResults; +import com.webobjects.appserver.WORequest; + +import er.extensions.eof.ERXKeyFilter; +import er.rest.ERXRestFetchSpecification; +import er.rest.example.model.Company; +import er.rest.example.model.Person; +import er.rest.routes.ERXRouteController; +import er.rest.routes.jsr311.GET; +import er.rest.routes.jsr311.Path; +import er.rest.routes.jsr311.PathParam; + +/** + * CompanyController is implemented with JSR-311 annotations for all parameters, and adds + * a custom "employees" route at the bottom that shows JSR-311 annotation for registration. + * + * @author mschrag + * + */ +public class CompanyController extends ERXRouteController { + public CompanyController(WORequest request) { + super(request); + } + + public static ERXKeyFilter queryFilter() { + ERXKeyFilter filter = ERXKeyFilter.filterWithAllRecursive(); + return filter; + } + + public static ERXKeyFilter showFilter() { + ERXKeyFilter filter = ERXKeyFilter.filterWithAttributes(); + return filter; + } + + public static ERXKeyFilter updateFilter() { + ERXKeyFilter filter = ERXKeyFilter.filterWithAttributes(); + return filter; + } + + public WOActionResults createAction() { + Company company = (Company) create(Company.ENTITY_NAME, updateFilter()); + editingContext().saveChanges(); + return response(company, showFilter()); + } + + public WOActionResults updateAction(@PathParam("company") Company company) { + update(company, updateFilter()); + editingContext().saveChanges(); + return response(company, showFilter()); + } + + public WOActionResults destroyAction(@PathParam("company") Company company) throws Throwable { + company.delete(); + editingContext().saveChanges(); + return response(company.primaryKey(), null); + } + + public WOActionResults showAction(@PathParam("company") Company company) { + return response(company, showFilter()); + } + + /** + * JSR-311 registration of an employees route. This also creates a custom filter that says + * that when we show employees through a company, use the showFilter from PersonController, + * but remove the company relationship (since you specified a company) and include + * the "pets" relationship, but don't include any attributes from pets. + * @param company + * @return + */ + @GET + @Path("/company/{company:Company}/employees") + public WOActionResults employeesAction(@PathParam("company") Company company) { + ERXKeyFilter personFilter = PersonController.showFilter(); + personFilter.exclude(Person.COMPANY); + personFilter.include(Person.PETS).includeNone(); + return response(company.employees(), personFilter); + } + + public WOActionResults indexAction() { + ERXRestFetchSpecification<Company> fetchSpec = new ERXRestFetchSpecification<Company>(Company.ENTITY_NAME, null, null, queryFilter(), Company.NAME.ascs(), 25); + return response(editingContext(), Company.ENTITY_NAME, fetchSpec.objects(editingContext(), options()), showFilter()); + } +} Added: trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/controllers/ManufacturerController.java =================================================================== --- trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/controllers/ManufacturerController.java (rev 0) +++ trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/controllers/ManufacturerController.java 2010-02-12 17:50:43 UTC (rev 10598) @@ -0,0 +1,30 @@ +package er.rest.example.controllers; + +import com.webobjects.appserver.WOActionResults; +import com.webobjects.appserver.WORequest; + +import er.extensions.eof.ERXKeyFilter; +import er.rest.example.model.Manufacturer; +import er.rest.routes.ERXRouteController; +import er.rest.routes.jsr311.PathParam; + +/** + * Manufacturer is a non-EO class and ManufacturerController just shows a simple example of exposing it. This works + * because there is a ManufacturerRestDelegate class that is magically loaded by name. See the Application constructor + * for more details. + * + * @author mschrag + */ +public class ManufacturerController extends ERXRouteController { + public ManufacturerController(WORequest request) { + super(request); + } + + public WOActionResults indexAction() throws Throwable { + return response(Manufacturer.manufacturers(), ERXKeyFilter.filterWithAttributes()); + } + + public WOActionResults showAction(@PathParam("manufacturer") Manufacturer manufacturer) throws Throwable { + return response(manufacturer, ERXKeyFilter.filterWithAttributes()); + } +} Added: trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/controllers/PersonController.java =================================================================== --- trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/controllers/PersonController.java (rev 0) +++ trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/controllers/PersonController.java 2010-02-12 17:50:43 UTC (rev 10598) @@ -0,0 +1,103 @@ +package er.rest.example.controllers; + +import com.webobjects.appserver.WOActionResults; +import com.webobjects.appserver.WORequest; +import com.webobjects.foundation.NSTimestamp; + +import er.extensions.eof.ERXKey; +import er.extensions.eof.ERXKeyFilter; +import er.rest.ERXRestFetchSpecification; +import er.rest.example.model.Person; +import er.rest.routes.ERXDefaultRouteController; + +/** + * PersonController shows the non-annotation style of accessing parameters + * (i.e. using the routeObjectForKey methods) + * + * @author mschrag + */ +public class PersonController extends ERXDefaultRouteController { + public PersonController(WORequest request) { + super(request); + } + + /** + * Automatic HTML routing means that if someone requests Entity/X/action.html, the + * router controller will automatically look for an EntityActionPage component. For + * example, if you go to /Person/1.html, it will look for PersonShowPage. You can + * manually handle these as well but checking the current request format and + * choosing the appropriate component to return. + */ + @Override + protected boolean isAutomaticHtmlRoutingEnabled() { + return true; + } + + protected Person person() { + Person person = (Person) routeObjectForKey("person"); + return person; + } + + public static ERXKeyFilter queryFilter() { + ERXKeyFilter filter = ERXKeyFilter.filterWithAllRecursive(); + return filter; + } + + /** + * This shows adding a derived attribute into the fitler results. + * + * @return + */ + public static ERXKeyFilter showFilter() { + ERXKeyFilter filter = ERXKeyFilter.filterWithAttributes(); + filter.include(Person.COMPANY).includeAttributes(); + filter.include(Person.PETS).includeAttributes(); + filter.include(new ERXKey<NSTimestamp>("derivedCurrentTime")); // derivedCurrentTime is a non-model method on Person + return filter; + } + + public static ERXKeyFilter updateFilter() { + ERXKeyFilter filter = ERXKeyFilter.filterWithAttributes(); + filter.include(Person.COMPANY); + return filter; + } + + @Override + public WOActionResults createAction() { + Person person = (Person) create(Person.ENTITY_NAME, updateFilter()); + editingContext().saveChanges(); + return response(person, showFilter()); + } + + @Override + public WOActionResults updateAction() { + Person person = person(); + update(person, updateFilter()); + editingContext().saveChanges(); + return response(person, showFilter()); + } + + @Override + public WOActionResults destroyAction() throws Throwable { + Person person = person(); + person.delete(); + editingContext().saveChanges(); + return response(person.primaryKey(), null); + } + + @Override + public WOActionResults newAction() throws Throwable { + return null; + } + + @Override + public WOActionResults showAction() { + return response(person(), showFilter()); + } + + @Override + public WOActionResults indexAction() { + ERXRestFetchSpecification<Person> fetchSpec = new ERXRestFetchSpecification<Person>(Person.ENTITY_NAME, null, null, queryFilter(), Person.NAME.ascs(), 25); + return response(editingContext(), Person.ENTITY_NAME, fetchSpec.objects(editingContext(), options()), showFilter()); + } +} Added: trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/delegates/CarRestDelegate.java =================================================================== --- trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/delegates/CarRestDelegate.java (rev 0) +++ trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/delegates/CarRestDelegate.java 2010-02-12 17:50:43 UTC (rev 10598) @@ -0,0 +1,42 @@ +package er.rest.example.delegates; + +import com.webobjects.eocontrol.EOClassDescription; +import com.webobjects.foundation.NSArray; + +import er.extensions.eof.ERXQ; +import er.rest.ERXAbstractRestDelegate; +import er.rest.example.model.Car; + +/** + * CarsRestDelegate is an example of a rest delegate for retrieving + * and creating objects of non-EO types. The name of the class is + * important (the delegate for the "Car" entity), though you can manually + * register a different class name via IERXRestDelegate.Factory. + * + * @author mschrag + */ +public class CarRestDelegate extends ERXAbstractRestDelegate { + public CarRestDelegate() { + } + + @Override + protected Object _createObjectOfEntity(EOClassDescription entity) { + return new Car(); + } + + @Override + protected Object _primaryKeyForObject(EOClassDescription entity, Object obj) { + return ((Car) obj).getName(); + } + + @Override + protected Object _fetchObjectOfEntityWithID(EOClassDescription entity, Object id) { + NSArray<Car> cars = ERXQ.filtered(Car.cars(), ERXQ.is("name", id)); + return cars.size() == 0 ? null : cars.objectAtIndex(0); + } + + @Override + protected boolean _isDelegateForEntity(EOClassDescription entity) { + return "Car".equals(entity.entityName()); + } +} Added: trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/delegates/ManufacturerRestDelegate.java =================================================================== --- trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/delegates/ManufacturerRestDelegate.java (rev 0) +++ trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/delegates/ManufacturerRestDelegate.java 2010-02-12 17:50:43 UTC (rev 10598) @@ -0,0 +1,42 @@ +package er.rest.example.delegates; + +import com.webobjects.eocontrol.EOClassDescription; +import com.webobjects.foundation.NSArray; + +import er.extensions.eof.ERXQ; +import er.rest.ERXAbstractRestDelegate; +import er.rest.example.model.Manufacturer; + +/** + * ManufacturerRestDelegate is an example of a rest delegate for retrieving + * and creating objects of non-EO types. The name of the class is + * important (the delegate for the "Manufacturer" entity), though you can manually + * register a different class name via IERXRestDelegate.Factory. + * + * @author mschrag + */ +public class ManufacturerRestDelegate extends ERXAbstractRestDelegate { + public ManufacturerRestDelegate() { + } + + @Override + protected Object _createObjectOfEntity(EOClassDescription entity) { + return new Manufacturer(); + } + + @Override + protected Object _primaryKeyForObject(EOClassDescription entity, Object obj) { + return ((Manufacturer) obj).getName(); + } + + @Override + protected Object _fetchObjectOfEntityWithID(EOClassDescription entity, Object id) { + NSArray<Manufacturer> manufacturers = ERXQ.filtered(Manufacturer.manufacturers(), ERXQ.is("name", id)); + return manufacturers.size() == 0 ? null : manufacturers.objectAtIndex(0); + } + + @Override + protected boolean _isDelegateForEntity(EOClassDescription entity) { + return "Manufacturer".equals(entity.entityName()); + } +} Added: trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/migrations/RestExample0.java =================================================================== --- trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/migrations/RestExample0.java (rev 0) +++ trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/migrations/RestExample0.java 2010-02-12 17:50:43 UTC (rev 10598) @@ -0,0 +1,67 @@ +package er.rest.example.migrations; + +import com.webobjects.eoaccess.EOModel; +import com.webobjects.eocontrol.EOEditingContext; +import com.webobjects.foundation.NSArray; + +import er.extensions.migration.ERXMigrationDatabase; +import er.extensions.migration.ERXMigrationTable; +import er.extensions.migration.ERXModelVersion; +import er.extensions.migration.IERXPostMigration; +import er.rest.example.model.Animal; +import er.rest.example.model.Company; +import er.rest.example.model.Person; + +/** + * Migrations, though the default example runs with a Memory adaptor. + * + * @author mschrag + */ +public class RestExample0 extends ERXMigrationDatabase.Migration implements IERXPostMigration { + @Override + public NSArray<ERXModelVersion> modelDependencies() { + return null; + } + + @Override + public void downgrade(EOEditingContext editingContext, ERXMigrationDatabase database) throws Throwable { + // DO NOTHING + } + + @Override + public void upgrade(EOEditingContext editingContext, ERXMigrationDatabase database) throws Throwable { + ERXMigrationTable personTable = database.newTableNamed("Person"); + personTable.newIntegerColumn("companyID", false); + personTable.newIntegerColumn("id", false); + personTable.newStringColumn("name", 255, false); + personTable.create(); + personTable.setPrimaryKey("id"); + + ERXMigrationTable companyTable = database.newTableNamed("Company"); + companyTable.newIntegerColumn("id", false); + companyTable.newStringColumn("name", 255, false); + companyTable.create(); + companyTable.setPrimaryKey("id"); + + ERXMigrationTable petTable = database.newTableNamed("Pet"); + petTable.newIntegerColumn("id", false); + petTable.newStringColumn("name", 255, false); + petTable.newIntegerColumn("ownerID", false); + petTable.create(); + petTable.setPrimaryKey("id"); + + personTable.addForeignKey("companyID", "Company", "id"); + petTable.addForeignKey("ownerID", "Person", "id"); + } + + public void postUpgrade(EOEditingContext editingContext, EOModel model) throws Throwable { + Company c1 = Company.createCompany(editingContext, "mDT"); + Company c2 = Company.createCompany(editingContext, "Apple"); + Company c3 = Company.createCompany(editingContext, "Microsoft"); + Person p1 = Person.createPerson(editingContext, "Mike", c1); + Animal a1 = Animal.createAnimal(editingContext, "Derby", p1); + Animal a2 = Animal.createAnimal(editingContext, "Sydney", p1); + Person p2 = Person.createPerson(editingContext, "Adam", c1); + Animal a3 = Animal.createAnimal(editingContext, "Franny", p2); + } +} \ No newline at end of file Added: trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/model/Animal.java =================================================================== --- trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/model/Animal.java (rev 0) +++ trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/model/Animal.java 2010-02-12 17:50:43 UTC (rev 10598) @@ -0,0 +1,7 @@ +package er.rest.example.model; + +import org.apache.log4j.Logger; + +public class Animal extends _Animal { + private static Logger log = Logger.getLogger(Animal.class); +} Added: trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/model/Car.java =================================================================== --- trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/model/Car.java (rev 0) +++ trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/model/Car.java 2010-02-12 17:50:43 UTC (rev 10598) @@ -0,0 +1,54 @@ +package er.rest.example.model; + +import com.webobjects.foundation.NSArray; +import com.webobjects.foundation.NSMutableArray; + +/** + * Car is just a simple non-EO model class. It has the full set of + * available instances cached in it, though this could just as + * easily be exposing a fetch from a non-EO database. + * + * @author mschrag + */ +public class Car { + private static NSMutableArray<Car> _cars; + + public static NSArray<Car> cars() { + if (_cars == null) { + NSMutableArray<Car> cars = new NSMutableArray<Car>(); + cars.addObject(new Car(Manufacturer.MINI, "Cooper S")); + cars.addObject(new Car(Manufacturer.PORSCHE, "911")); + cars.addObject(new Car(Manufacturer.PORSCHE, "Cayenne")); + cars.addObject(new Car(Manufacturer.TOYOTA, "Celica")); + _cars = cars; + } + return _cars; + } + + private String _name; + private Manufacturer _manufacturer; + + public Car() { + } + + public Car(Manufacturer _manufacturer, String name) { + setManufacturer(_manufacturer); + setName(name); + } + + public void setName(String name) { + _name = name; + } + + public String getName() { + return _name; + } + + public void setManufacturer(Manufacturer manufacturer) { + _manufacturer = manufacturer; + } + + public Manufacturer getManufacturer() { + return _manufacturer; + } +} Added: trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/model/Company.java =================================================================== --- trunk/Wonder/Examples/Misc/ERRestRouteExample/Sources/er/rest/example/model/Company.java (rev 0) +++ trunk/Wonder/Exampl... [truncated message content] |