Author: aadamchik
Date: Sat Jan 29 11:43:43 2011
New Revision: 1065000

URL: http://svn.apache.org/viewvc?rev=1065000&view=rev
Log:
CAY-1534 cayenne-lifecycle: implement AuditableFilter

refactoring, created AuditableFilter .. in progress

Added:
    
cayenne/main/trunk/framework/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/audit/AuditableFilter.java
      - copied, changed from r1064999, 
cayenne/main/trunk/framework/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/audit/AbstractAuditableHandler.java
    
cayenne/main/trunk/framework/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/audit/AuditableProcessor.java
      - copied, changed from r1064999, 
cayenne/main/trunk/framework/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/audit/Auditable.java
    
cayenne/main/trunk/framework/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/audit/
    
cayenne/main/trunk/framework/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/audit/AuditableFilterTest.java
    
cayenne/main/trunk/framework/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/audit/MockAuditableChild.java
      - copied, changed from r1064999, 
cayenne/main/trunk/framework/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/audit/Auditable.java
Removed:
    
cayenne/main/trunk/framework/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/audit/AbstractAuditableHandler.java
Modified:
    
cayenne/main/trunk/framework/cayenne-lifecycle/.settings/org.eclipse.jdt.core.prefs
    
cayenne/main/trunk/framework/cayenne-lifecycle/.settings/org.eclipse.jdt.ui.prefs
    
cayenne/main/trunk/framework/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/audit/Auditable.java

Modified: 
cayenne/main/trunk/framework/cayenne-lifecycle/.settings/org.eclipse.jdt.core.prefs
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-lifecycle/.settings/org.eclipse.jdt.core.prefs?rev=1065000&r1=1064999&r2=1065000&view=diff
==============================================================================
--- 
cayenne/main/trunk/framework/cayenne-lifecycle/.settings/org.eclipse.jdt.core.prefs
 (original)
+++ 
cayenne/main/trunk/framework/cayenne-lifecycle/.settings/org.eclipse.jdt.core.prefs
 Sat Jan 29 11:43:43 2011
@@ -1,4 +1,4 @@
-#Fri Jan 28 16:06:43 EET 2011
+#Sat Jan 29 08:59:08 EET 2011
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
@@ -146,6 +146,9 @@ org.eclipse.jdt.core.formatter.indent_sw
 org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true
 org.eclipse.jdt.core.formatter.indentation.size=4
 org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do
 not insert
 
org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=insert
 org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do 
not insert
 
org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
@@ -314,6 +317,8 @@ org.eclipse.jdt.core.formatter.insert_sp
 
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do
 not insert
 
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do
 not insert
 
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do
 not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
 org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
 org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
 org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false

Modified: 
cayenne/main/trunk/framework/cayenne-lifecycle/.settings/org.eclipse.jdt.ui.prefs
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-lifecycle/.settings/org.eclipse.jdt.ui.prefs?rev=1065000&r1=1064999&r2=1065000&view=diff
==============================================================================
--- 
cayenne/main/trunk/framework/cayenne-lifecycle/.settings/org.eclipse.jdt.ui.prefs
 (original)
+++ 
cayenne/main/trunk/framework/cayenne-lifecycle/.settings/org.eclipse.jdt.ui.prefs
 Sat Jan 29 11:43:43 2011
@@ -1,8 +1,9 @@
-#Sun Nov 30 14:02:13 EET 2008
+#Sat Jan 29 09:02:28 EET 2011
 eclipse.preferences.version=1
 formatter_settings_version=11
 org.eclipse.jdt.ui.ignorelowercasenames=true
 org.eclipse.jdt.ui.importorder=java;javax;org;com;
 org.eclipse.jdt.ui.javadoc=false
 org.eclipse.jdt.ui.ondemandthreshold=99
