01: package org.apache.ojb.jdori.sql;
02:
03: import java.lang.reflect.Field;
04:
05: import javax.jdo.JDOFatalInternalException;
06:
07: import com.sun.jdori.StateManagerInternal;
08: import com.sun.jdori.common.model.jdo.JDOModelFactoryImpl;
09: import com.sun.jdori.common.model.runtime.RuntimeJavaModelFactory;
10: import com.sun.jdori.model.java.JavaModel;
11: import com.sun.jdori.model.java.JavaModelFactory;
12: import com.sun.jdori.model.jdo.JDOClass;
13: import com.sun.jdori.model.jdo.JDOModel;
14:
15: /* Copyright 2003-2005 The Apache Software Foundation
16: *
17: * Licensed under the Apache License, Version 2.0 (the "License");
18: * you may not use this file except in compliance with the License.
19: * You may obtain a copy of the License at
20: *
21: * http://www.apache.org/licenses/LICENSE-2.0
22: *
23: * Unless required by applicable law or agreed to in writing, software
24: * distributed under the License is distributed on an "AS IS" BASIS,
25: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
26: * See the License for the specific language governing permissions and
27: * limitations under the License.
28: */
29:
30: /**
31: * @author Thomas Mahler
32: *
33: * this is a helper class providing static convenience methods.
34: */
35: class Helper {
36: /**
37: * this method looks up the appropriate JDOClass for a given persistent Class.
38: * It uses the JDOModel to perfom this lookup.
39: * @param c the persistent Class
40: * @return the JDOCLass object
41: */
42: static JDOClass getJDOClass(Class c) {
43: JDOClass rc = null;
44: try {
45: JavaModelFactory javaModelFactory = RuntimeJavaModelFactory
46: .getInstance();
47: JavaModel javaModel = javaModelFactory.getJavaModel(c
48: .getClassLoader());
49: JDOModel m = JDOModelFactoryImpl.getInstance().getJDOModel(
50: javaModel);
51: rc = m.getJDOClass(c.getName());
52: } catch (RuntimeException ex) {
53: throw new JDOFatalInternalException("Not a JDO class: "
54: + c.getName());
55: }
56: return rc;
57: }
58:
59: /**
60: * obtains the internal JDO lifecycle state of the input StatemanagerInternal.
61: * This Method is helpful to display persistent objects internal state.
62: * @param sm the StateManager to be inspected
63: * @return the LifeCycleState of a StateManager instance
64: */
65: static Object getLCState(StateManagerInternal sm) {
66: // unfortunately the LifeCycleState classes are package private.
67: // so we have to do some dirty reflection hack to access them
68: try {
69: Field myLC = sm.getClass().getDeclaredField("myLC");
70: myLC.setAccessible(true);
71: return myLC.get(sm);
72: } catch (NoSuchFieldException e) {
73: return e;
74: } catch (IllegalAccessException e) {
75: return e;
76: }
77: }
78:
79: }
|