]> git.mxchange.org Git - jcore.git/commitdiff
Continued with jcore: (refacturing)
authorRoland Haeder <roland@mxchange.org>
Fri, 14 Aug 2015 18:28:50 +0000 (20:28 +0200)
committerRoland Haeder <roland@mxchange.org>
Fri, 14 Aug 2015 18:28:50 +0000 (20:28 +0200)
- Added Apache commons jar
- Added missing license files
- getValueFromColumn() and setValueFromColumn() are now moved to Storeable (that they are in BaseFrameworkSystem and then needs to be overwritten again was bad OOP-ed style anyway).
- Also for this work, the type-hint for (mostly) instance must be changed to Storeable
- Added new exception CorruptedDatabaseFileException. This is thrown when the file is damaged
- Removed CorruptedDatabaseFileException() as StoreableCsv is now removed, too
-
Signed-off-by:Roland Häder <roland@mxchange.org>

15 files changed:
lib/commons-codec-1.10.jar [new file with mode: 0644]
lib/commons-codec-LICENSE.txt [new file with mode: 0644]
lib/log4j-LICENSE.txt [new file with mode: 0644]
nbproject/project.properties
src/org/mxchange/jcore/BaseFrameworkSystem.java
src/org/mxchange/jcore/FrameworkInterface.java
src/org/mxchange/jcore/contact/BaseContact.java
src/org/mxchange/jcore/contact/Contact.java
src/org/mxchange/jcore/database/backend/DatabaseBackend.java
src/org/mxchange/jcore/database/backend/base64/Base64CsvDatabaseBackend.java
src/org/mxchange/jcore/database/frontend/BaseDatabaseFrontend.java
src/org/mxchange/jcore/database/frontend/DatabaseFrontend.java
src/org/mxchange/jcore/database/storage/Storeable.java
src/org/mxchange/jcore/database/storage/csv/StoreableCsv.java [deleted file]
src/org/mxchange/jcore/exceptions/CorruptedDatabaseFileException.java [new file with mode: 0644]