-org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" 
encoding\="UTF-8"?><templates><template autoinsert\="true" 
context\="gettercomment_context" deleted\="false" description\="Comment for 
getter method" enabled\="true" 
id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" 
name\="gettercomment"></template><template autoinsert\="true" 
context\="settercomment_context" deleted\="false" description\="Comment for 
setter method" enabled\="true" 
id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" 
name\="settercomment"></template><template autoinsert\="true" 
context\="constructorcomment_context" deleted\="false" description\="Comment 
for created constructors" enabled\="true" 
id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" 
name\="constructorcomment"></template><template autoinsert\="true" 
context\="filecomment_context" deleted\="false" description\="Comment for 
created Java files" enabled\="true" 
id\="org.eclipse.jdt.ui.text.codetemplates.filecom
 ment" name\="filecomment">/**\n * \n */</template><template 
autoinsert\="false" context\="typecomment_context" deleted\="false" 
description\="Comment for created types" enabled\="true" 
id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" 
name\="typecomment"></template><template autoinsert\="true" 
context\="fieldcomment_context" deleted\="false" description\="Comment for 
fields" enabled\="true" 
id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" 
name\="fieldcomment"></template><template autoinsert\="true" 
context\="methodcomment_context" deleted\="false" description\="Comment for 
non-overriding methods" enabled\="true" 
id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" 
name\="methodcomment"></template><template autoinsert\="true" 
context\="overridecomment_context" deleted\="false" description\="Comment for 
overriding methods" enabled\="true" 
id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" 
name\="overridecomment"></template><template autoinsert\="fal
 se" context\="newtype_context" deleted\="false" description\="Newly created 
files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" 
name\="newtype">/*****************************************************************\n
 *   Licensed to the Apache Software Foundation (ASF) under one\n *  or more 
contributor license agreements.  See the NOTICE file\n *  distributed with this 
work for additional information\n *  regarding copyright ownership.  The ASF 
licenses this file\n *  to you under the Apache License, Version 2.0 (the\n *  
"License"); you may not use this file except in compliance\n *  with the 
License.  You may obtain a copy of the License at\n *\n *    
http\://www.apache.org/licenses/LICENSE-2.0\n *\n *  Unless required by 
applicable law or agreed to in writing,\n *  software distributed under the 
License is distributed on an\n *  "AS IS" BASIS, WITHOUT WARRANTIES OR 
CONDITIONS OF ANY\n *  KIND, either express or implied.  See the License for 
the\n *  sp
 ecific language governing permissions and limitations\n *  under the 
License.\n 
****************************************************************/\n${package_declaration}\n\n${typecomment}\n${type_declaration}</template><template
 autoinsert\="true" context\="catchblock_context" deleted\="false" 
description\="Code in new catch blocks" enabled\="true" 
id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" 
name\="catchblock">${exception_var}.printStackTrace();</template><template 
autoinsert\="true" context\="methodbody_context" deleted\="false" 
description\="Code in created method stubs" enabled\="true" 
id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" 
name\="methodbody">${body_statement}</template><template autoinsert\="true" 
context\="constructorbody_context" deleted\="false" description\="Code in 
created constructor stubs" enabled\="true" 
id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" 
name\="constructorbody">${body_statement}</template><template autoinsert\=
 "true" context\="getterbody_context" deleted\="false" description\="Code in 
created getters" enabled\="true" 
id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" 
name\="getterbody">return ${field};</template><template autoinsert\="true" 
context\="setterbody_context" deleted\="false" description\="Code in created 
setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" 
name\="setterbody">${field} \= ${param};</template><template autoinsert\="true" 
context\="delegatecomment_context" deleted\="false" description\="Comment for 
delegate methods" enabled\="true" 
id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" 
name\="delegatecomment">/**\n * ${tags}\n * ${see_to_target}\n 
*/</template><template autoinsert\="true" context\="classbody_context" 
deleted\="false" description\="Code in new class type bodies" enabled\="true" 
id\="org.eclipse.jdt.ui.text.codetemplates.classbody" 
name\="classbody">\n</template><template autoinsert\="true" context\="inter
 facebody_context" deleted\="false" description\="Code in new interface type 
