├── readme ├── readmes.gif └── readmes_old.gif ├── .vscode └── settings.json ├── .settings ├── org.eclipse.jdt.apt.core.prefs ├── org.eclipse.m2e.core.prefs ├── org.eclipse.core.resources.prefs └── org.eclipse.jdt.core.prefs ├── .gitignore ├── src └── main │ └── java │ └── com │ └── github │ └── britooo │ └── looca │ └── api │ ├── group │ ├── rede │ │ ├── RedeInterfaceGroup.java │ │ ├── Rede.java │ │ ├── RedeParametros.java │ │ └── RedeInterface.java │ ├── temperatura │ │ └── Temperatura.java │ ├── janelas │ │ ├── JanelaGrupo.java │ │ └── Janela.java │ ├── servicos │ │ ├── Servico.java │ │ └── ServicoGrupo.java │ ├── memoria │ │ └── Memoria.java │ ├── dispositivos │ │ ├── DispositivoUsb.java │ │ └── DispositivosUsbGrupo.java │ ├── processos │ │ ├── ProcessoGrupo.java │ │ └── Processo.java │ ├── discos │ │ ├── DiscoGrupo.java │ │ ├── Volume.java │ │ └── Disco.java │ ├── processador │ │ ├── ProcessadorCacheLoader.java │ │ └── Processador.java │ └── sistema │ │ └── Sistema.java │ ├── util │ └── Conversor.java │ └── core │ └── Looca.java ├── .project ├── LICENSE ├── .classpath ├── README.md ├── pom.xml.versionsBackup └── pom.xml /readme/readmes.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Britooo/looca-api/HEAD/readme/readmes.gif -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "java.configuration.updateBuildConfiguration": "interactive" 3 | } -------------------------------------------------------------------------------- /readme/readmes_old.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Britooo/looca-api/HEAD/readme/readmes_old.gif -------------------------------------------------------------------------------- /.settings/org.eclipse.jdt.apt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.apt.aptEnabled=false 3 | -------------------------------------------------------------------------------- /.settings/org.eclipse.m2e.core.prefs: -------------------------------------------------------------------------------- 1 | activeProfiles= 2 | eclipse.preferences.version=1 3 | resolveWorkspaceProjects=true 4 | version=1 5 | -------------------------------------------------------------------------------- /.settings/org.eclipse.core.resources.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | encoding//src/main/java=UTF-8 3 | encoding//src/test/java=UTF-8 4 | encoding/=UTF-8 5 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Compiled class file 2 | *.class 3 | 4 | # Log file 5 | *.log 6 | 7 | # BlueJ files 8 | *.ctxt 9 | 10 | # Mobile Tools for Java (J2ME) 11 | .mtj.tmp/ 12 | 13 | # Package Files # 14 | *.jar 15 | *.war 16 | *.nar 17 | *.ear 18 | *.zip 19 | *.tar.gz 20 | *.rar 21 | 22 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml 23 | hs_err_pid* 24 | 25 | .idea 26 | 27 | *.iml 28 | 29 | ./target 30 | target/ 31 | -------------------------------------------------------------------------------- /src/main/java/com/github/britooo/looca/api/group/rede/RedeInterfaceGroup.java: -------------------------------------------------------------------------------- 1 | package com.github.britooo.looca.api.group.rede; 2 | 3 | import oshi.SystemInfo; 4 | import oshi.hardware.HardwareAbstractionLayer; 5 | 6 | import java.util.List; 7 | import java.util.stream.Collectors; 8 | 9 | public class RedeInterfaceGroup { 10 | 11 | private final HardwareAbstractionLayer hal; 12 | 13 | public RedeInterfaceGroup(SystemInfo si) { 14 | this.hal = si.getHardware(); 15 | } 16 | 17 | /** 18 | * Retorna uma lista de Interfaces de Rede disponíveis. 19 | * 20 | * @return Lista de interfaces de rede. 21 | */ 22 | public List getInterfaces() { 23 | return this.hal.getNetworkIFs().stream() 24 | .map(RedeInterface::of) 25 | .collect(Collectors.toList()); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | looca-api 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | org.eclipse.m2e.core.maven2Builder 15 | 16 | 17 | 18 | 19 | 20 | org.eclipse.jdt.core.javanature 21 | org.eclipse.m2e.core.maven2Nature 22 | 23 | 24 | 25 | 1680496548325 26 | 27 | 30 28 | 29 | org.eclipse.core.resources.regexFilterMatcher 30 | node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /src/main/java/com/github/britooo/looca/api/group/rede/Rede.java: -------------------------------------------------------------------------------- 1 | package com.github.britooo.looca.api.group.rede; 2 | 3 | import oshi.SystemInfo; 4 | 5 | public class Rede { 6 | 7 | private final SystemInfo si; 8 | 9 | public Rede(SystemInfo si) { 10 | this.si = si; 11 | } 12 | 13 | /** 14 | * Retorna um Objeto de RedeInterfaceGroup que contém métodos relacionados a coleta de informações de 15 | * Interfaces de Rede físicas e virtuais disponíveis para uso no computador. 16 | * @return Objeto RedeInterfaceGroup. 17 | */ 18 | public RedeInterfaceGroup getGrupoDeInterfaces() { 19 | return new RedeInterfaceGroup(si); 20 | } 21 | 22 | /** 23 | * Retorna um Objeto de RedeParametros que contém métodos relacionados a coleta de informações 24 | * de Parâmetros de Rede do sistema operacional como username e domínio. 25 | * @return Objeto RedeParametros. 26 | */ 27 | public RedeParametros getParametros() { 28 | return new RedeParametros(si); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Diego Brito 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/main/java/com/github/britooo/looca/api/group/rede/RedeParametros.java: -------------------------------------------------------------------------------- 1 | package com.github.britooo.looca.api.group.rede; 2 | 3 | import oshi.SystemInfo; 4 | import oshi.software.os.NetworkParams; 5 | 6 | import java.util.Arrays; 7 | import java.util.List; 8 | 9 | public class RedeParametros { 10 | 11 | private final NetworkParams parametrosRede; 12 | 13 | public RedeParametros(SystemInfo si) { 14 | this.parametrosRede = si.getOperatingSystem().getNetworkParams(); 15 | } 16 | 17 | /** 18 | * Retorna o hostname do computador. 19 | * 20 | * @return Hostname. 21 | */ 22 | public String getHostName() { 23 | return this.parametrosRede.getHostName(); 24 | } 25 | 26 | /** 27 | * Retorna o nome de domínio do computador. 28 | * 29 | * @return Nome de domínio. 30 | */ 31 | public String getNomeDeDominio() { 32 | return this.parametrosRede.getDomainName(); 33 | } 34 | 35 | /** 36 | * Retorna uma lista de IPs dos servidores DNS disponíveis. 37 | * 38 | * @return IPs dos servidores DNS. 39 | */ 40 | public List getServidoresDns() { 41 | return Arrays.asList(this.parametrosRede.getDnsServers()); 42 | } 43 | 44 | @Override 45 | public String toString() { 46 | final StringBuilder sb = new StringBuilder("\n"); 47 | sb.append("Hostname: ").append(getHostName()).append("\n"); 48 | sb.append("Nome de domínio: ").append(getNomeDeDominio()).append("\n"); 49 | sb.append("Servidores DNS: ").append(getServidoresDns()).append("\n"); 50 | return sb.toString(); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /src/main/java/com/github/britooo/looca/api/group/temperatura/Temperatura.java: -------------------------------------------------------------------------------- 1 | package com.github.britooo.looca.api.group.temperatura; 2 | 3 | import oshi.SystemInfo; 4 | import oshi.hardware.HardwareAbstractionLayer; 5 | 6 | public class Temperatura { 7 | 8 | private final HardwareAbstractionLayer hardware; 9 | 10 | public Temperatura() { 11 | hardware = new SystemInfo().getHardware(); 12 | } 13 | 14 | /** 15 | *

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

18 | * 19 | *

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

25 | * 26 | *

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

