diff options
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.common.db')
12 files changed, 1358 insertions, 1358 deletions
diff --git a/plugins/org.eclipse.emf.cdo.common.db/.settings/org.eclipse.jdt.ui.prefs b/plugins/org.eclipse.emf.cdo.common.db/.settings/org.eclipse.jdt.ui.prefs index aaef0ccba1..6726e7034a 100644 --- a/plugins/org.eclipse.emf.cdo.common.db/.settings/org.eclipse.jdt.ui.prefs +++ b/plugins/org.eclipse.emf.cdo.common.db/.settings/org.eclipse.jdt.ui.prefs @@ -1,120 +1,120 @@ -#Thu Feb 04 09:44:24 CET 2010 -cleanup.add_default_serial_version_id=true -cleanup.add_generated_serial_version_id=false -cleanup.add_missing_annotations=true -cleanup.add_missing_deprecated_annotations=true -cleanup.add_missing_methods=false -cleanup.add_missing_nls_tags=false -cleanup.add_missing_override_annotations=true -cleanup.add_missing_override_annotations_interface_methods=true -cleanup.add_serial_version_id=true -cleanup.always_use_blocks=true -cleanup.always_use_parentheses_in_expressions=false -cleanup.always_use_this_for_non_static_field_access=false -cleanup.always_use_this_for_non_static_method_access=false -cleanup.convert_to_enhanced_for_loop=false -cleanup.correct_indentation=true -cleanup.format_source_code=true -cleanup.format_source_code_changes_only=false -cleanup.make_local_variable_final=true -cleanup.make_parameters_final=false -cleanup.make_private_fields_final=true -cleanup.make_type_abstract_if_missing_method=false -cleanup.make_variable_declarations_final=false -cleanup.never_use_blocks=false -cleanup.never_use_parentheses_in_expressions=true -cleanup.organize_imports=true -cleanup.qualify_static_field_accesses_with_declaring_class=false -cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true -cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true -cleanup.qualify_static_member_accesses_with_declaring_class=false -cleanup.qualify_static_method_accesses_with_declaring_class=false -cleanup.remove_private_constructors=true -cleanup.remove_trailing_whitespaces=true -cleanup.remove_trailing_whitespaces_all=true -cleanup.remove_trailing_whitespaces_ignore_empty=false -cleanup.remove_unnecessary_casts=true -cleanup.remove_unnecessary_nls_tags=true -cleanup.remove_unused_imports=true -cleanup.remove_unused_local_variables=false -cleanup.remove_unused_private_fields=true -cleanup.remove_unused_private_members=false -cleanup.remove_unused_private_methods=true -cleanup.remove_unused_private_types=true -cleanup.sort_members=false -cleanup.sort_members_all=false -cleanup.use_blocks=true -cleanup.use_blocks_only_for_return_and_throw=false -cleanup.use_parentheses_in_expressions=true -cleanup.use_this_for_non_static_field_access=true -cleanup.use_this_for_non_static_field_access_only_if_necessary=true -cleanup.use_this_for_non_static_method_access=true -cleanup.use_this_for_non_static_method_access_only_if_necessary=true -cleanup_profile=_EMFT -cleanup_settings_version=2 -eclipse.preferences.version=1 -editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true -formatter_profile=_EMFT -formatter_settings_version=11 -org.eclipse.jdt.ui.exception.name=ex -org.eclipse.jdt.ui.gettersetter.use.is=true -org.eclipse.jdt.ui.ignorelowercasenames=true -org.eclipse.jdt.ui.importorder=org.eclipse.emf.cdo;org.eclipse.emf.internal.cdo;org.eclipse.net4j;org.eclipse.internal.net4j;org.eclipse.emf;org.eclipse;com;org;javax;java; -org.eclipse.jdt.ui.javadoc=true -org.eclipse.jdt.ui.keywordthis=false -org.eclipse.jdt.ui.ondemandthreshold=99 -org.eclipse.jdt.ui.overrideannotation=true -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\="false" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment"/><template autoinsert\="false" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment"/><template autoinsert\="false" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment"/><template autoinsert\="false" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/*\r\n * Copyright (c) 2004 - 2011 Eike Stepper (Berlin, Germany) and others.\r\n * All rights reserved. This program and the accompanying materials\r\n * are made available under the terms of the Eclipse Public License v1.0\r\n * which accompanies this distribution, and is available at\r\n * http\://www.eclipse.org/legal/epl-v10.html\r\n * \r\n * Contributors\:\r\n * Eike Stepper - initial API and implementation\r\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">/**\r\n * @author Eike Stepper\r\n */</template><template autoinsert\="false" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment"/><template autoinsert\="false" 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\="false" 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\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment"/><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\r\n${package_declaration}\r\n\r\n${typecomment}\r\n${type_declaration}</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">\r\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">\r\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">\r\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">\r\n</template><template autoinsert\="false" 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\="false" 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\="false" 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></templates> -sp_cleanup.add_default_serial_version_id=true -sp_cleanup.add_generated_serial_version_id=false -sp_cleanup.add_missing_annotations=true -sp_cleanup.add_missing_deprecated_annotations=true -sp_cleanup.add_missing_methods=false -sp_cleanup.add_missing_nls_tags=false -sp_cleanup.add_missing_override_annotations=true -sp_cleanup.add_missing_override_annotations_interface_methods=false -sp_cleanup.add_serial_version_id=false -sp_cleanup.always_use_blocks=true -sp_cleanup.always_use_parentheses_in_expressions=false -sp_cleanup.always_use_this_for_non_static_field_access=false -sp_cleanup.always_use_this_for_non_static_method_access=false -sp_cleanup.convert_to_enhanced_for_loop=false -sp_cleanup.correct_indentation=true -sp_cleanup.format_source_code=true -sp_cleanup.format_source_code_changes_only=false -sp_cleanup.make_local_variable_final=false -sp_cleanup.make_parameters_final=false -sp_cleanup.make_private_fields_final=true -sp_cleanup.make_type_abstract_if_missing_method=false -sp_cleanup.make_variable_declarations_final=false -sp_cleanup.never_use_blocks=false -sp_cleanup.never_use_parentheses_in_expressions=true -sp_cleanup.on_save_use_additional_actions=true -sp_cleanup.organize_imports=true -sp_cleanup.qualify_static_field_accesses_with_declaring_class=false -sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true -sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true -sp_cleanup.qualify_static_member_accesses_with_declaring_class=false -sp_cleanup.qualify_static_method_accesses_with_declaring_class=false -sp_cleanup.remove_private_constructors=true -sp_cleanup.remove_trailing_whitespaces=true -sp_cleanup.remove_trailing_whitespaces_all=true -sp_cleanup.remove_trailing_whitespaces_ignore_empty=false -sp_cleanup.remove_unnecessary_casts=true -sp_cleanup.remove_unnecessary_nls_tags=true -sp_cleanup.remove_unused_imports=true -sp_cleanup.remove_unused_local_variables=false -sp_cleanup.remove_unused_private_fields=true -sp_cleanup.remove_unused_private_members=false -sp_cleanup.remove_unused_private_methods=true -sp_cleanup.remove_unused_private_types=true -sp_cleanup.sort_members=false -sp_cleanup.sort_members_all=false -sp_cleanup.use_blocks=true -sp_cleanup.use_blocks_only_for_return_and_throw=false -sp_cleanup.use_parentheses_in_expressions=true -sp_cleanup.use_this_for_non_static_field_access=true -sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true -sp_cleanup.use_this_for_non_static_method_access=true -sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true +#Thu Feb 04 09:44:24 CET 2010
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_methods=false
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_missing_override_annotations_interface_methods=true
+cleanup.add_serial_version_id=true
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=false
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_to_enhanced_for_loop=false
+cleanup.correct_indentation=true
+cleanup.format_source_code=true
+cleanup.format_source_code_changes_only=false
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=false
+cleanup.make_private_fields_final=true
+cleanup.make_type_abstract_if_missing_method=false
+cleanup.make_variable_declarations_final=false
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=true
+cleanup.organize_imports=true
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=false
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=false
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=false
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_parentheses_in_expressions=true
+cleanup.use_this_for_non_static_field_access=true
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=true
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup_profile=_EMFT
+cleanup_settings_version=2
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_EMFT
+formatter_settings_version=11
+org.eclipse.jdt.ui.exception.name=ex
+org.eclipse.jdt.ui.gettersetter.use.is=true
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=org.eclipse.emf.cdo;org.eclipse.emf.internal.cdo;org.eclipse.net4j;org.eclipse.internal.net4j;org.eclipse.emf;org.eclipse;com;org;javax;java;
+org.eclipse.jdt.ui.javadoc=true
+org.eclipse.jdt.ui.keywordthis=false
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.overrideannotation=true
+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\="false" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment"/><template autoinsert\="false" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment"/><template autoinsert\="false" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment"/><template autoinsert\="false" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/*\r\n * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.\r\n * All rights reserved. This program and the accompanying materials\r\n * are made available under the terms of the Eclipse Public License v1.0\r\n * which accompanies this distribution, and is available at\r\n * http\://www.eclipse.org/legal/epl-v10.html\r\n * \r\n * Contributors\:\r\n * Eike Stepper - initial API and implementation\r\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">/**\r\n * @author Eike Stepper\r\n */</template><template autoinsert\="false" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment"/><template autoinsert\="false" 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\="false" 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\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment"/><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\r\n${package_declaration}\r\n\r\n${typecomment}\r\n${type_declaration}</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">\r\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">\r\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">\r\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">\r\n</template><template autoinsert\="false" 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\="false" 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\="false" 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></templates>
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=false
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=true
+sp_cleanup.format_source_code=true
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=true
+sp_cleanup.remove_unused_imports=true
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_blocks=true
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_parentheses_in_expressions=true
+sp_cleanup.use_this_for_non_static_field_access=true
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=true
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/plugins/org.eclipse.emf.cdo.common.db/build.properties b/plugins/org.eclipse.emf.cdo.common.db/build.properties index d6cd99e548..a23538dd08 100644 --- a/plugins/org.eclipse.emf.cdo.common.db/build.properties +++ b/plugins/org.eclipse.emf.cdo.common.db/build.properties @@ -1,21 +1,21 @@ -# Copyright (c) 2004 - 2011 Eike Stepper (Berlin, Germany) and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Eclipse Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/epl-v10.html -# -# Contributors: -# Eike Stepper - initial API and implementation - -# NLS_MESSAGEFORMAT_VAR - -source.. = src/ -output.. = bin/ -bin.includes = META-INF/,\ - .,\ - about.html,\ - copyright.txt,\ - plugin.properties,\ - .options -src.includes = about.html,\ - copyright.txt +# Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Eike Stepper - initial API and implementation
+
+# NLS_MESSAGEFORMAT_VAR
+
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ about.html,\
+ copyright.txt,\
+ plugin.properties,\
+ .options
+src.includes = about.html,\
+ copyright.txt
diff --git a/plugins/org.eclipse.emf.cdo.common.db/copyright.txt b/plugins/org.eclipse.emf.cdo.common.db/copyright.txt index e921242cf0..8f6328980e 100644 --- a/plugins/org.eclipse.emf.cdo.common.db/copyright.txt +++ b/plugins/org.eclipse.emf.cdo.common.db/copyright.txt @@ -1,8 +1,8 @@ -Copyright (c) 2004 - 2011 Eike Stepper (Berlin, Germany) and others. -All rights reserved. This program and the accompanying materials -are made available under the terms of the Eclipse Public License v1.0 -which accompanies this distribution, and is available at -http://www.eclipse.org/legal/epl-v10.html - -Contributors: +Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+All rights reserved. This program and the accompanying materials
+are made available under the terms of the Eclipse Public License v1.0
+which accompanies this distribution, and is available at
+http://www.eclipse.org/legal/epl-v10.html
+
+Contributors:
Eike Stepper - initial API and implementation
\ No newline at end of file diff --git a/plugins/org.eclipse.emf.cdo.common.db/plugin.properties b/plugins/org.eclipse.emf.cdo.common.db/plugin.properties index 96578d978a..68ecb903c5 100644 --- a/plugins/org.eclipse.emf.cdo.common.db/plugin.properties +++ b/plugins/org.eclipse.emf.cdo.common.db/plugin.properties @@ -1,11 +1,11 @@ -# Copyright (c) 2004 - 2011 Eike Stepper (Berlin, Germany) and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Eclipse Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/epl-v10.html -# -# Contributors: -# Eike Stepper - initial API and implementation - -pluginName = CDO Model Repository Common DB Support -providerName = Eclipse Modeling Project +# Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Eike Stepper - initial API and implementation
+
+pluginName = CDO Model Repository Common DB Support
+providerName = Eclipse Modeling Project
diff --git a/plugins/org.eclipse.emf.cdo.common.db/src/org/eclipse/emf/cdo/common/db/CDOCommonDBUtil.java b/plugins/org.eclipse.emf.cdo.common.db/src/org/eclipse/emf/cdo/common/db/CDOCommonDBUtil.java index fc2a47f8b6..3f1660838c 100644 --- a/plugins/org.eclipse.emf.cdo.common.db/src/org/eclipse/emf/cdo/common/db/CDOCommonDBUtil.java +++ b/plugins/org.eclipse.emf.cdo.common.db/src/org/eclipse/emf/cdo/common/db/CDOCommonDBUtil.java @@ -1,54 +1,54 @@ -/* - * Copyright (c) 2004 - 2011 Eike Stepper (Berlin, Germany) and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Eike Stepper - initial API and implementation - * Andre Dietisheim - further implementations - */ -package org.eclipse.emf.cdo.common.db; - -import org.eclipse.emf.cdo.common.id.CDOIDProvider; -import org.eclipse.emf.cdo.common.internal.db.cache.DBRevisionCache; -import org.eclipse.emf.cdo.common.model.CDOPackageRegistry; -import org.eclipse.emf.cdo.common.revision.CDOListFactory; -import org.eclipse.emf.cdo.common.revision.CDORevisionCache; -import org.eclipse.emf.cdo.common.revision.CDORevisionFactory; - -import org.eclipse.net4j.db.IDBAdapter; -import org.eclipse.net4j.db.IDBConnectionProvider; - -/** - * @author Eike Stepper - * @since 3.0 - */ -public final class CDOCommonDBUtil -{ - private CDOCommonDBUtil() - { - } - - /** - * Creates and returns a new JDBC-based revision cache. - * <p> - * TODO Add all config parameters! - */ - public static CDORevisionCache createDBCache(IDBAdapter dbAdapter, IDBConnectionProvider dbConnectionProvider, - CDOListFactory listFactory, CDOPackageRegistry packageRegistry, CDORevisionFactory revisionFactory) - { - DBRevisionCache cache = new DBRevisionCache(); - cache.setDBAdapter(dbAdapter); - cache.setDBConnectionProvider(dbConnectionProvider); - cache.setListFactory(listFactory); - cache.setPackageRegistry(packageRegistry); - cache.setRevisionFactory(revisionFactory); - - // TODO Remove after branch "redesign-dangling" has been merged! - cache.setIDProvider(CDOIDProvider.NOOP); - - return cache; - } -} +/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ * Andre Dietisheim - further implementations
+ */
+package org.eclipse.emf.cdo.common.db;
+
+import org.eclipse.emf.cdo.common.id.CDOIDProvider;
+import org.eclipse.emf.cdo.common.internal.db.cache.DBRevisionCache;
+import org.eclipse.emf.cdo.common.model.CDOPackageRegistry;
+import org.eclipse.emf.cdo.common.revision.CDOListFactory;
+import org.eclipse.emf.cdo.common.revision.CDORevisionCache;
+import org.eclipse.emf.cdo.common.revision.CDORevisionFactory;
+
+import org.eclipse.net4j.db.IDBAdapter;
+import org.eclipse.net4j.db.IDBConnectionProvider;
+
+/**
+ * @author Eike Stepper
+ * @since 3.0
+ */
+public final class CDOCommonDBUtil
+{
+ private CDOCommonDBUtil()
+ {
+ }
+
+ /**
+ * Creates and returns a new JDBC-based revision cache.
+ * <p>
+ * TODO Add all config parameters!
+ */
+ public static CDORevisionCache createDBCache(IDBAdapter dbAdapter, IDBConnectionProvider dbConnectionProvider,
+ CDOListFactory listFactory, CDOPackageRegistry packageRegistry, CDORevisionFactory revisionFactory)
+ {
+ DBRevisionCache cache = new DBRevisionCache();
+ cache.setDBAdapter(dbAdapter);
+ cache.setDBConnectionProvider(dbConnectionProvider);
+ cache.setListFactory(listFactory);
+ cache.setPackageRegistry(packageRegistry);
+ cache.setRevisionFactory(revisionFactory);
+
+ // TODO Remove after branch "redesign-dangling" has been merged!
+ cache.setIDProvider(CDOIDProvider.NOOP);
+
+ return cache;
+ }
+}
diff --git a/plugins/org.eclipse.emf.cdo.common.db/src/org/eclipse/emf/cdo/common/internal/db/AbstractDBAccessor.java b/plugins/org.eclipse.emf.cdo.common.db/src/org/eclipse/emf/cdo/common/internal/db/AbstractDBAccessor.java index 589e2ef2d1..6386d85d9d 100644 --- a/plugins/org.eclipse.emf.cdo.common.db/src/org/eclipse/emf/cdo/common/internal/db/AbstractDBAccessor.java +++ b/plugins/org.eclipse.emf.cdo.common.db/src/org/eclipse/emf/cdo/common/internal/db/AbstractDBAccessor.java @@ -1,40 +1,40 @@ -/* - * Copyright (c) 2004 - 2011 Eike Stepper (Berlin, Germany) and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Andre Dietisheim - initial API and implementation - * Eike Stepper - maintenance - */ -package org.eclipse.emf.cdo.common.internal.db; - -import org.eclipse.emf.cdo.common.internal.db.bundle.OM; - -import org.eclipse.net4j.util.om.trace.ContextTracer; - -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.SQLException; - -/** - * @author Andre Dietisheim - */ -public abstract class AbstractDBAccessor -{ - private static final ContextTracer TRACER = new ContextTracer(OM.DEBUG, AbstractDBAccessor.class); - - protected PreparedStatement getPreparedStatement(Connection connection) throws Exception - { - PreparedStatement preparedStatement = connection.prepareStatement(getSQL()); - setParameters(preparedStatement); - TRACER.trace(getSQL()); - return preparedStatement; - } - - public abstract String getSQL(); - - protected abstract void setParameters(PreparedStatement statement) throws SQLException, Exception; -} +/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Andre Dietisheim - initial API and implementation
+ * Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.common.internal.db;
+
+import org.eclipse.emf.cdo.common.internal.db.bundle.OM;
+
+import org.eclipse.net4j.util.om.trace.ContextTracer;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+
+/**
+ * @author Andre Dietisheim
+ */
+public abstract class AbstractDBAccessor
+{
+ private static final ContextTracer TRACER = new ContextTracer(OM.DEBUG, AbstractDBAccessor.class);
+
+ protected PreparedStatement getPreparedStatement(Connection connection) throws Exception
+ {
+ PreparedStatement preparedStatement = connection.prepareStatement(getSQL());
+ setParameters(preparedStatement);
+ TRACER.trace(getSQL());
+ return preparedStatement;
+ }
+
+ public abstract String getSQL();
+
+ protected abstract void setParameters(PreparedStatement statement) throws SQLException, Exception;
+}
diff --git a/plugins/org.eclipse.emf.cdo.common.db/src/org/eclipse/emf/cdo/common/internal/db/AbstractQueryStatement.java b/plugins/org.eclipse.emf.cdo.common.db/src/org/eclipse/emf/cdo/common/internal/db/AbstractQueryStatement.java index f07e07089a..d66120adf4 100644 --- a/plugins/org.eclipse.emf.cdo.common.db/src/org/eclipse/emf/cdo/common/internal/db/AbstractQueryStatement.java +++ b/plugins/org.eclipse.emf.cdo.common.db/src/org/eclipse/emf/cdo/common/internal/db/AbstractQueryStatement.java @@ -1,54 +1,54 @@ -/* - * Copyright (c) 2004 - 2011 Eike Stepper (Berlin, Germany) and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Andre Dietisheim - initial API and implementation - * Eike Stepper - maintenance - */ -package org.eclipse.emf.cdo.common.internal.db; - -import org.eclipse.net4j.db.DBUtil; - -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; - -/** - * @author Andre Dietisheim - */ -public abstract class AbstractQueryStatement<Result> extends AbstractDBAccessor -{ - public AbstractQueryStatement() - { - } - - public Result query(Connection connection) throws Exception - { - PreparedStatement preparedStatement = null; - - try - { - preparedStatement = getPreparedStatement(connection); - ResultSet resultSet = preparedStatement.executeQuery(); - connection.commit(); - if (resultSet.next()) - { - Result result = getResult(resultSet); - resultSet.close(); - return result; - } - - return null; - } - finally - { - DBUtil.close(preparedStatement); - } - } - - protected abstract Result getResult(ResultSet resultSet) throws Exception; -} +/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Andre Dietisheim - initial API and implementation
+ * Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.common.internal.db;
+
+import org.eclipse.net4j.db.DBUtil;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+
+/**
+ * @author Andre Dietisheim
+ */
+public abstract class AbstractQueryStatement<Result> extends AbstractDBAccessor
+{
+ public AbstractQueryStatement()
+ {
+ }
+
+ public Result query(Connection connection) throws Exception
+ {
+ PreparedStatement preparedStatement = null;
+
+ try
+ {
+ preparedStatement = getPreparedStatement(connection);
+ ResultSet resultSet = preparedStatement.executeQuery();
+ connection.commit();
+ if (resultSet.next())
+ {
+ Result result = getResult(resultSet);
+ resultSet.close();
+ return result;
+ }
+
+ return null;
+ }
+ finally
+ {
+ DBUtil.close(preparedStatement);
+ }
+ }
+
+ protected abstract Result getResult(ResultSet resultSet) throws Exception;
+}
diff --git a/plugins/org.eclipse.emf.cdo.common.db/src/org/eclipse/emf/cdo/common/internal/db/AbstractUpdateStatement.java b/plugins/org.eclipse.emf.cdo.common.db/src/org/eclipse/emf/cdo/common/internal/db/AbstractUpdateStatement.java index 97ccc13108..a5ea2bdaa9 100644 --- a/plugins/org.eclipse.emf.cdo.common.db/src/org/eclipse/emf/cdo/common/internal/db/AbstractUpdateStatement.java +++ b/plugins/org.eclipse.emf.cdo.common.db/src/org/eclipse/emf/cdo/common/internal/db/AbstractUpdateStatement.java @@ -1,54 +1,54 @@ -/* - * Copyright (c) 2004 - 2011 Eike Stepper (Berlin, Germany) and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Andre Dietisheim - initial API and implementation - * Eike Stepper - maintenance - */ -package org.eclipse.emf.cdo.common.internal.db; - -import org.eclipse.net4j.db.DBException; -import org.eclipse.net4j.db.DBUtil; - -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.text.MessageFormat; - -/** - * @author Andre Dietisheim - */ -public abstract class AbstractUpdateStatement extends AbstractDBAccessor -{ - public AbstractUpdateStatement() - { - } - - public void update(Connection connection) throws Exception - { - PreparedStatement preparedStatement = null; - try - { - preparedStatement = getPreparedStatement(connection); - preparedStatement.executeUpdate(); - if (preparedStatement.getUpdateCount() == 0) - { - throw new DBException(MessageFormat.format("No row inserted by statement \"{0}\"", getSQL())); - } - - connection.commit(); - } - finally - { - DBUtil.close(preparedStatement); - } - } - - @Override - protected void setParameters(PreparedStatement preparedStatement) throws Exception - { - } -} +/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Andre Dietisheim - initial API and implementation
+ * Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.common.internal.db;
+
+import org.eclipse.net4j.db.DBException;
+import org.eclipse.net4j.db.DBUtil;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.text.MessageFormat;
+
+/**
+ * @author Andre Dietisheim
+ */
+public abstract class AbstractUpdateStatement extends AbstractDBAccessor
+{
+ public AbstractUpdateStatement()
+ {
+ }
+
+ public void update(Connection connection) throws Exception
+ {
+ PreparedStatement preparedStatement = null;
+ try
+ {
+ preparedStatement = getPreparedStatement(connection);
+ preparedStatement.executeUpdate();
+ if (preparedStatement.getUpdateCount() == 0)
+ {
+ throw new DBException(MessageFormat.format("No row inserted by statement \"{0}\"", getSQL()));
+ }
+
+ connection.commit();
+ }
+ finally
+ {
+ DBUtil.close(preparedStatement);
+ }
+ }
+
+ @Override
+ protected void setParameters(PreparedStatement preparedStatement) throws Exception
+ {
+ }
+}
diff --git a/plugins/org.eclipse.emf.cdo.common.db/src/org/eclipse/emf/cdo/common/internal/db/DBRevisionCacheUtil.java b/plugins/org.eclipse.emf.cdo.common.db/src/org/eclipse/emf/cdo/common/internal/db/DBRevisionCacheUtil.java index 342baf748e..d958e04573 100644 --- a/plugins/org.eclipse.emf.cdo.common.db/src/org/eclipse/emf/cdo/common/internal/db/DBRevisionCacheUtil.java +++ b/plugins/org.eclipse.emf.cdo.common.db/src/org/eclipse/emf/cdo/common/internal/db/DBRevisionCacheUtil.java @@ -1,46 +1,46 @@ -/* - * Copyright (c) 2004 - 2011 Eike Stepper (Berlin, Germany) and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Andre Dietisheim - initial API and implementation - * Eike Stepper - maintenance - */ -package org.eclipse.emf.cdo.common.internal.db; - -import org.eclipse.emf.cdo.common.model.CDOModelConstants; -import org.eclipse.emf.cdo.common.revision.CDORevision; -import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision; - -import org.eclipse.net4j.util.CheckUtil; - -import org.eclipse.emf.ecore.EStructuralFeature; - -/** - * @author Andre Dietisheim - */ -public class DBRevisionCacheUtil -{ - /** - * Gets the name of a revision of a CDOResourceNode. - * <p> - * See bug 279817 - * - * @param revision - * the revision - * @return the resource node name - */ - // TODO: this should be refactored and put in a place, that's more generic - // than this class. The same snippet's used in LRURevisionCache and - // MemRevisionCache - public static String getResourceNodeName(CDORevision revision) - { - CheckUtil.checkArg(revision.isResourceNode(), "The revision is not a resource node!"); - EStructuralFeature feature = revision.getEClass().getEStructuralFeature( - CDOModelConstants.RESOURCE_NODE_NAME_ATTRIBUTE); - return (String)((InternalCDORevision)revision).getValue(feature); - } -} +/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Andre Dietisheim - initial API and implementation
+ * Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.common.internal.db;
+
+import org.eclipse.emf.cdo.common.model.CDOModelConstants;
+import org.eclipse.emf.cdo.common.revision.CDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+
+import org.eclipse.net4j.util.CheckUtil;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+/**
+ * @author Andre Dietisheim
+ */
+public class DBRevisionCacheUtil
+{
+ /**
+ * Gets the name of a revision of a CDOResourceNode.
+ * <p>
+ * See bug 279817
+ *
+ * @param revision
+ * the revision
+ * @return the resource node name
+ */
+ // TODO: this should be refactored and put in a place, that's more generic
+ // than this class. The same snippet's used in LRURevisionCache and
+ // MemRevisionCache
+ public static String getResourceNodeName(CDORevision revision)
+ {
+ CheckUtil.checkArg(revision.isResourceNode(), "The revision is not a resource node!");
+ EStructuralFeature feature = revision.getEClass().getEStructuralFeature(
+ CDOModelConstants.RESOURCE_NODE_NAME_ATTRIBUTE);
+ return (String)((InternalCDORevision)revision).getValue(feature);
+ }
+}
diff --git a/plugins/org.eclipse.emf.cdo.common.db/src/org/eclipse/emf/cdo/common/internal/db/bundle/OM.java b/plugins/org.eclipse.emf.cdo.common.db/src/org/eclipse/emf/cdo/common/internal/db/bundle/OM.java index 1a96bf06d5..b7562f0b30 100644 --- a/plugins/org.eclipse.emf.cdo.common.db/src/org/eclipse/emf/cdo/common/internal/db/bundle/OM.java +++ b/plugins/org.eclipse.emf.cdo.common.db/src/org/eclipse/emf/cdo/common/internal/db/bundle/OM.java @@ -1,42 +1,42 @@ -/* - * Copyright (c) 2004 - 2011 Eike Stepper (Berlin, Germany) and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Andre Dietisheim - initial API and implementation - * Eike Stepper - maintenance - */ -package org.eclipse.emf.cdo.common.internal.db.bundle; - -import org.eclipse.net4j.util.om.OMBundle; -import org.eclipse.net4j.util.om.OMPlatform; -import org.eclipse.net4j.util.om.OSGiActivator; -import org.eclipse.net4j.util.om.log.OMLogger; -import org.eclipse.net4j.util.om.trace.OMTracer; - -/** - * The <em>Operations & Maintenance</em> class of this bundle. - * - * @author Andre Dietisheim - */ -public abstract class OM -{ - public static final String BUNDLE_ID = "org.eclipse.emf.cdo.common.db"; //$NON-NLS-1$ - - public static final OMBundle BUNDLE = OMPlatform.INSTANCE.bundle(BUNDLE_ID, OM.class); - - public static final OMTracer DEBUG = BUNDLE.tracer("debug"); //$NON-NLS-1$ - - public static final OMLogger LOG = BUNDLE.logger(); - - public static final class Activator extends OSGiActivator - { - public Activator() - { - super(BUNDLE); - } - } -} +/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Andre Dietisheim - initial API and implementation
+ * Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.common.internal.db.bundle;
+
+import org.eclipse.net4j.util.om.OMBundle;
+import org.eclipse.net4j.util.om.OMPlatform;
+import org.eclipse.net4j.util.om.OSGiActivator;
+import org.eclipse.net4j.util.om.log.OMLogger;
+import org.eclipse.net4j.util.om.trace.OMTracer;
+
+/**
+ * The <em>Operations & Maintenance</em> class of this bundle.
+ *
+ * @author Andre Dietisheim
+ */
+public abstract class OM
+{
+ public static final String BUNDLE_ID = "org.eclipse.emf.cdo.common.db"; //$NON-NLS-1$
+
+ public static final OMBundle BUNDLE = OMPlatform.INSTANCE.bundle(BUNDLE_ID, OM.class);
+
+ public static final OMTracer DEBUG = BUNDLE.tracer("debug"); //$NON-NLS-1$
+
+ public static final OMLogger LOG = BUNDLE.logger();
+
+ public static final class Activator extends OSGiActivator
+ {
+ public Activator()
+ {
+ super(BUNDLE);
+ }
+ }
+}
diff --git a/plugins/org.eclipse.emf.cdo.common.db/src/org/eclipse/emf/cdo/common/internal/db/cache/DBRevisionCache.java b/plugins/org.eclipse.emf.cdo.common.db/src/org/eclipse/emf/cdo/common/internal/db/cache/DBRevisionCache.java index f871a2d5ed..4b8adba7d1 100644 --- a/plugins/org.eclipse.emf.cdo.common.db/src/org/eclipse/emf/cdo/common/internal/db/cache/DBRevisionCache.java +++ b/plugins/org.eclipse.emf.cdo.common.db/src/org/eclipse/emf/cdo/common/internal/db/cache/DBRevisionCache.java @@ -1,830 +1,830 @@ -/* - * Copyright (c) 2004 - 2011 Eike Stepper (Berlin, Germany) and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Andre Dietisheim - initial API and implementation - * Eike Stepper - maintenance - */ -package org.eclipse.emf.cdo.common.internal.db.cache; - -import org.eclipse.emf.cdo.common.branch.CDOBranch; -import org.eclipse.emf.cdo.common.branch.CDOBranchManager; -import org.eclipse.emf.cdo.common.branch.CDOBranchPoint; -import org.eclipse.emf.cdo.common.branch.CDOBranchVersion; -import org.eclipse.emf.cdo.common.commit.CDOCommitInfoManager; -import org.eclipse.emf.cdo.common.id.CDOID; -import org.eclipse.emf.cdo.common.id.CDOIDProvider; -import org.eclipse.emf.cdo.common.internal.db.AbstractQueryStatement; -import org.eclipse.emf.cdo.common.internal.db.AbstractUpdateStatement; -import org.eclipse.emf.cdo.common.internal.db.DBRevisionCacheUtil; -import org.eclipse.emf.cdo.common.lob.CDOLobStore; -import org.eclipse.emf.cdo.common.model.CDOPackageRegistry; -import org.eclipse.emf.cdo.common.protocol.CDODataInput; -import org.eclipse.emf.cdo.common.protocol.CDODataOutput; -import org.eclipse.emf.cdo.common.revision.CDOListFactory; -import org.eclipse.emf.cdo.common.revision.CDORevision; -import org.eclipse.emf.cdo.common.revision.CDORevisionCache; -import org.eclipse.emf.cdo.common.revision.CDORevisionFactory; -import org.eclipse.emf.cdo.internal.common.protocol.CDODataInputImpl; -import org.eclipse.emf.cdo.internal.common.protocol.CDODataOutputImpl; -import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision; -import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionCache; - -import org.eclipse.net4j.db.DBException; -import org.eclipse.net4j.db.DBUtil; -import org.eclipse.net4j.db.IDBAdapter; -import org.eclipse.net4j.db.IDBConnectionProvider; -import org.eclipse.net4j.util.CheckUtil; -import org.eclipse.net4j.util.io.ExtendedDataInputStream; -import org.eclipse.net4j.util.io.ExtendedDataOutput; -import org.eclipse.net4j.util.io.ExtendedDataOutputStream; -import org.eclipse.net4j.util.lifecycle.Lifecycle; - -import org.eclipse.emf.ecore.EClass; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.sql.Blob; -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Types; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -/** - * A JDBC-based {@link CDORevisionCache}. - * - * @author Andre Dietisheim - */ -public class DBRevisionCache extends Lifecycle implements InternalCDORevisionCache -{ - private CDOIDProvider idProvider; - - private CDOListFactory listFactory; - - private CDOPackageRegistry packageRegistry; - - private CDORevisionFactory revisionFactory; - - private IDBAdapter dbAdapter; - - private IDBConnectionProvider dbConnectionProvider; - - public DBRevisionCache() - { - } - - public InternalCDORevisionCache instantiate(CDORevision revision) - { - // TODO: Support branches directly - throw new UnsupportedOperationException(); - } - - public CDOIDProvider getIDProvider() - { - return idProvider; - } - - public void setIDProvider(CDOIDProvider idProvider) - { - this.idProvider = idProvider; - } - - public CDOListFactory getListFactory() - { - return listFactory; - } - - public void setListFactory(CDOListFactory listFactory) - { - this.listFactory = listFactory; - } - - public CDOPackageRegistry getPackageRegistry() - { - return packageRegistry; - } - - public void setPackageRegistry(CDOPackageRegistry packageRegistry) - { - this.packageRegistry = packageRegistry; - } - - public CDORevisionFactory getRevisionFactory() - { - return revisionFactory; - } - - public void setRevisionFactory(CDORevisionFactory revisionFactory) - { - this.revisionFactory = revisionFactory; - } - - public IDBAdapter getDBAdapter() - { - return dbAdapter; - } - - public void setDBAdapter(IDBAdapter dbAdapter) - { - this.dbAdapter = dbAdapter; - } - - public IDBConnectionProvider getDBConnectionProvider() - { - return dbConnectionProvider; - } - - public void setDBConnectionProvider(IDBConnectionProvider dbConnectionProvider) - { - this.dbConnectionProvider = dbConnectionProvider; - } - - public EClass getObjectType(CDOID id) - { - return null; - } - - /** - * Gets the revision with the highest version for a given {@link CDOID}. - * - * @param id - * the id to match - * @return the revision that was found - */ - public InternalCDORevision getRevision(final CDOID id) - { - Connection connection = null; - String sql = null; - - try - { - connection = getConnection(); - AbstractQueryStatement<InternalCDORevision> query = createGetRevisionByIDStatement(id); - sql = query.getSQL(); - return query.query(connection); - } - catch (Exception e) - { - throw new DBException("Error while retrieving the revision from the database", e, sql); //$NON-NLS-1$ - } - finally - { - DBUtil.close(connection); - } - } - - private AbstractQueryStatement<InternalCDORevision> createGetRevisionByIDStatement(final CDOID id) - { - return new AbstractQueryStatement<InternalCDORevision>() - { - @Override - public String getSQL() - { - StringBuilder builder = new StringBuilder(); - builder.append("SELECT "); //$NON-NLS-1$ - builder.append(DBRevisionCacheSchema.REVISIONS_CDOREVISION); - builder.append(", "); //$NON-NLS-1$ - builder.append(DBRevisionCacheSchema.REVISIONS_REVISED); - builder.append(" FROM "); //$NON-NLS-1$ - builder.append(DBRevisionCacheSchema.REVISIONS); - builder.append(" WHERE "); //$NON-NLS-1$ - builder.append(DBRevisionCacheSchema.REVISIONS_ID); - builder.append("=? AND "); //$NON-NLS-1$ - builder.append(DBRevisionCacheSchema.REVISIONS_REVISED); - builder.append("="); //$NON-NLS-1$ - builder.append(CDORevision.UNSPECIFIED_DATE); - return builder.toString(); - } - - @Override - protected void setParameters(PreparedStatement preparedStatement) throws SQLException - { - preparedStatement.setString(1, id.toURIFragment()); - } - - @Override - protected InternalCDORevision getResult(ResultSet resultSet) throws Exception - { - long revised = resultSet.getLong(2); - Blob blob = resultSet.getBlob(1); - return toRevision(blob, revised); - } - }; - } - - /** - * Gets an {@link InternalCDORevision} that matches the given timestamp (it is >= created timestamp AND <= revised - * timestamp of the revision). - * - * @param id - * the id - * @return the revision by time - */ - public InternalCDORevision getRevision(final CDOID id, final CDOBranchPoint branchPoint) - { - Connection connection = null; - String sql = null; - - try - { - connection = getConnection(); - AbstractQueryStatement<InternalCDORevision> statement = new AbstractQueryStatement<InternalCDORevision>() - { - @Override - public String getSQL() - { - StringBuilder builder = new StringBuilder(); - builder.append("SELECT "); //$NON-NLS-1$ - builder.append(DBRevisionCacheSchema.REVISIONS_CDOREVISION); - builder.append(", "); //$NON-NLS-1$ - builder.append(DBRevisionCacheSchema.REVISIONS_REVISED); - builder.append(" FROM "); //$NON-NLS-1$ - builder.append(DBRevisionCacheSchema.REVISIONS); - builder.append(" WHERE "); //$NON-NLS-1$ - builder.append(DBRevisionCacheSchema.REVISIONS_ID); - builder.append("=? AND "); //$NON-NLS-1$ - appendTimestampCondition(builder); - return builder.toString(); - } - - @Override - protected void setParameters(PreparedStatement preparedStatement) throws SQLException - { - long timeStamp = branchPoint.getTimeStamp(); - preparedStatement.setString(1, id.toURIFragment()); - preparedStatement.setLong(2, timeStamp); - preparedStatement.setLong(3, timeStamp); - } - - @Override - protected InternalCDORevision getResult(ResultSet resultSet) throws Exception - { - long revised = resultSet.getLong(2); - Blob blob = resultSet.getBlob(1); - return toRevision(blob, revised); - } - }; - - sql = statement.getSQL(); - return statement.query(connection); - } - catch (Exception e) - { - throw new DBException("Error while retrieving a revision by timestamp from the database", e, sql); //$NON-NLS-1$ - } - finally - { - DBUtil.close(connection); - } - } - - /** - * Gets a {@link InternalCDORevision} by a given id and version. - * - * @param id - * the id to match the revision against - * @return the revision by version - */ - public InternalCDORevision getRevisionByVersion(final CDOID id, final CDOBranchVersion branchVersion) - { - Connection connection = null; - String sql = null; - - try - { - connection = getConnection(); - AbstractQueryStatement<InternalCDORevision> statement = new AbstractQueryStatement<InternalCDORevision>() - { - @Override - public String getSQL() - { - StringBuilder builder = new StringBuilder(); - builder.append("SELECT "); //$NON-NLS-1$ - builder.append(DBRevisionCacheSchema.REVISIONS_CDOREVISION); - builder.append(", "); //$NON-NLS-1$ - builder.append(DBRevisionCacheSchema.REVISIONS_REVISED); - builder.append(" FROM "); //$NON-NLS-1$ - builder.append(DBRevisionCacheSchema.REVISIONS); - builder.append(" WHERE "); //$NON-NLS-1$ - builder.append(DBRevisionCacheSchema.REVISIONS_ID); - builder.append("=? AND "); //$NON-NLS-1$ - builder.append(DBRevisionCacheSchema.REVISIONS_VERSION); - builder.append("=?"); //$NON-NLS-1$ - return builder.toString(); - } - - @Override - protected void setParameters(PreparedStatement preparedStatement) throws SQLException - { - preparedStatement.setString(1, id.toURIFragment()); - preparedStatement.setInt(2, branchVersion.getVersion()); - } - - @Override - protected InternalCDORevision getResult(ResultSet resultSet) throws Exception - { - long revised = resultSet.getLong(2); - Blob blob = resultSet.getBlob(1); - return toRevision(blob, revised); - } - }; - - sql = statement.getSQL(); - return statement.query(connection); - } - catch (Exception e) - { - throw new DBException("Error while retrieving a revision by version from the database", e, sql); //$NON-NLS-1$ - } - finally - { - DBUtil.close(connection); - } - } - - /** - * Gets the latest revisions of all persisted model versions. - * - * @return the revisions - */ - public List<CDORevision> getCurrentRevisions() - { - Connection connection = null; - String sql = null; - - try - { - connection = getConnection(); - AbstractQueryStatement<List<CDORevision>> query = new AbstractQueryStatement<List<CDORevision>>() - { - @Override - public String getSQL() - { - StringBuilder builder = new StringBuilder(); - builder.append("SELECT "); //$NON-NLS-1$ - builder.append(DBRevisionCacheSchema.REVISIONS_CDOREVISION); - builder.append(", "); //$NON-NLS-1$ - builder.append(DBRevisionCacheSchema.REVISIONS_REVISED); - builder.append(" FROM "); //$NON-NLS-1$ - builder.append(DBRevisionCacheSchema.REVISIONS); - builder.append(" WHERE "); //$NON-NLS-1$ - builder.append(DBRevisionCacheSchema.REVISIONS_REVISED); - builder.append("="); //$NON-NLS-1$ - builder.append(CDORevision.UNSPECIFIED_DATE); - return builder.toString(); - } - - @Override - protected void setParameters(PreparedStatement preparedStatement) throws SQLException - { - } - - @Override - protected List<CDORevision> getResult(ResultSet resultSet) throws Exception - { - final List<CDORevision> revisionList = new ArrayList<CDORevision>(); - - do - { - long revised = resultSet.getLong(2); - Blob blob = resultSet.getBlob(1); - revisionList.add(toRevision(blob, revised)); - } while (resultSet.next()); - - return revisionList; - } - }; - - sql = query.getSQL(); - return query.query(connection); - } - catch (Exception e) - { - throw new DBException("Error while retrieving a revision by version from the database", e, sql); //$NON-NLS-1$ - } - finally - { - DBUtil.close(connection); - } - } - - /** - * Adds a given revision to this cache. It furthermore updates the revised timestamp of the latest (before inserting - * the new one) revision - * - * @param revision - * the revision to add to this cache - */ - public void addRevision(CDORevision revision) - { - CheckUtil.checkArg(revision, "revision"); - Connection connection = null; - String sql = null; - - try - { - connection = getConnection(); - AbstractUpdateStatement update = createAddRevisionStatement((InternalCDORevision)revision); - sql = update.getSQL(); - update.update(connection); - - if (revision.getVersion() > CDORevision.FIRST_VERSION) - { - // Update former latest revision - update = createUpdateRevisedStatement((InternalCDORevision)revision); - update.update(connection); - } - } - catch (DBException e) - { - throw e; - } - catch (Exception e) - { - throw new DBException("Error while retrieving the revision from the database", e, sql); //$NON-NLS-1$ - } - finally - { - DBUtil.close(connection); - } - } - - private AbstractUpdateStatement createUpdateRevisedStatement(final InternalCDORevision revision) - { - return new AbstractUpdateStatement() - { - @Override - public String getSQL() - { - StringBuilder builder = new StringBuilder(); - builder.append("UPDATE "); //$NON-NLS-1$ - builder.append(DBRevisionCacheSchema.REVISIONS); - builder.append(" SET "); //$NON-NLS-1$ - builder.append(DBRevisionCacheSchema.REVISIONS_REVISED); - builder.append(" =? WHERE "); //$NON-NLS-1$ - builder.append(DBRevisionCacheSchema.REVISIONS_ID); - builder.append(" =? AND "); //$NON-NLS-1$ - builder.append(DBRevisionCacheSchema.REVISIONS_VERSION); - builder.append(" =?"); //$NON-NLS-1$ - return builder.toString(); - } - - @Override - protected void setParameters(PreparedStatement preparedStatement) throws SQLException - { - preparedStatement.setLong(1, revision.getTimeStamp() - 1); - preparedStatement.setString(2, revision.getID().toURIFragment()); - preparedStatement.setInt(3, revision.getVersion() - 1); - } - }; - } - - private AbstractUpdateStatement createAddRevisionStatement(final InternalCDORevision revision) - { - return new AbstractUpdateStatement() - { - @Override - public String getSQL() - { - StringBuilder builder = new StringBuilder(); - builder.append("INSERT INTO "); //$NON-NLS-1$ - builder.append(DBRevisionCacheSchema.REVISIONS); - builder.append(" ("); //$NON-NLS-1$ - builder.append(DBRevisionCacheSchema.REVISIONS_ID); - builder.append(", "); //$NON-NLS-1$ - builder.append(DBRevisionCacheSchema.REVISIONS_VERSION); - builder.append(", "); //$NON-NLS-1$ - builder.append(DBRevisionCacheSchema.REVISIONS_CREATED); - builder.append(", "); //$NON-NLS-1$ - builder.append(DBRevisionCacheSchema.REVISIONS_REVISED); - builder.append(", "); //$NON-NLS-1$ - builder.append(DBRevisionCacheSchema.REVISIONS_CDOREVISION); - builder.append(", "); //$NON-NLS-1$ - builder.append(DBRevisionCacheSchema.REVISIONS_RESOURCENODE_NAME); - builder.append(", "); //$NON-NLS-1$ - builder.append(DBRevisionCacheSchema.REVISIONS_CONTAINERID); - builder.append(") "); //$NON-NLS-1$ - builder.append(" VALUES (?, ?, ?, ?, ?, ? ,?)"); //$NON-NLS-1$ - return builder.toString(); - } - - @Override - protected void setParameters(PreparedStatement preparedStatement) throws Exception - { - preparedStatement.setString(1, revision.getID().toURIFragment()); - preparedStatement.setInt(2, revision.getVersion()); - preparedStatement.setLong(3, revision.getTimeStamp()); - preparedStatement.setLong(4, revision.getRevised()); - preparedStatement.setBytes(5, toBytes(revision)); - setResourceNodeValues(revision, preparedStatement); - } - - /** - * Sets the values in the prepared statment, that are related to the given revision. If the revision is a resource - * node, the values are set otherwise the fields are set to <tt>null</tt> - * - * @param revision - * the revision - * @param preparedStatement - * the prepared statement - * @throws SQLException - * the SQL exception - */ - private void setResourceNodeValues(InternalCDORevision revision, PreparedStatement preparedStatement) - throws SQLException - { - if (revision.isResourceNode()) - { - preparedStatement.setString(6, DBRevisionCacheUtil.getResourceNodeName(revision)); - CDOID containerID = (CDOID)revision.getContainerID(); - preparedStatement.setString(7, containerID.toURIFragment()); - } - else - { - preparedStatement.setNull(6, Types.VARCHAR); - preparedStatement.setNull(7, Types.INTEGER); - } - } - }; - } - - /** - * Removes a revision by its Id and version. If the given revision does not exist <tt>null</tt> is returned. Otherwise - * the {@link InternalCDORevision}, that was removed is returned - * - * @param id - * the id of the revision to remove - * @return the {@link InternalCDORevision} that was removed, <tt>null</tt> otherwise - */ - public InternalCDORevision removeRevision(CDOID id, CDOBranchVersion branchVersion) - { - Connection connection = null; - String sql = null; - - try - { - final InternalCDORevision revision = getRevisionByVersion(id, branchVersion); - if (revision != null) - { - connection = getConnection(); - AbstractUpdateStatement statement = new AbstractUpdateStatement() - { - @Override - public String getSQL() - { - StringBuilder builder = new StringBuilder(); - builder.append("DELETE FROM "); //$NON-NLS-1$ - builder.append(DBRevisionCacheSchema.REVISIONS); - builder.append(" WHERE ID =? AND VERSION =?"); //$NON-NLS-1$ - return builder.toString(); - } - - @Override - protected void setParameters(PreparedStatement preparedStatement) throws Exception - { - preparedStatement.setString(1, revision.getID().toURIFragment()); - preparedStatement.setInt(2, revision.getVersion()); - } - }; - - sql = statement.getSQL(); - statement.update(connection); - } - - return revision; - } - catch (Exception e) - { - throw new DBException("Error while removing a revision from the database", e, sql); //$NON-NLS-1$ - } - finally - { - DBUtil.close(connection); - } - } - - /** - * Removes all revisions from this cache (and its database). - */ - public void clear() - { - Connection connection = null; - String sql = null; - - try - { - connection = getConnection(); - AbstractUpdateStatement update = new AbstractUpdateStatement() - { - @Override - public String getSQL() - { - StringBuilder builder = new StringBuilder(); - builder.append("DELETE FROM "); //$NON-NLS-1$ - builder.append(DBRevisionCacheSchema.REVISIONS); - return builder.toString(); - } - }; - - sql = update.getSQL(); - update.update(connection); - } - catch (Exception e) - { - throw new DBException("Error while clearing the database", e, sql); - } - finally - { - DBUtil.close(connection); - } - } - - public Map<CDOBranch, List<CDORevision>> getAllRevisions() - { - throw new UnsupportedOperationException(); - } - - public List<CDORevision> getRevisions(CDOBranchPoint branchPoint) - { - throw new UnsupportedOperationException(); - } - - @Override - protected void doBeforeActivate() throws Exception - { - super.doBeforeActivate(); - checkState(idProvider, "idProvider"); //$NON-NLS-1$ - checkState(listFactory, "listFactory");//$NON-NLS-1$ - checkState(packageRegistry, "packageRegistry"); //$NON-NLS-1$ - checkState(revisionFactory, "revisionFactory"); //$NON-NLS-1$ - checkState(dbAdapter, "dbAdapter"); //$NON-NLS-1$ - checkState(dbConnectionProvider, "dbConnectionProvider"); //$NON-NLS-1$ - } - - @Override - protected void doActivate() throws Exception - { - super.doActivate(); - createTable(); - } - - /** - * Creates the (single) table that's used to store the cached revisions. - * - * @throws SQLException - * Signals that an error has occured while getting the connection or committing the transaction - */ - private void createTable() throws SQLException - { - Connection connection = null; - - try - { - connection = getConnection(); - DBRevisionCacheSchema.INSTANCE.create(dbAdapter, connection); - connection.commit(); - } - finally - { - DBUtil.close(connection); - } - } - - private static StringBuilder appendTimestampCondition(StringBuilder builder) - { - builder.append(DBRevisionCacheSchema.REVISIONS_CREATED); - builder.append("<=? AND ("); //$NON-NLS-1$ - builder.append(DBRevisionCacheSchema.REVISIONS_REVISED); - builder.append(">=? OR "); //$NON-NLS-1$ - builder.append(DBRevisionCacheSchema.REVISIONS_REVISED); - builder.append("="); //$NON-NLS-1$ - builder.append(CDORevision.UNSPECIFIED_DATE); - builder.append(")"); //$NON-NLS-1$ - return builder; - } - - /** - * Converts the given Objects to an {@link InternalCDORevision}. The object is deserialized to an instance of the - * correct type and the revised timestamp is set separatley. Whe you insert a new revision into this cache, the former - * latest revision gets a new revised timestamp. This timestamp's only updated in the database column 'revised', not - * in the blob that holds the serialized instance. Therefore the revised timestamp has to be set separately - * - * @param revisedTimestamp - * the revised timestamp to set to the revision - * @param blob - * the blob that holds the revision - * @return the revision - * @throws IOException - * Signals that an error has occurred while reading the revision from the blob. - * @throws SQLException - * Signals that an error hass occured while getting the binary stream from the blob - */ - private InternalCDORevision toRevision(Blob blob, long revisedTimestamp) throws IOException, SQLException - { - CDODataInput dataInput = getCDODataInput(ExtendedDataInputStream.wrap(blob.getBinaryStream())); - InternalCDORevision revision = (InternalCDORevision)dataInput.readCDORevision(); - // Revised timestamp's updated in the revised column only (not in the blob) - revision.setRevised(revisedTimestamp); - return revision; - } - - private CDODataInput getCDODataInput(ExtendedDataInputStream inputStream) throws IOException - { - return new CDODataInputImpl(inputStream) - { - @Override - protected CDOPackageRegistry getPackageRegistry() - { - return packageRegistry; - } - - @Override - protected CDOBranchManager getBranchManager() - { - return null; - } - - @Override - protected CDOCommitInfoManager getCommitInfoManager() - { - return null; - } - - @Override - protected CDORevisionFactory getRevisionFactory() - { - return revisionFactory; - } - - @Override - protected CDOListFactory getListFactory() - { - return listFactory; - } - - @Override - protected CDOLobStore getLobStore() - { - return null; - } - }; - } - - /** - * Converts a given {@link CDORevision} to a byte array. - * - * @param revision - * the revision - * @return the array of bytes for the given revision - * @throws IOException - * Signals an error has occurred while writing the revision to the byte array. - */ - private byte[] toBytes(InternalCDORevision revision) throws IOException - { - ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); - CDODataOutput dataOutput = getCDODataOutput(ExtendedDataOutputStream.wrap(byteArrayOutputStream)); - dataOutput.writeCDORevision(revision, CDORevision.UNCHUNKED); - return byteArrayOutputStream.toByteArray(); - } - - private CDODataOutput getCDODataOutput(ExtendedDataOutput extendedDataOutputStream) - { - return new CDODataOutputImpl(extendedDataOutputStream) - { - @Override - public CDOPackageRegistry getPackageRegistry() - { - return packageRegistry; - } - - @Override - public CDOIDProvider getIDProvider() - { - return idProvider; - } - }; - } - - /** - * Gets a connection from the {@link IDBConnectionProvider} within this cache. The Connection is set not to auto - * commit transactions. - * - * @return the connection - * @throws SQLException - * Signals that an error occured while getting the connection from the connection provider - */ - private Connection getConnection() throws SQLException - { - Connection connection = dbConnectionProvider.getConnection(); - connection.setAutoCommit(false); - return connection; - } -} +/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Andre Dietisheim - initial API and implementation
+ * Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.common.internal.db.cache;
+
+import org.eclipse.emf.cdo.common.branch.CDOBranch;
+import org.eclipse.emf.cdo.common.branch.CDOBranchManager;
+import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
+import org.eclipse.emf.cdo.common.branch.CDOBranchVersion;
+import org.eclipse.emf.cdo.common.commit.CDOCommitInfoManager;
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.id.CDOIDProvider;
+import org.eclipse.emf.cdo.common.internal.db.AbstractQueryStatement;
+import org.eclipse.emf.cdo.common.internal.db.AbstractUpdateStatement;
+import org.eclipse.emf.cdo.common.internal.db.DBRevisionCacheUtil;
+import org.eclipse.emf.cdo.common.lob.CDOLobStore;
+import org.eclipse.emf.cdo.common.model.CDOPackageRegistry;
+import org.eclipse.emf.cdo.common.protocol.CDODataInput;
+import org.eclipse.emf.cdo.common.protocol.CDODataOutput;
+import org.eclipse.emf.cdo.common.revision.CDOListFactory;
+import org.eclipse.emf.cdo.common.revision.CDORevision;
+import org.eclipse.emf.cdo.common.revision.CDORevisionCache;
+import org.eclipse.emf.cdo.common.revision.CDORevisionFactory;
+import org.eclipse.emf.cdo.internal.common.protocol.CDODataInputImpl;
+import org.eclipse.emf.cdo.internal.common.protocol.CDODataOutputImpl;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionCache;
+
+import org.eclipse.net4j.db.DBException;
+import org.eclipse.net4j.db.DBUtil;
+import org.eclipse.net4j.db.IDBAdapter;
+import org.eclipse.net4j.db.IDBConnectionProvider;
+import org.eclipse.net4j.util.CheckUtil;
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+import org.eclipse.net4j.util.io.ExtendedDataOutput;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+import org.eclipse.net4j.util.lifecycle.Lifecycle;
+
+import org.eclipse.emf.ecore.EClass;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.sql.Blob;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Types;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * A JDBC-based {@link CDORevisionCache}.
+ *
+ * @author Andre Dietisheim
+ */
+public class DBRevisionCache extends Lifecycle implements InternalCDORevisionCache
+{
+ private CDOIDProvider idProvider;
+
+ private CDOListFactory listFactory;
+
+ private CDOPackageRegistry packageRegistry;
+
+ private CDORevisionFactory revisionFactory;
+
+ private IDBAdapter dbAdapter;
+
+ private IDBConnectionProvider dbConnectionProvider;
+
+ public DBRevisionCache()
+ {
+ }
+
+ public InternalCDORevisionCache instantiate(CDORevision revision)
+ {
+ // TODO: Support branches directly
+ throw new UnsupportedOperationException();
+ }
+
+ public CDOIDProvider getIDProvider()
+ {
+ return idProvider;
+ }
+
+ public void setIDProvider(CDOIDProvider idProvider)
+ {
+ this.idProvider = idProvider;
+ }
+
+ public CDOListFactory getListFactory()
+ {
+ return listFactory;
+ }
+
+ public void setListFactory(CDOListFactory listFactory)
+ {
+ this.listFactory = listFactory;
+ }
+
+ public CDOPackageRegistry getPackageRegistry()
+ {
+ return packageRegistry;
+ }
+
+ public void setPackageRegistry(CDOPackageRegistry packageRegistry)
+ {
+ this.packageRegistry = packageRegistry;
+ }
+
+ public CDORevisionFactory getRevisionFactory()
+ {
+ return revisionFactory;
+ }
+
+ public void setRevisionFactory(CDORevisionFactory revisionFactory)
+ {
+ this.revisionFactory = revisionFactory;
+ }
+
+ public IDBAdapter getDBAdapter()
+ {
+ return dbAdapter;
+ }
+
+ public void setDBAdapter(IDBAdapter dbAdapter)
+ {
+ this.dbAdapter = dbAdapter;
+ }
+
+ public IDBConnectionProvider getDBConnectionProvider()
+ {
+ return dbConnectionProvider;
+ }
+
+ public void setDBConnectionProvider(IDBConnectionProvider dbConnectionProvider)
+ {
+ this.dbConnectionProvider = dbConnectionProvider;
+ }
+
+ public EClass getObjectType(CDOID id)
+ {
+ return null;
+ }
+
+ /**
+ * Gets the revision with the highest version for a given {@link CDOID}.
+ *
+ * @param id
+ * the id to match
+ * @return the revision that was found
+ */
+ public InternalCDORevision getRevision(final CDOID id)
+ {
+ Connection connection = null;
+ String sql = null;
+
+ try
+ {
+ connection = getConnection();
+ AbstractQueryStatement<InternalCDORevision> query = createGetRevisionByIDStatement(id);
+ sql = query.getSQL();
+ return query.query(connection);
+ }
+ catch (Exception e)
+ {
+ throw new DBException("Error while retrieving the revision from the database", e, sql); //$NON-NLS-1$
+ }
+ finally
+ {
+ DBUtil.close(connection);
+ }
+ }
+
+ private AbstractQueryStatement<InternalCDORevision> createGetRevisionByIDStatement(final CDOID id)
+ {
+ return new AbstractQueryStatement<InternalCDORevision>()
+ {
+ @Override
+ public String getSQL()
+ {
+ StringBuilder builder = new StringBuilder();
+ builder.append("SELECT "); //$NON-NLS-1$
+ builder.append(DBRevisionCacheSchema.REVISIONS_CDOREVISION);
+ builder.append(", "); //$NON-NLS-1$
+ builder.append(DBRevisionCacheSchema.REVISIONS_REVISED);
+ builder.append(" FROM "); //$NON-NLS-1$
+ builder.append(DBRevisionCacheSchema.REVISIONS);
+ builder.append(" WHERE "); //$NON-NLS-1$
+ builder.append(DBRevisionCacheSchema.REVISIONS_ID);
+ builder.append("=? AND "); //$NON-NLS-1$
+ builder.append(DBRevisionCacheSchema.REVISIONS_REVISED);
+ builder.append("="); //$NON-NLS-1$
+ builder.append(CDORevision.UNSPECIFIED_DATE);
+ return builder.toString();
+ }
+
+ @Override
+ protected void setParameters(PreparedStatement preparedStatement) throws SQLException
+ {
+ preparedStatement.setString(1, id.toURIFragment());
+ }
+
+ @Override
+ protected InternalCDORevision getResult(ResultSet resultSet) throws Exception
+ {
+ long revised = resultSet.getLong(2);
+ Blob blob = resultSet.getBlob(1);
+ return toRevision(blob, revised);
+ }
+ };
+ }
+
+ /**
+ * Gets an {@link InternalCDORevision} that matches the given timestamp (it is >= created timestamp AND <= revised
+ * timestamp of the revision).
+ *
+ * @param id
+ * the id
+ * @return the revision by time
+ */
+ public InternalCDORevision getRevision(final CDOID id, final CDOBranchPoint branchPoint)
+ {
+ Connection connection = null;
+ String sql = null;
+
+ try
+ {
+ connection = getConnection();
+ AbstractQueryStatement<InternalCDORevision> statement = new AbstractQueryStatement<InternalCDORevision>()
+ {
+ @Override
+ public String getSQL()
+ {
+ StringBuilder builder = new StringBuilder();
+ builder.append("SELECT "); //$NON-NLS-1$
+ builder.append(DBRevisionCacheSchema.REVISIONS_CDOREVISION);
+ builder.append(", "); //$NON-NLS-1$
+ builder.append(DBRevisionCacheSchema.REVISIONS_REVISED);
+ builder.append(" FROM "); //$NON-NLS-1$
+ builder.append(DBRevisionCacheSchema.REVISIONS);
+ builder.append(" WHERE "); //$NON-NLS-1$
+ builder.append(DBRevisionCacheSchema.REVISIONS_ID);
+ builder.append("=? AND "); //$NON-NLS-1$
+ appendTimestampCondition(builder);
+ return builder.toString();
+ }
+
+ @Override
+ protected void setParameters(PreparedStatement preparedStatement) throws SQLException
+ {
+ long timeStamp = branchPoint.getTimeStamp();
+ preparedStatement.setString(1, id.toURIFragment());
+ preparedStatement.setLong(2, timeStamp);
+ preparedStatement.setLong(3, timeStamp);
+ }
+
+ @Override
+ protected InternalCDORevision getResult(ResultSet resultSet) throws Exception
+ {
+ long revised = resultSet.getLong(2);
+ Blob blob = resultSet.getBlob(1);
+ return toRevision(blob, revised);
+ }
+ };
+
+ sql = statement.getSQL();
+ return statement.query(connection);
+ }
+ catch (Exception e)
+ {
+ throw new DBException("Error while retrieving a revision by timestamp from the database", e, sql); //$NON-NLS-1$
+ }
+ finally
+ {
+ DBUtil.close(connection);
+ }
+ }
+
+ /**
+ * Gets a {@link InternalCDORevision} by a given id and version.
+ *
+ * @param id
+ * the id to match the revision against
+ * @return the revision by version
+ */
+ public InternalCDORevision getRevisionByVersion(final CDOID id, final CDOBranchVersion branchVersion)
+ {
+ Connection connection = null;
+ String sql = null;
+
+ try
+ {
+ connection = getConnection();
+ AbstractQueryStatement<InternalCDORevision> statement = new AbstractQueryStatement<InternalCDORevision>()
+ {
+ @Override
+ public String getSQL()
+ {
+ StringBuilder builder = new StringBuilder();
+ builder.append("SELECT "); //$NON-NLS-1$
+ builder.append(DBRevisionCacheSchema.REVISIONS_CDOREVISION);
+ builder.append(", "); //$NON-NLS-1$
+ builder.append(DBRevisionCacheSchema.REVISIONS_REVISED);
+ builder.append(" FROM "); //$NON-NLS-1$
+ builder.append(DBRevisionCacheSchema.REVISIONS);
+ builder.append(" WHERE "); //$NON-NLS-1$
+ builder.append(DBRevisionCacheSchema.REVISIONS_ID);
+ builder.append("=? AND "); //$NON-NLS-1$
+ builder.append(DBRevisionCacheSchema.REVISIONS_VERSION);
+ builder.append("=?"); //$NON-NLS-1$
+ return builder.toString();
+ }
+
+ @Override
+ protected void setParameters(PreparedStatement preparedStatement) throws SQLException
+ {
+ preparedStatement.setString(1, id.toURIFragment());
+ preparedStatement.setInt(2, branchVersion.getVersion());
+ }
+
+ @Override
+ protected InternalCDORevision getResult(ResultSet resultSet) throws Exception
+ {
+ long revised = resultSet.getLong(2);
+ Blob blob = resultSet.getBlob(1);
+ return toRevision(blob, revised);
+ }
+ };
+
+ sql = statement.getSQL();
+ return statement.query(connection);
+ }
+ catch (Exception e)
+ {
+ throw new DBException("Error while retrieving a revision by version from the database", e, sql); //$NON-NLS-1$
+ }
+ finally
+ {
+ DBUtil.close(connection);
+ }
+ }
+
+ /**
+ * Gets the latest revisions of all persisted model versions.
+ *
+ * @return the revisions
+ */
+ public List<CDORevision> getCurrentRevisions()
+ {
+ Connection connection = null;
+ String sql = null;
+
+ try
+ {
+ connection = getConnection();
+ AbstractQueryStatement<List<CDORevision>> query = new AbstractQueryStatement<List<CDORevision>>()
+ {
+ @Override
+ public String getSQL()
+ {
+ StringBuilder builder = new StringBuilder();
+ builder.append("SELECT "); //$NON-NLS-1$
+ builder.append(DBRevisionCacheSchema.REVISIONS_CDOREVISION);
+ builder.append(", "); //$NON-NLS-1$
+ builder.append(DBRevisionCacheSchema.REVISIONS_REVISED);
+ builder.append(" FROM "); //$NON-NLS-1$
+ builder.append(DBRevisionCacheSchema.REVISIONS);
+ builder.append(" WHERE "); //$NON-NLS-1$
+ builder.append(DBRevisionCacheSchema.REVISIONS_REVISED);
+ builder.append("="); //$NON-NLS-1$
+ builder.append(CDORevision.UNSPECIFIED_DATE);
+ return builder.toString();
+ }
+
+ @Override
+ protected void setParameters(PreparedStatement preparedStatement) throws SQLException
+ {
+ }
+
+ @Override
+ protected List<CDORevision> getResult(ResultSet resultSet) throws Exception
+ {
+ final List<CDORevision> revisionList = new ArrayList<CDORevision>();
+
+ do
+ {
+ long revised = resultSet.getLong(2);
+ Blob blob = resultSet.getBlob(1);
+ revisionList.add(toRevision(blob, revised));
+ } while (resultSet.next());
+
+ return revisionList;
+ }
+ };
+
+ sql = query.getSQL();
+ return query.query(connection);
+ }
+ catch (Exception e)
+ {
+ throw new DBException("Error while retrieving a revision by version from the database", e, sql); //$NON-NLS-1$
+ }
+ finally
+ {
+ DBUtil.close(connection);
+ }
+ }
+
+ /**
+ * Adds a given revision to this cache. It furthermore updates the revised timestamp of the latest (before inserting
+ * the new one) revision
+ *
+ * @param revision
+ * the revision to add to this cache
+ */
+ public void addRevision(CDORevision revision)
+ {
+ CheckUtil.checkArg(revision, "revision");
+ Connection connection = null;
+ String sql = null;
+
+ try
+ {
+ connection = getConnection();
+ AbstractUpdateStatement update = createAddRevisionStatement((InternalCDORevision)revision);
+ sql = update.getSQL();
+ update.update(connection);
+
+ if (revision.getVersion() > CDORevision.FIRST_VERSION)
+ {
+ // Update former latest revision
+ update = createUpdateRevisedStatement((InternalCDORevision)revision);
+ update.update(connection);
+ }
+ }
+ catch (DBException e)
+ {
+ throw e;
+ }
+ catch (Exception e)
+ {
+ throw new DBException("Error while retrieving the revision from the database", e, sql); //$NON-NLS-1$
+ }
+ finally
+ {
+ DBUtil.close(connection);
+ }
+ }
+
+ private AbstractUpdateStatement createUpdateRevisedStatement(final InternalCDORevision revision)
+ {
+ return new AbstractUpdateStatement()
+ {
+ @Override
+ public String getSQL()
+ {
+ StringBuilder builder = new StringBuilder();
+ builder.append("UPDATE "); //$NON-NLS-1$
+ builder.append(DBRevisionCacheSchema.REVISIONS);
+ builder.append(" SET "); //$NON-NLS-1$
+ builder.append(DBRevisionCacheSchema.REVISIONS_REVISED);
+ builder.append(" =? WHERE "); //$NON-NLS-1$
+ builder.append(DBRevisionCacheSchema.REVISIONS_ID);
+ builder.append(" =? AND "); //$NON-NLS-1$
+ builder.append(DBRevisionCacheSchema.REVISIONS_VERSION);
+ builder.append(" =?"); //$NON-NLS-1$
+ return builder.toString();
+ }
+
+ @Override
+ protected void setParameters(PreparedStatement preparedStatement) throws SQLException
+ {
+ preparedStatement.setLong(1, revision.getTimeStamp() - 1);
+ preparedStatement.setString(2, revision.getID().toURIFragment());
+ preparedStatement.setInt(3, revision.getVersion() - 1);
+ }
+ };
+ }
+
+ private AbstractUpdateStatement createAddRevisionStatement(final InternalCDORevision revision)
+ {
+ return new AbstractUpdateStatement()
+ {
+ @Override
+ public String getSQL()
+ {
+ StringBuilder builder = new StringBuilder();
+ builder.append("INSERT INTO "); //$NON-NLS-1$
+ builder.append(DBRevisionCacheSchema.REVISIONS);
+ builder.append(" ("); //$NON-NLS-1$
+ builder.append(DBRevisionCacheSchema.REVISIONS_ID);
+ builder.append(", "); //$NON-NLS-1$
+ builder.append(DBRevisionCacheSchema.REVISIONS_VERSION);
+ builder.append(", "); //$NON-NLS-1$
+ builder.append(DBRevisionCacheSchema.REVISIONS_CREATED);
+ builder.append(", "); //$NON-NLS-1$
+ builder.append(DBRevisionCacheSchema.REVISIONS_REVISED);
+ builder.append(", "); //$NON-NLS-1$
+ builder.append(DBRevisionCacheSchema.REVISIONS_CDOREVISION);
+ builder.append(", "); //$NON-NLS-1$
+ builder.append(DBRevisionCacheSchema.REVISIONS_RESOURCENODE_NAME);
+ builder.append(", "); //$NON-NLS-1$
+ builder.append(DBRevisionCacheSchema.REVISIONS_CONTAINERID);
+ builder.append(") "); //$NON-NLS-1$
+ builder.append(" VALUES (?, ?, ?, ?, ?, ? ,?)"); //$NON-NLS-1$
+ return builder.toString();
+ }
+
+ @Override
+ protected void setParameters(PreparedStatement preparedStatement) throws Exception
+ {
+ preparedStatement.setString(1, revision.getID().toURIFragment());
+ preparedStatement.setInt(2, revision.getVersion());
+ preparedStatement.setLong(3, revision.getTimeStamp());
+ preparedStatement.setLong(4, revision.getRevised());
+ preparedStatement.setBytes(5, toBytes(revision));
+ setResourceNodeValues(revision, preparedStatement);
+ }
+
+ /**
+ * Sets the values in the prepared statment, that are related to the given revision. If the revision is a resource
+ * node, the values are set otherwise the fields are set to <tt>null</tt>
+ *
+ * @param revision
+ * the revision
+ * @param preparedStatement
+ * the prepared statement
+ * @throws SQLException
+ * the SQL exception
+ */
+ private void setResourceNodeValues(InternalCDORevision revision, PreparedStatement preparedStatement)
+ throws SQLException
+ {
+ if (revision.isResourceNode())
+ {
+ preparedStatement.setString(6, DBRevisionCacheUtil.getResourceNodeName(revision));
+ CDOID containerID = (CDOID)revision.getContainerID();
+ preparedStatement.setString(7, containerID.toURIFragment());
+ }
+ else
+ {
+ preparedStatement.setNull(6, Types.VARCHAR);
+ preparedStatement.setNull(7, Types.INTEGER);
+ }
+ }
+ };
+ }
+
+ /**
+ * Removes a revision by its Id and version. If the given revision does not exist <tt>null</tt> is returned. Otherwise
+ * the {@link InternalCDORevision}, that was removed is returned
+ *
+ * @param id
+ * the id of the revision to remove
+ * @return the {@link InternalCDORevision} that was removed, <tt>null</tt> otherwise
+ */
+ public InternalCDORevision removeRevision(CDOID id, CDOBranchVersion branchVersion)
+ {
+ Connection connection = null;
+ String sql = null;
+
+ try
+ {
+ final InternalCDORevision revision = getRevisionByVersion(id, branchVersion);
+ if (revision != null)
+ {
+ connection = getConnection();
+ AbstractUpdateStatement statement = new AbstractUpdateStatement()
+ {
+ @Override
+ public String getSQL()
+ {
+ StringBuilder builder = new StringBuilder();
+ builder.append("DELETE FROM "); //$NON-NLS-1$
+ builder.append(DBRevisionCacheSchema.REVISIONS);
+ builder.append(" WHERE ID =? AND VERSION =?"); //$NON-NLS-1$
+ return builder.toString();
+ }
+
+ @Override
+ protected void setParameters(PreparedStatement preparedStatement) throws Exception
+ {
+ preparedStatement.setString(1, revision.getID().toURIFragment());
+ preparedStatement.setInt(2, revision.getVersion());
+ }
+ };
+
+ sql = statement.getSQL();
+ statement.update(connection);
+ }
+
+ return revision;
+ }
+ catch (Exception e)
+ {
+ throw new DBException("Error while removing a revision from the database", e, sql); //$NON-NLS-1$
+ }
+ finally
+ {
+ DBUtil.close(connection);
+ }
+ }
+
+ /**
+ * Removes all revisions from this cache (and its database).
+ */
+ public void clear()
+ {
+ Connection connection = null;
+ String sql = null;
+
+ try
+ {
+ connection = getConnection();
+ AbstractUpdateStatement update = new AbstractUpdateStatement()
+ {
+ @Override
+ public String getSQL()
+ {
+ StringBuilder builder = new StringBuilder();
+ builder.append("DELETE FROM "); //$NON-NLS-1$
+ builder.append(DBRevisionCacheSchema.REVISIONS);
+ return builder.toString();
+ }
+ };
+
+ sql = update.getSQL();
+ update.update(connection);
+ }
+ catch (Exception e)
+ {
+ throw new DBException("Error while clearing the database", e, sql);
+ }
+ finally
+ {
+ DBUtil.close(connection);
+ }
+ }
+
+ public Map<CDOBranch, List<CDORevision>> getAllRevisions()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ public List<CDORevision> getRevisions(CDOBranchPoint branchPoint)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ protected void doBeforeActivate() throws Exception
+ {
+ super.doBeforeActivate();
+ checkState(idProvider, "idProvider"); //$NON-NLS-1$
+ checkState(listFactory, "listFactory");//$NON-NLS-1$
+ checkState(packageRegistry, "packageRegistry"); //$NON-NLS-1$
+ checkState(revisionFactory, "revisionFactory"); //$NON-NLS-1$
+ checkState(dbAdapter, "dbAdapter"); //$NON-NLS-1$
+ checkState(dbConnectionProvider, "dbConnectionProvider"); //$NON-NLS-1$
+ }
+
+ @Override
+ protected void doActivate() throws Exception
+ {
+ super.doActivate();
+ createTable();
+ }
+
+ /**
+ * Creates the (single) table that's used to store the cached revisions.
+ *
+ * @throws SQLException
+ * Signals that an error has occured while getting the connection or committing the transaction
+ */
+ private void createTable() throws SQLException
+ {
+ Connection connection = null;
+
+ try
+ {
+ connection = getConnection();
+ DBRevisionCacheSchema.INSTANCE.create(dbAdapter, connection);
+ connection.commit();
+ }
+ finally
+ {
+ DBUtil.close(connection);
+ }
+ }
+
+ private static StringBuilder appendTimestampCondition(StringBuilder builder)
+ {
+ builder.append(DBRevisionCacheSchema.REVISIONS_CREATED);
+ builder.append("<=? AND ("); //$NON-NLS-1$
+ builder.append(DBRevisionCacheSchema.REVISIONS_REVISED);
+ builder.append(">=? OR "); //$NON-NLS-1$
+ builder.append(DBRevisionCacheSchema.REVISIONS_REVISED);
+ builder.append("="); //$NON-NLS-1$
+ builder.append(CDORevision.UNSPECIFIED_DATE);
+ builder.append(")"); //$NON-NLS-1$
+ return builder;
+ }
+
+ /**
+ * Converts the given Objects to an {@link InternalCDORevision}. The object is deserialized to an instance of the
+ * correct type and the revised timestamp is set separatley. Whe you insert a new revision into this cache, the former
+ * latest revision gets a new revised timestamp. This timestamp's only updated in the database column 'revised', not
+ * in the blob that holds the serialized instance. Therefore the revised timestamp has to be set separately
+ *
+ * @param revisedTimestamp
+ * the revised timestamp to set to the revision
+ * @param blob
+ * the blob that holds the revision
+ * @return the revision
+ * @throws IOException
+ * Signals that an error has occurred while reading the revision from the blob.
+ * @throws SQLException
+ * Signals that an error hass occured while getting the binary stream from the blob
+ */
+ private InternalCDORevision toRevision(Blob blob, long revisedTimestamp) throws IOException, SQLException
+ {
+ CDODataInput dataInput = getCDODataInput(ExtendedDataInputStream.wrap(blob.getBinaryStream()));
+ InternalCDORevision revision = (InternalCDORevision)dataInput.readCDORevision();
+ // Revised timestamp's updated in the revised column only (not in the blob)
+ revision.setRevised(revisedTimestamp);
+ return revision;
+ }
+
+ private CDODataInput getCDODataInput(ExtendedDataInputStream inputStream) throws IOException
+ {
+ return new CDODataInputImpl(inputStream)
+ {
+ @Override
+ protected CDOPackageRegistry getPackageRegistry()
+ {
+ return packageRegistry;
+ }
+
+ @Override
+ protected CDOBranchManager getBranchManager()
+ {
+ return null;
+ }
+
+ @Override
+ protected CDOCommitInfoManager getCommitInfoManager()
+ {
+ return null;
+ }
+
+ @Override
+ protected CDORevisionFactory getRevisionFactory()
+ {
+ return revisionFactory;
+ }
+
+ @Override
+ protected CDOListFactory getListFactory()
+ {
+ return listFactory;
+ }
+
+ @Override
+ protected CDOLobStore getLobStore()
+ {
+ return null;
+ }
+ };
+ }
+
+ /**
+ * Converts a given {@link CDORevision} to a byte array.
+ *
+ * @param revision
+ * the revision
+ * @return the array of bytes for the given revision
+ * @throws IOException
+ * Signals an error has occurred while writing the revision to the byte array.
+ */
+ private byte[] toBytes(InternalCDORevision revision) throws IOException
+ {
+ ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+ CDODataOutput dataOutput = getCDODataOutput(ExtendedDataOutputStream.wrap(byteArrayOutputStream));
+ dataOutput.writeCDORevision(revision, CDORevision.UNCHUNKED);
+ return byteArrayOutputStream.toByteArray();
+ }
+
+ private CDODataOutput getCDODataOutput(ExtendedDataOutput extendedDataOutputStream)
+ {
+ return new CDODataOutputImpl(extendedDataOutputStream)
+ {
+ @Override
+ public CDOPackageRegistry getPackageRegistry()
+ {
+ return packageRegistry;
+ }
+
+ @Override
+ public CDOIDProvider getIDProvider()
+ {
+ return idProvider;
+ }
+ };
+ }
+
+ /**
+ * Gets a connection from the {@link IDBConnectionProvider} within this cache. The Connection is set not to auto
+ * commit transactions.
+ *
+ * @return the connection
+ * @throws SQLException
+ * Signals that an error occured while getting the connection from the connection provider
+ */
+ private Connection getConnection() throws SQLException
+ {
+ Connection connection = dbConnectionProvider.getConnection();
+ connection.setAutoCommit(false);
+ return connection;
+ }
+}
diff --git a/plugins/org.eclipse.emf.cdo.common.db/src/org/eclipse/emf/cdo/common/internal/db/cache/DBRevisionCacheSchema.java b/plugins/org.eclipse.emf.cdo.common.db/src/org/eclipse/emf/cdo/common/internal/db/cache/DBRevisionCacheSchema.java index 0f8f500db9..c1011b0e92 100644 --- a/plugins/org.eclipse.emf.cdo.common.db/src/org/eclipse/emf/cdo/common/internal/db/cache/DBRevisionCacheSchema.java +++ b/plugins/org.eclipse.emf.cdo.common.db/src/org/eclipse/emf/cdo/common/internal/db/cache/DBRevisionCacheSchema.java @@ -1,79 +1,79 @@ -/* - * Copyright (c) 2004 - 2011 Eike Stepper (Berlin, Germany) and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Andre Dietisheim - initial API and implementation - * Eike Stepper - maintenance - */ -package org.eclipse.emf.cdo.common.internal.db.cache; - -import org.eclipse.net4j.db.DBType; -import org.eclipse.net4j.db.ddl.IDBField; -import org.eclipse.net4j.db.ddl.IDBIndex; -import org.eclipse.net4j.db.ddl.IDBTable; -import org.eclipse.net4j.spi.db.DBSchema; - -/** - * @author Andre Dietisheim - */ -public class DBRevisionCacheSchema extends DBSchema -{ - public static final DBRevisionCacheSchema INSTANCE = new DBRevisionCacheSchema(); - - /** - * DBTable dbrevisioncache_revisions. - * <p> - * TODO Make name configurable! - */ - public static final IDBTable REVISIONS = INSTANCE.addTable("dbrevisioncache_revisions"); - - public static final IDBField REVISIONS_ID = // - REVISIONS.addField("id", DBType.VARCHAR, 254); - - public static final IDBField REVISIONS_VERSION = // - REVISIONS.addField("version", DBType.INTEGER); - - public static final IDBField REVISIONS_CREATED = // - REVISIONS.addField("created", DBType.BIGINT); - - public static final IDBField REVISIONS_REVISED = // - REVISIONS.addField("revised", DBType.BIGINT); - - public static final IDBField REVISIONS_CDOREVISION = // - REVISIONS.addField("revision", DBType.BLOB); - - public static final IDBField REVISIONS_RESOURCENODE_NAME = // - REVISIONS.addField("resourcenode_name", DBType.VARCHAR, false); - - public static final IDBField REVISIONS_CONTAINERID = // - REVISIONS.addField("container_id", DBType.BIGINT, false); - - public static final IDBIndex INDEX_REVISIONS_RESOURCENODENAME = // - REVISIONS.addIndex(IDBIndex.Type.NON_UNIQUE, REVISIONS_RESOURCENODE_NAME); - - public static final IDBIndex INDEX_REVISIONS_ID = // - REVISIONS.addIndex(IDBIndex.Type.NON_UNIQUE, REVISIONS_ID); - - public static final IDBIndex INDEX_REVISIONS_VERSION = // - REVISIONS.addIndex(IDBIndex.Type.NON_UNIQUE, REVISIONS_VERSION); - - public static final IDBIndex INDEX_REVISIONS_PK = // - REVISIONS.addIndex(IDBIndex.Type.PRIMARY_KEY, REVISIONS_ID, REVISIONS_VERSION); - - public static final IDBIndex INDEX_REVISIONS_CONTAINERID = // - REVISIONS.addIndex(IDBIndex.Type.NON_UNIQUE, REVISIONS_CONTAINERID); - - private DBRevisionCacheSchema() - { - super("DBRevisionCache"); - } - - static - { - INSTANCE.lock(); - } -} +/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Andre Dietisheim - initial API and implementation
+ * Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.common.internal.db.cache;
+
+import org.eclipse.net4j.db.DBType;
+import org.eclipse.net4j.db.ddl.IDBField;
+import org.eclipse.net4j.db.ddl.IDBIndex;
+import org.eclipse.net4j.db.ddl.IDBTable;
+import org.eclipse.net4j.spi.db.DBSchema;
+
+/**
+ * @author Andre Dietisheim
+ */
+public class DBRevisionCacheSchema extends DBSchema
+{
+ public static final DBRevisionCacheSchema INSTANCE = new DBRevisionCacheSchema();
+
+ /**
+ * DBTable dbrevisioncache_revisions.
+ * <p>
+ * TODO Make name configurable!
+ */
+ public static final IDBTable REVISIONS = INSTANCE.addTable("dbrevisioncache_revisions");
+
+ public static final IDBField REVISIONS_ID = //
+ REVISIONS.addField("id", DBType.VARCHAR, 254);
+
+ public static final IDBField REVISIONS_VERSION = //
+ REVISIONS.addField("version", DBType.INTEGER);
+
+ public static final IDBField REVISIONS_CREATED = //
+ REVISIONS.addField("created", DBType.BIGINT);
+
+ public static final IDBField REVISIONS_REVISED = //
+ REVISIONS.addField("revised", DBType.BIGINT);
+
+ public static final IDBField REVISIONS_CDOREVISION = //
+ REVISIONS.addField("revision", DBType.BLOB);
+
+ public static final IDBField REVISIONS_RESOURCENODE_NAME = //
+ REVISIONS.addField("resourcenode_name", DBType.VARCHAR, false);
+
+ public static final IDBField REVISIONS_CONTAINERID = //
+ REVISIONS.addField("container_id", DBType.BIGINT, false);
+
+ public static final IDBIndex INDEX_REVISIONS_RESOURCENODENAME = //
+ REVISIONS.addIndex(IDBIndex.Type.NON_UNIQUE, REVISIONS_RESOURCENODE_NAME);
+
+ public static final IDBIndex INDEX_REVISIONS_ID = //
+ REVISIONS.addIndex(IDBIndex.Type.NON_UNIQUE, REVISIONS_ID);
+
+ public static final IDBIndex INDEX_REVISIONS_VERSION = //
+ REVISIONS.addIndex(IDBIndex.Type.NON_UNIQUE, REVISIONS_VERSION);
+
+ public static final IDBIndex INDEX_REVISIONS_PK = //
+ REVISIONS.addIndex(IDBIndex.Type.PRIMARY_KEY, REVISIONS_ID, REVISIONS_VERSION);
+
+ public static final IDBIndex INDEX_REVISIONS_CONTAINERID = //
+ REVISIONS.addIndex(IDBIndex.Type.NON_UNIQUE, REVISIONS_CONTAINERID);
+
+ private DBRevisionCacheSchema()
+ {
+ super("DBRevisionCache");
+ }
+
+ static
+ {
+ INSTANCE.lock();
+ }
+}
|