bodies" enabled\="true" 
id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" 
name\="interfacebody">\n</template><template autoinsert\="true" 
context\="enumbody_context" deleted\="false" description\="Code in new enum 
type bodies" enabled\="true" 
id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" 
name\="enumbody">\n</template><template autoinsert\="true" 
context\="annotationbody_context" deleted\="false" description\="Code in new 
annotation type bodies" enabled\="true" 
id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" 
name\="annotationbody">\n</template><template autoinsert\="true" 
context\="gettercomment_context" deleted\="false" description\="Comment for 
getter function" enabled\="true" 
id\="org.eclipse.wst.jsdt.ui.text.codetemplates.gettercomment" 
name\="gettercomment">/**\n * @return the ${bare_field_name}\n 
*/</template><template autoinsert\="true" context\="settercomment_context"
  deleted\="false" description\="Comment for setter function" enabled\="true" 
id\="org.eclipse.wst.jsdt.ui.text.codetemplates.settercomment" 
name\="settercomment">/**\n * @param ${param} the ${bare_field_name} to set\n 
*/</template><template autoinsert\="true" context\="constructorcomment_context" 
deleted\="false" description\="Comment for created constructors" 
enabled\="true" 
id\="org.eclipse.wst.jsdt.ui.text.codetemplates.constructorcomment" 
name\="constructorcomment">/**\n * ${tags}\n */</template><template 
autoinsert\="true" context\="filecomment_context" deleted\="false" 
description\="Comment for created JavaScript files" enabled\="true" 
id\="org.eclipse.wst.jsdt.ui.text.codetemplates.filecomment" 
name\="filecomment">/**\n * \n */</template><template autoinsert\="false" 
context\="typecomment_context" deleted\="false" description\="Comment for 
created types" enabled\="true" 
id\="org.eclipse.wst.jsdt.ui.text.codetemplates.typecomment" 
name\="typecomment">/**\n * ${tags}\n 
 */</template><template autoinsert\="true" context\="fieldcomment_context" 
deleted\="false" description\="Comment for vars" enabled\="true" 
id\="org.eclipse.wst.jsdt.ui.text.codetemplates.fieldcomment" 
name\="fieldcomment">/**\n * \n */</template><template autoinsert\="true" 
context\="methodcomment_context" deleted\="false" description\="Comment for 
non-overriding function" enabled\="true" 
id\="org.eclipse.wst.jsdt.ui.text.codetemplates.methodcomment" 
name\="methodcomment">/**\n * ${tags}\n */</template><template 
autoinsert\="true" context\="overridecomment_context" deleted\="false" 
description\="Comment for overriding functions" enabled\="true" 
id\="org.eclipse.wst.jsdt.ui.text.codetemplates.overridecomment" 
name\="overridecomment">/* (non-Jsdoc)\n * ${see_to_overridden}\n 
*/</template><template autoinsert\="true" context\="delegatecomment_context" 
deleted\="false" description\="Comment for delegate functions" enabled\="true" 
id\="org.eclipse.wst.jsdt.ui.text.codetemplates.d
 elegatecomment" name\="delegatecomment">/**\n * ${tags}\n * ${see_to_target}\n 
*/</template><template autoinsert\="true" context\="newtype_context" 
deleted\="false" description\="Newly created files" enabled\="true" 
id\="org.eclipse.wst.jsdt.ui.text.codetemplates.newtype" 
name\="newtype">${filecomment}\n${package_declaration}\n\n${typecomment}\n${type_declaration}</template><template
 autoinsert\="true" context\="classbody_context" deleted\="false" 
description\="Code in new class type bodies" enabled\="true" 
id\="org.eclipse.wst.jsdt.ui.text.codetemplates.classbody" 
name\="classbody">\n</template><template autoinsert\="true" 
context\="catchblock_context" deleted\="false" description\="Code in new catch 
blocks" enabled\="true" 
id\="org.eclipse.wst.jsdt.ui.text.codetemplates.catchblock" 
name\="catchblock">// ${todo} Auto-generated catch 
block\n${exception_var}.printStackTrace();</template><template 
autoinsert\="true" context\="methodbody_context" deleted\="false" description\="
 Code in created function stubs" enabled\="true" 
