You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2006/07/04 21:31:26 UTC
svn commit: r419076 - in
/incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client:
./ src/ src/cayenne/ src/cayenne/tutorial/ src/cayenne/tutorial/client/
src/cayenne/tutorial/client/auto/
Author: aadamchik
Date: Tue Jul 4 12:31:25 2006
New Revision: 419076
URL: http://svn.apache.org/viewvc?rev=419076&view=rev
Log:
ROP tutorials
Added:
incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client/.classpath
incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client/.project
incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client/src/
incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client/src/cayenne/
incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client/src/cayenne/tutorial/
incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client/src/cayenne/tutorial/client/
incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client/src/cayenne/tutorial/client/Artist.java
incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client/src/cayenne/tutorial/client/Gallery.java
incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client/src/cayenne/tutorial/client/Main.java
incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client/src/cayenne/tutorial/client/Painting.java
incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client/src/cayenne/tutorial/client/auto/
incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client/src/cayenne/tutorial/client/auto/_Artist.java
incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client/src/cayenne/tutorial/client/auto/_Gallery.java
incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client/src/cayenne/tutorial/client/auto/_Painting.java
Added: incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client/.classpath
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client/.classpath?rev=419076&view=auto
==============================================================================
--- incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client/.classpath (added)
+++ incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client/.classpath Tue Jul 4 12:31:25 2006
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="lib" path="/Users/andrus/Desktop/cayenne-1.2RC2/lib/cayenne-client-nodeps.jar"/>
+ <classpathentry kind="lib" path="/Users/andrus/opt/commons-logging-1.0.4/commons-logging.jar"/>
+ <classpathentry kind="lib" path="/Users/andrus/opt/commons-collections-3.1/commons-collections-3.1.jar"/>
+ <classpathentry kind="lib" path="/Users/andrus/opt/commons-lang-2.1/commons-lang-2.1.jar"/>
+ <classpathentry kind="lib" path="/Users/andrus/opt/hessian-3.0.13/hessian-3.0.13.jar"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
Added: incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client/.project
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client/.project?rev=419076&view=auto
==============================================================================
--- incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client/.project (added)
+++ incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client/.project Tue Jul 4 12:31:25 2006
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>cayenne-tutorial-client</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
Added: incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client/src/cayenne/tutorial/client/Artist.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client/src/cayenne/tutorial/client/Artist.java?rev=419076&view=auto
==============================================================================
--- incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client/src/cayenne/tutorial/client/Artist.java (added)
+++ incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client/src/cayenne/tutorial/client/Artist.java Tue Jul 4 12:31:25 2006
@@ -0,0 +1,38 @@
+package cayenne.tutorial.client;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import cayenne.tutorial.client.auto._Artist;
+
+/**
+ * A persistent class mapped as "Artist" Cayenne entity.
+ */
+public class Artist extends _Artist {
+ static final String DEFAULT_DATE_FORMAT = "yyyyMMdd";
+
+ /**
+ * Sets date of birth using a string in format yyyyMMdd.
+ */
+ public void setDateOfBirthString(String yearMonthDay) {
+ if (yearMonthDay == null) {
+ setDateOfBirth(null);
+ }
+ else {
+
+ Date date;
+ try {
+ date = new SimpleDateFormat(DEFAULT_DATE_FORMAT).parse(yearMonthDay);
+ }
+ catch (ParseException e) {
+ throw new IllegalArgumentException("A date argument must be in format '"
+ + DEFAULT_DATE_FORMAT
+ + "': "
+ + yearMonthDay);
+ }
+
+ setDateOfBirth(date);
+ }
+ }
+}
\ No newline at end of file
Added: incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client/src/cayenne/tutorial/client/Gallery.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client/src/cayenne/tutorial/client/Gallery.java?rev=419076&view=auto
==============================================================================
--- incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client/src/cayenne/tutorial/client/Gallery.java (added)
+++ incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client/src/cayenne/tutorial/client/Gallery.java Tue Jul 4 12:31:25 2006
@@ -0,0 +1,10 @@
+package cayenne.tutorial.client;
+
+import cayenne.tutorial.client.auto._Gallery;
+
+/**
+ * A persistent class mapped as "Gallery" Cayenne entity.
+ */
+public class Gallery extends _Gallery {
+
+}
\ No newline at end of file
Added: incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client/src/cayenne/tutorial/client/Main.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client/src/cayenne/tutorial/client/Main.java?rev=419076&view=auto
==============================================================================
--- incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client/src/cayenne/tutorial/client/Main.java (added)
+++ incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client/src/cayenne/tutorial/client/Main.java Tue Jul 4 12:31:25 2006
@@ -0,0 +1,122 @@
+package cayenne.tutorial.client;
+
+import java.util.Calendar;
+import java.util.Collections;
+import java.util.GregorianCalendar;
+import java.util.List;
+
+import org.objectstyle.cayenne.CayenneContext;
+import org.objectstyle.cayenne.DataChannel;
+import org.objectstyle.cayenne.DataObjectUtils;
+import org.objectstyle.cayenne.ObjectContext;
+import org.objectstyle.cayenne.exp.Expression;
+import org.objectstyle.cayenne.exp.ExpressionFactory;
+import org.objectstyle.cayenne.query.NamedQuery;
+import org.objectstyle.cayenne.query.QueryChain;
+import org.objectstyle.cayenne.query.SelectQuery;
+import org.objectstyle.cayenne.remote.ClientChannel;
+import org.objectstyle.cayenne.remote.ClientConnection;
+import org.objectstyle.cayenne.remote.hessian.HessianConnection;
+
+public class Main {
+
+ public static void main(String[] args) {
+
+ ClientConnection connection = new HessianConnection(
+ "http://localhost:8080/cayenne-service", "cayenne-user",
+ "secret", null);
+
+ DataChannel channel = new ClientChannel(connection);
+
+ ObjectContext context = new CayenneContext(channel);
+
+ // cleans up all data, so that we start with empty database on each
+ // tutorial run
+ mappingQueriesChapter(context);
+
+ // persists an artist, a gallery and a few paintings
+ dataObjectsChapter(context);
+
+ // selects previously saved data
+ selectQueryChapter(context);
+
+ // deletes objects
+ deleteChapter(context);
+ }
+
+ static void dataObjectsChapter(ObjectContext context) {
+ Artist picasso = (Artist) context.newObject(Artist.class);
+ picasso.setName("Pablo Picasso");
+ picasso.setDateOfBirthString("18811025");
+
+ Gallery metropolitan = (Gallery) context.newObject(Gallery.class);
+ metropolitan.setName("Metropolitan Museum of Art");
+
+ Painting girl = (Painting) context.newObject(Painting.class);
+ girl.setName("Girl Reading at a Table");
+
+ Painting stein = (Painting) context.newObject(Painting.class);
+ stein.setName("Gertrude Stein");
+
+ picasso.addToPaintings(girl);
+ picasso.addToPaintings(stein);
+
+ girl.setGallery(metropolitan);
+ stein.setGallery(metropolitan);
+
+ context.commitChanges();
+ }
+
+ static void mappingQueriesChapter(ObjectContext context) {
+
+ QueryChain chain = new QueryChain();
+ chain.addQuery(new NamedQuery("DeleteAll", Collections.singletonMap(
+ "table", "PAINTING")));
+ chain.addQuery(new NamedQuery("DeleteAll", Collections.singletonMap(
+ "table", "ARTIST")));
+ chain.addQuery(new NamedQuery("DeleteAll", Collections.singletonMap(
+ "table", "GALLERY")));
+
+ context.performGenericQuery(chain);
+
+ }
+
+ static void selectQueryChapter(ObjectContext context) {
+
+ // select all paintings
+ SelectQuery select1 = new SelectQuery(Painting.class);
+ List paintings1 = context.performQuery(select1);
+
+ // select paintings that start with "Gi*"
+ Expression qualifier2 = ExpressionFactory.likeIgnoreCaseExp(
+ Painting.NAME_PROPERTY, "gi%");
+ SelectQuery select2 = new SelectQuery(Painting.class, qualifier2);
+ List paintings2 = context.performQuery(select2);
+
+ // select all paintings done by artists who were born more than a 100
+ // years ago
+ Calendar c = new GregorianCalendar();
+ c.set(c.get(Calendar.YEAR) - 100, 0, 1, 0, 0, 0);
+
+ Expression qualifier3 = Expression
+ .fromString("artist.dateOfBirth < $date");
+ qualifier3 = qualifier3.expWithParameters(Collections.singletonMap(
+ "date", c.getTime()));
+ SelectQuery select3 = new SelectQuery(Painting.class, qualifier3);
+ List paintings3 = context.performQuery(select3);
+ }
+
+ static void deleteChapter(ObjectContext context) {
+ Expression qualifier = ExpressionFactory.matchExp(Artist.NAME_PROPERTY,
+ "Pablo Picasso");
+ SelectQuery select = new SelectQuery(Artist.class, qualifier);
+
+ Artist picasso = (Artist) DataObjectUtils.objectForQuery(context,
+ select);
+ if (picasso != null) {
+
+ context.deleteObject(picasso);
+ context.commitChanges();
+ }
+ }
+}
\ No newline at end of file
Added: incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client/src/cayenne/tutorial/client/Painting.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client/src/cayenne/tutorial/client/Painting.java?rev=419076&view=auto
==============================================================================
--- incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client/src/cayenne/tutorial/client/Painting.java (added)
+++ incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client/src/cayenne/tutorial/client/Painting.java Tue Jul 4 12:31:25 2006
@@ -0,0 +1,10 @@
+package cayenne.tutorial.client;
+
+import cayenne.tutorial.client.auto._Painting;
+
+/**
+ * A persistent class mapped as "Painting" Cayenne entity.
+ */
+public class Painting extends _Painting {
+
+}
\ No newline at end of file
Added: incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client/src/cayenne/tutorial/client/auto/_Artist.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client/src/cayenne/tutorial/client/auto/_Artist.java?rev=419076&view=auto
==============================================================================
--- incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client/src/cayenne/tutorial/client/auto/_Artist.java (added)
+++ incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client/src/cayenne/tutorial/client/auto/_Artist.java Tue Jul 4 12:31:25 2006
@@ -0,0 +1,91 @@
+package cayenne.tutorial.client.auto;
+
+import java.util.Date;
+import java.util.List;
+
+import org.objectstyle.cayenne.PersistentObject;
+
+import cayenne.tutorial.client.Painting;
+
+/**
+ * A generated persistent class mapped as "Artist" Cayenne entity. It is a good idea to
+ * avoid changing this class manually, since it will be overwritten next time code is
+ * regenerated. If you need to make any customizations, put them in a subclass.
+ */
+public class _Artist extends PersistentObject {
+
+ public static final String DATE_OF_BIRTH_PROPERTY = "dateOfBirth";
+ public static final String NAME_PROPERTY = "name";
+ public static final String PAINTINGS_PROPERTY = "paintings";
+
+ protected Date dateOfBirth;
+ protected String name;
+ protected List paintings;
+
+ public Date getDateOfBirth() {
+ if(objectContext != null) {
+ objectContext.prepareForAccess(this, "dateOfBirth");
+ }
+
+ return dateOfBirth;
+ }
+ public void setDateOfBirth(Date dateOfBirth) {
+ if(objectContext != null) {
+ objectContext.prepareForAccess(this, "dateOfBirth");
+ }
+
+ Object oldValue = this.dateOfBirth;
+ this.dateOfBirth = dateOfBirth;
+
+ // notify objectContext about simple property change
+ if(objectContext != null) {
+ objectContext.propertyChanged(this, "dateOfBirth", oldValue, dateOfBirth);
+ }
+ }
+
+
+ public String getName() {
+ if(objectContext != null) {
+ objectContext.prepareForAccess(this, "name");
+ }
+
+ return name;
+ }
+ public void setName(String name) {
+ if(objectContext != null) {
+ objectContext.prepareForAccess(this, "name");
+ }
+
+ Object oldValue = this.name;
+ this.name = name;
+
+ // notify objectContext about simple property change
+ if(objectContext != null) {
+ objectContext.propertyChanged(this, "name", oldValue, name);
+ }
+ }
+
+
+ public List getPaintings() {
+ if(objectContext != null) {
+ objectContext.prepareForAccess(this, "paintings");
+ }
+
+ return paintings;
+ }
+ public void addToPaintings(Painting object) {
+ if(objectContext != null) {
+ objectContext.prepareForAccess(this, "paintings");
+ }
+
+ this.paintings.add(object);
+ }
+ public void removeFromPaintings(Painting object) {
+ if(objectContext != null) {
+ objectContext.prepareForAccess(this, "paintings");
+ }
+
+ this.paintings.remove(object);
+ }
+
+}
\ No newline at end of file
Added: incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client/src/cayenne/tutorial/client/auto/_Gallery.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client/src/cayenne/tutorial/client/auto/_Gallery.java?rev=419076&view=auto
==============================================================================
--- incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client/src/cayenne/tutorial/client/auto/_Gallery.java (added)
+++ incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client/src/cayenne/tutorial/client/auto/_Gallery.java Tue Jul 4 12:31:25 2006
@@ -0,0 +1,66 @@
+package cayenne.tutorial.client.auto;
+
+import java.util.List;
+
+import org.objectstyle.cayenne.PersistentObject;
+
+import cayenne.tutorial.client.Painting;
+
+/**
+ * A generated persistent class mapped as "Gallery" Cayenne entity. It is a good idea to
+ * avoid changing this class manually, since it will be overwritten next time code is
+ * regenerated. If you need to make any customizations, put them in a subclass.
+ */
+public class _Gallery extends PersistentObject {
+
+ public static final String NAME_PROPERTY = "name";
+ public static final String PAINTINGS_PROPERTY = "paintings";
+
+ protected String name;
+ protected List paintings;
+
+ public String getName() {
+ if(objectContext != null) {
+ objectContext.prepareForAccess(this, "name");
+ }
+
+ return name;
+ }
+ public void setName(String name) {
+ if(objectContext != null) {
+ objectContext.prepareForAccess(this, "name");
+ }
+
+ Object oldValue = this.name;
+ this.name = name;
+
+ // notify objectContext about simple property change
+ if(objectContext != null) {
+ objectContext.propertyChanged(this, "name", oldValue, name);
+ }
+ }
+
+
+ public List getPaintings() {
+ if(objectContext != null) {
+ objectContext.prepareForAccess(this, "paintings");
+ }
+
+ return paintings;
+ }
+ public void addToPaintings(Painting object) {
+ if(objectContext != null) {
+ objectContext.prepareForAccess(this, "paintings");
+ }
+
+ this.paintings.add(object);
+ }
+ public void removeFromPaintings(Painting object) {
+ if(objectContext != null) {
+ objectContext.prepareForAccess(this, "paintings");
+ }
+
+ this.paintings.remove(object);
+ }
+
+}
\ No newline at end of file
Added: incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client/src/cayenne/tutorial/client/auto/_Painting.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client/src/cayenne/tutorial/client/auto/_Painting.java?rev=419076&view=auto
==============================================================================
--- incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client/src/cayenne/tutorial/client/auto/_Painting.java (added)
+++ incubator/cayenne/main/trunk/cayenne/tutorials/quick-start-rop/cayenne-tutorial-client/src/cayenne/tutorial/client/auto/_Painting.java Tue Jul 4 12:31:25 2006
@@ -0,0 +1,76 @@
+package cayenne.tutorial.client.auto;
+
+import org.objectstyle.cayenne.PersistentObject;
+import org.objectstyle.cayenne.ValueHolder;
+
+import cayenne.tutorial.client.Artist;
+import cayenne.tutorial.client.Gallery;
+
+/**
+ * A generated persistent class mapped as "Painting" Cayenne entity. It is a good idea to
+ * avoid changing this class manually, since it will be overwritten next time code is
+ * regenerated. If you need to make any customizations, put them in a subclass.
+ */
+public class _Painting extends PersistentObject {
+
+ public static final String NAME_PROPERTY = "name";
+ public static final String ARTIST_PROPERTY = "artist";
+ public static final String GALLERY_PROPERTY = "gallery";
+
+ protected String name;
+ protected ValueHolder artist;
+ protected ValueHolder gallery;
+
+ public String getName() {
+ if(objectContext != null) {
+ objectContext.prepareForAccess(this, "name");
+ }
+
+ return name;
+ }
+ public void setName(String name) {
+ if(objectContext != null) {
+ objectContext.prepareForAccess(this, "name");
+ }
+
+ Object oldValue = this.name;
+ this.name = name;
+
+ // notify objectContext about simple property change
+ if(objectContext != null) {
+ objectContext.propertyChanged(this, "name", oldValue, name);
+ }
+ }
+
+
+ public Artist getArtist() {
+ if(objectContext != null) {
+ objectContext.prepareForAccess(this, "artist");
+ }
+
+ return (Artist) artist.getValue();
+ }
+ public void setArtist(Artist artist) {
+ if(objectContext != null) {
+ objectContext.prepareForAccess(this, "artist");
+ }
+
+ this.artist.setValue(artist);
+ }
+
+ public Gallery getGallery() {
+ if(objectContext != null) {
+ objectContext.prepareForAccess(this, "gallery");
+ }
+
+ return (Gallery) gallery.getValue();
+ }
+ public void setGallery(Gallery gallery) {
+ if(objectContext != null) {
+ objectContext.prepareForAccess(this, "gallery");
+ }
+
+ this.gallery.setValue(gallery);
+ }
+
+}
\ No newline at end of file