-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathServidor.java
141 lines (105 loc) · 4.29 KB
/
Servidor.java
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class Servidor {
private Arvore arvore;
private CacheFIFO cache;
public Servidor() {
arvore = new Arvore();
cache = new CacheFIFO();
}
public void mostrarCache() {
System.out.println("Itens da Cache: ");
cache.listarCache();
}
public void cadastrarOrdemServico(OrdemServico os) {
escreverLog("");
escreverLog("Insercao de Ordem de Servico: " + os.getCodigo());
arvore.setRaiz(arvore.inserir(arvore.getRaiz(), os));
NoAVL noBuscado = arvore.buscar(os.getCodigo());
cache.adicionar(noBuscado); // colocando o no na cache
escreverLog("Altura da arvore: " + arvore.getRaiz().altura + ", Time: " + now());
escreverLog("Itens da cache: " + cache.gerarStringCache());
}
public void removerOrdemServico(OrdemServico removeOS) {
escreverLog("");
escreverLog("Remoção de Ordem de Serviço: " + removeOS.getCodigo());
cache.remover(removeOS.getCodigo());
arvore.remover(removeOS);
escreverLog("Altura da Árvore: " + arvore.getRaiz().altura + ", Time: " + now());
escreverLog("Itens da cache: " + cache.gerarStringCache());
}
public void atualizarOrdemServico(OrdemServico novaOS) {
NoAVL noBuscado = buscarNaCache(novaOS.getCodigo());
if (noBuscado != null) { // Encontrado na cache
noBuscado.os.setNome(novaOS.getNome());
noBuscado.os.setDescricao(novaOS.getDescricao());
noBuscado.os.setHoraSolicitacao(novaOS.getHoraSolicitacao());
System.out.println("Alterada na cache -> Árvore");
escreverLog("");
escreverLog("Alteracao na Ordem de Servido feita na cache: " + novaOS.getCodigo() + ", Time: " + now());
escreverLog("Itens da cache: " + cache.gerarStringCache());
return;
}
// Não tem na cache edita na árvore
arvore.alterar(novaOS);
// Reload no item da cache
noBuscado = arvore.buscar(novaOS.getCodigo());
cache.remover(novaOS.getCodigo());
cache.adicionar(noBuscado); // Armazena referencia
escreverLog("");
escreverLog("Alteracao na Ordem de Servico: " + novaOS.getCodigo() + ", Time: " + now());
escreverLog("Itens da cache: " + cache.gerarStringCache());
}
public NoAVL buscarNaCache(int codigo) {
NoAVL no = cache.buscar(codigo);
return no;
}
public OrdemServico buscarOrdemServico(int codigo) {
// Primeiro busca na cache
NoAVL buscado = buscarNaCache(codigo);
if (buscado != null) {
System.out.println("Ordem de Serviço encontrada na cache! ");
return buscado.os;
}
// Não achou - busca na árvore
buscado = arvore.buscar(codigo);
if (buscado != null) { // Encontrou na árvore
cache.adicionar(buscado); // Adiciona na cache
System.out.println("Ordem de Serviço encontrada na base de dados (Árvore)! ");
escreverLog("");
escreverLog("Item buscado foi adicionado na Cache: " + codigo + ", Time: " + now());
escreverLog("Itens da cache: " + cache.gerarStringCache());
return buscado.os;
}
return null;
}
public void mostrarArvore() {
System.out.println();
this.arvore.verArvore();
System.out.println();
}
public void mostrarOrdensServico() {
System.out.println();
this.arvore.listarOS();
System.out.println();
}
public int quantidadeDeRegistros(){
return this.arvore.contarRegistros();
}
private String now() {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
return LocalDateTime.now().format(formatter);
}
private void escreverLog(String msg) {
try (BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(new FileOutputStream("log.txt", true), "UTF-8"))) {
writer.write(msg + "\n");
} catch (IOException e) {
e.printStackTrace();
}
}
}