id\="org.eclipse.wst.jsdt.ui.text.codetemplates.methodbody" 
name\="methodbody">// ${todo} Auto-generated function 
stub\n${body_statement}</template><template autoinsert\="true" 
context\="constructorbody_context" deleted\="false" description\="Code in 
created constructor stubs" enabled\="true" 
id\="org.eclipse.wst.jsdt.ui.text.codetemplates.constructorbody" 
name\="constructorbody">${body_statement}\n// ${todo} Auto-generated 
constructor stub</template><template autoinsert\="true" 
context\="getterbody_context" deleted\="false" description\="Code in created 
getters" enabled\="true" 
id\="org.eclipse.wst.jsdt.ui.text.codetemplates.getterbody" 
name\="getterbody">return ${field};</template><template autoinsert\="true" 
context\="setterbody_context" deleted\="false" description\="Code in created 
setters" enabled\="true" 
id\="org.eclipse.wst.jsdt.ui.text.codetemplates.setterbody" 
name\="setterbody">${field} \= ${param};</template></templ
 ates>
+org.eclipse.jdt.ui.staticondemandthreshold=99
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" 
encoding\="UTF-8" standalone\="no"?><templates><template autoinsert\="true" 
context\="gettercomment_context" deleted\="false" description\="Comment for 
getter method" enabled\="true" 
id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" 
name\="gettercomment"/><template autoinsert\="true" 
context\="settercomment_context" deleted\="false" description\="Comment for 
setter method" enabled\="true" 
id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" 
name\="settercomment"/><template autoinsert\="true" 
context\="constructorcomment_context" deleted\="false" description\="Comment 
for created constructors" enabled\="true" 
id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" 
name\="constructorcomment"/><template autoinsert\="true" 
context\="filecomment_context" deleted\="false" description\="Comment for 
created Java files" enabled\="true" 
id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="
 filecomment">/**\n * \n */</template><template autoinsert\="false" 
context\="typecomment_context" deleted\="false" description\="Comment for 
created types" enabled\="true" 
id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" 
name\="typecomment"/><template autoinsert\="true" 
context\="fieldcomment_context" deleted\="false" description\="Comment for 
fields" enabled\="true" 
id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" 
name\="fieldcomment"/><template autoinsert\="true" 
context\="methodcomment_context" deleted\="false" description\="Comment for 
non-overriding methods" enabled\="true" 
id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" 
name\="methodcomment"/><template autoinsert\="true" 
context\="overridecomment_context" deleted\="false" description\="Comment for 
overriding methods" enabled\="true" 
id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" 
name\="overridecomment"/><template autoinsert\="false" 
context\="newtype_context" deleted\="false" descr
 iption\="Newly created files" enabled\="true" 
id\="org.eclipse.jdt.ui.text.codetemplates.newtype" 
name\="newtype">/*****************************************************************\n
 *   Licensed to the Apache Software Foundation (ASF) under one\n *  or more 
contributor license agreements.  See the NOTICE file\n *  distributed with this 
work for additional information\n *  regarding copyright ownership.  The ASF 
licenses this file\n *  to you under the Apache License, Version 2.0 (the\n *  
"License"); you may not use this file except in compliance\n *  with the 
License.  You may obtain a copy of the License at\n *\n *    
http\://www.apache.org/licenses/LICENSE-2.0\n *\n *  Unless required by 
applicable law or agreed to in writing,\n *  software distributed under the 
License is distributed on an\n *  "AS IS" BASIS, WITHOUT WARRANTIES OR 
CONDITIONS OF ANY\n *  KIND, either express or implied.  See the License for 
the\n *  specific language governing permissions and limitations
 \n *  under the License.\n 
****************************************************************/\n${package_declaration}\n\n${typecomment}\n${type_declaration}</template><template
 autoinsert\="true" context\="catchblock_context" deleted\="false" 
description\="Code in new catch blocks" enabled\="true" 
id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" 
name\="catchblock">${exception_var}.printStackTrace();</template><template 
autoinsert\="true" context\="methodbody_context" deleted\="false" 
description\="Code in created method stubs" enabled\="true" 
id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" 
name\="methodbody">${body_statement}</template><template autoinsert\="true" 
context\="constructorbody_context" deleted\="false" description\="Code in 
created constructor stubs" enabled\="true" 
id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" 
name\="constructorbody">${body_statement}</template><template 
autoinsert\="true" context\="getterbody_context" deleted\="false"
  description\="Code in created getters" enabled\="true" 