diff --git a/lib/commons-codec-1.10.jar b/lib/commons-codec-1.10.jar
new file mode 100644 (file)
index 0000000..1d7417c
Binary files /dev/null and b/lib/commons-codec-1.10.jar differ
diff --git a/lib/commons-codec-LICENSE.txt b/lib/commons-codec-LICENSE.txt
new file mode 100644 (file)
index 0000000..75b5248
--- /dev/null
@@ -0,0 +1,202 @@
+\r
+                                 Apache License\r
+                           Version 2.0, January 2004\r
+                        http://www.apache.org/licenses/\r
+\r
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\r
+\r
+   1. Definitions.\r
+\r
+      "License" shall mean the terms and conditions for use, reproduction,\r
+      and distribution as defined by Sections 1 through 9 of this document.\r
+\r
+      "Licensor" shall mean the copyright owner or entity authorized by\r
+      the copyright owner that is granting the License.\r
+\r
+      "Legal Entity" shall mean the union of the acting entity and all\r
+      other entities that control, are controlled by, or are under common\r
+      control with that entity. For the purposes of this definition,\r
+      "control" means (i) the power, direct or indirect, to cause the\r
+      direction or management of such entity, whether by contract or\r
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the\r
+      outstanding shares, or (iii) beneficial ownership of such entity.\r
+\r
+      "You" (or "Your") shall mean an individual or Legal Entity\r
+      exercising permissions granted by this License.\r
+\r
+      "Source" form shall mean the preferred form for making modifications,\r
+      including but not limited to software source code, documentation\r
+      source, and configuration files.\r
+\r
+      "Object" form shall mean any form resulting from mechanical\r
+      transformation or translation of a Source form, including but\r
+      not limited to compiled object code, generated documentation,\r
+      and conversions to other media types.\r
+\r
+      "Work" shall mean the work of authorship, whether in Source or\r
+      Object form, made available under the License, as indicated by a\r
+      copyright notice that is included in or attached to the work\r
+      (an example is provided in the Appendix below).\r
+\r
+      "Derivative Works" shall mean any work, whether in Source or Object\r
+      form, that is based on (or derived from) the Work and for which the\r
+      editorial revisions, annotations, elaborations, or other modifications\r
+      represent, as a whole, an original work of authorship. For the purposes\r
+      of this License, Derivative Works shall not include works that remain\r
+      separable from, or merely link (or bind by name) to the interfaces of,\r
+      the Work and Derivative Works thereof.\r
+\r
+      "Contribution" shall mean any work of authorship, including\r
+      the original version of the Work and any modifications or additions\r
+      to that Work or Derivative Works thereof, that is intentionally\r
+      submitted to Licensor for inclusion in the Work by the copyright owner\r
+      or by an individual or Legal Entity authorized to submit on behalf of\r
+      the copyright owner. For the purposes of this definition, "submitted"\r
+      means any form of electronic, verbal, or written communication sent\r
+      to the Licensor or its representatives, including but not limited to\r
+      communication on electronic mailing lists, source code control systems,\r
+      and issue tracking systems that are managed by, or on behalf of, the\r
+      Licensor for the purpose of discussing and improving the Work, but\r
+      excluding communication that is conspicuously marked or otherwise\r
+      designated in writing by the copyright owner as "Not a Contribution."\r
+\r
+      "Contributor" shall mean Licensor and any individual or Legal Entity\r
+      on behalf of whom a Contribution has been received by Licensor and\r
+      subsequently incorporated within the Work.\r
+\r
+   2. Grant of Copyright License. Subject to the terms and conditions of\r
+      this License, each Contributor hereby grants to You a perpetual,\r
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\r
+      copyright license to reproduce, prepare Derivative Works of,\r
+      publicly display, publicly perform, sublicense, and distribute the\r
+      Work and such Derivative Works in Source or Object form.\r
+\r
+   3. Grant of Patent License. Subject to the terms and conditions of\r
+      this License, each Contributor hereby grants to You a perpetual,\r
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\r
+      (except as stated in this section) patent license to make, have made,\r
+      use, offer to sell, sell, import, and otherwise transfer the Work,\r
+      where such license applies only to those patent claims licensable\r
+      by such Contributor that are necessarily infringed by their\r
+      Contribution(s) alone or by combination of their Contribution(s)\r
+      with the Work to which such Contribution(s) was submitted. If You\r
+      institute patent litigation against any entity (including a\r
+      cross-claim or counterclaim in a lawsuit) alleging that the Work\r
+      or a Contribution incorporated within the Work constitutes direct\r
+      or contributory patent infringement, then any patent licenses\r
+      granted to You under this License for that Work shall terminate\r
+      as of the date such litigation is filed.\r
+\r
+   4. Redistribution. You may reproduce and distribute copies of the\r
+      Work or Derivative Works thereof in any medium, with or without\r
+      modifications, and in Source or Object form, provided that You\r
+      meet the following conditions:\r
+\r
+      (a) You must give any other recipients of the Work or\r
+          Derivative Works a copy of this License; and\r
+\r
+      (b) You must cause any modified files to carry prominent notices\r
+          stating that You changed the files; and\r
+\r
+      (c) You must retain, in the Source form of any Derivative Works\r
+          that You distribute, all copyright, patent, trademark, and\r
+          attribution notices from the Source form of the Work,\r
+          excluding those notices that do not pertain to any part of\r
+          the Derivative Works; and\r
+\r
+      (d) If the Work includes a "NOTICE" text file as part of its\r
+          distribution, then any Derivative Works that You distribute must\r
+          include a readable copy of the attribution notices contained\r
+          within such NOTICE file, excluding those notices that do not\r
+          pertain to any part of the Derivative Works, in at least one\r
+          of the following places: within a NOTICE text file distributed\r
+          as part of the Derivative Works; within the Source form or\r
+          documentation, if provided along with the Derivative Works; or,\r
+          within a display generated by the Derivative Works, if and\r
+          wherever such third-party notices normally appear. The contents\r
+          of the NOTICE file are for informational purposes only and\r
+          do not modify the License. You may add Your own attribution\r
+          notices within Derivative Works that You distribute, alongside\r
+          or as an addendum to the NOTICE text from the Work, provided\r
+          that such additional attribution notices cannot be construed\r
+          as modifying the License.\r
+\r
+      You may add Your own copyright statement to Your modifications and\r
+      may provide additional or different license terms and conditions\r
+      for use, reproduction, or distribution of Your modifications, or\r
+      for any such Derivative Works as a whole, provided Your use,\r
+      reproduction, and distribution of the Work otherwise complies with\r
+      the conditions stated in this License.\r
+\r
+   5. Submission of Contributions. Unless You explicitly state otherwise,\r
+      any Contribution intentionally submitted for inclusion in the Work\r
+      by You to the Licensor shall be under the terms and conditions of\r
+      this License, without any additional terms or conditions.\r
+      Notwithstanding the above, nothing herein shall supersede or modify\r
+      the terms of any separate license agreement you may have executed\r
+      with Licensor regarding such Contributions.\r
+\r
+   6. Trademarks. This License does not grant permission to use the trade\r
+      names, trademarks, service marks, or product names of the Licensor,\r
+      except as required for reasonable and customary use in describing the\r
+      origin of the Work and reproducing the content of the NOTICE file.\r
+\r
+   7. Disclaimer of Warranty. Unless required by applicable law or\r
+      agreed to in writing, Licensor provides the Work (and each\r
+      Contributor provides its Contributions) on an "AS IS" BASIS,\r
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\r
+      implied, including, without limitation, any warranties or conditions\r
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\r
+      PARTICULAR PURPOSE. You are solely responsible for determining the\r
+      appropriateness of using or redistributing the Work and assume any\r
+      risks associated with Your exercise of permissions under this License.\r
+\r
+   8. Limitation of Liability. In no event and under no legal theory,\r
+      whether in tort (including negligence), contract, or otherwise,\r
+      unless required by applicable law (such as deliberate and grossly\r
+      negligent acts) or agreed to in writing, shall any Contributor be\r
+      liable to You for damages, including any direct, indirect, special,\r
+      incidental, or consequential damages of any character arising as a\r
+      result of this License or out of the use or inability to use the\r
+      Work (including but not limited to damages for loss of goodwill,\r
+      work stoppage, computer failure or malfunction, or any and all\r
+      other commercial damages or losses), even if such Contributor\r
+      has been advised of the possibility of such damages.\r
+\r
+   9. Accepting Warranty or Additional Liability. While redistributing\r
+      the Work or Derivative Works thereof, You may choose to offer,\r
+      and charge a fee for, acceptance of support, warranty, indemnity,\r
+      or other liability obligations and/or rights consistent with this\r
+      License. However, in accepting such obligations, You may act only\r
+      on Your own behalf and on Your sole responsibility, not on behalf\r
+      of any other Contributor, and only if You agree to indemnify,\r
+      defend, and hold each Contributor harmless for any liability\r
+      incurred by, or claims asserted against, such Contributor by reason\r
+      of your accepting any such warranty or additional liability.\r
+\r
+   END OF TERMS AND CONDITIONS\r
+\r
+   APPENDIX: How to apply the Apache License to your work.\r
+\r
+      To apply the Apache License to your work, attach the following\r
+      boilerplate notice, with the fields enclosed by brackets "[]"\r
+      replaced with your own identifying information. (Don't include\r
+      the brackets!)  The text should be enclosed in the appropriate\r
+      comment syntax for the file format. We also recommend that a\r
+      file or class name and description of purpose be included on the\r
+      same "printed page" as the copyright notice for easier\r
+      identification within third-party archives.\r
+\r
+   Copyright [yyyy] [name of copyright owner]\r
+\r
+   Licensed under the Apache License, Version 2.0 (the "License");\r
+   you may not use this file except in compliance with the License.\r
+   You may obtain a copy of the License at\r
+\r
+       http://www.apache.org/licenses/LICENSE-2.0\r
+\r
+   Unless required by applicable law or agreed to in writing, software\r
+   distributed under the License is distributed on an "AS IS" BASIS,\r
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+   See the License for the specific language governing permissions and\r
+   limitations under the License.\r
diff --git a/lib/log4j-LICENSE.txt b/lib/log4j-LICENSE.txt
new file mode 100644 (file)
index 0000000..6279e52
--- /dev/null
@@ -0,0 +1,202 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright 1999-2005 The Apache Software Foundation
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
index 8645ba433b6c86fe657e239166da4acee4cc4662..fc4dfa5ada652ec3ffaaa6dd4c3ae186484d8e0f 100644 (file)
@@ -31,6 +31,7 @@ dist.jar=${dist.dir}/jcore.jar
 dist.javadoc.dir=${dist.dir}/javadoc
 endorsed.classpath=
 excludes=
