1 package org.sourceforge.jemm.client;
2
3 import org.sourceforge.jemm.database.ClassId;
4 import org.sourceforge.jemm.database.ClassInfo;
5 import org.sourceforge.jemm.database.ClientId;
6 import org.sourceforge.jemm.database.GetObjectResp;
7 import org.sourceforge.jemm.database.ObjectSyncData;
8 import org.sourceforge.jemm.database.ObjectSyncResp;
9 import org.sourceforge.jemm.database.StructureModifiedException;
10 import org.sourceforge.jemm.lifecycle.MethodListener;
11 import org.sourceforge.jemm.lifecycle.ShadowTypeObject;
12 import org.sourceforge.jemm.lifecycle.ShadowTypeObjectImpl;
13 import org.sourceforge.jemm.types.ID;
14 import org.sourceforge.jemm.util.JEMMObject;
15 import org.sourceforge.jemm.util.JEMMType;
16
17 public class JEMMObjectCreatorImpl implements JEMMObjectCreator {
18 protected final ClientId clientId = new ClientId("CLIENT");
19
20
21 protected JEMMObjectFieldMapper fieldMapper;
22 MethodListener methodListener;
23 ObjectDatabase database;
24
25 public JEMMObjectCreatorImpl(MethodListener ml,ObjectDatabase db) {
26 this.methodListener = ml;
27 this.database = db;
28 fieldMapper = new JEMMObjectFieldMapper(ml,database);
29 }
30
31 @Override public JEMMObject createObject(GetObjectResp resp,ClassInfo classInfo) {
32 JEMMObject jo = fieldMapper.create(resp, classInfo);
33 return jo;
34 }
35
36 @Override
37 public void refreshPrimitiveState(JEMMObject obj, GetObjectResp response) {
38 fieldMapper.refreshPrimitiveState(obj, response);
39 }
40
41 @Override
42 public ObjectSyncData getSyncData(JEMMObject jo) {
43 return fieldMapper.getSyncData(jo);
44 }
45
46 @Override
47 public void syncResponseUpdateObject(JEMMObject jo, ObjectSyncResp response) {
48 fieldMapper.syncResponseUpdateObject(jo,response);
49 }
50
51 @Override
52 public void initialise(JEMMObject origin) {
53 try {
54 ObjectAccessor oa = new ObjectAccessor(origin,database);
55
56 if(oa.isCreated())
57 return;
58
59 ClassMetadata cia = new ClassMetadata(origin);
60 ClassId classID = database.registerClass(cia.getClassInfo());
61 ID objID = database.newObject(classID,origin);
62 oa.create(objID,methodListener);
63 }catch(StructureModifiedException sme) {
64 throw new RuntimeException(sme);
65 }
66 }
67
68 @Override
69 public void initialise(JEMMType typeInstance) {
70 try {
71 ClassInfo ci = new ClassInfo(typeInstance.getClass());
72 ClassId classId = database.registerClass(ci);
73
74 ID objID = database.newObject(classId,typeInstance);
75
76 ShadowTypeObject sto = new ShadowTypeObjectImpl(typeInstance,objID,classId,database);
77 typeInstance.setShadow(sto);
78
79 } catch (StructureModifiedException e1) {
80 throw new RuntimeException(e1);
81 }
82 }
83 }