Repository: Britooo/looca-api Branch: main Commit: 4279ca1fd1f1 Files: 34 Total size: 117.4 KB Directory structure: gitextract_xk47aj25/ ├── .classpath ├── .gitignore ├── .project ├── .settings/ │ ├── org.eclipse.core.resources.prefs │ ├── org.eclipse.jdt.apt.core.prefs │ ├── org.eclipse.jdt.core.prefs │ └── org.eclipse.m2e.core.prefs ├── .vscode/ │ └── settings.json ├── LICENSE ├── README.md ├── pom.xml ├── pom.xml.versionsBackup └── src/ └── main/ └── java/ └── com/ └── github/ └── britooo/ └── looca/ └── api/ ├── core/ │ └── Looca.java ├── group/ │ ├── discos/ │ │ ├── Disco.java │ │ ├── DiscoGrupo.java │ │ └── Volume.java │ ├── dispositivos/ │ │ ├── DispositivoUsb.java │ │ └── DispositivosUsbGrupo.java │ ├── janelas/ │ │ ├── Janela.java │ │ └── JanelaGrupo.java │ ├── memoria/ │ │ └── Memoria.java │ ├── processador/ │ │ ├── Processador.java │ │ └── ProcessadorCacheLoader.java │ ├── processos/ │ │ ├── Processo.java │ │ └── ProcessoGrupo.java │ ├── rede/ │ │ ├── Rede.java │ │ ├── RedeInterface.java │ │ ├── RedeInterfaceGroup.java │ │ └── RedeParametros.java │ ├── servicos/ │ │ ├── Servico.java │ │ └── ServicoGrupo.java │ ├── sistema/ │ │ └── Sistema.java │ └── temperatura/ │ └── Temperatura.java └── util/ └── Conversor.java ================================================ FILE CONTENTS ================================================ ================================================ FILE: .classpath ================================================ ================================================ FILE: .gitignore ================================================ # Compiled class file *.class # Log file *.log # BlueJ files *.ctxt # Mobile Tools for Java (J2ME) .mtj.tmp/ # Package Files # *.jar *.war *.nar *.ear *.zip *.tar.gz *.rar # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml hs_err_pid* .idea *.iml ./target target/ ================================================ FILE: .project ================================================ looca-api org.eclipse.jdt.core.javabuilder org.eclipse.m2e.core.maven2Builder org.eclipse.jdt.core.javanature org.eclipse.m2e.core.maven2Nature 1680496548325 30 org.eclipse.core.resources.regexFilterMatcher node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ ================================================ FILE: .settings/org.eclipse.core.resources.prefs ================================================ eclipse.preferences.version=1 encoding//src/main/java=UTF-8 encoding//src/test/java=UTF-8 encoding/=UTF-8 ================================================ FILE: .settings/org.eclipse.jdt.apt.core.prefs ================================================ eclipse.preferences.version=1 org.eclipse.jdt.apt.aptEnabled=false ================================================ FILE: .settings/org.eclipse.jdt.core.prefs ================================================ eclipse.preferences.version=1 enableParallelJavaIndexSearch=true org.eclipse.jdt.core.builder.annotationPath.allLocations=disabled org.eclipse.jdt.core.builder.cleanOutputFolder=clean org.eclipse.jdt.core.builder.duplicateResourceTask=warning org.eclipse.jdt.core.builder.invalidClasspath=abort org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore org.eclipse.jdt.core.builder.resourceCopyExclusionFilter= org.eclipse.jdt.core.circularClasspath=warning org.eclipse.jdt.core.classpath.exclusionPatterns=enabled org.eclipse.jdt.core.classpath.mainOnlyProjectHasTestOnlyDependency=error org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled org.eclipse.jdt.core.classpath.outputOverlappingAnotherSource=error org.eclipse.jdt.core.codeComplete.argumentPrefixes= org.eclipse.jdt.core.codeComplete.argumentSuffixes= org.eclipse.jdt.core.codeComplete.camelCaseMatch=enabled org.eclipse.jdt.core.codeComplete.deprecationCheck=disabled org.eclipse.jdt.core.codeComplete.discouragedReferenceCheck=disabled org.eclipse.jdt.core.codeComplete.fieldPrefixes= org.eclipse.jdt.core.codeComplete.fieldSuffixes= org.eclipse.jdt.core.codeComplete.forbiddenReferenceCheck=enabled org.eclipse.jdt.core.codeComplete.forceImplicitQualification=disabled org.eclipse.jdt.core.codeComplete.localPrefixes= org.eclipse.jdt.core.codeComplete.localSuffixes= org.eclipse.jdt.core.codeComplete.staticFieldPrefixes= org.eclipse.jdt.core.codeComplete.staticFieldSuffixes= org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes= org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes= org.eclipse.jdt.core.codeComplete.subwordMatch=disabled org.eclipse.jdt.core.codeComplete.suggestStaticImports=enabled org.eclipse.jdt.core.codeComplete.visibilityCheck=enabled org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore org.eclipse.jdt.core.compiler.annotation.nonnull=javax.annotation.Nonnull org.eclipse.jdt.core.compiler.annotation.nonnull.secondary= org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary= org.eclipse.jdt.core.compiler.annotation.nullable=javax.annotation.Nullable org.eclipse.jdt.core.compiler.annotation.nullable.secondary= org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.lambda.genericSignature=do not generate org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate org.eclipse.jdt.core.compiler.codegen.shareCommonFinallyBlocks=disabled org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve org.eclipse.jdt.core.compiler.compliance=11 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.emulateJavacBug8031744=enabled org.eclipse.jdt.core.compiler.generateClassFiles=enabled org.eclipse.jdt.core.compiler.maxProblemPerUnit=100 org.eclipse.jdt.core.compiler.problem.APILeak=warning org.eclipse.jdt.core.compiler.problem.annotatedTypeArgumentToUnannotated=info 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.deadCodeInTrivialIfStatement=disabled 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.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore 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=ignore org.eclipse.jdt.core.compiler.problem.invalidJavadoc=ignore org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=disabled org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public 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=ignore org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore org.eclipse.jdt.core.compiler.problem.missingJavadocTagsMethodTypeParameters=disabled org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled org.eclipse.jdt.core.compiler.problem.missingSerialVersion=ignore 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.nonnullTypeVariableFromLegacyInvocation=warning org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=warning org.eclipse.jdt.core.compiler.problem.nullReference=warning org.eclipse.jdt.core.compiler.problem.nullSpecViolation=warning org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning org.eclipse.jdt.core.compiler.problem.overridingMethodWithoutSuperInvocation=ignore org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning 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=warning org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=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.suppressWarningsNotFullyAnalysed=info org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore org.eclipse.jdt.core.compiler.problem.tasks=warning org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=ignore org.eclipse.jdt.core.compiler.problem.uninternedIdentityComparison=disabled org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=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.unusedExceptionParameter=ignore 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.unusedTypeArgumentsForMethodInvocation=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.processAnnotations=disabled org.eclipse.jdt.core.compiler.release=disabled org.eclipse.jdt.core.compiler.source=11 org.eclipse.jdt.core.compiler.storeAnnotations=disabled org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,NORMAL org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME,XXX org.eclipse.jdt.core.computeJavaBuildOrder=ignore org.eclipse.jdt.core.encoding=utf8 org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns=false org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647 org.eclipse.jdt.core.formatter.align_selector_in_method_invocation_on_expression_first_line=true org.eclipse.jdt.core.formatter.align_type_members_on_columns=false org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns=false org.eclipse.jdt.core.formatter.align_with_spaces=false org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16 org.eclipse.jdt.core.formatter.alignment_for_annotations_on_enum_constant=49 org.eclipse.jdt.core.formatter.alignment_for_annotations_on_field=49 org.eclipse.jdt.core.formatter.alignment_for_annotations_on_local_variable=49 org.eclipse.jdt.core.formatter.alignment_for_annotations_on_method=49 org.eclipse.jdt.core.formatter.alignment_for_annotations_on_package=49 org.eclipse.jdt.core.formatter.alignment_for_annotations_on_parameter=0 org.eclipse.jdt.core.formatter.alignment_for_annotations_on_type=49 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16 org.eclipse.jdt.core.formatter.alignment_for_assertion_message=16 org.eclipse.jdt.core.formatter.alignment_for_assignment=0 org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=16 org.eclipse.jdt.core.formatter.alignment_for_compact_if=16 org.eclipse.jdt.core.formatter.alignment_for_compact_loops=16 org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80 org.eclipse.jdt.core.formatter.alignment_for_conditional_expression_chain=0 org.eclipse.jdt.core.formatter.alignment_for_enum_constants=16 org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header=0 org.eclipse.jdt.core.formatter.alignment_for_expressions_in_switch_case_with_arrow=16 org.eclipse.jdt.core.formatter.alignment_for_expressions_in_switch_case_with_colon=16 org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16 org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0 org.eclipse.jdt.core.formatter.alignment_for_module_statements=16 org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16 org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references=0 org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 org.eclipse.jdt.core.formatter.alignment_for_record_components=16 org.eclipse.jdt.core.formatter.alignment_for_relational_operator=0 org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80 org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16 org.eclipse.jdt.core.formatter.alignment_for_shift_operator=0 org.eclipse.jdt.core.formatter.alignment_for_string_concatenation=16 org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_record_declaration=16 org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 org.eclipse.jdt.core.formatter.alignment_for_switch_case_with_arrow=20 org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 org.eclipse.jdt.core.formatter.alignment_for_type_annotations=0 org.eclipse.jdt.core.formatter.alignment_for_type_arguments=0 org.eclipse.jdt.core.formatter.alignment_for_type_parameters=0 org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16 org.eclipse.jdt.core.formatter.blank_lines_after_imports=1 org.eclipse.jdt.core.formatter.blank_lines_after_last_class_body_declaration=0 org.eclipse.jdt.core.formatter.blank_lines_after_package=1 org.eclipse.jdt.core.formatter.blank_lines_before_abstract_method=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_statement_group_in_switch=0 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=end_of_line org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_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=end_of_line org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_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=end_of_line org.eclipse.jdt.core.formatter.brace_position_for_record_constructor=end_of_line org.eclipse.jdt.core.formatter.brace_position_for_record_declaration=end_of_line org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped=true org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions=false org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position=true org.eclipse.jdt.core.formatter.comment.format_block_comments=true org.eclipse.jdt.core.formatter.comment.format_header=false 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=false org.eclipse.jdt.core.formatter.comment.indent_root_tags=false org.eclipse.jdt.core.formatter.comment.indent_tag_description=false org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert org.eclipse.jdt.core.formatter.comment.insert_new_line_between_different_tags=do not insert org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not 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=false 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_record_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=4 org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant=insert 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=do not 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=do not insert org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert org.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_case=insert org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_default=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_bitwise_operator=insert org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=do not 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_permitted_types=insert org.eclipse.jdt.core.formatter.insert_space_after_comma_in_record_components=insert org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert org.eclipse.jdt.core.formatter.insert_space_after_comma_in_switch_case_expressions=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=insert org.eclipse.jdt.core.formatter.insert_space_after_logical_operator=insert org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=insert org.eclipse.jdt.core.formatter.insert_space_after_not_operator=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=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_record_declaration=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_relational_operator=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_shift_operator=insert org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_case=insert org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_default=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_bitwise_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=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_record_declaration=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_permitted_types=do not insert org.eclipse.jdt.core.formatter.insert_space_before_comma_in_record_components=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_switch_case_expressions=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=insert org.eclipse.jdt.core.formatter.insert_space_before_logical_operator=insert org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=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=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_record_constructor=insert org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_record_declaration=insert org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=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=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=insert org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=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=do not insert org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_record_declaration=do not insert org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=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=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_relational_operator=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_shift_operator=insert org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=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=false org.eclipse.jdt.core.formatter.join_wrapped_lines=false org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line=one_line_never org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line=one_line_never org.eclipse.jdt.core.formatter.keep_code_block_on_one_line=one_line_never 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_enum_constant_declaration_on_one_line=one_line_never org.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line=one_line_never org.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line=one_line_never org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false org.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line=one_line_never org.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line=one_line_never org.eclipse.jdt.core.formatter.keep_method_body_on_one_line=one_line_never org.eclipse.jdt.core.formatter.keep_record_constructor_on_one_line=one_line_never org.eclipse.jdt.core.formatter.keep_record_declaration_on_one_line=one_line_never org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line=false org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line=false org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line=false org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line=false org.eclipse.jdt.core.formatter.keep_switch_body_block_on_one_line=one_line_never org.eclipse.jdt.core.formatter.keep_switch_case_with_arrow_on_one_line=one_line_never org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line=one_line_never org.eclipse.jdt.core.formatter.lineSplit=120 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_after_code_block=0 org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_code_block=0 org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_code_block=0 org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_method_body=0 org.eclipse.jdt.core.formatter.number_of_blank_lines_before_code_block=0 org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1 org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation=common_lines org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause=common_lines org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration=common_lines org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment=common_lines org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement=common_lines org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration=common_lines org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration=common_lines org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation=common_lines org.eclipse.jdt.core.formatter.parentheses_positions_in_record_declaration=common_lines org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement=common_lines org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause=common_lines org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true org.eclipse.jdt.core.formatter.tabulation.char=space org.eclipse.jdt.core.formatter.tabulation.size=2 org.eclipse.jdt.core.formatter.text_block_indentation=0 org.eclipse.jdt.core.formatter.use_on_off_tags=true org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false org.eclipse.jdt.core.formatter.wrap_before_additive_operator=true org.eclipse.jdt.core.formatter.wrap_before_assertion_message_operator=true org.eclipse.jdt.core.formatter.wrap_before_assignment_operator=false org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true org.eclipse.jdt.core.formatter.wrap_before_conditional_operator=true org.eclipse.jdt.core.formatter.wrap_before_logical_operator=true org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true org.eclipse.jdt.core.formatter.wrap_before_relational_operator=true org.eclipse.jdt.core.formatter.wrap_before_shift_operator=true org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true org.eclipse.jdt.core.formatter.wrap_before_switch_case_arrow_operator=false org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true org.eclipse.jdt.core.incompatibleJDKLevel=ignore org.eclipse.jdt.core.incompleteClasspath=error org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter org.eclipse.jdt.core.timeoutForParameterNameFromAttachedJavadoc=50 ================================================ FILE: .settings/org.eclipse.m2e.core.prefs ================================================ activeProfiles= eclipse.preferences.version=1 resolveWorkspaceProjects=true version=1 ================================================ FILE: .vscode/settings.json ================================================ { "java.configuration.updateBuildConfiguration": "interactive" } ================================================ FILE: LICENSE ================================================ MIT License Copyright (c) 2021 Diego Brito Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: README.md ================================================ [![Looca API](./readme/readmes.gif)]() # Log of Computer Activity ### **Looca** é uma API que coleta dados de maquina e foi desenvolvida para facilitar o aprendizado em contextos acadêmicos. Esse projeto visa ajudar os alunos da Faculdade [@SPTech](https://github.com/BandTec) em projetos na disciplina de Pesquisa e Inovação. # ![Badge](https://img.shields.io/badge/Code-Java-F76911?&logo=java) ![Badge](https://img.shields.io/badge/compiler-maven-4c9d1flogo=maven) [![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.github.nyholmniklas/arithmetic/badge.svg)](https://search.maven.org/artifact/com.github.britooo/looca-api) # ## Instalação **Adicione no pom.xml**: ```xml com.github.britooo looca-api --INSIRA A VERSÃO ATUAL-- ``` **Execute no terminal (linha de comando):** ``` $ mvn install ``` # ## Uso **Crie uma instância do objeto Looca:** ```java Looca looca = new Looca(); ``` **Esse objeto disponibiliza os seguintes recursos:** ```java private final Sistema sistema; private final Memoria memoria; private final Processador processador; private final Temperatura temperatura; private final DiscoGrupo grupoDeDiscos; private final ServicoGrupo grupoDeServicos; private final ProcessoGrupo grupoDeProcessos; ``` **Coletando dados do sistema operacional** Para coletar os dados da máquina, devemos utilizar os **getters** disponíveis no objeto Looca, por exemplo, para coletar os dados do sistema operacional, utilizamos o **```getSistema()```**, que devolve um objeto do tipo Sistema: ```java Sistema sistema = looca.getSistema(); ``` O objeto Sistema por sua vez, também possui **getters** que devolvem informações do sistema: ```java sistema.getPermissao(); sistema.getFabricante(); sistema.getArquitetura(); sistema.getInicializado(); sistema.getSistemaOperacional(); ``` Para exibir no console as informações do sistema, basta imprimir o objeto: ```java System.out.println(sistema); ``` Saída do console: ``` Sistema operacional: Ubuntu Fabricante: GNU/Linux Arquitetura: 64 bits. Inicializado: 2021-03-13T16:07:18Z Tempo de atividade: 3 days, 06:55:53 Permissões: Executando como usuário padrão ``` **Trabalhando com os grupos** Para lidar com objetos que retornam mais de uma instância (lista) da informação desejada, utilizamos os grupos, que gerenciam essas informações, para obte-los, utilizamos o **```getGrupoNomeGrupo()```** (Discos, Processos ou Servicos), exemplo: ```java //Criação do gerenciador DiscoGrupo grupoDeDiscos = looca.getGrupoDeDiscos(); //Obtendo lista de discos a partir do getter List discos = grupoDeDiscos.getDiscos(); ``` Exibindo as informações de cada disco: ```java for (Disco disco : discos) { System.out.println(disco); } ``` ## Desenvolvedores # - @Britoo - @miniguiti ## Licença # [MIT](LICENSE) © 2021 Bandtec Digital School ================================================ FILE: pom.xml ================================================ 4.0.0 com.github.britooo looca-api 2.2.0 jar UTF-8 11 11 Log of computer activity - Looca API for collecting computer data for educational purposes. https://github.com/Britooo/looca-api org.apache.maven.plugins maven-compiler-plugin 11 11 org.sonatype.plugins nexus-staging-maven-plugin 1.6.7 true ossrh https://s01.oss.sonatype.org/ true org.apache.maven.plugins maven-source-plugin 2.2.1 attach-sources jar-no-fork org.apache.maven.plugins maven-javadoc-plugin false 2.9.1 attach-javadocs jar org.apache.maven.plugins maven-gpg-plugin 1.5 sign-artifacts verify sign ossrh https://s01.oss.sonatype.org/content/repositories/snapshots MIT License http://www.opensource.org/licenses/mit-license.php Diego Brito diego.lima@bandtec.com.br com.github.britooo https://github.com/Britooo/looca-api scm:git:git://github.com/Britooo/looca-api.git scm:git:ssh://github.com:Britooo/looca-api.git https://github.com/Britooo/looca-api com.github.oshi oshi-core 6.1.5 com.google.guava guava 31.1-jre org.slf4j slf4j-api 1.7.30 org.slf4j slf4j-simple 1.7.30 ================================================ FILE: pom.xml.versionsBackup ================================================ 4.0.0 com.github.britooo looca-api 1.0-SNAPSHOT jar UTF-8 11 11 Log of computer activity - Looca API for collecting computer data for educational purposes. https://github.com/Britooo/looca-api org.apache.maven.plugins maven-compiler-plugin 11 11 org.sonatype.plugins nexus-staging-maven-plugin 1.6.7 true ossrh https://oss.sonatype.org/ true org.apache.maven.plugins maven-source-plugin 2.2.1 attach-sources jar-no-fork org.apache.maven.plugins maven-javadoc-plugin false 2.9.1 attach-javadocs jar org.apache.maven.plugins maven-gpg-plugin 1.5 sign-artifacts verify sign ossrh https://s01.oss.sonatype.org/content/repositories/snapshots ossrh https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/ MIT License http://www.opensource.org/licenses/mit-license.php Diego Brito diego.lima@bandtec.com.br com.github.britooo https://github.com/Britooo/looca-api scm:git:git://github.com/Britooo/looca-api.git scm:git:ssh://github.com:Britooo/looca-api.git https://github.com/Britooo/looca-api com.github.oshi oshi-core 6.1.5 org.slf4j slf4j-api 1.7.30 org.slf4j slf4j-simple 1.7.30 ================================================ FILE: src/main/java/com/github/britooo/looca/api/core/Looca.java ================================================ package com.github.britooo.looca.api.core; import com.github.britooo.looca.api.group.discos.DiscoGrupo; import com.github.britooo.looca.api.group.dispositivos.DispositivosUsbGrupo; import com.github.britooo.looca.api.group.janelas.JanelaGrupo; import com.github.britooo.looca.api.group.memoria.Memoria; import com.github.britooo.looca.api.group.processador.Processador; import com.github.britooo.looca.api.group.processos.ProcessoGrupo; import com.github.britooo.looca.api.group.rede.Rede; import com.github.britooo.looca.api.group.servicos.ServicoGrupo; import com.github.britooo.looca.api.group.sistema.Sistema; import com.github.britooo.looca.api.group.temperatura.Temperatura; import oshi.SystemInfo; public class Looca { private final Sistema sistema; private final Memoria memoria; private final Processador processador; private final Temperatura temperatura; private final Rede rede; private final DiscoGrupo grupoDeDiscos; private final ServicoGrupo grupoDeServicos; private final ProcessoGrupo grupoDeProcessos; private final JanelaGrupo grupoDeJanelas; private final DispositivosUsbGrupo grupoDeDispositivosUsb; public Looca() { SystemInfo si = new SystemInfo(); this.sistema = new Sistema(); this.memoria = new Memoria(); this.processador = new Processador(); this.temperatura = new Temperatura(); this.rede = new Rede(si); this.grupoDeDiscos = new DiscoGrupo(); this.grupoDeServicos = new ServicoGrupo(); this.grupoDeProcessos = new ProcessoGrupo(); this.grupoDeJanelas = new JanelaGrupo(si); this.grupoDeDispositivosUsb = new DispositivosUsbGrupo(); } /** * Retorna um Objeto de Sistema que contém métodos relacionados a coleta de informações do Sistema Operacional. * @return Objeto Sistema. */ public Sistema getSistema() { return sistema; } /** * Retorna um Objeto de Memoria que contém métodos relacionados a coleta de informações da Memória RAM. * @return Objeto Memoria. */ public Memoria getMemoria() { return memoria; } /** * Retorna um Objeto de Processador que contém métodos relacionados a coleta de informações do Processador. * @return Objeto Processador. */ public Processador getProcessador() { return processador; } /** * Retorna um Objeto de Temperatura que contém métodos relacionados a coleta de informações de Temperatura. * @return Objeto Temperatura. */ public Temperatura getTemperatura() { return temperatura; } /** * Retorna um Objeto de DiscoGrupo que contém métodos relacionados a coleta de informações do Grupo de Discos. * @return Objeto DiscoGrupo. */ public DiscoGrupo getGrupoDeDiscos() { return grupoDeDiscos; } /** * Retorna um Objeto de ServicoGrupo que contém métodos relacionados a coleta de informações do Grupo de Serviços. * @return Objeto ServicoGrupo. */ public ServicoGrupo getGrupoDeServicos() { return grupoDeServicos; } /** * Retorna um Objeto de ProcessoGrupo que contém métodos relacionados a coleta de informações do Grupo de Processos. * @return Objeto ProcessoGrupo. */ public ProcessoGrupo getGrupoDeProcessos() { return grupoDeProcessos; } /** * Retorna um Objeto de DispositivosUsbGrupo que contém métodos relacionados a coleta de informações do Grupo de Dispositivos USB. * @return Objeto DispositivosUsbGrupo. */ public DispositivosUsbGrupo getDispositivosUsbGrupo() { return grupoDeDispositivosUsb; } /** * Retorna um Objeto de Rede que contém métodos relacionados a coleta de informações de Rede. * @return Objeto Rede. */ public Rede getRede() { return rede; } /** * Retorna um Objeto de JanelaGrupo que contém métodos relacionados a coleta de informações do * Grupo de Janelas do computador. * @return Objeto Rede. */ public JanelaGrupo getGrupoDeJanelas() { return grupoDeJanelas; } } ================================================ FILE: src/main/java/com/github/britooo/looca/api/group/discos/Disco.java ================================================ package com.github.britooo.looca.api.group.discos; import oshi.hardware.HWDiskStore; public class Disco { private final HWDiskStore disco; public Disco(HWDiskStore disco) { this.disco = disco; } /** * Retorna o nome do disco. * * @return Nome do disco. */ public String getNome() { return disco.getName(); } /** * Retorna o modelo do disco. * * @return Modelo do disco. */ public String getModelo() { return disco.getModel(); } /** * Retorna o número do serial do disco, se disponível. * * @return Número serial do disco, se disponível. */ public String getSerial() { return disco.getSerial(); } /** * Retorna o tamanho do disco em bytes. * * @return Tamanho do disco em bytes. */ public Long getTamanho() { return disco.getSize(); } /** * Retorna o número de leituras do disco. * * @return Número de leituras do disco. */ public Long getLeituras() { return disco.getReads(); } /** * Retorna o número de bytes lidos pelo disco. * * @return Número de bytes lidos pelo disco. */ public Long getBytesDeLeitura() { return disco.getReadBytes(); } /** * Retorna o número de escritas no disco. * * @return Número de escritas no disco. */ public Long getEscritas() { return disco.getWrites(); } /** * Retorna o número de bytes escritos no disco. * * @return Número de bytes escritos no disco. */ public Long getBytesDeEscritas() { return disco.getWriteBytes(); } /** *