+file.reference.commons-codec-1.10.jar=../../MyProjects/jcore/lib/commons-codec-1.10.jar
 file.reference.log4j-api-2.3.jar=lib/log4j-api-2.3.jar
 file.reference.log4j-core-2.3.jar=lib/log4j-core-2.3.jar
 includes=**
@@ -39,7 +40,8 @@ jar.compress=false
 jar.index=${jnlp.enabled}
 javac.classpath=\
     ${file.reference.log4j-api-2.3.jar}:\
-    ${file.reference.log4j-core-2.3.jar}
+    ${file.reference.log4j-core-2.3.jar}:\
+    ${file.reference.commons-codec-1.10.jar}
 # Space-separated list of extra javac options
 javac.compilerargs=-Xlint:unchecked
 javac.deprecation=true
@@ -59,6 +61,8 @@ javadoc.noindex=false
 javadoc.nonavbar=false
 javadoc.notree=false
 javadoc.private=true
+javadoc.reference.commons-codec-1.10.jar=/home/quix0r/MyProjects/JARs/commons-codec-1.10-javadoc.jar
+javadoc.reference.log4j-api-2.3.jar=/home/quix0r/MyProjects/JARs/log4j-api-2.3-javadoc.jar
 javadoc.splitindex=true
 javadoc.use=true
 javadoc.version=true
@@ -91,5 +95,7 @@ run.test.classpath=\
     ${javac.test.classpath}:\
     ${build.test.classes.dir}
 source.encoding=UTF-8
+source.reference.commons-codec-1.10.jar=/home/quix0r/MyProjects/JARs/commons-codec-1.10-sources.jar
+source.reference.log4j-api-2.3.jar=/home/quix0r/MyProjects/JARs/log4j-api-2.3-sources.jar
 src.dir=src
 test.src.dir=test
index 8bbf1ea3a177449c62551534f13d176cb1189929..06d502f774e210ecb89959f609bc710907e6d939 100644 (file)
@@ -40,6 +40,7 @@ import org.mxchange.jcore.client.Client;
 import org.mxchange.jcore.contact.Contact;
 import org.mxchange.jcore.database.backend.DatabaseBackend;
 import org.mxchange.jcore.database.frontend.DatabaseFrontend;
+import org.mxchange.jcore.database.storage.Storeable;
 import org.mxchange.jcore.manager.Manageable;
 
 /**
@@ -171,22 +172,6 @@ public class BaseFrameworkSystem implements FrameworkInterface {
                return this.getBundle().getString(key);
        }
 
-       /**
-        * Some "getter for a value from given column name. This name will be
-        * translated into a method name and then this method is called.
-        *
-        * @param columnName Column name
-        * @return Value from field
-        * @throws IllegalArgumentException Some implementations may throw this.
-        * @throws NoSuchMethodException Some implementations may throw this.
-        * @throws java.lang.IllegalAccessException If the method cannot be accessed
-        * @throws java.lang.reflect.InvocationTargetException Any other problems?
-        */
-       @Override
-       public Object getValueFromColumn (final String columnName) throws IllegalArgumentException, NoSuchMethodException, IllegalAccessException, InvocationTargetException {
-               throw new UnsupportedOperationException(MessageFormat.format("Not implemented. columnName={0}", columnName)); //NOI18N
-       }
-
        /**
         * Some "getter" for target class instance from given name.
         *
@@ -630,7 +615,7 @@ public class BaseFrameworkSystem implements FrameworkInterface {
         * @throws java.lang.IllegalAccessException If the method cannot be accessed
         * @throws java.lang.reflect.InvocationTargetException Any other problems?
         */