id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" 
name\="getterbody">return ${field};</template><template autoinsert\="true" 
context\="setterbody_context" deleted\="false" description\="Code in created 
setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" 
name\="setterbody">${field} \= ${param};</template><template autoinsert\="true" 
context\="delegatecomment_context" deleted\="false" description\="Comment for 
delegate methods" enabled\="true" 
id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" 
name\="delegatecomment">/**\n * ${tags}\n * ${see_to_target}\n 
*/</template><template autoinsert\="true" context\="classbody_context" 
deleted\="false" description\="Code in new class type bodies" enabled\="true" 
id\="org.eclipse.jdt.ui.text.codetemplates.classbody" 
name\="classbody">\n</template><template autoinsert\="true" 
context\="interfacebody_context" deleted\="false" description\="Code
  in new interface type bodies" enabled\="true" 
id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" 
name\="interfacebody">\n</template><template autoinsert\="true" 
context\="enumbody_context" deleted\="false" description\="Code in new enum 
type bodies" enabled\="true" 
id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" 
name\="enumbody">\n</template><template autoinsert\="true" 
context\="annotationbody_context" deleted\="false" description\="Code in new 
annotation type bodies" enabled\="true" 
id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" 
name\="annotationbody">\n</template><template autoinsert\="true" 
context\="gettercomment_context" deleted\="false" description\="Comment for 
getter function" enabled\="true" 
id\="org.eclipse.wst.jsdt.ui.text.codetemplates.gettercomment" 
name\="gettercomment">/**\n * @return the ${bare_field_name}\n 
*/</template><template autoinsert\="true" context\="settercomment_context" 
deleted\="false" description\="Comment for setter fu
 nction" enabled\="true" 
id\="org.eclipse.wst.jsdt.ui.text.codetemplates.settercomment" 
name\="settercomment">/**\n * @param ${param} the ${bare_field_name} to set\n 
*/</template><template autoinsert\="true" context\="constructorcomment_context" 
deleted\="false" description\="Comment for created constructors" 
enabled\="true" 
id\="org.eclipse.wst.jsdt.ui.text.codetemplates.constructorcomment" 
name\="constructorcomment">/**\n * ${tags}\n */</template><template 
autoinsert\="true" context\="filecomment_context" deleted\="false" 
description\="Comment for created JavaScript files" enabled\="true" 
id\="org.eclipse.wst.jsdt.ui.text.codetemplates.filecomment" 
name\="filecomment">/**\n * \n */</template><template autoinsert\="false" 
context\="typecomment_context" deleted\="false" description\="Comment for 
created types" enabled\="true" 
id\="org.eclipse.wst.jsdt.ui.text.codetemplates.typecomment" 
name\="typecomment">/**\n * ${tags}\n */</template><template autoinsert\="true" 
context\="f
 ieldcomment_context" deleted\="false" description\="Comment for vars" 
enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.fieldcomment" 
name\="fieldcomment">/**\n * \n */</template><template autoinsert\="true" 
context\="methodcomment_context" deleted\="false" description\="Comment for 
non-overriding function" enabled\="true" 
id\="org.eclipse.wst.jsdt.ui.text.codetemplates.methodcomment" 
name\="methodcomment">/**\n * ${tags}\n */</template><template 
autoinsert\="true" context\="overridecomment_context" deleted\="false" 
description\="Comment for overriding functions" enabled\="true" 
id\="org.eclipse.wst.jsdt.ui.text.codetemplates.overridecomment" 
name\="overridecomment">/* (non-Jsdoc)\n * ${see_to_overridden}\n 
*/</template><template autoinsert\="true" context\="delegatecomment_context" 
deleted\="false" description\="Comment for delegate functions" enabled\="true" 
id\="org.eclipse.wst.jsdt.ui.text.codetemplates.delegatecomment" 
name\="delegatecomment">/**\n * ${tag
 s}\n * ${see_to_target}\n */</template><template autoinsert\="true" 
context\="newtype_context" deleted\="false" description\="Newly created files" 
enabled\="true" id\="org.eclipse.wst.jsdt.ui.text.codetemplates.newtype" 
name\="newtype">${filecomment}\n${package_declaration}\n\n${typecomment}\n${type_declaration}</template><template
 autoinsert\="true" context\="classbody_context" deleted\="false" 