Retorna o comprimento da fila de disco (E/S's em andamento).

*
*

Inclui solicitações de E/S que foram emitidas para o driver de dispositivo, * mas ainda não foram concluídas. Não compatível com macOS.

* * @return Comprimento da fila de disco (E/S's em andamento). */ public Long getTamanhoAtualDaFila() { return disco.getCurrentQueueLength(); } /** * Retorna o tempo gasto lendo ou escrevendo no disco, em milissegundos. * * @return Tempo gasto lendo ou escrevendo no disco, em milissegundos. */ public Long getTempoDeTransferencia() { return disco.getTransferTime(); } /** * Retorna uma String com todas as informações relacionadas ao Disco. * @return String com todas as informações relacionadas ao Disco. */ @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("\nNome: ") .append(getNome()) .append("\n"); sb.append("Modelo: ") .append(getModelo()) .append("\n"); sb.append("Serial: ") .append(getSerial()) .append("\n"); sb.append("Tamanho: ") .append(getTamanho()) .append("\n"); sb.append("Leituras: ") .append(getLeituras()) .append("\n"); sb.append("Bytes de leitura: ") .append(getBytesDeLeitura()) .append("\n"); sb.append("Escritas: ") .append(getEscritas()) .append("\n"); sb.append("Bytes de escritas: ") .append(getBytesDeEscritas()) .append("\n"); sb.append("Tamanho atual da fila: ") .append(getTamanhoAtualDaFila()) .append("\n"); sb.append("Tempo de transferência: ") .append(getTempoDeTransferencia()) .append("\n"); return sb.toString(); } } ================================================ FILE: src/main/java/com/github/britooo/looca/api/group/discos/DiscoGrupo.java ================================================ package com.github.britooo.looca.api.group.discos; import java.util.List; import java.util.stream.Collectors; import oshi.SystemInfo; import oshi.hardware.HWDiskStore; import oshi.hardware.HardwareAbstractionLayer; import oshi.software.os.OSFileStore; import oshi.software.os.OperatingSystem; public class DiscoGrupo { private final SystemInfo system = new SystemInfo(); private final OperatingSystem os = system.getOperatingSystem(); private final HardwareAbstractionLayer hal = system.getHardware(); /** * Retorna uma lista de Volume. * * @return Lista de Volume. */ public List getVolumes() { return this.os.getFileSystem() .getFileStores() .stream() .map(DiscoGrupo::of) .collect(Collectors.toList()); } /** * Retorna uma lista de Disco. * * @return Lista de Disco. */ public List getDiscos() { return this.hal.getDiskStores().stream() .map(DiscoGrupo::of) .collect(Collectors.toList()); } /** * Retorna o tamanho dos discos somados em bytes. * * @return Tamanho dos discos somados em bytes. */ public Long getTamanhoTotal() { return this.getDiscos().stream() .mapToLong(Disco::getTamanho).sum(); } /** * Retorna a quantidade de discos existentes citados na lista de discos (Contagem total de discos). * * @return Soma total de discos. */ public Integer getQuantidadeDeDiscos() { return this.getDiscos().size(); } /** * Retorna a quantidade de volumes existentes citados na lista de volumes (Contagem total de volumes). * * @return Soma total de volumes. */ public Integer getQuantidadeDeVolumes() { return this.getVolumes().size(); } private static Volume of(OSFileStore volume) { if (volume == null) { return null; } return new Volume(volume); } private static Disco of(HWDiskStore disco) { if (disco == null) { return null; } return new Disco(disco); } } ================================================ FILE: src/main/java/com/github/britooo/looca/api/group/discos/Volume.java ================================================ package com.github.britooo.looca.api.group.discos; import oshi.software.os.OSFileStore; public class Volume { private final OSFileStore volume; public Volume(OSFileStore volume) { this.volume = volume; } /** * Retorna o UUID/GUID do sistema de arquivos. * * @return UUID/GUID do sistema de arquivos. */ public String getUUID() { return this.volume.getUUID(); } /** *

* Nome do sistema de arquivos. Um identificador legível que não necessariamente corresponde * a um caminho no sistema de arquivos. *

* * @return Nome do sistema de arquivos */ public String getNome() { return this.volume.getName(); } /** *

* Nome do volume do sistema de arquivos. Geralmente um caminho que representa o dispositivo * (ex: /dev/foo) que foi montado. *

* * @return Nome do volume do sistema de arquivos */ public String getVolume() { return this.volume.getVolume(); } /** * Retorna espaço/capacidade total da unidade (Em bytes). * * @return Espaço/capacidade total da unidade (Em bytes). */ public Long getTotal() { return this.volume.getTotalSpace(); } /** *

Retorna o espaço livre na unidade.

*
*

Esse espaço não é alocado, mas pode exigir permissões elevadas para gravação (Em bytes).

* * @return Espaço livre na unidade (Em bytes). */ public Long getDisponivel() { return this.volume.getFreeSpace(); } /** * Retorna o tipo do sistema de arquivos (FAT, NTFS, etx2, ext4, etc...). * * @return sistema de arquivos (FAT, NTFS, etx2, ext4, etc...). */ public String getTipo() { return this.volume.getType(); } /** *

Retorna o ponto de montagem do sistema de arquivos.

*
*

O diretório que os usuários normalmente usarão para interagir com o armazenamento de arquivos. * (Exemplo C: no Windows ou / no Linux).

* * @return Ponto de montagem do sistema de arquivos. */ public String getPontoDeMontagem() { return this.volume.getMount(); } /** * Retorna uma String com todas as informações relacionadas ao Volume. * @return String com todas as informações relacionadas ao Volume. */ @Override public String toString() { StringBuilder str = new StringBuilder(); str.append("UUID: ").append(this.getUUID()).append("\n"); str.append("nome: ").append(this.getNome()).append("\n"); str.append("volume: ").append(this.getVolume()).append("\n"); str.append("total: ").append(this.getTotal()).append("\n"); str.append("disponível: ").append(this.getDisponivel()).append("\n"); str.append("tipo: ").append(this.getTipo()).append("\n"); str.append("ponto de montagem: ").append(this.getPontoDeMontagem()).append("\n"); return str.toString(); } } ================================================ FILE: src/main/java/com/github/britooo/looca/api/group/dispositivos/DispositivoUsb.java ================================================ package com.github.britooo.looca.api.group.dispositivos; import oshi.hardware.UsbDevice; public class DispositivoUsb { private final UsbDevice usbDevice; /** * Retorna o nome do dispositivo. * * @return Nome do dispositivo. */ public String getNome() { return usbDevice.getName(); } /** * Retorna o identificador do produto. * * @return O identificador do produto. */ public String getIdProduto() { return usbDevice.getProductId(); } /** * Retorna o numero de serie. * * @return O número de série. */ public String getNumeroDeSerie() { return usbDevice.getSerialNumber(); } /** * Retorna o identificador exclusivo do dispositivo. * * @return O identificador exclusivo do dispositivo. */ public String getIdDispositivoUsbExclusivo() { return usbDevice.getUniqueDeviceId(); } /** * Retorna o nome do fornecedor identificado no dispositivo. * * @return O nome do fornecedor. */ public String getForncecedor() { return usbDevice.getVendor(); } /** * Retorna o identificador do fornecedor. * * @return O identificador do fornecedor. */ public String getIdFornecedor() { return usbDevice.getVendorId(); } public DispositivoUsb(UsbDevice usbDevice) { this.usbDevice = usbDevice; } @Override public String toString() { return String.format("\nNome: %s\nId produto: %s\nNúmero de série: %s\nId de dispositivo exclusivo: %s\nFornecedor: %s\nId fornecedor: %s\n", getNome(), getIdProduto(), getNumeroDeSerie(), getIdDispositivoUsbExclusivo(), getForncecedor(), getIdFornecedor()); } } ================================================ FILE: src/main/java/com/github/britooo/looca/api/group/dispositivos/DispositivosUsbGrupo.java ================================================ package com.github.britooo.looca.api.group.dispositivos; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; import oshi.SystemInfo; import oshi.hardware.HardwareAbstractionLayer; import oshi.hardware.UsbDevice; public class DispositivosUsbGrupo { private final HardwareAbstractionLayer hardwareAbstractionLayer = new SystemInfo().getHardware(); /** * Retorna o número de dispositivos USB. * * @return Número de dispositivos identificados como USB. */ public Integer getTotalDispositvosUsb() { int totalDispositivosConectados = 0; for(UsbDevice item : this.hardwareAbstractionLayer.getUsbDevices(false)) { totalDispositivosConectados += item.getConnectedDevices().size(); } return totalDispositivosConectados; } /** * Retorna o número de dispositivos USB conectados. * * @return Número de dispositivos conectados identificados como USB. */ public Integer getTotalDispositvosUsbConectados() { int totalDispositivosConectados = 0; for(UsbDevice item : this.hardwareAbstractionLayer.getUsbDevices(true)) { totalDispositivosConectados += item.getConnectedDevices().size(); } return totalDispositivosConectados; } /** * Retorna os dispositivos USB. * * @return Dispositivos identificados como USB. */ public List getDispositivosUsb() { List dispositivoUsbList = new ArrayList<>(); for(UsbDevice item : this.hardwareAbstractionLayer.getUsbDevices(false)) { dispositivoUsbList.add(DispositivosUsbGrupo.of(item)); } return dispositivoUsbList; } /** * Retorna os dispositivos USB conectados. * * @return Dispositivos conectados identificados como USB. */ public List getDispositivosUsbConectados() { List dispositivoUsbList = new ArrayList<>(); for(UsbDevice item : this.hardwareAbstractionLayer.getUsbDevices(true)) { for (UsbDevice usbDevice : item.getConnectedDevices()) { dispositivoUsbList.add(DispositivosUsbGrupo.of(usbDevice)); } } return dispositivoUsbList; } private static DispositivoUsb of(UsbDevice usbDevice) { if (usbDevice == null) { return null; } return new DispositivoUsb(usbDevice); } } ================================================ FILE: src/main/java/com/github/britooo/looca/api/group/janelas/Janela.java ================================================ package com.github.britooo.looca.api.group.janelas; import oshi.software.os.OSDesktopWindow; import java.awt.*; public class Janela { private final OSDesktopWindow janela; public Janela(OSDesktopWindow janela) { this.janela = janela; } public static Janela of(OSDesktopWindow janela) { if (janela == null) { return null; } return new Janela(janela); } /** * Retorna o ID do processo do qual essa janela pertence. * * @return ID do processo. */ public Long getPid() { return this.janela.getOwningProcessId(); } /** * Retorna o identificador do sistema operacional, ID da janela ou outro identificador exclusivo para esta janela. * * @return Identificador da janela. */ public Long getJanelaId() { return this.janela.getWindowId(); } /** * Retorna o título da janela se existir. * * @return Título da janela. */ public String getTitulo() { return this.janela.getTitle(); } /** * Retorna o nome do comando (possivelmente o caminho completo do arquivo) do programa executável da janela, * se conhecido. * * @return Comando do programa executável ou caminho do arquivo executável. */ public String getComando() { return this.janela.getCommand(); } /** * Retorna um Objeto {@link Rectangle} que representa a localização e o tamanho da janela. * * @return Localização e tamanho da janela. * @see Rectangle */ public Rectangle getLocalizacaoETamanho() { return this.janela.getLocAndSize(); } /** * Retorna se a janela está visível para o usuário. * * @return true se a janela está visível para o usuário, caso contrário false. */ public Boolean isVisivel() { return this.janela.isVisible(); } @Override public String toString() { final StringBuilder sb = new StringBuilder("\n"); sb.append("PID: ").append(getPid()).append("\n"); sb.append("Id da janela: ").append(getJanelaId()).append("\n"); sb.append("Título: ").append(getTitulo()).append("\n"); sb.append("Comando: ").append(getComando()).append("\n"); sb.append("Localização: ").append(getLocalizacaoETamanho()).append("\n"); sb.append("Visível: ").append(isVisivel()).append("\n"); return sb.toString(); } } ================================================ FILE: src/main/java/com/github/britooo/looca/api/group/janelas/JanelaGrupo.java ================================================ package com.github.britooo.looca.api.group.janelas; import oshi.SystemInfo; import oshi.software.os.OperatingSystem; import java.util.List; import java.util.stream.Collectors; public class JanelaGrupo { private final OperatingSystem so; public JanelaGrupo(SystemInfo si) { this.so = si.getOperatingSystem(); } /** * Retorna uma lista de Janelas visíveis e invisíveis abertas no sistema operacional. * * @return Lista de janelas. */ public List getJanelas() { return so.getDesktopWindows(false).stream() .map(Janela::of) .collect(Collectors.toList()); } /** * Retorna uma lista de Janelas, apenas com as janelas visíveis no sistema operacional. * * @return Lista de janelas. */ public List getJanelasVisiveis() { return so.getDesktopWindows(true).stream() .map(Janela::of) .collect(Collectors.toList()); } /** * Retorna a quantidade total de Janelas visíveis e invisíveis no sistema operacional. * * @return Total de janelas. */ public Integer getTotalJanelas() { return so.getDesktopWindows(false).size(); } /** * Retorna a quantidade total de Janelas visíveis no sistema operacional. * * @return Total de janelas. */ public Integer getTotalJanelasVisiveis() { return so.getDesktopWindows(true).size(); } } ================================================ FILE: src/main/java/com/github/britooo/looca/api/group/memoria/Memoria.java ================================================ package com.github.britooo.looca.api.group.memoria; import oshi.SystemInfo; import oshi.hardware.HardwareAbstractionLayer; import com.github.britooo.looca.api.util.Conversor; public class Memoria { private final HardwareAbstractionLayer hardware = new SystemInfo().getHardware(); /** * Retorna a quantidade de memória física atualmente disponível, em bytes. * * @return Quantidade de memória física atualmente disponível, em bytes. */ public Long getDisponivel() { return this.hardware.getMemory().getAvailable(); } /** * Retorna a quantidade de memória física real, em bytes. * * @return Quantidade de memória física real, em bytes. */ public Long getTotal() { return this.hardware.getMemory().getTotal(); } /** * Retorna a quantidade de memória em uso, em bytes. * * @return Quantidade de memória em uso, em bytes. */ public Long getEmUso() { return this.getTotal() - this.getDisponivel(); } /** * Retorna uma String com todas as informações relacionadas a Memória. * @return String com todas as informações relacionadas a Memória. */ @Override public String toString() { final StringBuilder sb = new StringBuilder("Memoria").append("\n"); sb.append("Em uso: ") .append(Conversor.formatarBytes(getEmUso())) .append("\n"); sb.append("Disponível: ") .append(Conversor.formatarBytes(getDisponivel())) .append("\n"); sb.append("Total: ") .append(Conversor.formatarBytes(getTotal())) .append("\n"); return sb.toString(); } } ================================================ FILE: src/main/java/com/github/britooo/looca/api/group/processador/Processador.java ================================================ package com.github.britooo.looca.api.group.processador; import oshi.SystemInfo; import oshi.hardware.CentralProcessor; public class Processador { private final CentralProcessor processador = new SystemInfo().getHardware().getProcessor(); private final ProcessadorCacheLoader processadorCacheLoader = new ProcessadorCacheLoader(); /** * Retorna o nome do Fornecedor do processador. * * @return Nome do Fornecedor do processador. */ public String getFabricante() { return this.processador.getProcessorIdentifier().getVendor(); } /** * Retorna o nome do Processador (Exemplo: Name, eg. Intel(R) Core(TM)2 Duo CPU T7300 @ 2.00GHz). * * @return Nome do Processador. */ public String getNome() { return this.processador.getProcessorIdentifier().getName(); } /** *

Retorna o ID do processador.

*
*

Esta é uma String hexadecimal representando um valor de 8 bytes, * normalmente obtido usando o opcode CPUID com o registrador EAX definido como 1. * Os primeiros quatro bytes são o conteúdo resultante do registrador EAX, * que é a assinatura do processador, representada em legível por humanos. * Os quatro bytes restantes são o conteúdo do registrador EDX, contendo sinalizadores de recursos. * Para processadores que não suportam o opcode CPUID, * este campo é preenchido com uma String hexadecimal comparável. *

Por exemplo, os processadores ARM preencherão os primeiros 32 bytes com o MIDR. * Os processadores AIX PowerPC retornarão o ID da máquina.

*
*

NOTA: A ordem dos bytes retornados depende da plataforma e do software. * Os valores podem estar na ordem Big Endian ou Little Endian.

*
*

NOTA: Se o Looca não conseguir determinar o ProcessorID a partir de fontes nativas, * ele tentará reconstruir um a partir das informações disponíveis no identificador do processador.

* * @return ID do processador. */ public String getId() { return this.processador.getProcessorIdentifier().getProcessorID(); } /** * Retorna o identificador, por exemplo: Família x86 6 Modelo 15 Etapa 10. * Para processadores diferentes de Intel ou AMD, essa String é preenchida com valores comparáveis. * * @return Identificador. */ public String getIdentificador() { return this.processador.getProcessorIdentifier().getIdentifier(); } /** * Retorna a microarquitetura do processador, se conhecida. * Caso contrário retorna a constante: Constant.UNKNOWN * * @return Microarquitetura do processador. */ public String getMicroarquitetura() { return this.processador.getProcessorIdentifier().getMicroarchitecture(); } /** * Retorna a frequência do processador (em Hz), por exemplo. * Para o processador denominado Intel(R) Core(TM)2 Duo CPU T7300 @ 2,00 GHz, * a frequência do processador é 2000000000hz. * Caso a frequência do processador seja desconhecido retorna -1; * * @return Frequência do processador. */ public Long getFrequencia() { return this.processador.getProcessorIdentifier().getVendorFreq(); } /** * Retorna o número de pacotes/soquetes no sistema. * Um único pacote pode conter vários núcleos. * * @return Número de pacotes físicos disponíveis. */ public Integer getNumeroPacotesFisicos() { return this.processador.getPhysicalPackageCount(); } /** * Retorna o número de CPUs/núcleos físicos disponíveis para processamento. * * @return Número de CPUs físicas disponíveis. */ public Integer getNumeroCpusFisicas() { return this.processador.getPhysicalProcessorCount(); } /** * Retorna o número de CPUs lógicas disponíveis para processamento. * Este valor pode ser maior do que CPUs físicas se o hyperthreading estiver habilitado. * * @return Número de CPUs lógicas disponíveis. */ public Integer getNumeroCpusLogicas() { return this.processador.getLogicalProcessorCount(); } /** *

Retorna a porcentagem de uso do processador, por meio dos contadores de ticks de carga de CPU em todo o sistema.

*
*

* Por meio de um array com oito elementos representando milissegundos gastos nos estados: * User (0), Nice (1), System (2), Idle (3), IOwait (4), Hardware interrupts (IRQ) (5), * Software interrupts/DPC (SoftIRQ) ) (6) ou Steal (7).

*
*

Ao medir a diferença entre os ticks em um intervalo de tempo, * a carga da CPU nesse intervalo pode ser calculada. * Observe que, embora os contadores de tiques estejam em unidades de milissegundos, * eles podem avançar em incrementos maiores junto com tiques de clock (dependentes da plataforma). * Por exemplo, por padrão, os tiques do clock do Windows são 1/64 de segundo (cerca de 15 ou 16 milissegundos) e os tiques do Linux dependem da distribuição e da configuração, * mas geralmente 1/100 de segundo (10 milissegundos).

*
*

As informações de Nice e IOWait não estão disponíveis no Windows, * e as informações de IOwait e IRQ não estão disponíveis no macOS, portanto, * esses ticks sempre serão zero.

*
*

Para calcular o tempo de inatividade geral usando esse método, * inclua os tiques de inatividade e IOWait. Da mesma forma, os ticks de IRQ, * SoftIRQ e Steal devem ser adicionados ao valor do sistema para obter o total. * Os tiques do sistema também incluem o tempo de execução de outros hosts virtuais (steal).

*
*

Com isso fazemos o cálculo necessário para a medição em porcentagem do uso do processador.

* * @return Valor em porcentagem de uso do processador. */ public Double getUso() { return this.processadorCacheLoader.getUso(); } /** * Retorna uma String com todas as informações relacionadas ao Processador. * @return String com todas as informações relacionadas ao Processador. */ @Override public String toString() { final StringBuilder sb = new StringBuilder(); sb.append("Fabricante: ") .append(getFabricante()) .append("\n"); sb.append("Nome: ") .append(getNome()) .append("\n"); sb.append("ID: ") .append(getId()) .append("\n"); sb.append("Identificador: ") .append(getIdentificador()) .append("\n"); sb.append("Microarquitetura: ") .append(getMicroarquitetura()) .append("\n"); sb.append("Frequência: ") .append(getFrequencia()) .append("\n"); sb.append("Número de Pacotes Físicos: ") .append(getNumeroPacotesFisicos()) .append("\n"); sb.append("Número de CPUs Fisícas: ") .append(getNumeroCpusFisicas()) .append("\n"); sb.append("Número de CPUs Lógicas: ") .append(getNumeroCpusLogicas()) .append("\n"); sb.append("Em Uso: ") .append(String.format("%.1f", getUso())) .append("\n"); return sb.toString(); } } ================================================ FILE: src/main/java/com/github/britooo/looca/api/group/processador/ProcessadorCacheLoader.java ================================================ package com.github.britooo.looca.api.group.processador; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListenableFutureTask; import com.google.common.util.concurrent.ListeningExecutorService; import com.google.common.util.concurrent.MoreExecutors; import oshi.SystemInfo; import oshi.hardware.CentralProcessor; public class ProcessadorCacheLoader { private final ExecutorService executor = Executors.newSingleThreadExecutor(); private final ListeningExecutorService lExecutor = MoreExecutors.listeningDecorator(executor); private final CentralProcessor processador = new SystemInfo().getHardware().getProcessor(); private final LoadingCache loader; public ProcessadorCacheLoader() { loader = CacheBuilder.newBuilder() .maximumSize(1000) .refreshAfterWrite(1000, TimeUnit.MILLISECONDS) .build(new CacheLoader() { @Override public Double load(String key) throws Exception { return loadUso(); } @Override public ListenableFuture reload(String key, Double oldValue) throws Exception { return getUsoOshi(); } }); } /** * Retorna uso do processador em procentagem. * @return Uso do processador em procentagem. */ public Double getUso() { try { return loader.get("uso"); } catch (ExecutionException e) { e.printStackTrace(); return 0.0; } } private Double loadUso() { Double resultado = 0.0; Future uso = getUsoOshi(); try { while (!uso.isDone()) { TimeUnit.SECONDS.sleep(2); } resultado = uso.get(); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } return resultado; } private ListenableFuture getUsoOshi() { long[] prevTicks = this.processador.getSystemCpuLoadTicks(); ListenableFutureTask task = ListenableFutureTask.create(new Callable() { public Double call() throws InterruptedException { TimeUnit.SECONDS.sleep(1); return processador.getSystemCpuLoadBetweenTicks(prevTicks) * 100; } }); lExecutor.execute(task); return task; } } ================================================ FILE: src/main/java/com/github/britooo/looca/api/group/processos/Processo.java ================================================ package com.github.britooo.looca.api.group.processos; import oshi.software.os.OSProcess; import com.github.britooo.looca.api.group.memoria.Memoria; public class Processo { private final OSProcess processo; private final Memoria memoria; public Processo(OSProcess processo, Memoria memoria) { this.processo = processo; this.memoria = memoria; } /** *

Retorna o ID do processo.

*
*

Embora seja um valor de 32 bits, ele não é assinado no Windows e, * em circunstâncias extremamente raras, pode retornar um valor negativo.

* * @return ID do processo. */ public Integer getPid() { return this.processo.getProcessID(); } /** * Retorna o nome do processo, geralmente o programa executável. * * @return Nome do processo, geralmente o programa executável. */ public String getNome() { return this.processo.getName(); } /** *

Retorna o valor percentual de uso da CPU pelo processo.

*
*

* Por meio do cálculo: (100d * (o número de milissegundos que o processo executou no modo kernel/sistema. * + * Obtém o tempo do usuário usado pelo processo.) * / * o número de milissegundos desde o início do processo). * Assim conseguimos a porcentagem do uso de CPU pelo processo. *

* * @return Valor percentual de uso da CPU pelo processo. */ public Double getUsoCpu() { return (100d * (processo.getKernelTime() + processo.getUserTime()) / processo.getUpTime()); } /** *

Retorna no Windows o tamanho do Conjunto de Trabalho Privado, que deve corresponder à coluna "Memória" no Gerenciador de Tarefas do Windows.

*

Retorna no Linux o valor RSS de /proc/[pid]/stat, que pode ser impreciso devido a uma otimização de escalabilidade interna do kernel. Se forem necessários valores precisos, leia /proc/[pid]/smaps usando FileUtil.getKeyValueMapFromFile(String, String).

*
*

E por meio do cálculo: (100d * Obtém o tamanho do conjunto residente (RSS). Usado para mostrar quanta memória está alocada para esse processo e está na RAM. Não inclui memória que é trocada. Inclui memória de bibliotecas compartilhadas, desde que as páginas dessas bibliotecas estejam realmente na memória. Inclui toda a memória de pilha e heap. * Retorna (o tamanho do conjunto residente / A quantidade de memória física real, em bytes).

* * @return Valor percentual de uso da Memória RAM pelo processo. */ public Double getUsoMemoria() { return (100d * processo.getResidentSetSize() / memoria.getTotal()); } /** *

Retorna o tamanho do conjunto residente (RSS). Usado para mostrar quanta memória está alocada para esse processo e está na RAM.

*
*

Não inclui memória que é trocada. Inclui memória de bibliotecas compartilhadas, * desde que as páginas dessas bibliotecas estejam realmente na memória. * Inclui toda a memória de pilha e heap. * No Windows, retorna o tamanho do Conjunto de Trabalho Privado, * que deve corresponder à coluna "Memória" no Gerenciador de Tarefas do Windows.

*
*

* No Linux, retorna o valor RSS de /proc/[pid]/stat, * que pode ser impreciso devido a uma otimização de escalabilidade interna do kernel. * Se forem necessários valores precisos, leia /proc/[pid]/smaps usando * FileUtil.getKeyValueMapFromFile(String, String). *

* * @return Tamanho do conjunto residente (ou Quantidade de bytes utilizados). */ public Long getBytesUtilizados() { return processo.getResidentSetSize(); } /** *

Retorna o tamanho da memória virtual (VSZ).

*
*

Inclui toda a memória que o processo pode acessar, * incluindo memória que é trocada e memória que é de bibliotecas compartilhadas.

* * @return Tamanho da memória virtual. */ public Long getMemoriaVirtualUtilizada() { return processo.getVirtualSize(); } /** * Retorna uma String com todas as informações relacionadas ao Processo. * @return String com todas as informações relacionadas ao Grupo de Processos. */ @Override public String toString() { final StringBuilder sb = new StringBuilder(); sb.append("PID: ").append(getPid()) .append("\n"); sb.append("Uso CPU: ") .append(String.format("%.1f", getUsoCpu())) .append("\n"); sb.append("Uso memória: ") .append(String.format("%.1f", getUsoMemoria())) .append("\n"); sb.append("Bytes utilizados: ") .append(getBytesUtilizados()) .append("\n"); sb.append("Memória virtual utilizada: ") .append(getMemoriaVirtualUtilizada()) .append("\n"); return sb.toString(); } } ================================================ FILE: src/main/java/com/github/britooo/looca/api/group/processos/ProcessoGrupo.java ================================================ package com.github.britooo.looca.api.group.processos; import java.util.List; import oshi.SystemInfo; import oshi.software.os.OSProcess; import java.util.stream.Collectors; import oshi.software.os.OperatingSystem; import com.github.britooo.looca.api.group.memoria.Memoria; public class ProcessoGrupo { private final OperatingSystem os = new SystemInfo().getOperatingSystem(); /** * Retorna o número de threads em execução. * * @return Número de threads em execução. */ public Integer getTotalThreads() { return this.os.getThreadCount(); } /** * Retorna o número de processos em execução. * * @return Número de processos em execução. */ public Integer getTotalProcessos() { return this.os.getProcessCount(); } /** *

Retorna os processos em execução no momento. Nenhum pedido é garantido.

*
*

Sendo uma lista de objetos OSProcess para o número especificado (ou todos) de processos atualmente em execução, * classificados conforme especificado. * A lista pode conter elementos nulos ou processos com estado OSProcess.State.INVALID se um processo for encerrado durante a iteração.

* * @return Lista com os processos em execução no momento. Nenhum pedido é garantido. */ public List getProcessos() { return this.os.getProcesses() .stream() .map(ProcessoGrupo::of) .collect(Collectors.toList()); } private static Processo of(OSProcess processo) { if (processo == null) { return null; } Memoria memoria = new Memoria(); return new Processo(processo, memoria); } /** * Retorna uma String com todas as informações relacionadas ao Grupo de Processos. * @return String com todas as informações relacionadas ao Grupo de Processos. */ @Override public String toString() { return String.format("\nLista de processos\nTotal de processos ativos: %d\nTotal de threads: %d\nProcessos: %s", this.getTotalProcessos(), this.getTotalThreads(), this.getProcessos()); } } ================================================ FILE: src/main/java/com/github/britooo/looca/api/group/rede/Rede.java ================================================ package com.github.britooo.looca.api.group.rede; import oshi.SystemInfo; public class Rede { private final SystemInfo si; public Rede(SystemInfo si) { this.si = si; } /** * Retorna um Objeto de RedeInterfaceGroup que contém métodos relacionados a coleta de informações de * Interfaces de Rede físicas e virtuais disponíveis para uso no computador. * @return Objeto RedeInterfaceGroup. */ public RedeInterfaceGroup getGrupoDeInterfaces() { return new RedeInterfaceGroup(si); } /** * Retorna um Objeto de RedeParametros que contém métodos relacionados a coleta de informações * de Parâmetros de Rede do sistema operacional como username e domínio. * @return Objeto RedeParametros. */ public RedeParametros getParametros() { return new RedeParametros(si); } } ================================================ FILE: src/main/java/com/github/britooo/looca/api/group/rede/RedeInterface.java ================================================ package com.github.britooo.looca.api.group.rede; import oshi.hardware.NetworkIF; import java.util.Arrays; import java.util.List; public class RedeInterface { private final NetworkIF redeInterface; public RedeInterface(NetworkIF redeInterface) { this.redeInterface = redeInterface; } public static RedeInterface of(NetworkIF redeInterface) { if (redeInterface == null) { return null; } return new RedeInterface(redeInterface); } /** * Retorna o nome da interface de rede. * * @return Nome da interface de rede. */ public String getNome() { return this.redeInterface.getName(); } /** * Retorna a descrição da interface de rede. * * @return Descrição da interface. */ public String getNomeExibicao() { return this.redeInterface.getDisplayName(); } /** * Retorna uma lista com os endereços de IP (v4) relacionados com essa interface de rede. * * @return Lista de endereços de IP */ public List getEnderecoIpv4() { return Arrays.asList(this.redeInterface.getIPv4addr()); } /** * Retorna uma lista com os endereços de IP (v6) relacionados com essa interface de rede. * * @return Lista de endereços de IP */ public List getEnderecoIpv6() { return Arrays.asList(this.redeInterface.getIPv6addr()); } /** * Retorna o endereço MAC da interface de rede. * * @return MAC address. */ public String getEnderecoMac() { return this.redeInterface.getMacaddr(); } /** * Retorna o total de bytes recebidos pela interface de rede. * * @return Total de bytes recebidos */ public Long getBytesRecebidos() { this.redeInterface.updateAttributes(); return this.redeInterface.getBytesRecv(); } /** * Retorna o total de bytes enviados pela interface de rede. * * @return Total de bytes enviados */ public Long getBytesEnviados() { this.redeInterface.updateAttributes(); return this.redeInterface.getBytesSent(); } /** * Retorna o total de pacotes recebidos pela interface de rede. * * @return Total de pacotes recebidos */ public Long getPacotesRecebidos() { return this.redeInterface.getPacketsRecv(); } /** * Retorna o total de pacotes enviados pela interface de rede. * * @return Total de pacotes enviados */ public Long getPacotesEnviados() { return this.redeInterface.getPacketsSent(); } @Override public String toString() { final StringBuilder sb = new StringBuilder("\n"); sb.append("Nome: ").append(getNome()).append("\n"); sb.append("Nome de Exibição: ").append(getNomeExibicao()).append("\n"); sb.append("Endereço IPv4: ").append(getEnderecoIpv4()).append("\n"); sb.append("Endereço IPv6: ").append(getEnderecoIpv6()).append("\n"); sb.append("Endereço MAC: ").append(getEnderecoMac()).append("\n"); sb.append("Bytes recebidos: ").append(getBytesRecebidos()).append("\n"); sb.append("Bytes enviados: ").append(getBytesEnviados()).append("\n"); sb.append("Pacotes recebidos: ").append(getPacotesRecebidos()).append("\n"); sb.append("Pacotes enviados: ").append(getPacotesEnviados()).append("\n"); return sb.toString(); } } ================================================ FILE: src/main/java/com/github/britooo/looca/api/group/rede/RedeInterfaceGroup.java ================================================ package com.github.britooo.looca.api.group.rede; import oshi.SystemInfo; import oshi.hardware.HardwareAbstractionLayer; import java.util.List; import java.util.stream.Collectors; public class RedeInterfaceGroup { private final HardwareAbstractionLayer hal; public RedeInterfaceGroup(SystemInfo si) { this.hal = si.getHardware(); } /** * Retorna uma lista de Interfaces de Rede disponíveis. * * @return Lista de interfaces de rede. */ public List getInterfaces() { return this.hal.getNetworkIFs().stream() .map(RedeInterface::of) .collect(Collectors.toList()); } } ================================================ FILE: src/main/java/com/github/britooo/looca/api/group/rede/RedeParametros.java ================================================ package com.github.britooo.looca.api.group.rede; import oshi.SystemInfo; import oshi.software.os.NetworkParams; import java.util.Arrays; import java.util.List; public class RedeParametros { private final NetworkParams parametrosRede; public RedeParametros(SystemInfo si) { this.parametrosRede = si.getOperatingSystem().getNetworkParams(); } /** * Retorna o hostname do computador. * * @return Hostname. */ public String getHostName() { return this.parametrosRede.getHostName(); } /** * Retorna o nome de domínio do computador. * * @return Nome de domínio. */ public String getNomeDeDominio() { return this.parametrosRede.getDomainName(); } /** * Retorna uma lista de IPs dos servidores DNS disponíveis. * * @return IPs dos servidores DNS. */ public List getServidoresDns() { return Arrays.asList(this.parametrosRede.getDnsServers()); } @Override public String toString() { final StringBuilder sb = new StringBuilder("\n"); sb.append("Hostname: ").append(getHostName()).append("\n"); sb.append("Nome de domínio: ").append(getNomeDeDominio()).append("\n"); sb.append("Servidores DNS: ").append(getServidoresDns()).append("\n"); return sb.toString(); } } ================================================ FILE: src/main/java/com/github/britooo/looca/api/group/servicos/Servico.java ================================================ package com.github.britooo.looca.api.group.servicos; import oshi.software.os.OSService; public class Servico { private final OSService servico; public Servico(OSService servico) { this.servico = servico; } /** * Obtém o ID do processo atual. * * @return ID do processo. */ public Integer getPid() { return this.servico.getProcessID(); } /** * Retorna o nome do serviço. * * @return Nome do serviço. */ public String getNome() { return this.servico.getName(); } /** *

* Retorna o estado do serviço. *

* * Ex: STOPPED, RUNNING. * * @return Estado do serviço. */ public String getEstado() { return this.servico.getState().toString(); } /** * Retorna uma String com todas as informações relacionadas ao Serviço. * @return String com todas as informações relacionadas ao Serviço. */ @Override public String toString() { final StringBuilder sb = new StringBuilder(); sb.append("PID: ") .append(getPid()) .append("\n"); sb.append("Nome: ") .append(getNome()) .append("\n"); sb.append("Estado: ") .append(getEstado()) .append("\n"); return sb.toString(); } } ================================================ FILE: src/main/java/com/github/britooo/looca/api/group/servicos/ServicoGrupo.java ================================================ package com.github.britooo.looca.api.group.servicos; import java.util.List; import oshi.SystemInfo; import java.util.stream.Collectors; import oshi.software.os.OSService; public class ServicoGrupo { enum STATUS { RUNNING, STOPPED } private final SystemInfo sistema = new SystemInfo(); /** * Devolve uma lista com todos os serviços * * @return Lista com todos os serviços */ public List getServicos() { return recuperarServicosOshi().stream().map(ServicoGrupo::of).collect(Collectors.toList()); } /** * Retorna a quantidade de serviços * * @return Quantidade de serviços */ public Integer getTotalDeServicos() { return this.getServicos().size(); } /** * Lista todos os serviços cujo o status é RUNNING (ou em execução) * * @return Lista de serviços ativos */ public List getServicosAtivos() { return this.getServicos().stream() .filter(servico -> servico.getEstado() .equals(STATUS.RUNNING.toString())) .collect(Collectors.toList()); } /** * Retorna a quantidade de serviços em execução * * @return Quantidade de serviços em execução */ public Integer getTotalServicosAtivos() { return this.getServicosAtivos().size(); } /** * Lista todos os serviços cujo o status é STOPPED (ou inativo) * * @return Lista de serviços inativos */ public List getServicosInativos() { return this.getServicos().stream() .filter(servico -> servico.getEstado() .equals(STATUS.STOPPED.toString())) .collect(Collectors.toList()); } /** * Retorna a quantidade de serviços inativos. * * @return Quantidade de serviços inativos. */ public Integer getTotalServicosInativos() { return this.getServicosInativos().size(); } private List recuperarServicosOshi() { return this.sistema.getOperatingSystem().getServices(); } private static Servico of(OSService servico) { if (servico == null) { return null; } return new Servico(servico); } } ================================================ FILE: src/main/java/com/github/britooo/looca/api/group/sistema/Sistema.java ================================================ package com.github.britooo.looca.api.group.sistema; import oshi.SystemInfo; import java.time.Instant; import oshi.software.os.OperatingSystem; import com.github.britooo.looca.api.util.Conversor; public class Sistema { private final OperatingSystem os; private final String fabricante; private final Integer arquitetura; private final String sistemaOperacional; public Sistema() { os = new SystemInfo().getOperatingSystem(); this.arquitetura = this.os.getBitness(); this.fabricante = this.os.getManufacturer(); this.sistemaOperacional = this.os.getFamily(); } /** * Retorna o Sistema Operacional. * * @return Sistema Operacional. */ public String getSistemaOperacional() { return sistemaOperacional; } /** * Retorna a empresa fabricante do sistema operacional. * * @return Fabricante do sitema operacional. */ public String getFabricante() { return fabricante; } /** * Retorna o número de bits (32 ou 64) do sistema operacional. * * @return Número de bits do sistema operacional. */ public Integer getArquitetura() { return arquitetura; } /** * Retorna o momento em que o sistema operacional foi inicializado. * * @return Data aproximada da inicialização do sistema operacional. */ public Instant getInicializado() { return Instant.ofEpochSecond(this.os.getSystemBootTime()); } /** * Retorna o tempo de funcionamento do sistema (tempo desde a inicialização). * * @return Quantidade de segundos desde a inicialização. */ public Long getTempoDeAtividade() { return this.os.getSystemUptime(); } /** * Retorna True caso o processo atual tem permissões elevadas, como sudo/Administrador. * * @return True se este processo tiver permissões elevadas. */ public Boolean getPermissao() { return this.os.isElevated(); } /** * Retorna uma String com todas as informações relacionadas ao Sistema Operacional. * @return String que contém todas as informações relacionadas ao Sistema Operacional. */ @Override public String toString() { final StringBuilder sb = new StringBuilder(); sb.append("Sistema operacional: ") .append(sistemaOperacional) .append("\n"); sb.append("Fabricante: ") .append(fabricante) .append("\n"); sb.append("Arquitetura: ") .append(arquitetura) .append("bits\n"); sb.append("Inicializado: ") .append(getInicializado()) .append("\n"); sb.append("Tempo de atividade: ") .append(Conversor.formatarSegundosDecorridos(this.getTempoDeAtividade())) .append("\n"); sb.append("Permissões: ") .append(("Executando como ")) .append((this.getPermissao() ? "root" : "usuário padrão")) .append("\n"); return sb.toString(); } } ================================================ FILE: src/main/java/com/github/britooo/looca/api/group/temperatura/Temperatura.java ================================================ package com.github.britooo.looca.api.group.temperatura; import oshi.SystemInfo; import oshi.hardware.HardwareAbstractionLayer; public class Temperatura { private final HardwareAbstractionLayer hardware; public Temperatura() { hardware = new SystemInfo().getHardware(); } /** *

* Retorna a temperatura da CPU em graus Celsius se disponível, caso contrário retorna 0 ou Double.NaN. *

* *

* No Windows, se não estiver executando o Open Hardware Monitor, * requer permissões elevadas e BIOS de hardware que ofereça suporte à publicação no WMI. * Neste caso, retorna a temperatura da "Zona Térmica" que pode ser diferente da temperatura da CPU * obtida de outras fontes. *

* *

* Além disso, algumas placas-mãe só podem atualizar esse valor em determinados eventos. *

* * @return Temperatura em graus Celsius caso disponível */ public Double getTemperatura() { return this.hardware.getSensors().getCpuTemperature(); } /** * Retorna uma String com todas as informações relacionadas a Temperatura. * @return String com todas as informações relacionadas a Temperatura. */ @Override public String toString() { return String.format("Temperatura: %.1f", getTemperatura()); } } ================================================ FILE: src/main/java/com/github/britooo/looca/api/util/Conversor.java ================================================ package com.github.britooo.looca.api.util; import java.util.concurrent.TimeUnit; public class Conversor { private static final long KIBI = 1L << 10; private static final long MEBI = 1L << 20; private static final long GIBI = 1L << 30; private static final long TEBI = 1L << 40; private static final long PEBI = 1L << 50; private static final long EXBI = 1L << 60; /** * Retorna uma String com o valor em bytes convertidos em sua ordem de grandeza equivalente. * @param bytes * Corresponde a quantidade de bytes (Ex: 1000000000 bytes = 1 Gigabyte). * @return Retorna uma String que corresponde aos bytes convertidos em sua ordem de grandeza equivalente. */ public static String formatarBytes(long bytes) { if (bytes == 1L) { // bytes return String.format("%d byte", bytes); } else if (bytes < KIBI) { // bytes return String.format("%d bytes", bytes); } else if (bytes < MEBI) { // KiB return formatarUnidades(bytes, KIBI, "KiB"); } else if (bytes < GIBI) { // MiB return formatarUnidades(bytes, MEBI, "MiB"); } else if (bytes < TEBI) { // GiB return formatarUnidades(bytes, GIBI, "GiB"); } else if (bytes < PEBI) { // TiB return formatarUnidades(bytes, TEBI, "TiB"); } else if (bytes < EXBI) { // PiB return formatarUnidades(bytes, PEBI, "PiB"); } else { // EiB return formatarUnidades(bytes, EXBI, "EiB"); } } /** * Retorna uma String com segundos convertidos em data; * @param secs * Corresponde aos segundos. * @return Devolve uma String com os segundos convertidos em data. */ public static String formatarSegundosDecorridos(long secs) { long eTime = secs; final long days = TimeUnit.SECONDS.toDays(eTime); eTime -= TimeUnit.DAYS.toSeconds(days); final long hr = TimeUnit.SECONDS.toHours(eTime); eTime -= TimeUnit.HOURS.toSeconds(hr); final long min = TimeUnit.SECONDS.toMinutes(eTime); eTime -= TimeUnit.MINUTES.toSeconds(min); final long sec = eTime; return String.format("%d days, %02d:%02d:%02d", days, hr, min, sec); } private static String formatarUnidades(long valor, long prefixo, String unidade) { if (valor % prefixo == 0) { return String.format("%d %s", valor / prefixo, unidade); } return String.format("%.1f %s", (double) valor / prefixo, unidade); } private static Double formatarUnidades(long valor, long prefixo) { if (valor % prefixo == 0) { return (double) valor / prefixo; } return (double) valor / prefixo; } }