initial commit
Diff
.classpath | 26 +-
.project | 23 +-
.settings/org.eclipse.core.resources.prefs | 4 +-
.settings/org.eclipse.jdt.core.prefs | 398 +++++++-
.settings/org.eclipse.jdt.ui.prefs | 4 +-
.settings/org.eclipse.m2e.core.prefs | 4 +-
logs/2015-04-09-1.log.gz | Bin 0 -> 66 bytes
logs/2015-04-09-2.log.gz | Bin 0 -> 66 bytes
logs/2015-04-09-3.log.gz | Bin 0 -> 66 bytes
logs/2015-04-09-4.log.gz | Bin 0 -> 66 bytes
logs/2015-04-09-5.log.gz | Bin 0 -> 66 bytes
logs/2015-04-09-6.log | 4 +-
logs/2015-04-09-6.log.gz | Bin 0 -> 411 bytes
logs/2015-04-09-7.log | 5 +-
logs/latest.log | 6 +-
pom.xml | 68 +-
src/main/java/wf/doyle/blockbuster/App.java | 70 +-
src/main/java/wf/doyle/blockbuster/file/FileReader.java | 344 ++++++-
src/main/java/wf/doyle/blockbuster/file/FileWriter.java | 128 ++-
src/main/java/wf/doyle/blockbuster/gui/GUI.java | 170 +++-
src/main/java/wf/doyle/blockbuster/item/AudioVisualItem.java | 22 +-
src/main/java/wf/doyle/blockbuster/item/LibraryItem.java | 161 +++-
src/main/java/wf/doyle/blockbuster/item/PrintedItem.java | 33 +-
src/main/java/wf/doyle/blockbuster/item/items/audiovisual/CD.java | 43 +-
src/main/java/wf/doyle/blockbuster/item/items/audiovisual/DVD.java | 30 +-
src/main/java/wf/doyle/blockbuster/item/items/printed/Book.java | 43 +-
src/main/java/wf/doyle/blockbuster/item/items/printed/Periodical.java | 45 +-
src/main/java/wf/doyle/blockbuster/util/EnumLineType.java | 33 +-
src/main/java/wf/doyle/blockbuster/util/Library.java | 109 ++-
src/main/java/wf/doyle/blockbuster/util/User.java | 58 +-
src/main/resources/data/cd_&_dvd_data_1.txt | 25 +-
src/main/resources/data/cd_&_dvd_data_2.txt | 23 +-
src/main/resources/data/cd_&_dvd_data_3.txt | 26 +-
src/main/resources/data/cd_data.txt | 17 +-
src/main/resources/data/items_all.txt | 41 +-
src/main/resources/log4j2.xml | 27 +-
src/test/java/wf/doyle/blockbuster/AppTest.java | 38 +-
target/classes/data/cd_&_dvd_data_1.txt | 25 +-
target/classes/data/cd_&_dvd_data_2.txt | 23 +-
target/classes/data/cd_&_dvd_data_3.txt | 26 +-
target/classes/data/cd_data.txt | 17 +-
target/classes/data/items_all.txt | 41 +-
target/classes/log4j2.xml | 27 +-
target/classes/serialized-data.txt | 0
target/classes/wf/doyle/blockbuster/App.class | Bin 0 -> 1612 bytes
target/classes/wf/doyle/blockbuster/file/FileReader.class | Bin 0 -> 8798 bytes
target/classes/wf/doyle/blockbuster/file/FileWriter$1.class | Bin 0 -> 1349 bytes
target/classes/wf/doyle/blockbuster/file/FileWriter.class | Bin 0 -> 3980 bytes
target/classes/wf/doyle/blockbuster/gui/GUI$1.class | Bin 0 -> 1237 bytes
target/classes/wf/doyle/blockbuster/gui/GUI.class | Bin 0 -> 5499 bytes
target/classes/wf/doyle/blockbuster/item/AudioVisualItem.class | Bin 0 -> 463 bytes
target/classes/wf/doyle/blockbuster/item/LibraryItem.class | Bin 0 -> 3275 bytes
target/classes/wf/doyle/blockbuster/item/PrintedItem.class | Bin 0 -> 601 bytes
target/classes/wf/doyle/blockbuster/item/items/audiovisual/CD.class | Bin 0 -> 827 bytes
target/classes/wf/doyle/blockbuster/item/items/audiovisual/DVD.class | Bin 0 -> 713 bytes
target/classes/wf/doyle/blockbuster/item/items/printed/Book.class | Bin 0 -> 797 bytes
target/classes/wf/doyle/blockbuster/item/items/printed/Periodical.class | Bin 0 -> 1277 bytes
target/classes/wf/doyle/blockbuster/util/EnumLineType.class | Bin 0 -> 1309 bytes
target/classes/wf/doyle/blockbuster/util/Library$1.class | Bin 0 -> 1186 bytes
target/classes/wf/doyle/blockbuster/util/Library.class | Bin 0 -> 3783 bytes
target/classes/wf/doyle/blockbuster/util/User.class | Bin 0 -> 886 bytes
target/test-classes/wf/doyle/blockbuster/AppTest.class | Bin 0 -> 627 bytes
62 files changed, 2187 insertions(+)
@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" output="target/classes" path="src/main/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="target/test-classes" path="src/test/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="output" path="target/classes"/>
</classpath>
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>blockbuster</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.m2e.core.maven2Builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
</natures>
</projectDescription>
@@ -0,0 +1,4 @@
eclipse.preferences.version=1
encoding//src/main/java=UTF-8
encoding//src/test/java=UTF-8
encoding/<project>=UTF-8
@@ -0,0 +1,398 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.doc.comment.support=enabled
org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
org.eclipse.jdt.core.compiler.problem.deadCode=warning
org.eclipse.jdt.core.compiler.problem.deprecation=warning
org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning
org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
org.eclipse.jdt.core.compiler.problem.invalidJavadoc=error
org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private
org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
org.eclipse.jdt.core.compiler.problem.missingJavadocComments=error
org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=private
org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=all_standard_tags
org.eclipse.jdt.core.compiler.problem.missingJavadocTags=error
org.eclipse.jdt.core.compiler.problem.missingJavadocTagsMethodTypeParameters=disabled
org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=private
org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
org.eclipse.jdt.core.compiler.problem.nullReference=warning
org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
org.eclipse.jdt.core.compiler.problem.parameterAssignment=warning
org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore
org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=warning
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
org.eclipse.jdt.core.compiler.problem.unusedImport=warning
org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
org.eclipse.jdt.core.compiler.source=1.8
org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=0
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=0
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=0
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=0
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=0
org.eclipse.jdt.core.formatter.alignment_for_assignment=0
org.eclipse.jdt.core.formatter.alignment_for_binary_expression=0
org.eclipse.jdt.core.formatter.alignment_for_compact_if=0
org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=0
org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=0
org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=0
org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=0
org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=0
org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=0
org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=0
org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=0
org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=0
org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=0
org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=0
org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=0
org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
org.eclipse.jdt.core.formatter.blank_lines_after_package=1
org.eclipse.jdt.core.formatter.blank_lines_before_field=0
org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
org.eclipse.jdt.core.formatter.blank_lines_before_method=1
org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
org.eclipse.jdt.core.formatter.blank_lines_before_package=0
org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line
org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_block=next_line
org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line
org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line
org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line
org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line
org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true
org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
org.eclipse.jdt.core.formatter.comment.format_block_comments=true
org.eclipse.jdt.core.formatter.comment.format_header=true
org.eclipse.jdt.core.formatter.comment.format_html=true
org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
org.eclipse.jdt.core.formatter.comment.format_line_comments=true
org.eclipse.jdt.core.formatter.comment.format_source_code=true
org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
org.eclipse.jdt.core.formatter.comment.line_length=80
org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
org.eclipse.jdt.core.formatter.compact_else_if=true
org.eclipse.jdt.core.formatter.continuation_indentation=2
org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
org.eclipse.jdt.core.formatter.indent_empty_lines=false
org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true
org.eclipse.jdt.core.formatter.indentation.size=8
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert
org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=insert
org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
org.eclipse.jdt.core.formatter.join_lines_in_comments=true
org.eclipse.jdt.core.formatter.join_wrapped_lines=true
org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=true
org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
org.eclipse.jdt.core.formatter.lineSplit=0
org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
org.eclipse.jdt.core.formatter.tabulation.char=tab
org.eclipse.jdt.core.formatter.tabulation.size=4
org.eclipse.jdt.core.formatter.use_on_off_tags=false
org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=true
org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
@@ -0,0 +1,4 @@
cleanup_settings_version=2
eclipse.preferences.version=1
formatter_profile=_Jordan
formatter_settings_version=12
@@ -0,0 +1,4 @@
activeProfiles=
eclipse.preferences.version=1
resolveWorkspaceProjects=true
version=1
Binary files /dev/null and b/logs/2015-04-09-1.log.gz differ
Binary files /dev/null and b/logs/2015-04-09-2.log.gz differ
Binary files /dev/null and b/logs/2015-04-09-3.log.gz differ
Binary files /dev/null and b/logs/2015-04-09-4.log.gz differ
Binary files /dev/null and b/logs/2015-04-09-5.log.gz differ
@@ -0,0 +1,4 @@
[11:43:34] [main/INFO]: BlockBuster starting
[11:52:27] [main/INFO]: BlockBuster starting
[11:54:30] [main/INFO]: BlockBuster starting
[11:54:41] [main/INFO]: BlockBuster starting
Binary files /dev/null and b/logs/2015-04-09-6.log.gz differ
@@ -0,0 +1,5 @@
[11:43:34] [main/INFO]: BlockBuster starting
[11:52:27] [main/INFO]: BlockBuster starting
[11:54:30] [main/INFO]: BlockBuster starting
[11:54:41] [main/INFO]: BlockBuster starting
[11:56:44] [main/INFO]: BlockBuster starting
@@ -0,0 +1,6 @@
[11:43:34] [main/INFO]: BlockBuster starting
[11:52:27] [main/INFO]: BlockBuster starting
[11:54:30] [main/INFO]: BlockBuster starting
[11:54:41] [main/INFO]: BlockBuster starting
[11:56:44] [main/INFO]: BlockBuster starting
[11:56:51] [main/INFO]: BlockBuster starting
@@ -0,0 +1,68 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>wf.doyle</groupId>
<artifactId>blockbuster</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>blockbuster</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>18.0</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>wf.doyle.blockbuster.App</mainClass>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
</project>
@@ -0,0 +1,70 @@
package wf.doyle.blockbuster;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import wf.doyle.blockbuster.gui.GUI;
import wf.doyle.blockbuster.item.LibraryItem;
import wf.doyle.blockbuster.util.Library;
import wf.doyle.blockbuster.util.User;
* Entry class of BlockBuster
*
* @author Jordan Doyle
*/
public class App {
* Log4j logger instance
*/
public static final Logger LOGGER = LogManager.getLogger("BlockBuster");
* List of items available in the library
*/
public static List<LibraryItem> items = new ArrayList<LibraryItem>();
* Local user
*/
public static final User USER = new User();
* Entry point of BlockBuster
*
* @param args
* arguments passed to program
*/
public static void main(String[] args)
{
LOGGER.info("BlockBuster starting");
Library l = null;
try
{
l = new Library();
}
catch(URISyntaxException e1)
{
e1.printStackTrace();
}
if(args.length > 0 && args[0] == "-debug") {
l.printAllDetails();
l.printAllDetailsSortedOnTitle();
return;
}
GUI n = new GUI();
n.setVisible(true);
}
}
@@ -0,0 +1,344 @@
package wf.doyle.blockbuster.file;
import java.io.IOException;
import java.lang.reflect.Field;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.ListIterator;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Stream;
import com.google.common.base.CaseFormat;
import wf.doyle.blockbuster.App;
import wf.doyle.blockbuster.item.LibraryItem;
import wf.doyle.blockbuster.util.EnumLineType;
* Provides functions to read and parse provided files.
*
* @author Jordan Doyle
*/
public class FileReader {
* Path to the file to read
*/
private Path path;
* Enum containing the current line type.
*/
private EnumLineType currentLine = EnumLineType.NONE;
* Pattern to find data types
*/
private Pattern dataTypes = Pattern.compile("\\[(.*) data\\]");
* Line number we're currently dealing with.
*/
private int lineNumber = 0;
* A list of what the current line type gives us, allows easy setting with
* reflection
*/
private String[] lineContains;
* Contains a list of what each line type should contain which lets us write
* data back to the file easily.
*/
public static Map<String, String[]> containing = new HashMap<String, String[]>();
* Contains a mapping of EnumLineTypes to the respective classes for use in
* {@link #wf.doyle.blockbuster.item.LibraryItem.toString()}
*/
public static Map<EnumLineType, Class<? extends LibraryItem>> classes = new HashMap<EnumLineType, Class<? extends LibraryItem>>();
* Instantiates a new instance of FileReader
*
* @param path
* path of the file to read
*/
public FileReader(Path path)
{
this.path = path;
}
* Parses the current file
*/
public void parseFile()
{
try(Stream<String> lines = Files.lines(this.path, StandardCharsets.UTF_8))
{
Iterator<String> it = lines.iterator();
while(it.hasNext())
{
this.lineNumber++;
String line = it.next();
if(this.currentLine == EnumLineType.UNKNOWN) continue;
parseLine(line.trim());
}
}
catch(IOException e)
{
App.LOGGER.error("Error whilst reading provided file", e);
}
}
* @return storage class from current line type
*/
private Class<? extends LibraryItem> getClassType()
{
Class<? extends LibraryItem> classType = null;
try
{
classType = (Class<? extends LibraryItem>) Class.forName("wf.doyle.blockbuster.item.items.audiovisual." + this.currentLine.toString());
}
catch(ClassNotFoundException e)
{
try
{
classType = (Class<? extends LibraryItem>) Class.forName("wf.doyle.blockbuster.item.items.printed." + CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, this.currentLine.toString()));
}
catch(ClassNotFoundException ex)
{
try
{
classType = (Class<? extends LibraryItem>) Class.forName("wf.doyle.blockbuster.item.items.audiovisual." + CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, this.currentLine.toString()));
}
catch(ClassNotFoundException ex2)
{
App.LOGGER.error("Couldn't find storage class for this line type.", ex2);
}
}
}
return classType;
}
* Find a private field in a class (and its parents)
*
* @param nameRaw
* name of field to find
* @param classType
* class to find the field in
* @return the found private field
*/
public static Field getField(String nameRaw, Class<? extends LibraryItem> classType)
{
String name = nameRaw.trim();
Field field = null;
try
{
field = classType.getSuperclass().getSuperclass().getDeclaredField(name);
}
catch(NoSuchFieldException | SecurityException e)
{
try
{
field = classType.getSuperclass().getDeclaredField(name);
}
catch(NoSuchFieldException | SecurityException ex)
{
try
{
field = classType.getDeclaredField(name);
}
catch(NoSuchFieldException | SecurityException ex2)
{
App.LOGGER.error("Couldn't find field " + name + " in " + classType.getName(), ex2);
}
}
}
return field;
}
* Set the value of a private field
*
* @param f
* field to set the value of
* @param instance
* instance to set the value in
* @param data
* data to set the value as
* @return instance of LibraryItem
*/
public static LibraryItem setField(Field f, LibraryItem instance, String data)
{
try
{
try
{
if(f.getType().isAssignableFrom(int.class))
{
int val = (int) Double.parseDouble(data);
f.setAccessible(true);
f.set(instance, val);
return instance;
}
}
catch(NumberFormatException nfe)
{
}
if(data.equalsIgnoreCase("true") || data.equalsIgnoreCase("false"))
{
boolean b = Boolean.parseBoolean(data);
f.setAccessible(true);
f.set(instance, b);
return instance;
}
f.setAccessible(true);
f.set(instance, data);
}
catch(IllegalArgumentException | IllegalAccessException e)
{
App.LOGGER.error("Couldn't set value of " + f.getName() + " in " + instance.getClass().getName(), e);
}
return instance;
}
* Parses the current line and decides what to do with it.
*
* @param line
* string to parse
*/
private void parseLine(String line)
{
if(line.isEmpty() || line.startsWith("//"))
{
if(line.startsWith("// data is")) this.lineContains = line.substring(line.indexOf("// data is") + "// data is".length()).split(", ");
return;
}
if(determineLineType(line)) return;
Class<? extends LibraryItem> itemClass = this.getClassType();
if(!containing.containsKey(itemClass.getName())) containing.put(itemClass.getName(), this.lineContains);
if(!classes.containsKey(this.currentLine)) classes.put(this.currentLine, itemClass);
try
{
LibraryItem item = itemClass.newInstance();
ListIterator<String> iterator = Arrays.asList(line.split(",")).listIterator();
while(iterator.hasNext())
{
int key = iterator.nextIndex();
String value = iterator.next().trim();
Field field = getField(this.lineContains[key].trim(), itemClass);
item = setField(field, item, value);
}
App.items.add(item);
}
catch(IllegalAccessException | InstantiationException e)
{
App.LOGGER.error("Couldn't instantiate storage class.", e);
}
}
* Parses the current line and determines the type of data it is providing
*
* @param line
* string to parse to type
* @return true if found a line type
*/
private boolean determineLineType(String line)
{
Matcher m = this.dataTypes.matcher(line);
if(!m.find()) return false;
switch(m.group(1).toLowerCase())
{
case "dvd":
this.currentLine = EnumLineType.DVD;
return true;
case "cd":
this.currentLine = EnumLineType.CD;
return true;
case "book":
this.currentLine = EnumLineType.BOOK;
return true;
case "periodical":
this.currentLine = EnumLineType.PERIODICAL;
return true;
default:
this.currentLine = EnumLineType.UNKNOWN;
App.LOGGER.error("Couldn't recognise data type on line " + this.lineNumber + " in file " + this.path.getFileName() + ", skipping this block.");
return true;
}
}
}
@@ -0,0 +1,128 @@
package wf.doyle.blockbuster.file;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import com.google.common.base.CaseFormat;
import wf.doyle.blockbuster.App;
import wf.doyle.blockbuster.item.LibraryItem;
import wf.doyle.blockbuster.util.EnumLineType;
* Serializes all the items and writes them back into a data file.
*
* @author Jordan Doyle
*/
public class FileWriter {
* Provides a versioning for our data files which allows backwards
* compatability with older data files.
*/
protected static final long serialVersionUID = 0L;
* Path to the file to write to
*/
private Path path;
* Lines to write to the data file
*/
private List<String> lines = new ArrayList<String>();
* Final string to write to file.
*/
public String joinedString;
* Instantiates a new FileWriter instance
*
* @param path
* path to file to write to
*/
public FileWriter(Path path)
{
this.lines.add("// SERIAL " + serialVersionUID);
this.path = path;
}
* Serializes all items from the main array (
* {@link wf.doyle.blockbuster.App#items}) and stores each line in the
* {@link #lines} array.
*
* @return serialized classes
*/
public FileWriter serializeItems()
{
List<LibraryItem> items = App.items;
Collections.sort(items, new Comparator<LibraryItem>()
{
@Override
public int compare(LibraryItem arg0, LibraryItem arg1)
{
return arg0.getType().toString().compareTo(arg1.getType().toString());
}
});
EnumLineType header = null;
for(LibraryItem item : items)
{
if(header != item.getType())
{
this.lines.add("");
this.lines.add("[" + CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, item.getType().toString()) + " data]");
this.lines.add("// data is " + StringUtils.join(FileReader.containing.get(item.getClass().getName()), ", ").trim());
header = item.getType();
}
this.lines.add(item.toString());
}
this.joinedString = StringUtils.join(this.lines, "\r\n");
return this;
}
* Write and save to the file
*/
public void save()
{
File file = this.path.toFile();
try
{
file.createNewFile();
}
catch(IOException e)
{
App.LOGGER.error("Could not create new file", e);
}
try(PrintWriter writer = new PrintWriter(file))
{
writer.write(this.joinedString);
}
catch(Exception e)
{
App.LOGGER.error("Could not write to file", e);
}
}
}
@@ -0,0 +1,170 @@
package wf.doyle.blockbuster.gui;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.lang.reflect.Field;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import javax.swing.JTabbedPane;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import wf.doyle.blockbuster.App;
import wf.doyle.blockbuster.file.FileReader;
import wf.doyle.blockbuster.item.LibraryItem;
import wf.doyle.blockbuster.item.items.printed.Book;
import wf.doyle.blockbuster.item.items.printed.Periodical;
import wf.doyle.blockbuster.util.EnumLineType;
* Provides a nice (yet somewhat sketchy) front-end for BlockBuster.
*
* @author Jordan Doyle
*/
public class GUI extends JFrame {
* Content Pane
*/
private JPanel contentPane;
* Tabbed Pane
*/
private final JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
* Create the frame.
*/
public GUI()
{
this.setResizable(false);
this.setTitle("BlockBuster");
try
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch(ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e)
{
e.printStackTrace();
}
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 712, 613);
this.contentPane = new JPanel();
this.contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(this.contentPane);
this.contentPane.setLayout(new GridLayout(1, 0, 0, 0));
this.contentPane.add(this.tabbedPane);
List<LibraryItem> items = App.items;
Collections.sort(items, new Comparator<LibraryItem>()
{
@Override
public int compare(LibraryItem arg0, LibraryItem arg1)
{
return arg0.getType().toString().compareTo(arg1.getType().toString());
}
});
EnumLineType header = null;
int top = 17;
JPanel panel = null;
for(LibraryItem item : items)
{
if(header != item.getType())
{
top = 17;
panel = new JPanel();
this.tabbedPane.addTab(item.getClass().getSimpleName(), null, panel, null);
panel.setLayout(null);
header = item.getType();
}
JButton btnNewButton = new JButton("Borrow");
if(item.getLoan())
{
btnNewButton.setEnabled(false);
btnNewButton.setText("Unavailable");
}
btnNewButton.setBounds(570, top - 4, 97, 25);
panel.add(btnNewButton);
JLabel lblNewLabel = new JLabel(item.getName());
lblNewLabel.setBounds(12, top, 170, 16);
panel.add(lblNewLabel);
JLabel lblNewLabel_2;
JLabel lblNewLabel_3;
final boolean borrow;
if(item instanceof Book)
{
lblNewLabel_2 = new JLabel("" + ((Book) item).getISBN());
lblNewLabel_3 = new JLabel( ((Book) item).getAuthor());
borrow = false;
}
else
{
lblNewLabel_2 = new JLabel(item.getItemCode());
if(item instanceof Periodical)
{
lblNewLabel_3 = new JLabel( ((Periodical) item).getPublisher());
borrow = false;
}
else
{
lblNewLabel_3 = new JLabel("Borrowed: " + item.getTimesBorrowed());
borrow = true;
}
}
btnNewButton.addActionListener((e)-> {
if(!App.USER.hasItem() && item.toggleItem())
{
if(borrow)
lblNewLabel_3.setText("Borrowed: " + item.getTimesBorrowed());
App.USER.setItem(item);
btnNewButton.setText("Return");
} else if(App.USER.hasItem(item)) {
btnNewButton.setText("Borrow");
App.USER.removeItem();
}
});
lblNewLabel_2.setBounds(220, top, 100, 16);
panel.add(lblNewLabel_2);
lblNewLabel_3.setBounds(370, top, 100, 16);
panel.add(lblNewLabel_3);
JLabel lblNewLabel_4 = new JLabel(item.getCost());
lblNewLabel_4.setBounds(520, top, 100, 16);
panel.add(lblNewLabel_4);
top += 38;
}
}
}
@@ -0,0 +1,22 @@
package wf.doyle.blockbuster.item;
* @see wf.doyle.blockbuster.item.LibraryItem
* @author Jordan Doyle
*/
public abstract class AudioVisualItem extends LibraryItem {
* The time this item runs for
*/
private int playingTime;
* Gets the running time for this audio visual item.
*
* @return length of item
*/
public int getPlayingTime()
{
return this.playingTime;
}
}
@@ -0,0 +1,161 @@
package wf.doyle.blockbuster.item;
import java.lang.reflect.Field;
import java.text.DecimalFormat;
import wf.doyle.blockbuster.App;
import wf.doyle.blockbuster.file.FileReader;
import wf.doyle.blockbuster.util.EnumLineType;
* Provides a base class for all items to extend.
*
* @author Jordan Doyle
*/
public abstract class LibraryItem {
* Checks if the item currently on loan.
*/
private boolean onLoan = false;
* Amount of times the item has been taken.
*/
private int timesBorrowed = 0;
* URN of the item, as specified by the providing data file.
*/
private String itemCode;
* Cost of the item, as specified by the providing data file.
*/
private int cost;
* Name of the library item
*/
private String title;
* Gets the unique reference number of the item.
*
* @return URN of item
*/
public String getItemCode()
{
return this.itemCode;
}
* Gets the storage class type for this class.
*
* @return type of storage class
*/
public abstract EnumLineType getType();
* Gets the name of the item provided by the data file.
*
* @return name of item
*/
public String getName()
{
return this.title;
}
* Gets the cost of the item.
*
* @return cost of the item in pounds
*/
public String getCost()
{
return new DecimalFormat("'£'0.00").format((float)this.cost / 100);
}
* Checks if the item is currently being loaned
*
* @return true if the item is loaned out
*/
public boolean getLoan()
{
return this.onLoan;
}
* Checks how many times this item has been borrowed from the library.
* Increments every time {@link #takeItem()} is called.
*
* @return amount of times item has been borrowed
*/
public int getTimesBorrowed()
{
return this.timesBorrowed;
}
* Takes the item from the library and increments the taken counter by 1.
*/
public void takeItem()
{
if(this.getLoan()) return;
this.onLoan = true;
this.timesBorrowed++;
}
* Returns the item back to the library and let it be available again.
*/
public void returnItem()
{
if(!this.getLoan()) return;
this.onLoan = false;
}
@Override
public String toString()
{
String[] contains = FileReader.containing.get(this.getClass().getName());
String string = "";
for(String key : contains)
{
Class<? extends LibraryItem> child = FileReader.classes.get(this.getType());
Field f = FileReader.getField(key.trim(), child);
f.setAccessible(true);
try
{
string = string + f.get(this) + ", ";
}
catch(IllegalArgumentException | IllegalAccessException e)
{
App.LOGGER.error("Could not get value of reflection field", e);
}
}
return string.substring(0, string.lastIndexOf(","));
}
* Toggles between taking the item and putting it back.
*
* @return true if we now have the item
*/
public boolean toggleItem()
{
if(this.getLoan()) {
this.returnItem();
return false;
} else {
this.takeItem();
return true;
}
}
}
@@ -0,0 +1,33 @@
package wf.doyle.blockbuster.item;
* @see wf.doyle.blockbuster.item.LibraryItem
* @author Jordan Doyle
*/
public abstract class PrintedItem extends LibraryItem {
* Number of pages in the item
*/
private int noOfPages;
* Publisher of the item
*/
private String publisher;
* @return number of pages in the item
*/
public int getNumberOfPages()
{
return this.noOfPages;
}
* @return publisher of the item
*/
public String getPublisher()
{
return this.publisher;
}
}
@@ -0,0 +1,43 @@
package wf.doyle.blockbuster.item.items.audiovisual;
import wf.doyle.blockbuster.item.AudioVisualItem;
import wf.doyle.blockbuster.util.EnumLineType;
* This object represents a CD in a library.
*
* @author Jordan Doyle
*/
public final class CD extends AudioVisualItem {
* Number of tracks on the album.
*/
private int noOfTracks;
* The artist of the album.
*/
private String artist;
* @return number of tracks on the album
*/
public int getNumberOfTracks()
{
return this.noOfTracks;
}
* @return artist of the album
*/
public String getArtist()
{
return this.artist;
}
@Override
public EnumLineType getType()
{
return EnumLineType.CD;
}
}
@@ -0,0 +1,30 @@
package wf.doyle.blockbuster.item.items.audiovisual;
import wf.doyle.blockbuster.item.AudioVisualItem;
import wf.doyle.blockbuster.util.EnumLineType;
* This object represents a DVD in a library.
*
* @author Jordan Doyle
*/
public final class DVD extends AudioVisualItem {
* Director of the DVD
*/
private String director;
* @return gets the director of the DVD
*/
public String getDirector()
{
return this.director;
}
@Override
public EnumLineType getType()
{
return EnumLineType.DVD;
}
}
@@ -0,0 +1,43 @@
package wf.doyle.blockbuster.item.items.printed;
import wf.doyle.blockbuster.item.PrintedItem;
import wf.doyle.blockbuster.util.EnumLineType;
* This object represents a Book in a library.
*
* @author Jordan Doyle
*/
public class Book extends PrintedItem {
* Author of the book.
*/
private String author;
* ISBN of the book.
*/
private String isbn;
* @return author of the book
*/
public String getAuthor()
{
return this.author;
}
* @return ISBN of the book
*/
public String getISBN()
{
return this.isbn;
}
@Override
public EnumLineType getType()
{
return EnumLineType.BOOK;
}
}
@@ -0,0 +1,45 @@
package wf.doyle.blockbuster.item.items.printed;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import wf.doyle.blockbuster.App;
import wf.doyle.blockbuster.item.PrintedItem;
import wf.doyle.blockbuster.util.EnumLineType;
* This object represents a periodic publication in a library.
*
* @author Jordan Doyle
*/
public class Periodical extends PrintedItem {
* Time of publication
*/
private String publicationDate;
* @return time of publication
*/
public Date getPublicationDate()
{
try
{
return new SimpleDateFormat("dd-MM-yy").parse(this.publicationDate);
}
catch(ParseException e)
{
App.LOGGER.error("Error parsing publication date", e);
return new Date();
}
}
@Override
public EnumLineType getType()
{
return EnumLineType.PERIODICAL;
}
}
@@ -0,0 +1,33 @@
package wf.doyle.blockbuster.util;
* Enum containing all the different types of lines.
*
* @author Jordan Doyle
*/
public enum EnumLineType {
* The current lines contain information about CDs.
*/
CD,
* The current lines contain information about DVDs.
*/
DVD,
* The current lines contain information about books.
*/
BOOK,
* The current lines contain information about periodicals.
*/
PERIODICAL,
* This line contains an unknown data type.
*/
UNKNOWN,
* It is not yet determined what these lines contain
*/
NONE;
}
@@ -0,0 +1,109 @@
package wf.doyle.blockbuster.util;
import java.lang.reflect.Field;
import java.net.URISyntaxException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import wf.doyle.blockbuster.App;
import wf.doyle.blockbuster.file.FileReader;
import wf.doyle.blockbuster.item.LibraryItem;
* Contains various functions for the Library.
*
* @author Jordan Doyle
*/
public final class Library {
* FileReader instance to read from the data files
*/
private FileReader reader;
* Instantiates a new Library class.
*
* @throws URISyntaxException
* resource could not be parsed
*/
public Library() throws URISyntaxException
{
Path path = Paths.get(App.class.getResource("/data/items_all.txt").toURI());
this.reader = new FileReader(path);
this.reader.parseFile();
}
* Prints all the data about each item
*/
public void printAllDetails()
{
App.LOGGER.debug("UNSORTED DETAILS TEST");
App.LOGGER.debug("=====================================================================");
for(LibraryItem item : App.items)
{
for(String containing : FileReader.containing.get(item.getClass().getName()))
{
try
{
Field f = FileReader.getField(containing, item.getClass());
f.setAccessible(true);
App.LOGGER.debug(containing.trim() + ": " + f.get(item));
}
catch(IllegalArgumentException | IllegalAccessException e)
{
App.LOGGER.error("Couldn't print out details", e);
}
}
App.LOGGER.debug("----------------------------------------");
}
App.LOGGER.debug("=====================================================================");
}
* Prints all the data about each item sorted on title
*/
public void printAllDetailsSortedOnTitle() { List<LibraryItem> items = App.items;
Collections.sort(items, new Comparator<LibraryItem>()
{
@Override
public int compare(LibraryItem arg0, LibraryItem arg1)
{
return arg0.getName().compareTo(arg1.getName());
}
});
App.LOGGER.debug("SORTED DETAILS TEST");
App.LOGGER.debug("=====================================================================");
for(LibraryItem item : items)
{
for(String containing : FileReader.containing.get(item.getClass().getName()))
{
try
{
Field f = FileReader.getField(containing, item.getClass());
f.setAccessible(true);
App.LOGGER.debug(containing.trim() + ": " + f.get(item));
}
catch(IllegalArgumentException | IllegalAccessException e)
{
App.LOGGER.error("Couldn't print out details", e);
}
}
App.LOGGER.debug("----------------------------------------");
}
App.LOGGER.debug("=====================================================================");
}
}
@@ -0,0 +1,58 @@
package wf.doyle.blockbuster.util;
import wf.doyle.blockbuster.item.LibraryItem;
* Storage class holding data about a user.
*
* @author Jordan Doyle
*/
public class User {
* Holds the reference to the item that the user currently has
*/
private LibraryItem hasItem = null;
* Checks if the user currently has an item
*
* @return true if the user has an item
*/
public boolean hasItem()
{
return this.hasItem != null;
}
* Checks if a user has a certain item.
*
* @param item
* item to compare against
* @return true, if the user has the specified item
*/
public boolean hasItem(LibraryItem item)
{
if(!hasItem()) return false;
return (hasItem.equals(item));
}
* Takes the item off of the user
*/
public void removeItem()
{
this.hasItem = null;
}
* Gives the user an item
*
* @param l
* item instance
*/
public void setItem(LibraryItem l)
{
this.hasItem = l;
}
}
@@ -0,0 +1,25 @@
// this is a comment, any lines that start with //
// (and blank lines) should be ignored
[CD data]
// data is artist, noOfTracks, playingTime, title, itemCode, cost
James Blunt,15,68, Back to Bedlam, LM003604,498
Duffy,10,73, Rockferry, LM003553,898
Adele,12,19,75, LM003580,798
Robert Plant and Alison Krauss,13,72, Raising Sand, LM003750,898
Goldfrapp,10,72, Seventh Tree, LM003873,1299
Amy Winehouse,11,70, Back To Black, LM003698,698
Jack Johnson,15,67, Sleep Through The Static, LM003773,898
Mark Ronson,14,74, Version, LM003365,698,
Radiohead,10,75, In Rainbows , LM003771,798,
Nick Cave,11,68, Dig!!! Lazarus Dig!!!, LM003751,1199
Nickelback,11,72, All the Right Reasons, LM003915,598
[DVD data]
// data is director, playingTime, title, itemCode, cost
Chris Miller,92, Shrek The Third, LM004314,1026
Robert Zemeckis,114, Beowulf , LM004079,900
@@ -0,0 +1,23 @@
[DVD data]
// none available yet
[CD data]
// data is artist, noOfTracks, playingTime, title, itemCode, cost
Goldfrapp,10,72, Seventh Tree, LM003873,1299
Amy Winehouse,11,70, Back To Black, LM003698,698
Jack Johnson, 15,67, Sleep Through The Static, LM003773,898
[DVD data]
// data is director, playingTime, title, itemCode, cost
Chris Miller,92, Shrek The Third, LM004314,1026
Robert Zemeckis,114, Beowulf , LM004079,900
Phyllida Lloyd,118, Mamma Mia, LM004984,798
Joe Wright,130, Atonement, LM004720,1293
Andrew Adamson,125, The Chronicles of Narnia: Prince Caspian, LM004178,498
[cd data]
// data is artist, noOfTracks, playingTime, title, itemCode, cost
Mark Ronson,14,75, Version, LM003365,698
Radiohead,10,74, In Rainbows , LM003771,798
Nick Cave,11,68, Dig!!! Lazarus Dig!!!, LM003751,1199
Nickelback, 11,68, All the Right Reasons, LM003915,598
@@ -0,0 +1,26 @@
// this is a comment, any lines that start with //
// (and blank lines) should be ignored
[CD data]
// data is artist, noOfTracks, playingTime, title, itemCode, cost, timesBorrowed, onLoan
James Blunt,15,68, Back to Bedlam, LM003604,498,234,true
Duffy,10,73, Rockferry, LM003553,898,90,false
Adele,12,19,75, LM003580,798,87,FALSE
Robert Plant and Alison Krauss,13,72, Raising Sand, LM003750,898,89,tRUE
Goldfrapp,10,72, Seventh Tree, LM003873,1299,9876,true
Amy Winehouse,11,70, Back To Black, LM003698,698,8765,false
Jack Johnson,15,67, Sleep Through The Static, LM003773,898, 54,True
Mark Ronson, 14,74, Version, LM003365,698,56,true
Radiohead,10,75, In Rainbows , LM003771,798,6543,FALSE
Nick Cave,11,68, Dig!!! Lazarus Dig!!!, LM003751,1199,90,False
Nickelback,11,72, All the Right Reasons, LM003915,598,32,true
[DVD data]
// data is director, playingTime, title, itemCode, cost, timesBorrowed, onLoan
Chris Miller,92, Shrek The Third, LM004314,1026,900,TRUE
Robert Zemeckis,114, Beowulf , LM004079,900,87,FALSE
\ No newline at end of file
@@ -0,0 +1,17 @@
// this is a comment, any lines that start with //
// (and blank lines) should be ignored
// data is artist, noOfTracks, playingTime, title, itemCode, cost
James Blunt,15,68, Back to Bedlam, LM003604,498
Duffy,10,73, Rockferry, LM003553,898
Adele,12,19,75, LM003580,798
Robert Plant and Alison Krauss,13,72, Raising Sand, LM003750,898
Goldfrapp,10,72, Seventh Tree, LM003873,1299
Amy Winehouse,11,70, Back To Black, LM003698,698
Jack Johnson,15,67, Sleep Through The Static, LM003773,898
Mark Ronson,14,74, Version, LM003365,698,
Radiohead,10,75, In Rainbows , LM003771,798,
Nick Cave,11,68, Dig!!! Lazarus Dig!!!, LM003751,1199
Nickelback,11,72, All the Right Reasons, LM003915,598
\ No newline at end of file
@@ -0,0 +1,41 @@
// this is a comment, any lines that start with //
// (and blank lines) should be ignored
[Book data]
// data is author, isbn, noOfPages, publisher, title, itemCode, cost, timesBorrowed, onLoan
Barnes and Kolling, 9780131976290,480, Pearson, Objects First with Java, LM002411,3989,781,true
Aho Sethi and Ullman, 9780201101942,795, Addison-Wesley, Compilers: Principles Techniques and Tools, LM002711,599,0,FALSE
Harvey Paul and Jeffrey, 9780130622211,1568, Prentice Hall, C# How to Program, LM002876,4599,45,TRUE
Muster, 9780072193145,1011, McGraw-Hill, Unix Made Easy: The Basics and Beyond (Made Easy), LM002468,6395,0,TRUE
Thomee, 9783540331216,370, Springer Verlag, Galerkin Finite Element Methods for Parabolic Problems, LM002153,4554,0,FALSE
[CD data]
// data is artist, noOfTracks, playingTime, title, itemCode, cost, timesBorrowed, onLoan
James Blunt,15,68, Back to Bedlam, LM003604,498,234,true
Duffy,10,73, Rockferry, LM003553,898,90,false
Adele,12,19,75, LM003580,798,87,FALSE
Robert Plant and Alison Krauss,13,72, Raising Sand, LM003750,898,89,tRUE
Goldfrapp,10,72, Seventh Tree, LM003873,1299,9876,true
Amy Winehouse,11,70, Back To Black, LM003698,698,8765,false
Jack Johnson,15,67, Sleep Through The Static, LM003773,898,54,True
Mark Ronson,14,74, Version, LM003365,698,56,true
Radiohead,10,75, In Rainbows , LM003771,798,6543,FALSE
Nick Cave,11,68, Dig!!! Lazarus Dig!!!, LM003751,1199,90,False
Nickelback,11,72, All the Right Reasons, LM003915,598,32,true
[DVD data]
// data is director, playingTime, title, itemCode, cost, timesBorrowed, onLoan
Chris Miller,92, Shrek The Third, LM004314,1026,900,TRUE
Robert Zemeckis,114, Beowulf , LM004079,900,87,FALSE
Phyllida Lloyd,118, Mamma Mia, LM004984,798,566,true
Joe Wright,130, Atonement, LM004720,1293,66,true
Andrew Adamson,125, The Chronicles of Narnia: Prince Caspian, LM004178,345,45,FALSE
[periodical data]
// data is publicationDate, noOfPages, publisher, title, itemCode, cost, timesBorrowed, onLoan
25-03-08,70, News International, The Times, LM005447,80,0,FALSE
26-03-08,70, News International, The Times, LM005002,80,0,false
26-03-08,60, Associated Newspapers, Daily Mail, LM005177,40,0,false
@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="[%d{HH:mm:ss}] [%logger{36}] [%replace{%-5level}{\s}{}] %msg%n"/>
</Console>
<RollingRandomAccessFile name="File" fileName="logs/latest.log" filePattern="logs/%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout pattern="[%d{HH:mm:ss}] [%t/%level]: %msg%n" />
<Policies>
<TimeBasedTriggeringPolicy />
<OnStartupTriggeringPolicy />
</Policies>
</RollingRandomAccessFile>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="File"/>
</Root>
<Root level="debug">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
\ No newline at end of file
@@ -0,0 +1,38 @@
package wf.doyle.blockbuster;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
* Unit test for simple App.
*/
public class AppTest
extends TestCase
{
* Create the test case
*
* @param testName name of the test case
*/
public AppTest( String testName )
{
super( testName );
}
* @return the suite of tests being tested
*/
public static Test suite()
{
return new TestSuite( AppTest.class );
}
* Rigourous Test :-)
*/
public void testApp()
{
assertTrue( true );
}
}
@@ -0,0 +1,25 @@
// this is a comment, any lines that start with //
// (and blank lines) should be ignored
[CD data]
// data is artist, noOfTracks, playingTime, title, itemCode, cost
James Blunt,15,68, Back to Bedlam, LM003604,498
Duffy,10,73, Rockferry, LM003553,898
Adele,12,19,75, LM003580,798
Robert Plant and Alison Krauss,13,72, Raising Sand, LM003750,898
Goldfrapp,10,72, Seventh Tree, LM003873,1299
Amy Winehouse,11,70, Back To Black, LM003698,698
Jack Johnson,15,67, Sleep Through The Static, LM003773,898
Mark Ronson,14,74, Version, LM003365,698,
Radiohead,10,75, In Rainbows , LM003771,798,
Nick Cave,11,68, Dig!!! Lazarus Dig!!!, LM003751,1199
Nickelback,11,72, All the Right Reasons, LM003915,598
[DVD data]
// data is director, playingTime, title, itemCode, cost
Chris Miller,92, Shrek The Third, LM004314,1026
Robert Zemeckis,114, Beowulf , LM004079,900
@@ -0,0 +1,23 @@
[DVD data]
// none available yet
[CD data]
// data is artist, noOfTracks, playingTime, title, itemCode, cost
Goldfrapp,10,72, Seventh Tree, LM003873,1299
Amy Winehouse,11,70, Back To Black, LM003698,698
Jack Johnson, 15,67, Sleep Through The Static, LM003773,898
[DVD data]
// data is director, playingTime, title, itemCode, cost
Chris Miller,92, Shrek The Third, LM004314,1026
Robert Zemeckis,114, Beowulf , LM004079,900
Phyllida Lloyd,118, Mamma Mia, LM004984,798
Joe Wright,130, Atonement, LM004720,1293
Andrew Adamson,125, The Chronicles of Narnia: Prince Caspian, LM004178,498
[cd data]
// data is artist, noOfTracks, playingTime, title, itemCode, cost
Mark Ronson,14,75, Version, LM003365,698
Radiohead,10,74, In Rainbows , LM003771,798
Nick Cave,11,68, Dig!!! Lazarus Dig!!!, LM003751,1199
Nickelback, 11,68, All the Right Reasons, LM003915,598
@@ -0,0 +1,26 @@
// this is a comment, any lines that start with //
// (and blank lines) should be ignored
[CD data]
// data is artist, noOfTracks, playingTime, title, itemCode, cost, timesBorrowed, onLoan
James Blunt,15,68, Back to Bedlam, LM003604,498,234,true
Duffy,10,73, Rockferry, LM003553,898,90,false
Adele,12,19,75, LM003580,798,87,FALSE
Robert Plant and Alison Krauss,13,72, Raising Sand, LM003750,898,89,tRUE
Goldfrapp,10,72, Seventh Tree, LM003873,1299,9876,true
Amy Winehouse,11,70, Back To Black, LM003698,698,8765,false
Jack Johnson,15,67, Sleep Through The Static, LM003773,898, 54,True
Mark Ronson, 14,74, Version, LM003365,698,56,true
Radiohead,10,75, In Rainbows , LM003771,798,6543,FALSE
Nick Cave,11,68, Dig!!! Lazarus Dig!!!, LM003751,1199,90,False
Nickelback,11,72, All the Right Reasons, LM003915,598,32,true
[DVD data]
// data is director, playingTime, title, itemCode, cost, timesBorrowed, onLoan
Chris Miller,92, Shrek The Third, LM004314,1026,900,TRUE
Robert Zemeckis,114, Beowulf , LM004079,900,87,FALSE
\ No newline at end of file
@@ -0,0 +1,17 @@
// this is a comment, any lines that start with //
// (and blank lines) should be ignored
// data is artist, noOfTracks, playingTime, title, itemCode, cost
James Blunt,15,68, Back to Bedlam, LM003604,498
Duffy,10,73, Rockferry, LM003553,898
Adele,12,19,75, LM003580,798
Robert Plant and Alison Krauss,13,72, Raising Sand, LM003750,898
Goldfrapp,10,72, Seventh Tree, LM003873,1299
Amy Winehouse,11,70, Back To Black, LM003698,698
Jack Johnson,15,67, Sleep Through The Static, LM003773,898
Mark Ronson,14,74, Version, LM003365,698,
Radiohead,10,75, In Rainbows , LM003771,798,
Nick Cave,11,68, Dig!!! Lazarus Dig!!!, LM003751,1199
Nickelback,11,72, All the Right Reasons, LM003915,598
\ No newline at end of file
@@ -0,0 +1,41 @@
// this is a comment, any lines that start with //
// (and blank lines) should be ignored
[Book data]
// data is author, isbn, noOfPages, publisher, title, itemCode, cost, timesBorrowed, onLoan
Barnes and Kolling, 9780131976290,480, Pearson, Objects First with Java, LM002411,3989,781,true
Aho Sethi and Ullman, 9780201101942,795, Addison-Wesley, Compilers: Principles Techniques and Tools, LM002711,599,0,FALSE
Harvey Paul and Jeffrey, 9780130622211,1568, Prentice Hall, C# How to Program, LM002876,4599,45,TRUE
Muster, 9780072193145,1011, McGraw-Hill, Unix Made Easy: The Basics and Beyond (Made Easy), LM002468,6395,0,TRUE
Thomee, 9783540331216,370, Springer Verlag, Galerkin Finite Element Methods for Parabolic Problems, LM002153,4554,0,FALSE
[CD data]
// data is artist, noOfTracks, playingTime, title, itemCode, cost, timesBorrowed, onLoan
James Blunt,15,68, Back to Bedlam, LM003604,498,234,true
Duffy,10,73, Rockferry, LM003553,898,90,false
Adele,12,19,75, LM003580,798,87,FALSE
Robert Plant and Alison Krauss,13,72, Raising Sand, LM003750,898,89,tRUE
Goldfrapp,10,72, Seventh Tree, LM003873,1299,9876,true
Amy Winehouse,11,70, Back To Black, LM003698,698,8765,false
Jack Johnson,15,67, Sleep Through The Static, LM003773,898,54,True
Mark Ronson,14,74, Version, LM003365,698,56,true
Radiohead,10,75, In Rainbows , LM003771,798,6543,FALSE
Nick Cave,11,68, Dig!!! Lazarus Dig!!!, LM003751,1199,90,False
Nickelback,11,72, All the Right Reasons, LM003915,598,32,true
[DVD data]
// data is director, playingTime, title, itemCode, cost, timesBorrowed, onLoan
Chris Miller,92, Shrek The Third, LM004314,1026,900,TRUE
Robert Zemeckis,114, Beowulf , LM004079,900,87,FALSE
Phyllida Lloyd,118, Mamma Mia, LM004984,798,566,true
Joe Wright,130, Atonement, LM004720,1293,66,true
Andrew Adamson,125, The Chronicles of Narnia: Prince Caspian, LM004178,345,45,FALSE
[periodical data]
// data is publicationDate, noOfPages, publisher, title, itemCode, cost, timesBorrowed, onLoan
25-03-08,70, News International, The Times, LM005447,80,0,FALSE
26-03-08,70, News International, The Times, LM005002,80,0,false
26-03-08,60, Associated Newspapers, Daily Mail, LM005177,40,0,false
@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="[%d{HH:mm:ss}] [%logger{36}] [%replace{%-5level}{\s}{}] %msg%n"/>
</Console>
<RollingRandomAccessFile name="File" fileName="logs/latest.log" filePattern="logs/%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout pattern="[%d{HH:mm:ss}] [%t/%level]: %msg%n" />
<Policies>
<TimeBasedTriggeringPolicy />
<OnStartupTriggeringPolicy />
</Policies>
</RollingRandomAccessFile>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="File"/>
</Root>
<Root level="debug">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
\ No newline at end of file
Binary files /dev/null and b/target/classes/wf/doyle/blockbuster/App.class differ
Binary files /dev/null and b/target/classes/wf/doyle/blockbuster/file/FileReader.class differ
Binary files /dev/null and b/target/classes/wf/doyle/blockbuster/file/FileWriter$1.class differ
Binary files /dev/null and b/target/classes/wf/doyle/blockbuster/file/FileWriter.class differ
Binary files /dev/null and b/target/classes/wf/doyle/blockbuster/gui/GUI$1.class differ
Binary files /dev/null and b/target/classes/wf/doyle/blockbuster/gui/GUI.class differ
Binary files /dev/null and b/target/classes/wf/doyle/blockbuster/item/AudioVisualItem.class differ
Binary files /dev/null and b/target/classes/wf/doyle/blockbuster/item/LibraryItem.class differ
Binary files /dev/null and b/target/classes/wf/doyle/blockbuster/item/PrintedItem.class differ
Binary files /dev/null and b/target/classes/wf/doyle/blockbuster/item/items/audiovisual/CD.class differ
Binary files /dev/null and b/target/classes/wf/doyle/blockbuster/item/items/audiovisual/DVD.class differ
Binary files /dev/null and b/target/classes/wf/doyle/blockbuster/item/items/printed/Book.class differ
Binary files /dev/null and b/target/classes/wf/doyle/blockbuster/item/items/printed/Periodical.class differ
Binary files /dev/null and b/target/classes/wf/doyle/blockbuster/util/EnumLineType.class differ
Binary files /dev/null and b/target/classes/wf/doyle/blockbuster/util/Library$1.class differ
Binary files /dev/null and b/target/classes/wf/doyle/blockbuster/util/Library.class differ
Binary files /dev/null and b/target/classes/wf/doyle/blockbuster/util/User.class differ
Binary files /dev/null and b/target/test-classes/wf/doyle/blockbuster/AppTest.class differ