1 package org.apache.ojb.broker;
2
3 /* Copyright 2003-2005 The Apache Software Foundation
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18 import org.apache.commons.lang.builder.ToStringBuilder;
19
20 /**
21 * The <code>PBStateEvent</code> encapsulates information about
22 * the life-cycle/transaction demarcation of the used {@link org.apache.ojb.broker.PersistenceBroker}
23 * instance.
24 *
25 * @author Armin Waibel
26 * @version $Id: PBStateEvent.java,v 1.1 2007-08-24 22:17:35 ewestfal Exp $
27 */
28 public final class PBStateEvent extends PersistenceBrokerEvent
29 {
30 /** Denotes an event that happens before the broker will be closed. */
31 public static final int KEY_BEFORE_CLOSE = 1;
32 /** Denotes an event that happens before a transaction will be started. */
33 public static final int KEY_BEFORE_BEGIN = 2;
34 /** Denotes an event that happens before a transaction will be comitted. */
35 public static final int KEY_BEFORE_COMMIT = 3;
36 /** Denotes an event that happens before a transaction will be rolled back. */
37 public static final int KEY_BEFORE_ROLLBACK = 4;
38 /** Denotes an event that happens after a transaction was started. */
39 public static final int KEY_AFTER_BEGIN = 5;
40 /** Denotes an event that happens after a transaction was comitted. */
41 public static final int KEY_AFTER_COMMIT = 6;
42 /** Denotes an event that happens after a broker was opened. */
43 public static final int KEY_AFTER_OPEN = 7;
44 /** Denotes an event that happens after a transaction was rolled back. */
45 public static final int KEY_AFTER_ROLLBACK = 8;
46
47 private Type eventType;
48
49 /**
50 * Creates a new event instance.
51 *
52 * @param broker The broker
53 * @param eventType The type of the event
54 */
55 public PBStateEvent(PersistenceBroker broker, Type eventType)
56 {
57 super(broker);
58 this.eventType = eventType;
59 }
60
61 /**
62 * {@inheritDoc}
63 */
64 public String toString()
65 {
66 ToStringBuilder buf = new ToStringBuilder(this);
67 buf.append("type", eventType.toString()).
68 append("source object", getSource());
69 return buf.toString();
70 }
71
72 /**
73 * Returns the event type.
74 *
75 * @return The event type
76 */
77 public Type getEventType()
78 {
79 return eventType;
80 }
81
82 /**
83 * Enum-like class for the event types.
84 */
85 public static class Type
86 {
87 /** Denotes an event that happens before a transaction will be started. */
88 public static final Type BEFORE_BEGIN = new Type(KEY_BEFORE_BEGIN);
89 /** Denotes an event that happens after a transaction was started. */
90 public static final Type AFTER_BEGIN = new Type(KEY_AFTER_BEGIN);
91 /** Denotes an event that happens before a transaction will be comitted. */
92 public static final Type BEFORE_COMMIT = new Type(KEY_BEFORE_COMMIT);
93 /** Denotes an event that happens after a transaction was comitted. */
94 public static final Type AFTER_COMMIT = new Type(KEY_AFTER_COMMIT);
95 /** Denotes an event that happens before a transaction will be rolled back. */
96 public static final Type BEFORE_ROLLBACK = new Type(KEY_BEFORE_ROLLBACK);
97 /** Denotes an event that happens after a transaction was rolled back. */
98 public static final Type AFTER_ROLLBACK = new Type(KEY_AFTER_ROLLBACK);
99 /** Denotes an event that happens after a broker was opened. */
100 public static final Type AFTER_OPEN = new Type(KEY_AFTER_OPEN);
101 /** Denotes an event that happens before the broker will be closed. */
102 public static final Type BEFORE_CLOSE = new Type(KEY_BEFORE_CLOSE);
103
104 private int type;
105
106 /**
107 * Creates a new instance.
108 *
109 * @param type The type value
110 */
111 protected Type(int type)
112 {
113 this.type = type;
114 }
115
116 /**
117 * {@inheritDoc}
118 */
119 public final boolean equals(Object obj)
120 {
121 if (obj == this)
122 {
123 return true;
124 }
125 if (!(obj instanceof PBStateEvent))
126 {
127 return false;
128 }
129
130 return type == ((Type) obj).type;
131 }
132
133 /**
134 * {@inheritDoc}
135 */
136 public final int hashCode()
137 {
138 return type;
139 }
140
141 /**
142 * Returns the type id.
143 *
144 * @return The type id
145 */
146 public final int typeId()
147 {
148 return type;
149 }
150
151 /**
152 * {@inheritDoc}
153 */
154 public String toString()
155 {
156 return this.getClass().getName() + " [type= " + typeAsName(type) + "]";
157 }
158
159 private String typeAsName(int aType)
160 {
161 if (aType == KEY_AFTER_BEGIN)
162 {
163 return "AFTER_BEGIN";
164 }
165 else if (aType == KEY_AFTER_COMMIT)
166 {
167 return "AFTER_COMMIT";
168 }
169 else if (aType == KEY_AFTER_OPEN)
170 {
171 return "AFTER_OPEN";
172 }
173 else if (aType == KEY_AFTER_ROLLBACK)
174 {
175 return "AFTER_ROLLBACK";
176 }
177 else if (aType == KEY_BEFORE_BEGIN)
178 {
179 return "BEFORE_BEGIN";
180 }
181 else if (aType == KEY_BEFORE_CLOSE)
182 {
183 return "BEFORE_CLOSE";
184 }
185 else if (aType == KEY_BEFORE_COMMIT)
186 {
187 return "BEFORE_COMMIT";
188 }
189 else if (aType == KEY_BEFORE_ROLLBACK)
190 {
191 return "BEFORE_ROLLBACK";
192 }
193 else
194 {
195 throw new OJBRuntimeException("Could not find type " + aType);
196 }
197 }
198 }
199 }