KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > objectstyle > cayenne > service > ClientToServerDiffConverter


1 /* ====================================================================
2  *
3  * The ObjectStyle Group Software License, version 1.1
4  * ObjectStyle Group - http://objectstyle.org/
5  *
6  * Copyright (c) 2002-2005, Andrei (Andrus) Adamchik and individual authors
7  * of the software. All rights reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  *
13  * 1. Redistributions of source code must retain the above copyright
14  * notice, this list of conditions and the following disclaimer.
15  *
16  * 2. Redistributions in binary form must reproduce the above copyright
17  * notice, this list of conditions and the following disclaimer in
18  * the documentation and/or other materials provided with the
19  * distribution.
20  *
21  * 3. The end-user documentation included with the redistribution, if any,
22  * must include the following acknowlegement:
23  * "This product includes software developed by independent contributors
24  * and hosted on ObjectStyle Group web site (http://objectstyle.org/)."
25  * Alternately, this acknowlegement may appear in the software itself,
26  * if and wherever such third-party acknowlegements normally appear.
27  *
28  * 4. The names "ObjectStyle Group" and "Cayenne" must not be used to endorse
29  * or promote products derived from this software without prior written
30  * permission. For written permission, email
31  * "andrus at objectstyle dot org".
32  *
33  * 5. Products derived from this software may not be called "ObjectStyle"
34  * or "Cayenne", nor may "ObjectStyle" or "Cayenne" appear in their
35  * names without prior written permission.
36  *
37  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
38  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
39  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
40  * DISCLAIMED. IN NO EVENT SHALL THE OBJECTSTYLE GROUP OR
41  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
42  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
43  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
44  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
45  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
46  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
47  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
48  * SUCH DAMAGE.
49  * ====================================================================
50  *
51  * This software consists of voluntary contributions made by many
52  * individuals and hosted on ObjectStyle Group web site. For more
53  * information on the ObjectStyle Group, please see
54  * <http://objectstyle.org/>.
55  */

56 package org.objectstyle.cayenne.service;
57
58 import org.apache.commons.beanutils.PropertyUtils;
59 import org.objectstyle.cayenne.CayenneRuntimeException;
60 import org.objectstyle.cayenne.ObjectId;
61 import org.objectstyle.cayenne.Persistent;
62 import org.objectstyle.cayenne.distribution.GlobalID;
63 import org.objectstyle.cayenne.graph.GraphChangeHandler;
64
65 /**
66  * A GraphChangeHandler that propagates submitted object graph changes to an underlying
67  * ObjectContext. Graph node ids are expected to be GlobalIDs.
68  *
69  * @since 1.2
70  * @author Andrus Adamchik
71  */

72 class ClientToServerDiffConverter implements GraphChangeHandler {
73
74     ObjectDataContext context;
75
76     ClientToServerDiffConverter(ObjectDataContext context) {
77         this.context = context;
78     }
79
80     public void nodeIdChanged(Object JavaDoc nodeId, Object JavaDoc newId) {
81         throw new CayenneRuntimeException(
82                 "Not supported - client is not allowed to change Global ID of server objects.");
83     }
84
85     public void nodeCreated(Object JavaDoc nodeId) {
86         ObjectId id = toObjectId(nodeId);
87         context.createAndRegisterNewObject(id);
88     }
89
90     public void nodeRemoved(Object JavaDoc nodeId) {
91         Persistent object = findObject(nodeId);
92         context.deleteObject(object);
93     }
94
95     public void nodePropertyChanged(
96             Object JavaDoc nodeId,
97             String JavaDoc property,
98             Object JavaDoc oldValue,
99             Object JavaDoc newValue) {
100
101         Persistent object = findObject(nodeId);
102         try {
103             PropertyUtils.setSimpleProperty(object, property, newValue);
104         }
105         catch (Exception JavaDoc e) {
106             throw new CayenneRuntimeException("Error setting property: " + property, e);
107         }
108     }
109
110     public void arcCreated(Object JavaDoc nodeId, Object JavaDoc targetNodeId, Object JavaDoc arcId) {
111         throw new CayenneRuntimeException(
112                 "TODO: implement relationship change updates...");
113     }
114
115     public void arcDeleted(Object JavaDoc nodeId, Object JavaDoc targetNodeId, Object JavaDoc arcId) {
116         throw new CayenneRuntimeException(
117                 "TODO: implement relationship change updates...");
118     }
119
120     Persistent findObject(Object JavaDoc nodeId) {
121         ObjectId id = toObjectId(nodeId);
122         return context.getObjectStore().getObject(id);
123     }
124
125     ObjectId toObjectId(Object JavaDoc nodeId) {
126         if (nodeId instanceof GlobalID) {
127             return context.getEntityResolver().convertToObjectID((GlobalID) nodeId);
128         }
129         else if (nodeId instanceof ObjectId) {
130             return (ObjectId) nodeId;
131         }
132         else if (nodeId == null) {
133             throw new NullPointerException JavaDoc("Null GlobalID");
134         }
135         else {
136             throw new CayenneRuntimeException(
137                     "Client node id is expected to be GlobalID, got: " + nodeId);
138         }
139     }
140 }
141
Popular Tags