description\="Code in new class type bodies" enabled\="true" 
id\="org.eclipse.wst.jsdt.ui.text.codetemplates.classbody" 
name\="classbody">\n</template><template autoinsert\="true" 
context\="catchblock_context" deleted\="false" description\="Code in new catch 
blocks" enabled\="true" 
id\="org.eclipse.wst.jsdt.ui.text.codetemplates.catchblock" 
name\="catchblock">// ${todo} Auto-generated catch 
block\n${exception_var}.printStackTrace();</template><template 
autoinsert\="true" context\="methodbody_context" deleted\="false" 
description\="Code in created function stubs" enabled\="true" id\="
 org.eclipse.wst.jsdt.ui.text.codetemplates.methodbody" name\="methodbody">// 
${todo} Auto-generated function stub\n${body_statement}</template><template 
autoinsert\="true" context\="constructorbody_context" deleted\="false" 
description\="Code in created constructor stubs" enabled\="true" 
id\="org.eclipse.wst.jsdt.ui.text.codetemplates.constructorbody" 
name\="constructorbody">${body_statement}\n// ${todo} Auto-generated 
constructor stub</template><template autoinsert\="true" 
context\="getterbody_context" deleted\="false" description\="Code in created 
getters" enabled\="true" 
id\="org.eclipse.wst.jsdt.ui.text.codetemplates.getterbody" 
name\="getterbody">return ${field};</template><template autoinsert\="true" 
context\="setterbody_context" deleted\="false" description\="Code in created 
setters" enabled\="true" 
id\="org.eclipse.wst.jsdt.ui.text.codetemplates.setterbody" 
name\="setterbody">${field} \= ${param};</template></templates>

Modified: 
cayenne/main/trunk/framework/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/audit/Auditable.java
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/audit/Auditable.java?rev=1065000&r1=1064999&r2=1065000&view=diff
==============================================================================
--- 
cayenne/main/trunk/framework/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/audit/Auditable.java
 (original)
+++ 
cayenne/main/trunk/framework/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/audit/Auditable.java
 Sat Jan 29 11:43:43 2011
@@ -28,9 +28,9 @@ import java.lang.annotation.Target;
 import org.apache.cayenne.lifecycle.ref.Referenceable;
 
 /**
- * A built-in annotation that adds auditable behavior to DataObjects. All 
Auditable
- * objects must be also tagged with {@link Referenceable} annotation, as audit 
records are
- * based on UUIDs.
+ * An annotation that adds auditable behavior to DataObjects. All Auditable 
objects must
+ * be also tagged with {@link Referenceable} annotation, as audit records are 
based on
+ * UUIDs.
  * 
  * @since 3.1
  */

Copied: 
cayenne/main/trunk/framework/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/audit/AuditableFilter.java
 (from r1064999, 
cayenne/main/trunk/framework/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/audit/AbstractAuditableHandler.java)
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/audit/AuditableFilter.java?p2=cayenne/main/trunk/framework/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/audit/AuditableFilter.java&p1=cayenne/main/trunk/framework/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/audit/AbstractAuditableHandler.java&r1=1064999&r2=1065000&rev=1065000&view=diff
==============================================================================
--- 
cayenne/main/trunk/framework/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/audit/AbstractAuditableHandler.java
 (original)
+++ 
cayenne/main/trunk/framework/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/audit/AuditableFilter.java
 Sat Jan 29 11:43:43 2011
@@ -18,41 +18,67 @@
  ****************************************************************/
 package org.apache.cayenne.lifecycle.audit;
 
+import org.apache.cayenne.DataChannel;
+import org.apache.cayenne.DataChannelFilter;
+import org.apache.cayenne.DataChannelFilterChain;
 import org.apache.cayenne.DataObject;
+import org.apache.cayenne.ObjectContext;
+import org.apache.cayenne.QueryResponse;
 import org.apache.cayenne.annotation.PostPersist;
 import org.apache.cayenne.annotation.PostRemove;
 import org.apache.cayenne.annotation.PostUpdate;
