StatusCircusRefine.java 5.24 KB
   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
 142
 143
 144
 145
 146
 147
 148
 149
 150
 151
 152
 153
 154
 155
 156
 157
 158
 159
 160
 161
 162
 163
 164
 165
 166
 167
 168
 169
 170
 171
 172
 173
 174
 175
 176
 177
 178
 179
 180
 181
 182
 183
 184
 185
 186
 187
 188
 189
 190
 191
 192
 193
 194
 195
 196
 197
 198
 199
 200
 201
 202
 203
 204
 205
/*
* Cristiano Gurgel
*
* Projeto: Circus Refine
*/
package circusRefine.storage;

import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.core.BaseException;

/**
* Classe que armazena o Status do Circus Refine. Utilizada no
* salvamento/recuperação de um programa
*
* @author Cristiano Gurgel
* @version 1.1 06/01/07
*/
public class StatusCircusRefine {
private static final int BUFFER = 2048;

/** Status da tela de desenvolvimento */
private StatusDesenvolvimento desenvolvimento;

/** Status da tela principal */
private StatusPrincipal principal;
/** Status do gerenciador externo */
private StatusExterno externo;
/** Status do Gerenciador Interno*/
private StatusInterno interno;
/**
* Inicializa o status do circus Refine com todos os valores
* em <code>null</code>
*/
public StatusCircusRefine() {
this(null, null, null, null);
}

/**
* Inicializa o status do circusRefine com todos os valores
* definidos
*
* @param novoDesenvolvimento Status da tela de desenvolvimento
* @param novoExterno Status do Gerenciador Externo
* @param novoInterno Status do Gerenciador Interno
* @param novoPrincipal Status da Tela Principal
*/
public StatusCircusRefine(StatusDesenvolvimento novoDesenvolvimento,
StatusExterno novoExterno, StatusInterno novoInterno,
StatusPrincipal novoPrincipal) {
this.setDesenvolvimento(novoDesenvolvimento);
this.setExterno(novoExterno);
this.setInterno(novoInterno);
this.setPrincipal(novoPrincipal);
}
/**
* Acessa o status do desenvolvimento
*
* @return o status da tela de desenvolvimento
*/
public StatusDesenvolvimento getDesenvolvimento() {
return desenvolvimento;
}
/**
* Seta o atributo do status da tela de desenvolvimento
*
* @param desenvolvimento o novo status da tela de desenvolvimento
*/
public void setDesenvolvimento(StatusDesenvolvimento desenvolvimento) {
this.desenvolvimento = desenvolvimento;
}
/**
* Acessa o status da tela principal
*
* @return o status da tela principal
*/
public StatusPrincipal getPrincipal() {
return principal;
}
/**
* Seta o atributo do status da tela principal
*
* @param principal o novo status da tela principal
*/
public void setPrincipal(StatusPrincipal principal) {
this.principal = principal;
}
/**
* Acessa o status do gerenciador externo
*
* @return o status do gerenciador externo
*/
public StatusExterno getExterno() {
return externo;
}
/**
* Seta o atributo do status do gerenciador externo
*
* @param externo o novo status do gerenciador externo
*/
public void setExterno(StatusExterno externo) {
this.externo = externo;
}

/**
* Acessa o status do gerenciador interno
*
* @return o status do gerenciador interno
*/
public StatusInterno getInterno() {
return interno;
}
/**
* Seta o status do gerenciador interno
*
* @param interno novo status do gerenciador interno
*/
public void setInterno(StatusInterno interno) {
this.interno = interno;
}
/**
* Salva o conteudo deste objeto em um arquivo passado como
* parametro
*
* @param arquivo arquivo onde o status será salvo
* @throws IOException caso um erro de IO ocorra durante o
* processo de salvamento
*/
public void salvar(File arquivo) throws IOException {
/* OutpuStreams */
FileOutputStream out = new FileOutputStream(arquivo);
ZipOutputStream zos = new ZipOutputStream(out);
/* Metodo de compressão */
zos.setMethod(ZipOutputStream.DEFLATED);
/* Gera o xml */
XStream xml = new XStream();
byte[] dados = xml.toXML(this).getBytes();

/* Cria o arquivo .zip */
ZipEntry entrada = new ZipEntry("prog.xml");
zos.putNextEntry(entrada);
zos.write(dados);
zos.close();
}
/**
* Abre o conteúdo de um arquivo no formato aceito pela
* ferramenta.
*
* @param arquivo o arquivo a ser aberto
* @return o status do circusRefine representado pelo arquivo
* @throws IOException caso um erro de I/O ocorra na abertura do
* arquivo
* @throws BaseException caso o arquivo não possa ser
* deserializado
*/
public static StatusCircusRefine abrir(File arquivo)
throws IOException, BaseException {
/* Cria os input Streams */
FileInputStream fin = new FileInputStream(arquivo);
ZipInputStream zin = new ZipInputStream(new BufferedInputStream(fin));
ByteArrayOutputStream out = new ByteArrayOutputStream();
/* Extrai os dados */
ZipEntry entrada = zin.getNextEntry();
if (entrada != null) {
byte[] dados = new byte[StatusCircusRefine.BUFFER];
int cont;
while ((cont = zin.read(dados, 0 , StatusCircusRefine.BUFFER))
!= -1) {
out.write(dados, 0, cont);
}
}
zin.close();
/* Gera o objeto */
XStream xml = new XStream();
return (StatusCircusRefine)xml.fromXML(out.toString());
}
}