29 | * 30 | * @return Temperatura em graus Celsius caso disponível 31 | */ 32 | public Double getTemperatura() { 33 | return this.hardware.getSensors().getCpuTemperature(); 34 | } 35 | 36 | /** 37 | * Retorna uma String com todas as informações relacionadas a Temperatura. 38 | * @return String com todas as informações relacionadas a Temperatura. 39 | */ 40 | @Override 41 | public String toString() { 42 | return String.format("Temperatura: %.1f", getTemperatura()); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/main/java/com/github/britooo/looca/api/group/janelas/JanelaGrupo.java: -------------------------------------------------------------------------------- 1 | package com.github.britooo.looca.api.group.janelas; 2 | 3 | import oshi.SystemInfo; 4 | import oshi.software.os.OperatingSystem; 5 | 6 | import java.util.List; 7 | import java.util.stream.Collectors; 8 | 9 | public class JanelaGrupo { 10 | 11 | private final OperatingSystem so; 12 | 13 | public JanelaGrupo(SystemInfo si) { 14 | this.so = si.getOperatingSystem(); 15 | } 16 | 17 | /** 18 | * Retorna uma lista de Janelas visíveis e invisíveis abertas no sistema operacional. 19 | * 20 | * @return Lista de janelas. 21 | */ 22 | public List getJanelas() { 23 | return so.getDesktopWindows(false).stream() 24 | .map(Janela::of) 25 | .collect(Collectors.toList()); 26 | } 27 | 28 | /** 29 | * Retorna uma lista de Janelas, apenas com as janelas visíveis no sistema operacional. 30 | * 31 | * @return Lista de janelas. 32 | */ 33 | public List getJanelasVisiveis() { 34 | return so.getDesktopWindows(true).stream() 35 | .map(Janela::of) 36 | .collect(Collectors.toList()); 37 | } 38 | 39 | /** 40 | * Retorna a quantidade total de Janelas visíveis e invisíveis no sistema operacional. 41 | * 42 | * @return Total de janelas. 43 | */ 44 | public Integer getTotalJanelas() { 45 | return so.getDesktopWindows(false).size(); 46 | } 47 | 48 | /** 49 | * Retorna a quantidade total de Janelas visíveis no sistema operacional. 50 | * 51 | * @return Total de janelas. 52 | */ 53 | public Integer getTotalJanelasVisiveis() { 54 | return so.getDesktopWindows(true).size(); 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /src/main/java/com/github/britooo/looca/api/group/servicos/Servico.java: -------------------------------------------------------------------------------- 1 | package com.github.britooo.looca.api.group.servicos; 2 | 3 | import oshi.software.os.OSService; 4 | 5 | public class Servico { 6 | 7 | private final OSService servico; 8 | 9 | public Servico(OSService servico) { 10 | this.servico = servico; 11 | } 12 | 13 | /** 14 | * Obtém o ID do processo atual. 15 | * 16 | * @return ID do processo. 17 | */ 18 | public Integer getPid() { 19 | return this.servico.getProcessID(); 20 | } 21 | 22 | /** 23 | * Retorna o nome do serviço. 24 | * 25 | * @return Nome do serviço. 26 | */ 27 | public String getNome() { 28 | return this.servico.getName(); 29 | } 30 | 31 | /** 32 | *

33 | * Retorna o estado do serviço. 34 | *

35 | * 36 | * Ex: STOPPED, RUNNING. 37 | * 38 | * @return Estado do serviço. 39 | */ 40 | public String getEstado() { 41 | return this.servico.getState().toString(); 42 | } 43 | 44 | /** 45 | * Retorna uma String com todas as informações relacionadas ao Serviço. 46 | * @return String com todas as informações relacionadas ao Serviço. 47 | */ 48 | @Override 49 | public String toString() { 50 | 51 | final StringBuilder sb = new StringBuilder(); 52 | 53 | sb.append("PID: ") 54 | .append(getPid()) 55 | .append("\n"); 56 | 57 | sb.append("Nome: ") 58 | .append(getNome()) 59 | .append("\n"); 60 | 61 | sb.append("Estado: ") 62 | .append(getEstado()) 63 | .append("\n"); 64 | 65 | return sb.toString(); 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /src/main/java/com/github/britooo/looca/api/group/memoria/Memoria.java: -------------------------------------------------------------------------------- 1 | package com.github.britooo.looca.api.group.memoria; 2 | 3 | import oshi.SystemInfo; 4 | import oshi.hardware.HardwareAbstractionLayer; 5 | import com.github.britooo.looca.api.util.Conversor; 6 | 7 | public class Memoria { 8 | 9 | 10 | private final HardwareAbstractionLayer hardware = new SystemInfo().getHardware(); 11 | 12 | /** 13 | * Retorna a quantidade de memória física atualmente disponível, em bytes. 14 | * 15 | * @return Quantidade de memória física atualmente disponível, em bytes. 16 | */ 17 | public Long getDisponivel() { 18 | return this.hardware.getMemory().getAvailable(); 19 | } 20 | 21 | /** 22 | * Retorna a quantidade de memória física real, em bytes. 23 | * 24 | * @return Quantidade de memória física real, em bytes. 25 | */ 26 | public Long getTotal() { 27 | return this.hardware.getMemory().getTotal(); 28 | } 29 | 30 | /** 31 | * Retorna a quantidade de memória em uso, em bytes. 32 | * 33 | * @return Quantidade de memória em uso, em bytes. 34 | */ 35 | public Long getEmUso() { 36 | return this.getTotal() - this.getDisponivel(); 37 | } 38 | 39 | /** 40 | * Retorna uma String com todas as informações relacionadas a Memória. 41 | * @return String com todas as informações relacionadas a Memória. 42 | */ 43 | @Override 44 | public String toString() { 45 | 46 | final StringBuilder sb = new StringBuilder("Memoria").append("\n"); 47 | 48 | sb.append("Em uso: ") 49 | .append(Conversor.formatarBytes(getEmUso())) 50 | .append("\n"); 51 | 52 | sb.append("Disponível: ") 53 | .append(Conversor.formatarBytes(getDisponivel())) 54 | .append("\n"); 55 | 56 | sb.append("Total: ") 57 | .append(Conversor.formatarBytes(getTotal())) 58 | .append("\n"); 59 | 60 | return sb.toString(); 61 | } 62 | 63 | } 64 | -------------------------------------------------------------------------------- /src/main/java/com/github/britooo/looca/api/group/dispositivos/DispositivoUsb.java: -------------------------------------------------------------------------------- 1 | package com.github.britooo.looca.api.group.dispositivos; 2 | 3 | import oshi.hardware.UsbDevice; 4 | 5 | public class DispositivoUsb { 6 | 7 | private final UsbDevice usbDevice; 8 | 9 | /** 10 | * Retorna o nome do dispositivo. 11 | * 12 | * @return Nome do dispositivo. 13 | */ 14 | public String getNome() { 15 | return usbDevice.getName(); 16 | } 17 | 18 | /** 19 | * Retorna o identificador do produto. 20 | * 21 | * @return O identificador do produto. 22 | */ 23 | public String getIdProduto() { 24 | return usbDevice.getProductId(); 25 | } 26 | 27 | /** 28 | * Retorna o numero de serie. 29 | * 30 | * @return O número de série. 31 | */ 32 | public String getNumeroDeSerie() { 33 | return usbDevice.getSerialNumber(); 34 | } 35 | 36 | 37 | /** 38 | * Retorna o identificador exclusivo do dispositivo. 39 | * 40 | * @return O identificador exclusivo do dispositivo. 41 | */ 42 | public String getIdDispositivoUsbExclusivo() { 43 | return usbDevice.getUniqueDeviceId(); 44 | } 45 | 46 | /** 47 | * Retorna o nome do fornecedor identificado no dispositivo. 48 | * 49 | * @return O nome do fornecedor. 50 | */ 51 | public String getForncecedor() { 52 | return usbDevice.getVendor(); 53 | } 54 | 55 | /** 56 | * Retorna o identificador do fornecedor. 57 | * 58 | * @return O identificador do fornecedor. 59 | */ 60 | public String getIdFornecedor() { 61 | return usbDevice.getVendorId(); 62 | } 63 | 64 | public DispositivoUsb(UsbDevice usbDevice) { 65 | this.usbDevice = usbDevice; 66 | } 67 | 68 | @Override 69 | public String toString() { 70 | 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", 71 | getNome(), getIdProduto(), getNumeroDeSerie(), getIdDispositivoUsbExclusivo(), getForncecedor(), getIdFornecedor()); 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /src/main/java/com/github/britooo/looca/api/group/processos/ProcessoGrupo.java: -------------------------------------------------------------------------------- 1 | package com.github.britooo.looca.api.group.processos; 2 | 3 | import java.util.List; 4 | 5 | import oshi.SystemInfo; 6 | import oshi.software.os.OSProcess; 7 | 8 | import java.util.stream.Collectors; 9 | 10 | import oshi.software.os.OperatingSystem; 11 | import com.github.britooo.looca.api.group.memoria.Memoria; 12 | 13 | public class ProcessoGrupo { 14 | 15 | private final OperatingSystem os = new SystemInfo().getOperatingSystem(); 16 | 17 | /** 18 | * Retorna o número de threads em execução. 19 | * 20 | * @return Número de threads em execução. 21 | */ 22 | public Integer getTotalThreads() { 23 | return this.os.getThreadCount(); 24 | } 25 | 26 | /** 27 | * Retorna o número de processos em execução. 28 | * 29 | * @return Número de processos em execução. 30 | */ 31 | public Integer getTotalProcessos() { 32 | return this.os.getProcessCount(); 33 | } 34 | 35 | /** 36 | *

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

37 | *
38 | *

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

41 | * 42 | * @return Lista com os processos em execução no momento. Nenhum pedido é garantido. 43 | */ 44 | public List getProcessos() { 45 | return this.os.getProcesses() 46 | .stream() 47 | .map(ProcessoGrupo::of) 48 | .collect(Collectors.toList()); 49 | } 50 | 51 | private static Processo of(OSProcess processo) { 52 | if (processo == null) { 53 | return null; 54 | } 55 | Memoria memoria = new Memoria(); 56 | return new Processo(processo, memoria); 57 | } 58 | 59 | /** 60 | * Retorna uma String com todas as informações relacionadas ao Grupo de Processos. 61 | * @return String com todas as informações relacionadas ao Grupo de Processos. 62 | */ 63 | @Override 64 | public String toString() { 65 | return String.format("\nLista de processos\nTotal de processos ativos: %d\nTotal de threads: %d\nProcessos: %s", 66 | this.getTotalProcessos(), this.getTotalThreads(), this.getProcessos()); 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /src/main/java/com/github/britooo/looca/api/group/discos/DiscoGrupo.java: -------------------------------------------------------------------------------- 1 | package com.github.britooo.looca.api.group.discos; 2 | 3 | import java.util.List; 4 | import java.util.stream.Collectors; 5 | 6 | import oshi.SystemInfo; 7 | import oshi.hardware.HWDiskStore; 8 | import oshi.hardware.HardwareAbstractionLayer; 9 | import oshi.software.os.OSFileStore; 10 | import oshi.software.os.OperatingSystem; 11 | 12 | public class DiscoGrupo { 13 | 14 | private final SystemInfo system = new SystemInfo(); 15 | private final OperatingSystem os = system.getOperatingSystem(); 16 | private final HardwareAbstractionLayer hal = system.getHardware(); 17 | 18 | /** 19 | * Retorna uma lista de Volume. 20 | * 21 | * @return Lista de Volume. 22 | */ 23 | public List getVolumes() { 24 | return this.os.getFileSystem() 25 | .getFileStores() 26 | .stream() 27 | .map(DiscoGrupo::of) 28 | .collect(Collectors.toList()); 29 | } 30 | 31 | /** 32 | * Retorna uma lista de Disco. 33 | * 34 | * @return Lista de Disco. 35 | */ 36 | public List getDiscos() { 37 | return this.hal.getDiskStores().stream() 38 | .map(DiscoGrupo::of) 39 | .collect(Collectors.toList()); 40 | } 41 | 42 | /** 43 | * Retorna o tamanho dos discos somados em bytes. 44 | * 45 | * @return Tamanho dos discos somados em bytes. 46 | */ 47 | public Long getTamanhoTotal() { 48 | return this.getDiscos().stream() 49 | .mapToLong(Disco::getTamanho).sum(); 50 | } 51 | 52 | /** 53 | * Retorna a quantidade de discos existentes citados na lista de discos (Contagem total de discos). 54 | * 55 | * @return Soma total de discos. 56 | */ 57 | public Integer getQuantidadeDeDiscos() { 58 | return this.getDiscos().size(); 59 | } 60 | 61 | /** 62 | * Retorna a quantidade de volumes existentes citados na lista de volumes (Contagem total de volumes). 63 | * 64 | * @return Soma total de volumes. 65 | */ 66 | public Integer getQuantidadeDeVolumes() { 67 | return this.getVolumes().size(); 68 | } 69 | 70 | private static Volume of(OSFileStore volume) { 71 | if (volume == null) { 72 | return null; 73 | } 74 | return new Volume(volume); 75 | } 76 | 77 | private static Disco of(HWDiskStore disco) { 78 | if (disco == null) { 79 | return null; 80 | } 81 | return new Disco(disco); 82 | } 83 | 84 | } 85 | -------------------------------------------------------------------------------- /src/main/java/com/github/britooo/looca/api/group/servicos/ServicoGrupo.java: -------------------------------------------------------------------------------- 1 | package com.github.britooo.looca.api.group.servicos; 2 | 3 | import java.util.List; 4 | 5 | import oshi.SystemInfo; 6 | 7 | import java.util.stream.Collectors; 8 | 9 | import oshi.software.os.OSService; 10 | 11 | public class ServicoGrupo { 12 | 13 | enum STATUS { 14 | RUNNING, 15 | STOPPED 16 | } 17 | 18 | private final SystemInfo sistema = new SystemInfo(); 19 | 20 | /** 21 | * Devolve uma lista com todos os serviços 22 | * 23 | * @return Lista com todos os serviços 24 | */ 25 | public List getServicos() { 26 | return recuperarServicosOshi().stream().map(ServicoGrupo::of).collect(Collectors.toList()); 27 | } 28 | 29 | /** 30 | * Retorna a quantidade de serviços 31 | * 32 | * @return Quantidade de serviços 33 | */ 34 | public Integer getTotalDeServicos() { 35 | return this.getServicos().size(); 36 | } 37 | 38 | /** 39 | * Lista todos os serviços cujo o status é RUNNING (ou em execução) 40 | * 41 | * @return Lista de serviços ativos 42 | */ 43 | public List getServicosAtivos() { 44 | return this.getServicos().stream() 45 | .filter(servico -> servico.getEstado() 46 | .equals(STATUS.RUNNING.toString())) 47 | .collect(Collectors.toList()); 48 | } 49 | 50 | /** 51 | * Retorna a quantidade de serviços em execução 52 | * 53 | * @return Quantidade de serviços em execução 54 | */ 55 | public Integer getTotalServicosAtivos() { 56 | return this.getServicosAtivos().size(); 57 | } 58 | 59 | /** 60 | * Lista todos os serviços cujo o status é STOPPED (ou inativo) 61 | * 62 | * @return Lista de serviços inativos 63 | */ 64 | public List getServicosInativos() { 65 | return this.getServicos().stream() 66 | .filter(servico -> servico.getEstado() 67 | .equals(STATUS.STOPPED.toString())) 68 | .collect(Collectors.toList()); 69 | } 70 | 71 | /** 72 | * Retorna a quantidade de serviços inativos. 73 | * 74 | * @return Quantidade de serviços inativos. 75 | */ 76 | public Integer getTotalServicosInativos() { 77 | return this.getServicosInativos().size(); 78 | } 79 | 80 | private List recuperarServicosOshi() { 81 | return this.sistema.getOperatingSystem().getServices(); 82 | } 83 | 84 | private static Servico of(OSService servico) { 85 | if (servico == null) { 86 | return null; 87 | } 88 | 89 | return new Servico(servico); 90 | } 91 | } 92 | -------------------------------------------------------------------------------- /src/main/java/com/github/britooo/looca/api/group/janelas/Janela.java: -------------------------------------------------------------------------------- 1 | package com.github.britooo.looca.api.group.janelas; 2 | 3 | import oshi.software.os.OSDesktopWindow; 4 | 5 | import java.awt.*; 6 | 7 | public class Janela { 8 | 9 | private final OSDesktopWindow janela; 10 | 11 | public Janela(OSDesktopWindow janela) { 12 | this.janela = janela; 13 | } 14 | 15 | public static Janela of(OSDesktopWindow janela) { 16 | if (janela == null) { 17 | return null; 18 | } 19 | 20 | return new Janela(janela); 21 | } 22 | 23 | /** 24 | * Retorna o ID do processo do qual essa janela pertence. 25 | * 26 | * @return ID do processo. 27 | */ 28 | public Long getPid() { 29 | return this.janela.getOwningProcessId(); 30 | } 31 | 32 | /** 33 | * Retorna o identificador do sistema operacional, ID da janela ou outro identificador exclusivo para esta janela. 34 | * 35 | * @return Identificador da janela. 36 | */ 37 | public Long getJanelaId() { 38 | return this.janela.getWindowId(); 39 | } 40 | 41 | /** 42 | * Retorna o título da janela se existir. 43 | * 44 | * @return Título da janela. 45 | */ 46 | public String getTitulo() { 47 | return this.janela.getTitle(); 48 | } 49 | 50 | /** 51 | * Retorna o nome do comando (possivelmente o caminho completo do arquivo) do programa executável da janela, 52 | * se conhecido. 53 | * 54 | * @return Comando do programa executável ou caminho do arquivo executável. 55 | */ 56 | public String getComando() { 57 | return this.janela.getCommand(); 58 | } 59 | 60 | /** 61 | * Retorna um Objeto {@link Rectangle} que representa a localização e o tamanho da janela. 62 | * 63 | * @return Localização e tamanho da janela. 64 | * @see Rectangle 65 | */ 66 | public Rectangle getLocalizacaoETamanho() { 67 | return this.janela.getLocAndSize(); 68 | } 69 | 70 | /** 71 | * Retorna se a janela está visível para o usuário. 72 | * 73 | * @return true se a janela está visível para o usuário, caso contrário false. 74 | */ 75 | public Boolean isVisivel() { 76 | return this.janela.isVisible(); 77 | } 78 | 79 | @Override 80 | public String toString() { 81 | final StringBuilder sb = new StringBuilder("\n"); 82 | sb.append("PID: ").append(getPid()).append("\n"); 83 | sb.append("Id da janela: ").append(getJanelaId()).append("\n"); 84 | sb.append("Título: ").append(getTitulo()).append("\n"); 85 | sb.append("Comando: ").append(getComando()).append("\n"); 86 | sb.append("Localização: ").append(getLocalizacaoETamanho()).append("\n"); 87 | sb.append("Visível: ").append(isVisivel()).append("\n"); 88 | return sb.toString(); 89 | } 90 | } 91 | -------------------------------------------------------------------------------- /src/main/java/com/github/britooo/looca/api/group/dispositivos/DispositivosUsbGrupo.java: -------------------------------------------------------------------------------- 1 | package com.github.britooo.looca.api.group.dispositivos; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | import java.util.stream.Collectors; 6 | 7 | import oshi.SystemInfo; 8 | import oshi.hardware.HardwareAbstractionLayer; 9 | import oshi.hardware.UsbDevice; 10 | 11 | public class DispositivosUsbGrupo { 12 | 13 | private final HardwareAbstractionLayer hardwareAbstractionLayer = new SystemInfo().getHardware(); 14 | 15 | /** 16 | * Retorna o número de dispositivos USB. 17 | * 18 | * @return Número de dispositivos identificados como USB. 19 | */ 20 | public Integer getTotalDispositvosUsb() { 21 | int totalDispositivosConectados = 0; 22 | 23 | for(UsbDevice item : this.hardwareAbstractionLayer.getUsbDevices(false)) { 24 | totalDispositivosConectados += item.getConnectedDevices().size(); 25 | } 26 | 27 | return totalDispositivosConectados; 28 | } 29 | 30 | /** 31 | * Retorna o número de dispositivos USB conectados. 32 | * 33 | * @return Número de dispositivos conectados identificados como USB. 34 | */ 35 | public Integer getTotalDispositvosUsbConectados() { 36 | int totalDispositivosConectados = 0; 37 | 38 | for(UsbDevice item : this.hardwareAbstractionLayer.getUsbDevices(true)) { 39 | totalDispositivosConectados += item.getConnectedDevices().size(); 40 | } 41 | 42 | return totalDispositivosConectados; 43 | } 44 | 45 | /** 46 | * Retorna os dispositivos USB. 47 | * 48 | * @return Dispositivos identificados como USB. 49 | */ 50 | 51 | public List getDispositivosUsb() { 52 | List dispositivoUsbList = new ArrayList<>(); 53 | 54 | for(UsbDevice item : this.hardwareAbstractionLayer.getUsbDevices(false)) { 55 | dispositivoUsbList.add(DispositivosUsbGrupo.of(item)); 56 | } 57 | 58 | return dispositivoUsbList; 59 | } 60 | 61 | /** 62 | * Retorna os dispositivos USB conectados. 63 | * 64 | * @return Dispositivos conectados identificados como USB. 65 | */ 66 | public List getDispositivosUsbConectados() { 67 | List dispositivoUsbList = new ArrayList<>(); 68 | 69 | for(UsbDevice item : this.hardwareAbstractionLayer.getUsbDevices(true)) { 70 | for (UsbDevice usbDevice : item.getConnectedDevices()) { 71 | dispositivoUsbList.add(DispositivosUsbGrupo.of(usbDevice)); 72 | } 73 | } 74 | 75 | return dispositivoUsbList; 76 | } 77 | 78 | private static DispositivoUsb of(UsbDevice usbDevice) { 79 | if (usbDevice == null) { 80 | return null; 81 | } 82 | 83 | return new DispositivoUsb(usbDevice); 84 | } 85 | } 86 | 87 | -------------------------------------------------------------------------------- /src/main/java/com/github/britooo/looca/api/group/processador/ProcessadorCacheLoader.java: -------------------------------------------------------------------------------- 1 | package com.github.britooo.looca.api.group.processador; 2 | 3 | import java.util.concurrent.Callable; 4 | import java.util.concurrent.ExecutionException; 5 | import java.util.concurrent.ExecutorService; 6 | import java.util.concurrent.Executors; 7 | import java.util.concurrent.Future; 8 | import java.util.concurrent.TimeUnit; 9 | 10 | import com.google.common.cache.CacheBuilder; 11 | import com.google.common.cache.CacheLoader; 12 | import com.google.common.cache.LoadingCache; 13 | import com.google.common.util.concurrent.ListenableFuture; 14 | import com.google.common.util.concurrent.ListenableFutureTask; 15 | import com.google.common.util.concurrent.ListeningExecutorService; 16 | import com.google.common.util.concurrent.MoreExecutors; 17 | 18 | import oshi.SystemInfo; 19 | import oshi.hardware.CentralProcessor; 20 | 21 | public class ProcessadorCacheLoader { 22 | 23 | private final ExecutorService executor = Executors.newSingleThreadExecutor(); 24 | private final ListeningExecutorService lExecutor = MoreExecutors.listeningDecorator(executor); 25 | private final CentralProcessor processador = new SystemInfo().getHardware().getProcessor(); 26 | 27 | private final LoadingCache loader; 28 | 29 | public ProcessadorCacheLoader() { 30 | loader = CacheBuilder.newBuilder() 31 | .maximumSize(1000) 32 | .refreshAfterWrite(1000, TimeUnit.MILLISECONDS) 33 | .build(new CacheLoader() { 34 | @Override 35 | public Double load(String key) throws Exception { 36 | return loadUso(); 37 | } 38 | 39 | @Override 40 | public ListenableFuture reload(String key, Double oldValue) throws Exception { 41 | return getUsoOshi(); 42 | } 43 | }); 44 | } 45 | 46 | /** 47 | * Retorna uso do processador em procentagem. 48 | * @return Uso do processador em procentagem. 49 | */ 50 | public Double getUso() { 51 | try { 52 | return loader.get("uso"); 53 | } catch (ExecutionException e) { 54 | e.printStackTrace(); 55 | return 0.0; 56 | } 57 | } 58 | 59 | private Double loadUso() { 60 | Double resultado = 0.0; 61 | Future uso = getUsoOshi(); 62 | 63 | try { 64 | while (!uso.isDone()) { 65 | TimeUnit.SECONDS.sleep(2); 66 | } 67 | resultado = uso.get(); 68 | } catch (InterruptedException e) { 69 | e.printStackTrace(); 70 | } catch (ExecutionException e) { 71 | e.printStackTrace(); 72 | } 73 | return resultado; 74 | } 75 | 76 | private ListenableFuture getUsoOshi() { 77 | long[] prevTicks = this.processador.getSystemCpuLoadTicks(); 78 | 79 | ListenableFutureTask task = ListenableFutureTask.create(new Callable() { 80 | public Double call() throws InterruptedException { 81 | TimeUnit.SECONDS.sleep(1); 82 | return processador.getSystemCpuLoadBetweenTicks(prevTicks) * 100; 83 | } 84 | }); 85 | 86 | lExecutor.execute(task); 87 | return task; 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /src/main/java/com/github/britooo/looca/api/util/Conversor.java: -------------------------------------------------------------------------------- 1 | package com.github.britooo.looca.api.util; 2 | 3 | import java.util.concurrent.TimeUnit; 4 | 5 | 6 | public class Conversor { 7 | 8 | private static final long KIBI = 1L << 10; 9 | private static final long MEBI = 1L << 20; 10 | private static final long GIBI = 1L << 30; 11 | private static final long TEBI = 1L << 40; 12 | private static final long PEBI = 1L << 50; 13 | private static final long EXBI = 1L << 60; 14 | 15 | /** 16 | * Retorna uma String com o valor em bytes convertidos em sua ordem de grandeza equivalente. 17 | * @param bytes 18 | * Corresponde a quantidade de bytes (Ex: 1000000000 bytes = 1 Gigabyte). 19 | * @return Retorna uma String que corresponde aos bytes convertidos em sua ordem de grandeza equivalente. 20 | */ 21 | public static String formatarBytes(long bytes) { 22 | if (bytes == 1L) { // bytes 23 | return String.format("%d byte", bytes); 24 | } else if (bytes < KIBI) { // bytes 25 | return String.format("%d bytes", bytes); 26 | } else if (bytes < MEBI) { // KiB 27 | return formatarUnidades(bytes, KIBI, "KiB"); 28 | } else if (bytes < GIBI) { // MiB 29 | return formatarUnidades(bytes, MEBI, "MiB"); 30 | } else if (bytes < TEBI) { // GiB 31 | return formatarUnidades(bytes, GIBI, "GiB"); 32 | } else if (bytes < PEBI) { // TiB 33 | return formatarUnidades(bytes, TEBI, "TiB"); 34 | } else if (bytes < EXBI) { // PiB 35 | return formatarUnidades(bytes, PEBI, "PiB"); 36 | } else { // EiB 37 | return formatarUnidades(bytes, EXBI, "EiB"); 38 | } 39 | } 40 | 41 | /** 42 | * Retorna uma String com segundos convertidos em data; 43 | * @param secs 44 | * Corresponde aos segundos. 45 | * @return Devolve uma String com os segundos convertidos em data. 46 | */ 47 | public static String formatarSegundosDecorridos(long secs) { 48 | 49 | long eTime = secs; 50 | 51 | final long days = TimeUnit.SECONDS.toDays(eTime); 52 | eTime -= TimeUnit.DAYS.toSeconds(days); 53 | 54 | final long hr = TimeUnit.SECONDS.toHours(eTime); 55 | eTime -= TimeUnit.HOURS.toSeconds(hr); 56 | 57 | final long min = TimeUnit.SECONDS.toMinutes(eTime); 58 | eTime -= TimeUnit.MINUTES.toSeconds(min); 59 | 60 | final long sec = eTime; 61 | 62 | return String.format("%d days, %02d:%02d:%02d", days, hr, min, sec); 63 | } 64 | 65 | private static String formatarUnidades(long valor, long prefixo, String unidade) { 66 | if (valor % prefixo == 0) { 67 | return String.format("%d %s", valor / prefixo, unidade); 68 | } 69 | return String.format("%.1f %s", (double) valor / prefixo, unidade); 70 | } 71 | 72 | private static Double formatarUnidades(long valor, long prefixo) { 73 | if (valor % prefixo == 0) { 74 | return (double) valor / prefixo; 75 | } 76 | return (double) valor / prefixo; 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | [![Looca API](./readme/readmes.gif)]() 3 | # Log of Computer Activity 4 | 5 | ### **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. 6 | # 7 | 8 | ![Badge](https://img.shields.io/badge/Code-Java-F76911?&logo=java) 9 | ![Badge](https://img.shields.io/badge/compiler-maven-4c9d1flogo=maven) 10 | [![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) 11 | # 12 | ## Instalação 13 | **Adicione no pom.xml**: 14 | ```xml 15 | 16 | com.github.britooo 17 | looca-api 18 | --INSIRA A VERSÃO ATUAL-- 19 | 20 | ``` 21 | 22 | **Execute no terminal (linha de comando):** 23 | ``` 24 | $ mvn install 25 | ``` 26 | # 27 | ## Uso 28 | 29 | **Crie uma instância do objeto Looca:** 30 | ```java 31 | Looca looca = new Looca(); 32 | ``` 33 | 34 | **Esse objeto disponibiliza os seguintes recursos:** 35 | 36 | ```java 37 | private final Sistema sistema; 38 | private final Memoria memoria; 39 | private final Processador processador; 40 | private final Temperatura temperatura; 41 | private final DiscoGrupo grupoDeDiscos; 42 | private final ServicoGrupo grupoDeServicos; 43 | private final ProcessoGrupo grupoDeProcessos; 44 | ``` 45 | 46 | **Coletando dados do sistema operacional** 47 | 48 | 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: 49 | 50 | 51 | ```java 52 | Sistema sistema = looca.getSistema(); 53 | 54 | ``` 55 | O objeto Sistema por sua vez, também possui **getters** que devolvem informações do sistema: 56 | ```java 57 | sistema.getPermissao(); 58 | sistema.getFabricante(); 59 | sistema.getArquitetura(); 60 | sistema.getInicializado(); 61 | sistema.getSistemaOperacional(); 62 | ``` 63 | 64 | Para exibir no console as informações do sistema, basta imprimir o objeto: 65 | ```java 66 | System.out.println(sistema); 67 | ``` 68 | Saída do console: 69 | ``` 70 | Sistema operacional: Ubuntu 71 | Fabricante: GNU/Linux 72 | Arquitetura: 64 bits. 73 | Inicializado: 2021-03-13T16:07:18Z 74 | Tempo de atividade: 3 days, 06:55:53 75 | Permissões: 76 | Executando como usuário padrão 77 | ``` 78 | 79 | 80 | **Trabalhando com os grupos** 81 | 82 | 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: 83 | 84 | ```java 85 | //Criação do gerenciador 86 | DiscoGrupo grupoDeDiscos = looca.getGrupoDeDiscos(); 87 | 88 | //Obtendo lista de discos a partir do getter 89 | List discos = grupoDeDiscos.getDiscos(); 90 | ``` 91 | Exibindo as informações de cada disco: 92 | 93 | ```java 94 | for (Disco disco : discos) { 95 | System.out.println(disco); 96 | } 97 | ``` 98 | 99 | ## Desenvolvedores 100 | # 101 | - @Britoo 102 | - @miniguiti 103 | 104 | ## Licença 105 | # 106 | [MIT](LICENSE) © 2021 Bandtec Digital School 107 | -------------------------------------------------------------------------------- /src/main/java/com/github/britooo/looca/api/group/discos/Volume.java: -------------------------------------------------------------------------------- 1 | package com.github.britooo.looca.api.group.discos; 2 | 3 | import oshi.software.os.OSFileStore; 4 | 5 | public class Volume { 6 | 7 | private final OSFileStore volume; 8 | 9 | public Volume(OSFileStore volume) { 10 | this.volume = volume; 11 | } 12 | 13 | 14 | /** 15 | * Retorna o UUID/GUID do sistema de arquivos. 16 | * 17 | * @return UUID/GUID do sistema de arquivos. 18 | */ 19 | public String getUUID() { 20 | return this.volume.getUUID(); 21 | } 22 | 23 | /** 24 | *

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

28 | * 29 | * @return Nome do sistema de arquivos 30 | */ 31 | public String getNome() { 32 | return this.volume.getName(); 33 | } 34 | 35 | /** 36 | *

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

40 | * 41 | * @return Nome do volume do sistema de arquivos 42 | */ 43 | public String getVolume() { 44 | return this.volume.getVolume(); 45 | } 46 | 47 | /** 48 | * Retorna espaço/capacidade total da unidade (Em bytes). 49 | * 50 | * @return Espaço/capacidade total da unidade (Em bytes). 51 | */ 52 | public Long getTotal() { 53 | return this.volume.getTotalSpace(); 54 | } 55 | 56 | /** 57 | *

Retorna o espaço livre na unidade.

58 | *
59 | *

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

60 | * 61 | * @return Espaço livre na unidade (Em bytes). 62 | */ 63 | public Long getDisponivel() { 64 | return this.volume.getFreeSpace(); 65 | } 66 | 67 | /** 68 | * Retorna o tipo do sistema de arquivos (FAT, NTFS, etx2, ext4, etc...). 69 | * 70 | * @return sistema de arquivos (FAT, NTFS, etx2, ext4, etc...). 71 | */ 72 | public String getTipo() { 73 | return this.volume.getType(); 74 | } 75 | 76 | /** 77 | *

Retorna o ponto de montagem do sistema de arquivos.

78 | *
79 | *

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

81 | * 82 | * @return Ponto de montagem do sistema de arquivos. 83 | */ 84 | public String getPontoDeMontagem() { 85 | return this.volume.getMount(); 86 | } 87 | 88 | 89 | /** 90 | * Retorna uma String com todas as informações relacionadas ao Volume. 91 | * @return String com todas as informações relacionadas ao Volume. 92 | */ 93 | @Override 94 | public String toString() { 95 | 96 | StringBuilder str = new StringBuilder(); 97 | 98 | str.append("UUID: ").append(this.getUUID()).append("\n"); 99 | str.append("nome: ").append(this.getNome()).append("\n"); 100 | str.append("volume: ").append(this.getVolume()).append("\n"); 101 | str.append("total: ").append(this.getTotal()).append("\n"); 102 | str.append("disponível: ").append(this.getDisponivel()).append("\n"); 103 | str.append("tipo: ").append(this.getTipo()).append("\n"); 104 | str.append("ponto de montagem: ").append(this.getPontoDeMontagem()).append("\n"); 105 | 106 | 107 | return str.toString(); 108 | } 109 | } 110 | -------------------------------------------------------------------------------- /src/main/java/com/github/britooo/looca/api/group/sistema/Sistema.java: -------------------------------------------------------------------------------- 1 | package com.github.britooo.looca.api.group.sistema; 2 | 3 | import oshi.SystemInfo; 4 | 5 | import java.time.Instant; 6 | 7 | import oshi.software.os.OperatingSystem; 8 | import com.github.britooo.looca.api.util.Conversor; 9 | 10 | public class Sistema { 11 | 12 | private final OperatingSystem os; 13 | private final String fabricante; 14 | private final Integer arquitetura; 15 | private final String sistemaOperacional; 16 | 17 | public Sistema() { 18 | os = new SystemInfo().getOperatingSystem(); 19 | this.arquitetura = this.os.getBitness(); 20 | this.fabricante = this.os.getManufacturer(); 21 | this.sistemaOperacional = this.os.getFamily(); 22 | } 23 | 24 | /** 25 | * Retorna o Sistema Operacional. 26 | * 27 | * @return Sistema Operacional. 28 | */ 29 | public String getSistemaOperacional() { 30 | return sistemaOperacional; 31 | } 32 | 33 | /** 34 | * Retorna a empresa fabricante do sistema operacional. 35 | * 36 | * @return Fabricante do sitema operacional. 37 | */ 38 | public String getFabricante() { 39 | return fabricante; 40 | } 41 | 42 | /** 43 | * Retorna o número de bits (32 ou 64) do sistema operacional. 44 | * 45 | * @return Número de bits do sistema operacional. 46 | */ 47 | public Integer getArquitetura() { 48 | return arquitetura; 49 | } 50 | 51 | /** 52 | * Retorna o momento em que o sistema operacional foi inicializado. 53 | * 54 | * @return Data aproximada da inicialização do sistema operacional. 55 | */ 56 | public Instant getInicializado() { 57 | return Instant.ofEpochSecond(this.os.getSystemBootTime()); 58 | } 59 | 60 | /** 61 | * Retorna o tempo de funcionamento do sistema (tempo desde a inicialização). 62 | * 63 | * @return Quantidade de segundos desde a inicialização. 64 | */ 65 | public Long getTempoDeAtividade() { 66 | return this.os.getSystemUptime(); 67 | } 68 | 69 | /** 70 | * Retorna True caso o processo atual tem permissões elevadas, como sudo/Administrador. 71 | * 72 | * @return True se este processo tiver permissões elevadas. 73 | */ 74 | public Boolean getPermissao() { 75 | return this.os.isElevated(); 76 | } 77 | 78 | /** 79 | * Retorna uma String com todas as informações relacionadas ao Sistema Operacional. 80 | * @return String que contém todas as informações relacionadas ao Sistema Operacional. 81 | */ 82 | @Override 83 | public String toString() { 84 | 85 | final StringBuilder sb = new StringBuilder(); 86 | 87 | sb.append("Sistema operacional: ") 88 | .append(sistemaOperacional) 89 | .append("\n"); 90 | 91 | sb.append("Fabricante: ") 92 | .append(fabricante) 93 | .append("\n"); 94 | 95 | sb.append("Arquitetura: ") 96 | .append(arquitetura) 97 | .append("bits\n"); 98 | 99 | sb.append("Inicializado: ") 100 | .append(getInicializado()) 101 | .append("\n"); 102 | 103 | sb.append("Tempo de atividade: ") 104 | .append(Conversor.formatarSegundosDecorridos(this.getTempoDeAtividade())) 105 | .append("\n"); 106 | 107 | sb.append("Permissões: ") 108 | .append(("Executando como ")) 109 | .append((this.getPermissao() ? "root" : "usuário padrão")) 110 | .append("\n"); 111 | 112 | return sb.toString(); 113 | } 114 | } 115 | -------------------------------------------------------------------------------- /src/main/java/com/github/britooo/looca/api/group/rede/RedeInterface.java: -------------------------------------------------------------------------------- 1 | package com.github.britooo.looca.api.group.rede; 2 | 3 | import oshi.hardware.NetworkIF; 4 | 5 | import java.util.Arrays; 6 | import java.util.List; 7 | 8 | public class RedeInterface { 9 | 10 | private final NetworkIF redeInterface; 11 | 12 | public RedeInterface(NetworkIF redeInterface) { 13 | this.redeInterface = redeInterface; 14 | } 15 | 16 | public static RedeInterface of(NetworkIF redeInterface) { 17 | if (redeInterface == null) { 18 | return null; 19 | } 20 | 21 | return new RedeInterface(redeInterface); 22 | } 23 | 24 | /** 25 | * Retorna o nome da interface de rede. 26 | * 27 | * @return Nome da interface de rede. 28 | */ 29 | public String getNome() { 30 | return this.redeInterface.getName(); 31 | } 32 | 33 | /** 34 | * Retorna a descrição da interface de rede. 35 | * 36 | * @return Descrição da interface. 37 | */ 38 | public String getNomeExibicao() { 39 | return this.redeInterface.getDisplayName(); 40 | } 41 | 42 | /** 43 | * Retorna uma lista com os endereços de IP (v4) relacionados com essa interface de rede. 44 | * 45 | * @return Lista de endereços de IP 46 | */ 47 | public List getEnderecoIpv4() { 48 | return Arrays.asList(this.redeInterface.getIPv4addr()); 49 | } 50 | 51 | /** 52 | * Retorna uma lista com os endereços de IP (v6) relacionados com essa interface de rede. 53 | * 54 | * @return Lista de endereços de IP 55 | */ 56 | public List getEnderecoIpv6() { 57 | return Arrays.asList(this.redeInterface.getIPv6addr()); 58 | } 59 | 60 | /** 61 | * Retorna o endereço MAC da interface de rede. 62 | * 63 | * @return MAC address. 64 | */ 65 | public String getEnderecoMac() { 66 | return this.redeInterface.getMacaddr(); 67 | } 68 | 69 | /** 70 | * Retorna o total de bytes recebidos pela interface de rede. 71 | * 72 | * @return Total de bytes recebidos 73 | */ 74 | public Long getBytesRecebidos() { 75 | this.redeInterface.updateAttributes(); 76 | return this.redeInterface.getBytesRecv(); 77 | } 78 | 79 | /** 80 | * Retorna o total de bytes enviados pela interface de rede. 81 | * 82 | * @return Total de bytes enviados 83 | */ 84 | public Long getBytesEnviados() { 85 | this.redeInterface.updateAttributes(); 86 | return this.redeInterface.getBytesSent(); 87 | } 88 | 89 | /** 90 | * Retorna o total de pacotes recebidos pela interface de rede. 91 | * 92 | * @return Total de pacotes recebidos 93 | */ 94 | public Long getPacotesRecebidos() { 95 | return this.redeInterface.getPacketsRecv(); 96 | } 97 | 98 | /** 99 | * Retorna o total de pacotes enviados pela interface de rede. 100 | * 101 | * @return Total de pacotes enviados 102 | */ 103 | public Long getPacotesEnviados() { 104 | return this.redeInterface.getPacketsSent(); 105 | } 106 | 107 | @Override 108 | public String toString() { 109 | final StringBuilder sb = new StringBuilder("\n"); 110 | sb.append("Nome: ").append(getNome()).append("\n"); 111 | sb.append("Nome de Exibição: ").append(getNomeExibicao()).append("\n"); 112 | sb.append("Endereço IPv4: ").append(getEnderecoIpv4()).append("\n"); 113 | sb.append("Endereço IPv6: ").append(getEnderecoIpv6()).append("\n"); 114 | sb.append("Endereço MAC: ").append(getEnderecoMac()).append("\n"); 115 | sb.append("Bytes recebidos: ").append(getBytesRecebidos()).append("\n"); 116 | sb.append("Bytes enviados: ").append(getBytesEnviados()).append("\n"); 117 | sb.append("Pacotes recebidos: ").append(getPacotesRecebidos()).append("\n"); 118 | sb.append("Pacotes enviados: ").append(getPacotesEnviados()).append("\n"); 119 | return sb.toString(); 120 | } 121 | } 122 | -------------------------------------------------------------------------------- /src/main/java/com/github/britooo/looca/api/group/discos/Disco.java: -------------------------------------------------------------------------------- 1 | package com.github.britooo.looca.api.group.discos; 2 | 3 | import oshi.hardware.HWDiskStore; 4 | 5 | public class Disco { 6 | 7 | private final HWDiskStore disco; 8 | 9 | public Disco(HWDiskStore disco) { 10 | this.disco = disco; 11 | } 12 | 13 | /** 14 | * Retorna o nome do disco. 15 | * 16 | * @return Nome do disco. 17 | */ 18 | public String getNome() { 19 | return disco.getName(); 20 | } 21 | 22 | /** 23 | * Retorna o modelo do disco. 24 | * 25 | * @return Modelo do disco. 26 | */ 27 | public String getModelo() { 28 | return disco.getModel(); 29 | } 30 | 31 | /** 32 | * Retorna o número do serial do disco, se disponível. 33 | * 34 | * @return Número serial do disco, se disponível. 35 | */ 36 | public String getSerial() { 37 | return disco.getSerial(); 38 | } 39 | 40 | /** 41 | * Retorna o tamanho do disco em bytes. 42 | * 43 | * @return Tamanho do disco em bytes. 44 | */ 45 | public Long getTamanho() { 46 | return disco.getSize(); 47 | } 48 | 49 | /** 50 | * Retorna o número de leituras do disco. 51 | * 52 | * @return Número de leituras do disco. 53 | */ 54 | public Long getLeituras() { 55 | return disco.getReads(); 56 | } 57 | 58 | /** 59 | * Retorna o número de bytes lidos pelo disco. 60 | * 61 | * @return Número de bytes lidos pelo disco. 62 | */ 63 | public Long getBytesDeLeitura() { 64 | return disco.getReadBytes(); 65 | } 66 | 67 | /** 68 | * Retorna o número de escritas no disco. 69 | * 70 | * @return Número de escritas no disco. 71 | */ 72 | public Long getEscritas() { 73 | return disco.getWrites(); 74 | } 75 | 76 | /** 77 | * Retorna o número de bytes escritos no disco. 78 | * 79 | * @return Número de bytes escritos no disco. 80 | */ 81 | public Long getBytesDeEscritas() { 82 | return disco.getWriteBytes(); 83 | } 84 | 85 | /** 86 | *

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

87 | *
88 | *

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

90 | * 91 | * @return Comprimento da fila de disco (E/S's em andamento). 92 | */ 93 | public Long getTamanhoAtualDaFila() { 94 | return disco.getCurrentQueueLength(); 95 | } 96 | 97 | /** 98 | * Retorna o tempo gasto lendo ou escrevendo no disco, em milissegundos. 99 | * 100 | * @return Tempo gasto lendo ou escrevendo no disco, em milissegundos. 101 | */ 102 | 103 | public Long getTempoDeTransferencia() { 104 | return disco.getTransferTime(); 105 | } 106 | 107 | 108 | /** 109 | * Retorna uma String com todas as informações relacionadas ao Disco. 110 | * @return String com todas as informações relacionadas ao Disco. 111 | */ 112 | @Override 113 | public String toString() { 114 | 115 | StringBuilder sb = new StringBuilder(); 116 | 117 | sb.append("\nNome: ") 118 | .append(getNome()) 119 | .append("\n"); 120 | 121 | sb.append("Modelo: ") 122 | .append(getModelo()) 123 | .append("\n"); 124 | 125 | sb.append("Serial: ") 126 | .append(getSerial()) 127 | .append("\n"); 128 | 129 | sb.append("Tamanho: ") 130 | .append(getTamanho()) 131 | .append("\n"); 132 | 133 | sb.append("Leituras: ") 134 | .append(getLeituras()) 135 | .append("\n"); 136 | 137 | sb.append("Bytes de leitura: ") 138 | .append(getBytesDeLeitura()) 139 | .append("\n"); 140 | 141 | sb.append("Escritas: ") 142 | .append(getEscritas()) 143 | .append("\n"); 144 | 145 | sb.append("Bytes de escritas: ") 146 | .append(getBytesDeEscritas()) 147 | .append("\n"); 148 | 149 | sb.append("Tamanho atual da fila: ") 150 | .append(getTamanhoAtualDaFila()) 151 | .append("\n"); 152 | 153 | sb.append("Tempo de transferência: ") 154 | .append(getTempoDeTransferencia()) 155 | .append("\n"); 156 | 157 | return sb.toString(); 158 | } 159 | } 160 | -------------------------------------------------------------------------------- /src/main/java/com/github/britooo/looca/api/core/Looca.java: -------------------------------------------------------------------------------- 1 | package com.github.britooo.looca.api.core; 2 | 3 | import com.github.britooo.looca.api.group.discos.DiscoGrupo; 4 | import com.github.britooo.looca.api.group.dispositivos.DispositivosUsbGrupo; 5 | import com.github.britooo.looca.api.group.janelas.JanelaGrupo; 6 | import com.github.britooo.looca.api.group.memoria.Memoria; 7 | import com.github.britooo.looca.api.group.processador.Processador; 8 | import com.github.britooo.looca.api.group.processos.ProcessoGrupo; 9 | import com.github.britooo.looca.api.group.rede.Rede; 10 | import com.github.britooo.looca.api.group.servicos.ServicoGrupo; 11 | import com.github.britooo.looca.api.group.sistema.Sistema; 12 | import com.github.britooo.looca.api.group.temperatura.Temperatura; 13 | import oshi.SystemInfo; 14 | 15 | public class Looca { 16 | 17 | private final Sistema sistema; 18 | private final Memoria memoria; 19 | private final Processador processador; 20 | private final Temperatura temperatura; 21 | private final Rede rede; 22 | private final DiscoGrupo grupoDeDiscos; 23 | private final ServicoGrupo grupoDeServicos; 24 | private final ProcessoGrupo grupoDeProcessos; 25 | private final JanelaGrupo grupoDeJanelas; 26 | private final DispositivosUsbGrupo grupoDeDispositivosUsb; 27 | 28 | public Looca() { 29 | SystemInfo si = new SystemInfo(); 30 | 31 | this.sistema = new Sistema(); 32 | this.memoria = new Memoria(); 33 | this.processador = new Processador(); 34 | this.temperatura = new Temperatura(); 35 | this.rede = new Rede(si); 36 | this.grupoDeDiscos = new DiscoGrupo(); 37 | this.grupoDeServicos = new ServicoGrupo(); 38 | this.grupoDeProcessos = new ProcessoGrupo(); 39 | this.grupoDeJanelas = new JanelaGrupo(si); 40 | this.grupoDeDispositivosUsb = new DispositivosUsbGrupo(); 41 | } 42 | 43 | /** 44 | * Retorna um Objeto de Sistema que contém métodos relacionados a coleta de informações do Sistema Operacional. 45 | * @return Objeto Sistema. 46 | */ 47 | public Sistema getSistema() { 48 | return sistema; 49 | } 50 | 51 | /** 52 | * Retorna um Objeto de Memoria que contém métodos relacionados a coleta de informações da Memória RAM. 53 | * @return Objeto Memoria. 54 | */ 55 | public Memoria getMemoria() { 56 | return memoria; 57 | } 58 | 59 | /** 60 | * Retorna um Objeto de Processador que contém métodos relacionados a coleta de informações do Processador. 61 | * @return Objeto Processador. 62 | */ 63 | public Processador getProcessador() { 64 | return processador; 65 | } 66 | 67 | /** 68 | * Retorna um Objeto de Temperatura que contém métodos relacionados a coleta de informações de Temperatura. 69 | * @return Objeto Temperatura. 70 | */ 71 | public Temperatura getTemperatura() { 72 | return temperatura; 73 | } 74 | 75 | /** 76 | * Retorna um Objeto de DiscoGrupo que contém métodos relacionados a coleta de informações do Grupo de Discos. 77 | * @return Objeto DiscoGrupo. 78 | */ 79 | public DiscoGrupo getGrupoDeDiscos() { 80 | return grupoDeDiscos; 81 | } 82 | 83 | /** 84 | * Retorna um Objeto de ServicoGrupo que contém métodos relacionados a coleta de informações do Grupo de Serviços. 85 | * @return Objeto ServicoGrupo. 86 | */ 87 | public ServicoGrupo getGrupoDeServicos() { 88 | return grupoDeServicos; 89 | } 90 | 91 | /** 92 | * Retorna um Objeto de ProcessoGrupo que contém métodos relacionados a coleta de informações do Grupo de Processos. 93 | * @return Objeto ProcessoGrupo. 94 | */ 95 | public ProcessoGrupo getGrupoDeProcessos() { 96 | return grupoDeProcessos; 97 | } 98 | 99 | /** 100 | * Retorna um Objeto de DispositivosUsbGrupo que contém métodos relacionados a coleta de informações do Grupo de Dispositivos USB. 101 | * @return Objeto DispositivosUsbGrupo. 102 | */ 103 | public DispositivosUsbGrupo getDispositivosUsbGrupo() { 104 | return grupoDeDispositivosUsb; 105 | } 106 | 107 | /** 108 | * Retorna um Objeto de Rede que contém métodos relacionados a coleta de informações de Rede. 109 | * @return Objeto Rede. 110 | */ 111 | public Rede getRede() { 112 | return rede; 113 | } 114 | 115 | /** 116 | * Retorna um Objeto de JanelaGrupo que contém métodos relacionados a coleta de informações do 117 | * Grupo de Janelas do computador. 118 | * @return Objeto Rede. 119 | */ 120 | public JanelaGrupo getGrupoDeJanelas() { 121 | return grupoDeJanelas; 122 | } 123 | } 124 | -------------------------------------------------------------------------------- /src/main/java/com/github/britooo/looca/api/group/processos/Processo.java: -------------------------------------------------------------------------------- 1 | package com.github.britooo.looca.api.group.processos; 2 | 3 | import oshi.software.os.OSProcess; 4 | import com.github.britooo.looca.api.group.memoria.Memoria; 5 | 6 | public class Processo { 7 | 8 | 9 | private final OSProcess processo; 10 | private final Memoria memoria; 11 | 12 | public Processo(OSProcess processo, Memoria memoria) { 13 | this.processo = processo; 14 | this.memoria = memoria; 15 | } 16 | 17 | /** 18 | *

Retorna o ID do processo.

19 | *
20 | *

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

22 | * 23 | * @return ID do processo. 24 | */ 25 | public Integer getPid() { 26 | return this.processo.getProcessID(); 27 | } 28 | 29 | /** 30 | * Retorna o nome do processo, geralmente o programa executável. 31 | * 32 | * @return Nome do processo, geralmente o programa executável. 33 | */ 34 | public String getNome() { 35 | return this.processo.getName(); 36 | } 37 | 38 | /** 39 | *

Retorna o valor percentual de uso da CPU pelo processo.

40 | *
41 | *

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

49 | * 50 | * @return Valor percentual de uso da CPU pelo processo. 51 | */ 52 | public Double getUsoCpu() { 53 | return (100d * (processo.getKernelTime() + processo.getUserTime()) / processo.getUpTime()); 54 | } 55 | 56 | /** 57 | *

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

58 | *

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).

59 | *
60 | *

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. 61 | * Retorna (o tamanho do conjunto residente / A quantidade de memória física real, em bytes).

62 | * 63 | * @return Valor percentual de uso da Memória RAM pelo processo. 64 | */ 65 | public Double getUsoMemoria() { 66 | return (100d * processo.getResidentSetSize() / memoria.getTotal()); 67 | } 68 | 69 | /** 70 | *

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

71 | *
72 | *

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

77 | *
78 | *

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

84 | * 85 | * @return Tamanho do conjunto residente (ou Quantidade de bytes utilizados). 86 | */ 87 | public Long getBytesUtilizados() { 88 | return processo.getResidentSetSize(); 89 | } 90 | 91 | /** 92 | *

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

93 | *
94 | *

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

96 | * 97 | * @return Tamanho da memória virtual. 98 | */ 99 | public Long getMemoriaVirtualUtilizada() { 100 | return processo.getVirtualSize(); 101 | } 102 | 103 | /** 104 | * Retorna uma String com todas as informações relacionadas ao Processo. 105 | * @return String com todas as informações relacionadas ao Grupo de Processos. 106 | */ 107 | @Override 108 | public String toString() { 109 | 110 | final StringBuilder sb = new StringBuilder(); 111 | 112 | sb.append("PID: ").append(getPid()) 113 | .append("\n"); 114 | 115 | sb.append("Uso CPU: ") 116 | .append(String.format("%.1f", getUsoCpu())) 117 | .append("\n"); 118 | 119 | sb.append("Uso memória: ") 120 | .append(String.format("%.1f", getUsoMemoria())) 121 | .append("\n"); 122 | 123 | sb.append("Bytes utilizados: ") 124 | .append(getBytesUtilizados()) 125 | .append("\n"); 126 | 127 | sb.append("Memória virtual utilizada: ") 128 | .append(getMemoriaVirtualUtilizada()) 129 | .append("\n"); 130 | 131 | return sb.toString(); 132 | } 133 | 134 | } 135 | -------------------------------------------------------------------------------- /pom.xml.versionsBackup: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4.0.0 4 | com.github.britooo 5 | looca-api 6 | 1.0-SNAPSHOT 7 | jar 8 | 9 | UTF-8 10 | 11 11 | 11 12 | 13 | 14 | Log of computer activity - Looca 15 | API for collecting computer data for educational purposes. 16 | https://github.com/Britooo/looca-api 17 | 18 | 19 | 20 | 21 | org.apache.maven.plugins 22 | maven-compiler-plugin 23 | 24 | 11 25 | 11 26 | 27 | 28 | 29 | org.sonatype.plugins 30 | nexus-staging-maven-plugin 31 | 1.6.7 32 | true 33 | 34 | ossrh 35 | https://oss.sonatype.org/ 36 | true 37 | 38 | 39 | 40 | org.apache.maven.plugins 41 | maven-source-plugin 42 | 2.2.1 43 | 44 | 45 | attach-sources 46 | 47 | jar-no-fork 48 | 49 | 50 | 51 | 52 | 53 | org.apache.maven.plugins 54 | maven-javadoc-plugin 55 | 56 | false 57 | 58 | 2.9.1 59 | 60 | 61 | attach-javadocs 62 | 63 | jar 64 | 65 | 66 | 67 | 68 | 69 | org.apache.maven.plugins 70 | maven-gpg-plugin 71 | 1.5 72 | 73 | 74 | sign-artifacts 75 | verify 76 | 77 | sign 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | ossrh 88 | https://s01.oss.sonatype.org/content/repositories/snapshots 89 | 90 | 91 | ossrh 92 | https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/ 93 | 94 | 95 | 96 | 97 | 98 | MIT License 99 | http://www.opensource.org/licenses/mit-license.php 100 | 101 | 102 | 103 | 104 | 105 | Diego Brito 106 | diego.lima@bandtec.com.br 107 | com.github.britooo 108 | https://github.com/Britooo/looca-api 109 | 110 | 111 | 112 | 113 | scm:git:git://github.com/Britooo/looca-api.git 114 | scm:git:ssh://github.com:Britooo/looca-api.git 115 | https://github.com/Britooo/looca-api 116 | 117 | 118 | 119 | 125 | 126 | 127 | com.github.oshi 128 | oshi-core 129 | 6.1.5 130 | 131 | 132 | 133 | 134 | org.slf4j 135 | slf4j-api 136 | 1.7.30 137 | 138 | 139 | org.slf4j 140 | slf4j-simple 141 | 1.7.30 142 | 143 | 144 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4.0.0 4 | com.github.britooo 5 | looca-api 6 | 2.2.0 7 | jar 8 | 9 | UTF-8 10 | 11 11 | 11 12 | 13 | 14 | Log of computer activity - Looca 15 | API for collecting computer data for educational purposes. 16 | https://github.com/Britooo/looca-api 17 | 18 | 19 | 20 | 21 | org.apache.maven.plugins 22 | maven-compiler-plugin 23 | 24 | 11 25 | 11 26 | 27 | 28 | 39 | 40 | org.sonatype.plugins 41 | nexus-staging-maven-plugin 42 | 1.6.7 43 | true 44 | 45 | ossrh 46 | https://s01.oss.sonatype.org/ 47 | true 48 | 49 | 50 | 51 | org.apache.maven.plugins 52 | maven-source-plugin 53 | 2.2.1 54 | 55 | 56 | attach-sources 57 | 58 | jar-no-fork 59 | 60 | 61 | 62 | 63 | 64 | org.apache.maven.plugins 65 | maven-javadoc-plugin 66 | 67 | false 68 | 69 | 2.9.1 70 | 71 | 72 | attach-javadocs 73 | 74 | jar 75 | 76 | 77 | 78 | 79 | 80 | org.apache.maven.plugins 81 | maven-gpg-plugin 82 | 1.5 83 | 84 | 85 | sign-artifacts 86 | verify 87 | 88 | sign 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | ossrh 99 | https://s01.oss.sonatype.org/content/repositories/snapshots 100 | 101 | 102 | 103 | 113 | 114 | 115 | 116 | MIT License 117 | http://www.opensource.org/licenses/mit-license.php 118 | 119 | 120 | 121 | 122 | 123 | Diego Brito 124 | diego.lima@bandtec.com.br 125 | com.github.britooo 126 | https://github.com/Britooo/looca-api 127 | 128 | 129 | 130 | 131 | scm:git:git://github.com/Britooo/looca-api.git 132 | scm:git:ssh://github.com:Britooo/looca-api.git 133 | https://github.com/Britooo/looca-api 134 | 135 | 136 | 137 | 143 | 144 | 145 | com.github.oshi 146 | oshi-core 147 | 6.1.5 148 | 149 | 150 | 151 | com.google.guava 152 | guava 153 | 31.1-jre 154 | 155 | 156 | 157 | 158 | org.slf4j 159 | slf4j-api 160 | 1.7.30 161 | 162 | 163 | org.slf4j 164 | slf4j-simple 165 | 1.7.30 166 | 167 | 168 | -------------------------------------------------------------------------------- /src/main/java/com/github/britooo/looca/api/group/processador/Processador.java: -------------------------------------------------------------------------------- 1 | package com.github.britooo.looca.api.group.processador; 2 | 3 | import oshi.SystemInfo; 4 | import oshi.hardware.CentralProcessor; 5 | 6 | public class Processador { 7 | 8 | 9 | private final CentralProcessor processador = new SystemInfo().getHardware().getProcessor(); 10 | private final ProcessadorCacheLoader processadorCacheLoader = new ProcessadorCacheLoader(); 11 | 12 | /** 13 | * Retorna o nome do Fornecedor do processador. 14 | * 15 | * @return Nome do Fornecedor do processador. 16 | */ 17 | public String getFabricante() { 18 | return this.processador.getProcessorIdentifier().getVendor(); 19 | } 20 | 21 | /** 22 | * Retorna o nome do Processador (Exemplo: Name, eg. Intel(R) Core(TM)2 Duo CPU T7300 @ 2.00GHz). 23 | * 24 | * @return Nome do Processador. 25 | */ 26 | public String getNome() { 27 | return this.processador.getProcessorIdentifier().getName(); 28 | } 29 | 30 | /** 31 | *

Retorna o ID do processador.

32 | *
33 | *

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

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

42 | *
43 | *

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

45 | *
46 | *

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

48 | * 49 | * @return ID do processador. 50 | */ 51 | public String getId() { 52 | return this.processador.getProcessorIdentifier().getProcessorID(); 53 | } 54 | 55 | /** 56 | * Retorna o identificador, por exemplo: Família x86 6 Modelo 15 Etapa 10. 57 | * Para processadores diferentes de Intel ou AMD, essa String é preenchida com valores comparáveis. 58 | * 59 | * @return Identificador. 60 | */ 61 | public String getIdentificador() { 62 | return this.processador.getProcessorIdentifier().getIdentifier(); 63 | } 64 | 65 | /** 66 | * Retorna a microarquitetura do processador, se conhecida. 67 | * Caso contrário retorna a constante: Constant.UNKNOWN 68 | * 69 | * @return Microarquitetura do processador. 70 | */ 71 | public String getMicroarquitetura() { 72 | return this.processador.getProcessorIdentifier().getMicroarchitecture(); 73 | } 74 | 75 | /** 76 | * Retorna a frequência do processador (em Hz), por exemplo. 77 | * Para o processador denominado Intel(R) Core(TM)2 Duo CPU T7300 @ 2,00 GHz, 78 | * a frequência do processador é 2000000000hz. 79 | * Caso a frequência do processador seja desconhecido retorna -1; 80 | * 81 | * @return Frequência do processador. 82 | */ 83 | public Long getFrequencia() { 84 | return this.processador.getProcessorIdentifier().getVendorFreq(); 85 | } 86 | 87 | /** 88 | * Retorna o número de pacotes/soquetes no sistema. 89 | * Um único pacote pode conter vários núcleos. 90 | * 91 | * @return Número de pacotes físicos disponíveis. 92 | */ 93 | public Integer getNumeroPacotesFisicos() { 94 | return this.processador.getPhysicalPackageCount(); 95 | } 96 | 97 | /** 98 | * Retorna o número de CPUs/núcleos físicos disponíveis para processamento. 99 | * 100 | * @return Número de CPUs físicas disponíveis. 101 | */ 102 | public Integer getNumeroCpusFisicas() { 103 | return this.processador.getPhysicalProcessorCount(); 104 | } 105 | 106 | /** 107 | * Retorna o número de CPUs lógicas disponíveis para processamento. 108 | * Este valor pode ser maior do que CPUs físicas se o hyperthreading estiver habilitado. 109 | * 110 | * @return Número de CPUs lógicas disponíveis. 111 | */ 112 | public Integer getNumeroCpusLogicas() { 113 | return this.processador.getLogicalProcessorCount(); 114 | } 115 | 116 | /** 117 | *

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

118 | *
119 | *

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

123 | *
124 | *

Ao medir a diferença entre os ticks em um intervalo de tempo, 125 | * a carga da CPU nesse intervalo pode ser calculada. 126 | * Observe que, embora os contadores de tiques estejam em unidades de milissegundos, 127 | * eles podem avançar em incrementos maiores junto com tiques de clock (dependentes da plataforma). 128 | * 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, 129 | * mas geralmente 1/100 de segundo (10 milissegundos).

130 | *
131 | *

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

134 | *
135 | *

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

139 | *
140 | *

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

141 | * 142 | * @return Valor em porcentagem de uso do processador. 143 | */ 144 | public Double getUso() { 145 | return this.processadorCacheLoader.getUso(); 146 | } 147 | 148 | /** 149 | * Retorna uma String com todas as informações relacionadas ao Processador. 150 | * @return String com todas as informações relacionadas ao Processador. 151 | */ 152 | @Override 153 | public String toString() { 154 | final StringBuilder sb = new StringBuilder(); 155 | 156 | sb.append("Fabricante: ") 157 | .append(getFabricante()) 158 | .append("\n"); 159 | 160 | sb.append("Nome: ") 161 | .append(getNome()) 162 | .append("\n"); 163 | 164 | sb.append("ID: ") 165 | .append(getId()) 166 | .append("\n"); 167 | 168 | sb.append("Identificador: ") 169 | .append(getIdentificador()) 170 | .append("\n"); 171 | 172 | sb.append("Microarquitetura: ") 173 | .append(getMicroarquitetura()) 174 | .append("\n"); 175 | 176 | sb.append("Frequência: ") 177 | .append(getFrequencia()) 178 | .append("\n"); 179 | 180 | sb.append("Número de Pacotes Físicos: ") 181 | .append(getNumeroPacotesFisicos()) 182 | .append("\n"); 183 | 184 | sb.append("Número de CPUs Fisícas: ") 185 | .append(getNumeroCpusFisicas()) 186 | .append("\n"); 187 | 188 | sb.append("Número de CPUs Lógicas: ") 189 | .append(getNumeroCpusLogicas()) 190 | .append("\n"); 191 | 192 | sb.append("Em Uso: ") 193 | .append(String.format("%.1f", getUso())) 194 | .append("\n"); 195 | 196 | return sb.toString(); 197 | } 198 | 199 | } 200 | -------------------------------------------------------------------------------- /.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | enableParallelJavaIndexSearch=true 3 | org.eclipse.jdt.core.builder.annotationPath.allLocations=disabled 4 | org.eclipse.jdt.core.builder.cleanOutputFolder=clean 5 | org.eclipse.jdt.core.builder.duplicateResourceTask=warning 6 | org.eclipse.jdt.core.builder.invalidClasspath=abort 7 | org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore 8 | org.eclipse.jdt.core.builder.resourceCopyExclusionFilter= 9 | org.eclipse.jdt.core.circularClasspath=warning 10 | org.eclipse.jdt.core.classpath.exclusionPatterns=enabled 11 | org.eclipse.jdt.core.classpath.mainOnlyProjectHasTestOnlyDependency=error 12 | org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled 13 | org.eclipse.jdt.core.classpath.outputOverlappingAnotherSource=error 14 | org.eclipse.jdt.core.codeComplete.argumentPrefixes= 15 | org.eclipse.jdt.core.codeComplete.argumentSuffixes= 16 | org.eclipse.jdt.core.codeComplete.camelCaseMatch=enabled 17 | org.eclipse.jdt.core.codeComplete.deprecationCheck=disabled 18 | org.eclipse.jdt.core.codeComplete.discouragedReferenceCheck=disabled 19 | org.eclipse.jdt.core.codeComplete.fieldPrefixes= 20 | org.eclipse.jdt.core.codeComplete.fieldSuffixes= 21 | org.eclipse.jdt.core.codeComplete.forbiddenReferenceCheck=enabled 22 | org.eclipse.jdt.core.codeComplete.forceImplicitQualification=disabled 23 | org.eclipse.jdt.core.codeComplete.localPrefixes= 24 | org.eclipse.jdt.core.codeComplete.localSuffixes= 25 | org.eclipse.jdt.core.codeComplete.staticFieldPrefixes= 26 | org.eclipse.jdt.core.codeComplete.staticFieldSuffixes= 27 | org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes= 28 | org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes= 29 | org.eclipse.jdt.core.codeComplete.subwordMatch=disabled 30 | org.eclipse.jdt.core.codeComplete.suggestStaticImports=enabled 31 | org.eclipse.jdt.core.codeComplete.visibilityCheck=enabled 32 | org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled 33 | org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore 34 | org.eclipse.jdt.core.compiler.annotation.nonnull=javax.annotation.Nonnull 35 | org.eclipse.jdt.core.compiler.annotation.nonnull.secondary= 36 | org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault 37 | org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary= 38 | org.eclipse.jdt.core.compiler.annotation.nullable=javax.annotation.Nullable 39 | org.eclipse.jdt.core.compiler.annotation.nullable.secondary= 40 | org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled 41 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled 42 | org.eclipse.jdt.core.compiler.codegen.lambda.genericSignature=do not generate 43 | org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate 44 | org.eclipse.jdt.core.compiler.codegen.shareCommonFinallyBlocks=disabled 45 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 46 | org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve 47 | org.eclipse.jdt.core.compiler.compliance=11 48 | org.eclipse.jdt.core.compiler.debug.lineNumber=generate 49 | org.eclipse.jdt.core.compiler.debug.localVariable=generate 50 | org.eclipse.jdt.core.compiler.debug.sourceFile=generate 51 | org.eclipse.jdt.core.compiler.doc.comment.support=enabled 52 | org.eclipse.jdt.core.compiler.emulateJavacBug8031744=enabled 53 | org.eclipse.jdt.core.compiler.generateClassFiles=enabled 54 | org.eclipse.jdt.core.compiler.maxProblemPerUnit=100 55 | org.eclipse.jdt.core.compiler.problem.APILeak=warning 56 | org.eclipse.jdt.core.compiler.problem.annotatedTypeArgumentToUnannotated=info 57 | org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning 58 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error 59 | org.eclipse.jdt.core.compiler.problem.autoboxing=ignore 60 | org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning 61 | org.eclipse.jdt.core.compiler.problem.deadCode=warning 62 | org.eclipse.jdt.core.compiler.problem.deadCodeInTrivialIfStatement=disabled 63 | org.eclipse.jdt.core.compiler.problem.deprecation=warning 64 | org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled 65 | org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled 66 | org.eclipse.jdt.core.compiler.problem.discouragedReference=warning 67 | org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore 68 | org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled 69 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error 70 | org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore 71 | org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore 72 | org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled 73 | org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore 74 | org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning 75 | org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning 76 | org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning 77 | org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning 78 | org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled 79 | org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning 80 | org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning 81 | org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore 82 | org.eclipse.jdt.core.compiler.problem.invalidJavadoc=ignore 83 | org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=disabled 84 | org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled 85 | org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled 86 | org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public 87 | org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore 88 | org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning 89 | org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore 90 | org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore 91 | org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled 92 | org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore 93 | org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore 94 | org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled 95 | org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public 96 | org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag 97 | org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore 98 | org.eclipse.jdt.core.compiler.problem.missingJavadocTagsMethodTypeParameters=disabled 99 | org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled 100 | org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public 101 | org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore 102 | org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled 103 | org.eclipse.jdt.core.compiler.problem.missingSerialVersion=ignore 104 | org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore 105 | org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning 106 | org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning 107 | org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore 108 | org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning 109 | org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning 110 | org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=warning 111 | org.eclipse.jdt.core.compiler.problem.nullReference=warning 112 | org.eclipse.jdt.core.compiler.problem.nullSpecViolation=warning 113 | org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning 114 | org.eclipse.jdt.core.compiler.problem.overridingMethodWithoutSuperInvocation=ignore 115 | org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning 116 | org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore 117 | org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning 118 | org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore 119 | org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning 120 | org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore 121 | org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning 122 | org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning 123 | org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore 124 | org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore 125 | org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning 126 | org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore 127 | org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore 128 | org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore 129 | org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled 130 | org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning 131 | org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled 132 | org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled 133 | org.eclipse.jdt.core.compiler.problem.suppressWarningsNotFullyAnalysed=info 134 | org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled 135 | org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore 136 | org.eclipse.jdt.core.compiler.problem.tasks=warning 137 | org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning 138 | org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning 139 | org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled 140 | org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning 141 | org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning 142 | org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore 143 | org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=ignore 144 | org.eclipse.jdt.core.compiler.problem.uninternedIdentityComparison=disabled 145 | org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning 146 | org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled 147 | org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info 148 | org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore 149 | org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore 150 | org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore 151 | org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning 152 | org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore 153 | org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled 154 | org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled 155 | org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled 156 | org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore 157 | org.eclipse.jdt.core.compiler.problem.unusedImport=warning 158 | org.eclipse.jdt.core.compiler.problem.unusedLabel=warning 159 | org.eclipse.jdt.core.compiler.problem.unusedLocal=warning 160 | org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore 161 | org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore 162 | org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled 163 | org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled 164 | org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled 165 | org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning 166 | org.eclipse.jdt.core.compiler.problem.unusedTypeArgumentsForMethodInvocation=warning 167 | org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore 168 | org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning 169 | org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning 170 | org.eclipse.jdt.core.compiler.processAnnotations=disabled 171 | org.eclipse.jdt.core.compiler.release=disabled 172 | org.eclipse.jdt.core.compiler.source=11 173 | org.eclipse.jdt.core.compiler.storeAnnotations=disabled 174 | org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled 175 | org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,NORMAL 176 | org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME,XXX 177 | org.eclipse.jdt.core.computeJavaBuildOrder=ignore 178 | org.eclipse.jdt.core.encoding=utf8 179 | org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns=false 180 | org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647 181 | org.eclipse.jdt.core.formatter.align_selector_in_method_invocation_on_expression_first_line=true 182 | org.eclipse.jdt.core.formatter.align_type_members_on_columns=false 183 | org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns=false 184 | org.eclipse.jdt.core.formatter.align_with_spaces=false 185 | org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16 186 | org.eclipse.jdt.core.formatter.alignment_for_annotations_on_enum_constant=49 187 | org.eclipse.jdt.core.formatter.alignment_for_annotations_on_field=49 188 | org.eclipse.jdt.core.formatter.alignment_for_annotations_on_local_variable=49 189 | org.eclipse.jdt.core.formatter.alignment_for_annotations_on_method=49 190 | org.eclipse.jdt.core.formatter.alignment_for_annotations_on_package=49 191 | org.eclipse.jdt.core.formatter.alignment_for_annotations_on_parameter=0 192 | org.eclipse.jdt.core.formatter.alignment_for_annotations_on_type=49 193 | org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 194 | org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0 195 | org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 196 | org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16 197 | org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16 198 | org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16 199 | org.eclipse.jdt.core.formatter.alignment_for_assertion_message=16 200 | org.eclipse.jdt.core.formatter.alignment_for_assignment=0 201 | org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=16 202 | org.eclipse.jdt.core.formatter.alignment_for_compact_if=16 203 | org.eclipse.jdt.core.formatter.alignment_for_compact_loops=16 204 | org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80 205 | org.eclipse.jdt.core.formatter.alignment_for_conditional_expression_chain=0 206 | org.eclipse.jdt.core.formatter.alignment_for_enum_constants=16 207 | org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 208 | org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header=0 209 | org.eclipse.jdt.core.formatter.alignment_for_expressions_in_switch_case_with_arrow=16 210 | org.eclipse.jdt.core.formatter.alignment_for_expressions_in_switch_case_with_colon=16 211 | org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16 212 | org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0 213 | org.eclipse.jdt.core.formatter.alignment_for_module_statements=16 214 | org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 215 | org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16 216 | org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references=0 217 | org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 218 | org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 219 | org.eclipse.jdt.core.formatter.alignment_for_record_components=16 220 | org.eclipse.jdt.core.formatter.alignment_for_relational_operator=0 221 | org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80 222 | org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16 223 | org.eclipse.jdt.core.formatter.alignment_for_shift_operator=0 224 | org.eclipse.jdt.core.formatter.alignment_for_string_concatenation=16 225 | org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 226 | org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 227 | org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_record_declaration=16 228 | org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 229 | org.eclipse.jdt.core.formatter.alignment_for_switch_case_with_arrow=20 230 | org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 231 | org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 232 | org.eclipse.jdt.core.formatter.alignment_for_type_annotations=0 233 | org.eclipse.jdt.core.formatter.alignment_for_type_arguments=0 234 | org.eclipse.jdt.core.formatter.alignment_for_type_parameters=0 235 | org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16 236 | org.eclipse.jdt.core.formatter.blank_lines_after_imports=1 237 | org.eclipse.jdt.core.formatter.blank_lines_after_last_class_body_declaration=0 238 | org.eclipse.jdt.core.formatter.blank_lines_after_package=1 239 | org.eclipse.jdt.core.formatter.blank_lines_before_abstract_method=1 240 | org.eclipse.jdt.core.formatter.blank_lines_before_field=0 241 | org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0 242 | org.eclipse.jdt.core.formatter.blank_lines_before_imports=1 243 | org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1 244 | org.eclipse.jdt.core.formatter.blank_lines_before_method=1 245 | org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1 246 | org.eclipse.jdt.core.formatter.blank_lines_before_package=0 247 | org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1 248 | org.eclipse.jdt.core.formatter.blank_lines_between_statement_group_in_switch=0 249 | org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1 250 | org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line 251 | org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line 252 | org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line 253 | org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line 254 | org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line 255 | org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line 256 | org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line 257 | org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line 258 | org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line 259 | org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line 260 | org.eclipse.jdt.core.formatter.brace_position_for_record_constructor=end_of_line 261 | org.eclipse.jdt.core.formatter.brace_position_for_record_declaration=end_of_line 262 | org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line 263 | org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line 264 | org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped=true 265 | org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions=false 266 | org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false 267 | org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false 268 | org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position=true 269 | org.eclipse.jdt.core.formatter.comment.format_block_comments=true 270 | org.eclipse.jdt.core.formatter.comment.format_header=false 271 | org.eclipse.jdt.core.formatter.comment.format_html=true 272 | org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true 273 | org.eclipse.jdt.core.formatter.comment.format_line_comments=true 274 | org.eclipse.jdt.core.formatter.comment.format_source_code=true 275 | org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false 276 | org.eclipse.jdt.core.formatter.comment.indent_root_tags=false 277 | org.eclipse.jdt.core.formatter.comment.indent_tag_description=false 278 | org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert 279 | org.eclipse.jdt.core.formatter.comment.insert_new_line_between_different_tags=do not insert 280 | org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert 281 | org.eclipse.jdt.core.formatter.comment.line_length=80 282 | org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true 283 | org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true 284 | org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false 285 | org.eclipse.jdt.core.formatter.compact_else_if=true 286 | org.eclipse.jdt.core.formatter.continuation_indentation=2 287 | org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2 288 | org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off 289 | org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on 290 | org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false 291 | org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=false 292 | org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true 293 | org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true 294 | org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true 295 | org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_record_header=true 296 | org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true 297 | org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true 298 | org.eclipse.jdt.core.formatter.indent_empty_lines=false 299 | org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true 300 | org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true 301 | org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true 302 | org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true 303 | org.eclipse.jdt.core.formatter.indentation.size=4 304 | org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant=insert 305 | org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert 306 | org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert 307 | org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert 308 | org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert 309 | org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert 310 | org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert 311 | org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert 312 | org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert 313 | org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert 314 | org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert 315 | org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert 316 | org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert 317 | org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert 318 | org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert 319 | org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert 320 | org.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert 321 | org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert 322 | org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_case=insert 323 | org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_default=insert 324 | org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert 325 | org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert 326 | org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert 327 | org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator=insert 328 | org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=do not insert 329 | org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert 330 | org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert 331 | org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert 332 | org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert 333 | org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert 334 | org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert 335 | org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert 336 | org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert 337 | org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert 338 | org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert 339 | org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert 340 | org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert 341 | org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert 342 | org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert 343 | org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert 344 | org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert 345 | org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert 346 | org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert 347 | org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert 348 | org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert 349 | org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert 350 | org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert 351 | org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert 352 | org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert 353 | org.eclipse.jdt.core.formatter.insert_space_after_comma_in_permitted_types=insert 354 | org.eclipse.jdt.core.formatter.insert_space_after_comma_in_record_components=insert 355 | org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert 356 | org.eclipse.jdt.core.formatter.insert_space_after_comma_in_switch_case_expressions=insert 357 | org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert 358 | org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert 359 | org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert 360 | org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert 361 | org.eclipse.jdt.core.formatter.insert_space_after_logical_operator=insert 362 | org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=insert 363 | org.eclipse.jdt.core.formatter.insert_space_after_not_operator=do not insert 364 | org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert 365 | org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert 366 | org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert 367 | org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert 368 | org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert 369 | org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert 370 | org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert 371 | org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert 372 | org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert 373 | org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert 374 | org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert 375 | org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert 376 | org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert 377 | org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert 378 | org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert 379 | org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert 380 | org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_record_declaration=do not insert 381 | org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert 382 | org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert 383 | org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert 384 | org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert 385 | org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert 386 | org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert 387 | org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert 388 | org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert 389 | org.eclipse.jdt.core.formatter.insert_space_after_relational_operator=insert 390 | org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert 391 | org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert 392 | org.eclipse.jdt.core.formatter.insert_space_after_shift_operator=insert 393 | org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert 394 | org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert 395 | org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert 396 | org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert 397 | org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_case=insert 398 | org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_default=insert 399 | org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert 400 | org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert 401 | org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator=insert 402 | org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert 403 | org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert 404 | org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert 405 | org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert 406 | org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert 407 | org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert 408 | org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert 409 | org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert 410 | org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert 411 | org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert 412 | org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert 413 | org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert 414 | org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert 415 | org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert 416 | org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert 417 | org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert 418 | org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_record_declaration=do not insert 419 | org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert 420 | org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert 421 | org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert 422 | org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert 423 | org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert 424 | org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert 425 | org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert 426 | org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert 427 | org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert 428 | org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert 429 | org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert 430 | org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert 431 | org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert 432 | org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert 433 | org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert 434 | org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert 435 | org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert 436 | org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert 437 | org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert 438 | org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert 439 | org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert 440 | org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert 441 | org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert 442 | org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert 443 | org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert 444 | org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert 445 | org.eclipse.jdt.core.formatter.insert_space_before_comma_in_permitted_types=do not insert 446 | org.eclipse.jdt.core.formatter.insert_space_before_comma_in_record_components=do not insert 447 | org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert 448 | org.eclipse.jdt.core.formatter.insert_space_before_comma_in_switch_case_expressions=do not insert 449 | org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert 450 | org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert 451 | org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert 452 | org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert 453 | org.eclipse.jdt.core.formatter.insert_space_before_logical_operator=insert 454 | org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=insert 455 | org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert 456 | org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert 457 | org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert 458 | org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert 459 | org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert 460 | org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert 461 | org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert 462 | org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert 463 | org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert 464 | org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert 465 | org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert 466 | org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_record_constructor=insert 467 | org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_record_declaration=insert 468 | org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert 469 | org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert 470 | org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert 471 | org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert 472 | org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert 473 | org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert 474 | org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert 475 | org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert 476 | org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert 477 | org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert 478 | org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert 479 | org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert 480 | org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert 481 | org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert 482 | org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert 483 | org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_record_declaration=do not insert 484 | org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert 485 | org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert 486 | org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert 487 | org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert 488 | org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert 489 | org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert 490 | org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert 491 | org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert 492 | org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert 493 | org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert 494 | org.eclipse.jdt.core.formatter.insert_space_before_relational_operator=insert 495 | org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert 496 | org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert 497 | org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert 498 | org.eclipse.jdt.core.formatter.insert_space_before_shift_operator=insert 499 | org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=insert 500 | org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert 501 | org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert 502 | org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert 503 | org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert 504 | org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert 505 | org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert 506 | org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert 507 | org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert 508 | org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert 509 | org.eclipse.jdt.core.formatter.join_lines_in_comments=false 510 | org.eclipse.jdt.core.formatter.join_wrapped_lines=false 511 | org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line=one_line_never 512 | org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line=one_line_never 513 | org.eclipse.jdt.core.formatter.keep_code_block_on_one_line=one_line_never 514 | org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false 515 | org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false 516 | org.eclipse.jdt.core.formatter.keep_enum_constant_declaration_on_one_line=one_line_never 517 | org.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line=one_line_never 518 | org.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line=one_line_never 519 | org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false 520 | org.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line=one_line_never 521 | org.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line=one_line_never 522 | org.eclipse.jdt.core.formatter.keep_method_body_on_one_line=one_line_never 523 | org.eclipse.jdt.core.formatter.keep_record_constructor_on_one_line=one_line_never 524 | org.eclipse.jdt.core.formatter.keep_record_declaration_on_one_line=one_line_never 525 | org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line=false 526 | org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line=false 527 | org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line=false 528 | org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line=false 529 | org.eclipse.jdt.core.formatter.keep_switch_body_block_on_one_line=one_line_never 530 | org.eclipse.jdt.core.formatter.keep_switch_case_with_arrow_on_one_line=one_line_never 531 | org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false 532 | org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line=one_line_never 533 | org.eclipse.jdt.core.formatter.lineSplit=120 534 | org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false 535 | org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false 536 | org.eclipse.jdt.core.formatter.number_of_blank_lines_after_code_block=0 537 | org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_code_block=0 538 | org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 539 | org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_code_block=0 540 | org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_method_body=0 541 | org.eclipse.jdt.core.formatter.number_of_blank_lines_before_code_block=0 542 | org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1 543 | org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation=common_lines 544 | org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause=common_lines 545 | org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration=common_lines 546 | org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment=common_lines 547 | org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement=common_lines 548 | org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration=common_lines 549 | org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration=common_lines 550 | org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation=common_lines 551 | org.eclipse.jdt.core.formatter.parentheses_positions_in_record_declaration=common_lines 552 | org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement=common_lines 553 | org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause=common_lines 554 | org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true 555 | org.eclipse.jdt.core.formatter.tabulation.char=space 556 | org.eclipse.jdt.core.formatter.tabulation.size=2 557 | org.eclipse.jdt.core.formatter.text_block_indentation=0 558 | org.eclipse.jdt.core.formatter.use_on_off_tags=true 559 | org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false 560 | org.eclipse.jdt.core.formatter.wrap_before_additive_operator=true 561 | org.eclipse.jdt.core.formatter.wrap_before_assertion_message_operator=true 562 | org.eclipse.jdt.core.formatter.wrap_before_assignment_operator=false 563 | org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true 564 | org.eclipse.jdt.core.formatter.wrap_before_conditional_operator=true 565 | org.eclipse.jdt.core.formatter.wrap_before_logical_operator=true 566 | org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true 567 | org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true 568 | org.eclipse.jdt.core.formatter.wrap_before_relational_operator=true 569 | org.eclipse.jdt.core.formatter.wrap_before_shift_operator=true 570 | org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true 571 | org.eclipse.jdt.core.formatter.wrap_before_switch_case_arrow_operator=false 572 | org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true 573 | org.eclipse.jdt.core.incompatibleJDKLevel=ignore 574 | org.eclipse.jdt.core.incompleteClasspath=error 575 | org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter 576 | org.eclipse.jdt.core.timeoutForParameterNameFromAttachedJavadoc=50 577 | --------------------------------------------------------------------------------