+import org.apache.cayenne.graph.GraphDiff;
+import org.apache.cayenne.query.Query;
 
 /**
- * A superclass of application specific handlers of the {@link Auditable} 
mixin that
- * provides basic needed callbacks.
+ * A {@link DataChannelFilter} that enables audit of entities annotated with
+ * {@link Auditable} and {@link AuditableChild}.
  * 
  * @since 3.1
  */
-public abstract class AbstractAuditableHandler {
+public class AuditableFilter implements DataChannelFilter {
 
-    /**
-     * A worker method that creates audit records, as appropriate in a given 
application.
-     * Subclasses may insert audit records, log a message, etc.
-     */
-    protected abstract void audit(
-            Object auditRoot,
-            Object auditSource,
-            AuditableOperation operation);
+    protected AuditableProcessor processor;
+
+    public AuditableFilter(AuditableProcessor processor) {
+        this.processor = processor;
+    }
+
+    @Override
+    public void init(DataChannel channel) {
+        // noop
+    }
+
+    @Override
+    public QueryResponse onQuery(
+            ObjectContext originatingContext,
+            Query query,
+            DataChannelFilterChain filterChain) {
+        return filterChain.onQuery(originatingContext, query);
+    }
+
+    @Override
+    public GraphDiff onSync(
+            ObjectContext originatingContext,
+            GraphDiff changes,
+            int syncType,
+            DataChannelFilterChain filterChain) {
+        return filterChain.onSync(originatingContext, changes, syncType);
+    }
 
     @PostPersist(entityAnnotations = Auditable.class)
     void insertAudit(Object object) {
-        audit(object, object, AuditableOperation.INSERT);
+        processor.audit(object, object, AuditableOperation.INSERT);
     }
 
     @PostRemove(entityAnnotations = Auditable.class)
     void deleteAudit(Object object) {
-        audit(object, object, AuditableOperation.DELETE);
+        processor.audit(object, object, AuditableOperation.DELETE);
     }
 
     @PostUpdate(entityAnnotations = Auditable.class)
     void updateAudit(Object object) {
-        audit(object, object, AuditableOperation.UPDATE);
+        processor.audit(object, object, AuditableOperation.UPDATE);
     }
 
     // only catching child updates... child insert/delete presumably causes an 
event on
@@ -64,7 +90,7 @@ public abstract class AbstractAuditableH
         Object parent = getParent(object);
 
         if (parent != null) {
-            audit(parent, object, AuditableOperation.UPDATE);
+            processor.audit(parent, object, AuditableOperation.UPDATE);
         }
         else {
             // at least og this fact... shouldn't normally happen, but I can 
imagine

Copied: 
cayenne/main/trunk/framework/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/audit/AuditableProcessor.java
 (from r1064999, 
cayenne/main/trunk/framework/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/audit/Auditable.java)
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/audit/AuditableProcessor.java?p2=cayenne/main/trunk/framework/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/audit/AuditableProcessor.java&p1=cayenne/main/trunk/framework/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/audit/Auditable.java&r1=1064999&r2=1065000&rev=1065000&view=diff
==============================================================================
--- 
cayenne/main/trunk/framework/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/audit/Auditable.java
 (original)
+++ 
cayenne/main/trunk/framework/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/audit/AuditableProcessor.java
 Sat Jan 29 11:43:43 2011
@@ -18,26 +18,24 @@
  ****************************************************************/
 package org.apache.cayenne.lifecycle.audit;
 
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Inherited;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-import org.apache.cayenne.lifecycle.ref.Referenceable;
-
 /**
- * A built-in annotation that adds auditable behavior to DataObjects. All 
Auditable
- * objects must be also tagged with {@link Referenceable} annotation, as audit 
records are
- * based on UUIDs.
+ * A superclass of application specific handlers of the {@link Auditable} 
mixin that
+ * provides basic needed callbacks.
  * 
  * @since 3.1
  */
-@Target(ElementType.TYPE)
-@Retention(RetentionPolicy.RUNTIME)
-@Documented
-@Inherited
-public @interface Auditable {
+public interface AuditableProcessor {
 
+    /**
+     * A method called by {@link AuditableFilter} that should audit records as 
appropriate
+     * in a given application. Implementors may insert audit records in DB, 
log a message,
+     * etc.
+     * 
+     * @param auditRoot the root auditable object. This is the object that is 
either
+     *            annotated with {@link Auditable} or pointed to by another 
object
+     *            annotated with {@link AuditableChild}.
+     * @param auditSource an object that generated this audit event.
+     * @param operation a type of object change.
+     */
+    void audit(Object auditRoot, Object auditSource, AuditableOperation 
operation);
 }

Added: 
cayenne/main/trunk/framework/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/audit/AuditableFilterTest.java
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/audit/AuditableFilterTest.java?rev=1065000&view=auto
==============================================================================
--- 
cayenne/main/trunk/framework/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/audit/AuditableFilterTest.java
 (added)
+++ 
cayenne/main/trunk/framework/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/audit/AuditableFilterTest.java
 Sat Jan 29 11:43:43 2011
@@ -0,0 +1,71 @@
+/*****************************************************************
+ *   Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ ****************************************************************/
+package org.apache.cayenne.lifecycle.audit;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import junit.framework.TestCase;
+
+import org.apache.cayenne.DataObject;
+
+public class AuditableFilterTest extends TestCase {
+
+    public void testInsertAudit() {
+        AuditableProcessor processor = mock(AuditableProcessor.class);
+
+        AuditableFilter filter = new AuditableFilter(processor);
+        Object audited = new Object();
+        filter.insertAudit(audited);
+
+        verify(processor).audit(audited, audited, AuditableOperation.INSERT);
+    }
+
+    public void testDeleteAudit() {
+        AuditableProcessor processor = mock(AuditableProcessor.class);
+
+        AuditableFilter filter = new AuditableFilter(processor);
+        Object audited = new Object();
+        filter.deleteAudit(audited);
+
+        verify(processor).audit(audited, audited, AuditableOperation.DELETE);
+    }
+
+    public void testUpdateAudit() {
+        AuditableProcessor processor = mock(AuditableProcessor.class);
+
+        AuditableFilter filter = new AuditableFilter(processor);
+        Object audited = new Object();
+        filter.updateAudit(audited);
+
+        verify(processor).audit(audited, audited, AuditableOperation.UPDATE);
+    }
+
+    public void testUpdateAuditChild() {
+        AuditableProcessor processor = mock(AuditableProcessor.class);
+
+        AuditableFilter filter = new AuditableFilter(processor);
+
+        Object auditedParent = new Object();
+        DataObject audited = new MockAuditableChild();
+        audited.writeProperty("parent", auditedParent);
+        filter.updateAuditChild(audited);
+
+        verify(processor).audit(auditedParent, audited, 
AuditableOperation.UPDATE);
+    }
+}

Copied: 
cayenne/main/trunk/framework/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/audit/MockAuditableChild.java
 (from r1064999, 
cayenne/main/trunk/framework/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/audit/Auditable.java)
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/audit/MockAuditableChild.java?p2=cayenne/main/trunk/framework/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/audit/MockAuditableChild.java&p1=cayenne/main/trunk/framework/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/audit/Auditable.java&r1=1064999&r2=1065000&rev=1065000&view=diff
==============================================================================
--- 
cayenne/main/trunk/framework/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/audit/Auditable.java
 (original)
+++ 
cayenne/main/trunk/framework/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/audit/MockAuditableChild.java
 Sat Jan 29 11:43:43 2011
@@ -18,26 +18,9 @@
  ****************************************************************/
 package org.apache.cayenne.lifecycle.audit;
 
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Inherited;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
+import org.apache.cayenne.CayenneDataObject;
 
-import org.apache.cayenne.lifecycle.ref.Referenceable;
-
-/**
- * A built-in annotation that adds auditable behavior to DataObjects. All 
Auditable
- * objects must be also tagged with {@link Referenceable} annotation, as audit 
records are
- * based on UUIDs.
- * 
- * @since 3.1
- */
-@Target(ElementType.TYPE)
-@Retention(RetentionPolicy.RUNTIME)
-@Documented
-@Inherited
-public @interface Auditable {
+@AuditableChild("parent")
+public class MockAuditableChild extends CayenneDataObject {
 
 }


Reply via email to