-       protected Iterator<Map.Entry<Field, Object>> fieldIterator (final FrameworkInterface instance, final String className) throws IllegalArgumentException, NoSuchMethodException, IllegalAccessException, InvocationTargetException {
+       protected Iterator<Map.Entry<Field, Object>> fieldIterator (final Storeable instance, final String className) throws IllegalArgumentException, NoSuchMethodException, IllegalAccessException, InvocationTargetException {
                // Trace message
                this.getLogger().trace(MessageFormat.format("instance={0},className={1} - CALLED!", instance, className)); //NOI18N
 
index 28bcfe192f718dc9a351ad14ea5d3e49cdb1a726..bf9b1e8f7ca8fa144c6c63504817f87b7b928730 100644 (file)
@@ -92,17 +92,4 @@ public interface FrameworkInterface {
         * @throws java.lang.reflect.InvocationTargetException Any other problems?
         */
        public boolean isFieldValueEqual (final String columnName, final boolean bool) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException;
-
-       /**
-        * Some "getter for a value from given column name. This name will be
-        * translated into a method name and then this method is called.
-        *
-        * @param columnName Column name
-        * @return Value from field
-        * @throws IllegalArgumentException Some implementations may throw this
-        * @throws java.lang.NoSuchMethodException If the invoked method was not found
-        * @throws java.lang.IllegalAccessException If the method cannot be accessed
-        * @throws java.lang.reflect.InvocationTargetException Any other problems?
-        */
-       public Object getValueFromColumn (final String columnName) throws IllegalArgumentException, NoSuchMethodException, IllegalAccessException, InvocationTargetException;
 }
index ae2b1fcaa192b3170c724c4272702961281f7341..cb9232ddeb03f20d369d1def4c136b59cc2cae2f 100644 (file)
@@ -267,41 +267,6 @@ public class BaseContact extends BaseFrameworkSystem implements Contact {
                this.countryCode = countryCode;
        }
 
-       /**
-        * "Serializes" this object into a CSV string (this time with semicolons)
-        *
-        * @return "CSV-serialized" version of the stored data
-        * @deprecated Don't use this anymore
-        */
-       @Deprecated
-       public String getCsvStringFromStoreableObject () {
-               // Trace message
-               this.getLogger().trace("CALLED!"); //NOI18N
-
-               // Get all together
-               String csvString = String.format(
-                               "\"%s\";\"%s\";\"%s\";\"%s\";\"%s\";\"%s\";\"%s\";\"%s\";\"%s\";\"%s\";\"%s\";\"%s\";\"%s\";\"%s\";\"%s\"", //NOI18N
-                               this.isOwnContact(),
-                               this.getGender().name(),
-                               this.getSurname(),
-                               this.getFamilyName(),
-                               this.getCompanyName(),
-                               this.getStreet(),
-                               this.getZipCode(),
-                               this.getCity(),
-                               this.getCountryCode(),
-                               this.getPhoneNumber(),
-                               this.getFaxNumber(),
-                               this.getCellphoneNumber(),
-                               this.getEmailAddress(),
-                               this.getBirthday(),
-                               this.getComment()
-               );
-
-               // Then return it
-               return csvString;
-       }
-
        /**
         * Email address
         *
@@ -639,4 +604,9 @@ public class BaseContact extends BaseFrameworkSystem implements Contact {
        protected final void enableFlagOwnContact () {
                this.ownContact = true;
        }
+
+       @Override
+       public void setValueFromColumn (final String columnName, String value) {
+               throw new UnsupportedOperationException("Not supported yet: columnName=" + columnName + ",value=" + value);
+       }
 }
index 031c64a1e30c7678773a3cfb98e760fab198274d..31bd9ecf614b8f1b865a7edc127b0fcdb6a55cf7 100644 (file)
@@ -20,15 +20,15 @@ import java.lang.reflect.Field;
 import java.lang.reflect.InvocationTargetException;
 import java.util.Iterator;
 import java.util.Map;
-import org.mxchange.jcore.FrameworkInterface;
 import org.mxchange.jcore.client.Client;
+import org.mxchange.jcore.database.storage.Storeable;
 
 /**
  * A general contact interface
  *
  * @author Roland Haeder
  */
-public interface Contact extends FrameworkInterface {
+public interface Contact extends Storeable {
        /**
         * Returns an iterator of all values from this object
         *
index a1e7a062f1b028b6f3388ad8d8b23f06a1da5345..64dcf25d7a8086432c08b2727a7c9d2712731a07 100644 (file)
@@ -24,6 +24,7 @@ import org.mxchange.jcore.criteria.searchable.SearchableCritera;
 import org.mxchange.jcore.database.result.Result;
 import org.mxchange.jcore.database.storage.Storeable;
 import org.mxchange.jcore.exceptions.BadTokenException;
+import org.mxchange.jcore.exceptions.CorruptedDatabaseFileException;
 
 /**
  * A generic interface for database frontends
@@ -45,8 +46,9 @@ public interface DatabaseBackend extends FrameworkInterface {
         * @param dataset A dataset instance
         * @return An instance of Result
         * @throws java.sql.SQLException If any SQL error occurs
+        * @throws java.io.IOException If an IO error occurs
         */
-       public Result<? extends Storeable> doInsertDataSet (final Map<String, Object> dataset) throws SQLException;
+       public Result<? extends Storeable> doInsertDataSet (final Map<String, Object> dataset) throws SQLException, IOException;
 
        /**
         * Run a "SELECT" statement with given criteria and always return a Result
@@ -57,9 +59,10 @@ public interface DatabaseBackend extends FrameworkInterface {
         * @return A result instance
         * @throws java.io.IOException If any IO error occurs
         * @throws org.mxchange.jcore.exceptions.BadTokenException If a bad token was found
+        * @throws org.mxchange.jcore.exceptions.CorruptedDatabaseFileException If the file is badly damaged
         * @throws java.sql.SQLException If any SQL error occurs
         */
-       public Result<? extends Storeable> doSelectByCriteria (final SearchableCritera critera) throws IOException, BadTokenException, SQLException;
+       public Result<? extends Storeable> doSelectByCriteria (final SearchableCritera critera) throws IOException, BadTokenException, CorruptedDatabaseFileException, SQLException;
 
        /**
         * Shuts down this backend
index d754c537e5474df9731c894c1166f6f33ed97eeb..aef05e4e65dc8acb88f0f982fb2c744443026220 100644 (file)
@@ -20,11 +20,12 @@ import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.RandomAccessFile;
 import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.HashMap;
+import java.util.Iterator;
 import java.util.Map;
-import javax.xml.bind.DatatypeConverter;
-import org.mxchange.jcore.FrameworkInterface;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.apache.commons.codec.binary.Base64;
 import org.mxchange.jcore.criteria.searchable.SearchableCritera;
 import org.mxchange.jcore.database.backend.BaseDatabaseBackend;
 import org.mxchange.jcore.database.backend.DatabaseBackend;
@@ -33,6 +34,7 @@ import org.mxchange.jcore.database.result.DatabaseResult;
 import org.mxchange.jcore.database.result.Result;
 import org.mxchange.jcore.database.storage.Storeable;
 import org.mxchange.jcore.exceptions.BadTokenException;
+import org.mxchange.jcore.exceptions.CorruptedDatabaseFileException;
 
 /**
  * A database backend with CSV file as storage implementation
@@ -46,6 +48,11 @@ public class Base64CsvDatabaseBackend extends BaseDatabaseBackend implements Dat
         */
        private RandomAccessFile storageFile;
 
+       /**
+        * File name to access
+        */
+       private final String fileName;
+
        /**
         * Constructor with table name
         *
@@ -69,7 +76,7 @@ public class Base64CsvDatabaseBackend extends BaseDatabaseBackend implements Dat
                this.setFrontend(frontend);
 
                // Construct file name
-               String fileName = String.format("%s/table_%s.b64", this.getProperty("database.backend.storagepath"), tableName); //NOI18N
+               this.fileName = String.format("%s/table_%s.b64", this.getProperty("database.backend.storagepath"), tableName); //NOI18N
 
                // Debug message
                this.getLogger().debug(MessageFormat.format("Trying to open file {0} ...", fileName)); //NOI18N
@@ -96,21 +103,70 @@ public class Base64CsvDatabaseBackend extends BaseDatabaseBackend implements Dat
        }
 
        @Override
-       public Result<? extends Storeable> doInsertDataSet (final Map<String, Object> dataset) {
-               throw new UnsupportedOperationException(MessageFormat.format("Not supported yet: dataset={0}", dataset));
+       public Result<? extends Storeable> doInsertDataSet (final Map<String, Object> dataset) throws IOException {
+               // Trace message
+               this.getLogger().trace(MessageFormat.format("dataset={0} - CALLED!", dataset));
+
+               // dataset should not be null and not empty
+               if (dataset == null) {
+                       // It is null, so abort here
+                       throw new NullPointerException("dataset is null");
+               } else if (dataset.isEmpty()) {
+                       // It is empty, also abort here
+                       throw new IllegalArgumentException("dataset is empty");
+               }
+
+               // Debug message
+               this.getLogger().debug(MessageFormat.format("Need to parse {0} values ...", dataset.size()));
+
+               // Get iterator from it
+               Iterator<Map.Entry<String, Object>> iterator = dataset.entrySet().iterator();
+
+               // Full output string
+               StringBuilder output = new StringBuilder(dataset.size() * 20);
+
+               // "Walk" over all entries
+               while (iterator.hasNext()) {
+                       // Get next entry
+                       Map.Entry<String, Object> entry = iterator.next();
+
+                       // Get value
+                       Object value = entry.getValue();
+
+                       // Validate value, should not contain "
+                       if (value instanceof String) {
+                               // Is String so cast ist
+                               String str = (String) value;
+
+                               // Does it contain a " ?
+                               if (str.contains("")) {
+                                       // Don't accept here
+                                       throw new IllegalArgumentException("value " + value + " with double-quote not supported yet.");
+                               }
+                       }
+
+                                       // Generate key=value pair
+                       String pair = String.format("key=%s,value=\"%s\";", entry.getKey(), String.valueOf(value));
+
+                       // Append to output
+                       output.append(pair);
+               }
+
+               // Then write it to file
+               this.writeData(output);
+
+               // The result set needs to be transformed into Result, so initialize a result instance here
+               Result<? extends Storeable> result = new DatabaseResult();
+
+               // Trace message
+               this.getLogger().trace(MessageFormat.format("result={0} - EXIT!", result));
+
+               // Return it
+               return result;
        }
 
-       /**
-        * Searches for given criteria over a file-based database. This method does
-        * always return a Result instance and never null.
-        *
-        * @param critera SearchableCriteria instance
-        * @return A Result instance for all matching Storeable instances
-        * @throws IOException
-        * @throws BadTokenException 
-        */
        @Override
-       public Result<? extends Storeable> doSelectByCriteria (final SearchableCritera critera) throws IOException, BadTokenException {
+       public Result<? extends Storeable> doSelectByCriteria (final SearchableCritera critera) throws IOException, BadTokenException, CorruptedDatabaseFileException {
                // Trace message
                this.getLogger().trace(MessageFormat.format("criteria={0} - CALLED!", critera));
 
@@ -128,8 +184,11 @@ public class Base64CsvDatabaseBackend extends BaseDatabaseBackend implements Dat
                        // Debug message
                        this.getLogger().debug(MessageFormat.format("line={0}", line));
 
-                       // Parse it to a Storeable instance
-                       Storeable storeable = this.getFrontend().parseLineToStoreable(line);
+                       // Parse it to a Map<String, Object>
+                       Map<String, String> map = this.getMapFromLine(line);
+
+                       // Convert it to a Storeable instance
+                       Storeable storeable = this.getFrontend().toStoreable(map);
 
                        // Debug message
                        this.getLogger().debug(MessageFormat.format("storeable={0}", storeable));
@@ -160,47 +219,6 @@ public class Base64CsvDatabaseBackend extends BaseDatabaseBackend implements Dat
                this.getLogger().trace("EXIT!"); //NOI18N
        }
 
-       /**
-        * Adds given contact to list
-        *
-        * @param instance An instance of FrameworkInterface to add
-        * @param list List instance
-        */
-       private void addToList (final Storeable instance, final List<Storeable> list) {
-               // Trace message
-               this.getLogger().trace(MessageFormat.format("contact={0} - CALLED!", instance)); //NOI18N
-
-               // No null here
-               if (instance == null) {
-                       // Throw exception
-                       throw new NullPointerException("contact is null"); //NOI18N
-               } else if (list == null) {
-                       // Throw exception
-                       throw new NullPointerException("list is null"); //NOI18N
-               }
-
-               // Debug message
-               this.getLogger().debug(MessageFormat.format("contact={0}", instance)); //NOI18N
-
-               // Is the contact read?
-               if (instance instanceof FrameworkInterface) {
-                       // Then add it
-                       boolean added = list.add(instance);
-
-                       // Debug message
-                       this.getLogger().debug(MessageFormat.format("contact={0} added={1}", instance, added)); //NOI18N
-
-                       // Has it been added?
-                       if (!added) {
-                               // Not added
-                               this.getLogger().warn("Contact object has not been added."); //NOI18N
-                       }
-               }
-
-               // Trace message
-               this.getLogger().trace("EXIT!"); //NOI18N
-       }
-
        /**
         * Returns storage file
         *
@@ -271,10 +289,10 @@ public class Base64CsvDatabaseBackend extends BaseDatabaseBackend implements Dat
                        }
 
                        // Decode BASE-64
-                       byte[] decoded = DatatypeConverter.parseBase64Binary(base64);
+                       byte[] decoded = Base64.decodeBase64(base64);
 
                        // Convert to string
-                       input = new String(decoded);
+                       input = new String(decoded).trim();
                } catch (final IOException ex) {
                        this.getLogger().catching(ex);
                }
@@ -287,62 +305,120 @@ public class Base64CsvDatabaseBackend extends BaseDatabaseBackend implements Dat
        }
 
        /**
-        * Reads the database file, if available, and adds all read lines into the
-        * list.
-        *
-        * @return A list with Contact instances
+        * Rewinds backend
         */
-       private List<? extends Storeable> readList () throws BadTokenException, IOException {
+       private void rewind () throws IOException {
+               // Trace message
                this.getLogger().trace("CALLED!"); //NOI18N
 
-               // First rewind
-               this.rewind();
+               // Rewind underlaying database file
+               this.getStorageFile().seek(0);
+
+               // Trace message
+               this.getLogger().trace("EXIT!"); //NOI18N
+       }
 
-               // Get file size and divide it by 140 (possible average length of one line)
-               int lines = Math.round(this.length() / 140 + 0.5f);
+       /**
+        * Writes data BASE64-encoded to database file
+        *
+        * @param output Output string to write
+        */
+       private void writeData (final StringBuilder output) throws IOException {
+               // Trace message
+               this.getLogger().trace("output=" + output + " - CALLED!");
+
+               // Encode it to BASE64
+               String rawOutput = Base64.encodeBase64String(output.toString().getBytes());
 
                // Debug message
-               this.getLogger().debug(MessageFormat.format("lines={0}", lines)); //NOI18N
+               this.getLogger().debug("rawOutput=" + rawOutput);
 
-               // Instance list
-               // @TODO The maximum length could be guessed from file size?
-               List<Storeable> list = new ArrayList<>(lines);
+               // Write it
+               this.getStorageFile().writeBytes(rawOutput);
 
-               // Init variables
-               String line;
-               Storeable instance = null;
+               // Trace message
+               this.getLogger().trace("EXIT!");
+       }
 
-               // Read all lines
-               while (!this.isEndOfFile()) {
-                       // Then read a line
-                       line = this.readLine();
+       /**
+        * Tries to interpret the given decoded line and puts its key/value pairs into a map.
+        *
+        * @param line Decoded line from database file
+        * @return A Map with keys and values from line
+        * @throws org.mxchange.jcore.exceptions.CorruptedDatabaseFileException If the file is believed damaged
+        * @throws org.mxchange.jcore.exceptions.BadTokenException If a bad token was found
+        */
+       private Map<String, String> getMapFromLine (final String line) throws CorruptedDatabaseFileException, BadTokenException {
+               // Trace message
+               this.getLogger().debug("line=" + line + " - CALLED!");
+
+               // "line" must not be null or empty
+               if (line == null) {
+                       // Is null
+                       throw new NullPointerException("line is null");
+               } else if (line.isEmpty()) {
+                       // Is empty
+                       throw new IllegalArgumentException("line is empty, maybe isEndOfFile() was not called?");
+               } else if (!line.endsWith(";")) {
+                       // Bad line found
+                       throw new CorruptedDatabaseFileException(this.fileName, "No semicolon at end of line");
+               } else if (!line.contains("key=")) {
+                       // Bad line found
+                       throw new CorruptedDatabaseFileException(this.fileName, "No \"key=bla\" found.");
+               } else if (!line.contains("value=")) {
+                       // Bad line found
+                       throw new CorruptedDatabaseFileException(this.fileName, "No \"value=bla\" found.");
+               }
 
-                       // Parse line
-                       instance = this.getFrontend().parseLineToStoreable(line);
+               Pattern pattern = Pattern.compile("(key=([a-z0-9_]{1,}),value=\"([^\"]*)\";){1,}");
+               Matcher matcher = pattern.matcher(line);
 
-                       // The contact instance should be there now
-                       assert (instance instanceof FrameworkInterface) : MessageFormat.format("instance is not set: {0}", instance); //NOI18N
+               // Debug message
+               this.getLogger().debug("matches=" + matcher.matches());
 
-                       // Add contact
-                       this.addToList(instance, list);
+               // Matches?
+               if (!matcher.matches()) {
+                       // Corrupted file found
+                       throw new CorruptedDatabaseFileException(this.fileName, "line " + line + " doesn't match regular expression.");
                }
 
-               // Return finished list
-               this.getLogger().trace(MessageFormat.format("list.size()={0} : EXIT!", list.size())); //NOI18N
-               return list;
-       }
+               // Instance map
+               Map<String, String> map = new HashMap<>(line.length() / 40);
 
-       /**
-        * Rewinds backend
-        */
-       private void rewind () throws IOException {
-               // Trace message
-               this.getLogger().trace("CALLED!"); //NOI18N
+               pattern = Pattern.compile("(key=([a-z0-9_]{1,}),value=\"([^\"]*)\";)");
+               matcher = pattern.matcher(line);
 
-               // Rewind underlaying database file
-               this.getStorageFile().seek(0);
+               // Init group count
+               int init = 0;
+
+               // Then get all
+               while (matcher.find(init)) {
+                       // Get group match
+                       String match = matcher.group(1);
+                       String key = matcher.group(2);
+                       String value = matcher.group(3);
+
+                       // key must noch be empty
+                       assert((key != null) && (!key.isEmpty())) : "key=" + key + " is not valid";
+
+                       // Get start and end
+                       int start = matcher.start();
+                       int end = matcher.end();
+
+                       // Debug message
+                       this.getLogger().debug("init=" + init + ",start=" + start + ",end=" + end + ",match=" + match + ",key=" + key + ",value=" + value);
+
+                       // Add key/value to map
+                       map.put(key, value);
+
+                       // Hop to next match
+                       init = end;
+               }
 
                // Trace message
-               this.getLogger().trace("EXIT!"); //NOI18N
+               this.getLogger().trace("map()=" + map.size() + " - EXIT!");
+
+               // Return finished map
+               return map;
        }
 }
index b030873d4118a530928073b9c1f3edc138257038..c5f34240de21e0da9391d5dcbe4df128cb9a9541 100644 (file)
@@ -16,6 +16,7 @@
  */
 package org.mxchange.jcore.database.frontend;
 
+import java.io.IOException;
 import java.lang.reflect.InvocationTargetException;
 import java.sql.ResultSet;
 import java.sql.SQLException;
@@ -166,8 +167,9 @@ public abstract class BaseDatabaseFrontend extends BaseFrameworkSystem implement
         *
         * @return An instance of Result
         * @throws java.sql.SQLException If any SQL error occurs
+        * @throws java.io.IOException If an IO error occurs
         */
-       protected Result<? extends Storeable> doInsertDataSet () throws SQLException {
+       protected Result<? extends Storeable> doInsertDataSet () throws SQLException, IOException {
                // Trace message
                this.getLogger().trace("CALLED!");
 
index 9b050dc2f4450d65f24bd83ded3c26b6285dbe1b..6b2cc3a314f1d8daeda6534f347904f08c6849b6 100644 (file)
@@ -19,10 +19,10 @@ package org.mxchange.jcore.database.frontend;
 import java.io.IOException;
 import java.sql.ResultSet;
 import java.sql.SQLException;
+import java.util.Map;
 import org.mxchange.jcore.FrameworkInterface;
 import org.mxchange.jcore.database.result.Result;
 import org.mxchange.jcore.database.storage.Storeable;
-import org.mxchange.jcore.exceptions.BadTokenException;
 
 /**
  * A generic interface for database frontends
@@ -48,16 +48,6 @@ public interface DatabaseFrontend extends FrameworkInterface {
         */
        public Result<? extends Storeable> getResultFromSet (final ResultSet resultSet) throws SQLException;
 
-       /**
-        * Parses given line from database backend into a Storeable instance. Please
-        * note that not all backends need this.
-        *
-        * @param line Line from database backend
-        * @return A Storeable instance
-        * @throws org.mxchange.jcore.exceptions.BadTokenException If a token was badly formatted
-        */
-       public Storeable parseLineToStoreable (final String line) throws BadTokenException;
-
        /**
         * Name of used database table, handled over to backend
         *
@@ -71,4 +61,14 @@ public interface DatabaseFrontend extends FrameworkInterface {
         * @throws java.io.IOException If any IO error occurs
         */
        public void doShutdown () throws SQLException, IOException;
+
+       /**
+        * Converts the given map into a Storeable instance, depending on which class implements it. All
+        * keys are being interpreted as class fields/attributes and their respective setters are being searched for. As
+        * this method may fail to find one or access it, this method throws some exception.
+        *
+        * @param map Map instance to convert to Storeable
+        * @return An instance of a Storeable implementation
+        */
+       public Storeable toStoreable (final Map<String, String> map);
 }
index 1e95d8ed012a2cd6fd98c8d4c8aebcf31d5cd31f..71b289fd06a1ec35d563c9549cb1c53b9b3d823f 100644 (file)
@@ -16,6 +16,7 @@
  */
 package org.mxchange.jcore.database.storage;
 
+import java.lang.reflect.InvocationTargetException;
 import org.mxchange.jcore.FrameworkInterface;
 
 /**
@@ -24,4 +25,25 @@ import org.mxchange.jcore.FrameworkInterface;
  * @author Roland Haeder
  */
 public interface Storeable extends FrameworkInterface {
+       /**
+        * Some "getter for a value from given column name. This name will be
+        * translated into a method name and then this method is called.
+        *
+        * @param columnName Column name
+        * @return Value from field
+        * @throws IllegalArgumentException Some implementations may throw this
+        * @throws java.lang.NoSuchMethodException If the invoked method was not found
+        * @throws java.lang.IllegalAccessException If the method cannot be accessed
+        * @throws java.lang.reflect.InvocationTargetException Any other problems?
+        */
+       public Object getValueFromColumn (final String columnName) throws IllegalArgumentException, NoSuchMethodException, IllegalAccessException, InvocationTargetException;
+
+       /**
+        *  Some "setter" for a value from given column name. You may wish to overwrite this method in your
+        * own class.
+        * 
+        * @param columnName Column name
+        * @param value Value to set in object's field
+        */
+       public void setValueFromColumn (final String columnName, final String value);
 }
diff --git a/src/org/mxchange/jcore/database/storage/csv/StoreableCsv.java b/src/org/mxchange/jcore/database/storage/csv/StoreableCsv.java
deleted file mode 100644 (file)
index 1f09325..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2015 Roland Haeder
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.mxchange.jcore.database.storage.csv;
-
-import org.mxchange.jcore.database.storage.Storeable;
-
-/**
- * An interface for classes which should be storeable as a CSV string
- *
- * @author Roland Haeder
- * @deprecated This interface was for an old way of storing data into
- * comma-separated value files. Now that there is BASE64-encoding, this formating
- * is no longer needed.
- */
-@Deprecated
-public interface StoreableCsv extends Storeable {
-
-       /**
-        * Getter for a CSV-formated string from object
-        *
-        * @return
-        * @deprecated See interface deprecation
-        */
-       @Deprecated
-       public String getCsvStringFromStoreableObject ();
-}
diff --git a/src/org/mxchange/jcore/exceptions/CorruptedDatabaseFileException.java b/src/org/mxchange/jcore/exceptions/CorruptedDatabaseFileException.java
new file mode 100644 (file)
index 0000000..4c54bd4
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2015 Roland Haeder
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.mxchange.jcore.exceptions;
+
+/**
+ * An exception thrown when the file is corrupted (damaged)
+ *
+ * @author Roland Haeder
+ */
+public class CorruptedDatabaseFileException extends Exception {
+
+       /**
+        * Constructor with file name
+        *
+        * @param fileName File name
+        * @param message Debug message
+        */
+       public CorruptedDatabaseFileException (final String fileName, final String message) {
+               super("Database file \"" + fileName + "\" is corrupted: " + message);
+       }
+       
+}