/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package socius.dispositivos; import com.healthmarketscience.rmiio.RemoteInputStream; import com.healthmarketscience.rmiio.RemoteInputStreamServer; import com.healthmarketscience.rmiio.SimpleRemoteInputStream; import socius.adapter.Arquivo; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.Serializable; import java.rmi.RemoteException; import java.rmi.server.*; import java.util.ArrayList; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import socius.excecoes.ComputadorNaoConectadoException; import socius.excecoes.FalhaNaConexaoComServidorException; import socius.excecoes.SistemaOperacionalNaoSuportadoException; import socius.excecoes.UsuarioInvalidoException; import socius.excecoes.UsuarioJaLogadoException; import socius.factory.arquivo.ArquivoFactory; import socius.telas.principal.PrincipalController; import socius.modelo.Usuario; import socius.state.EstadoComputador; import socius.state.EstadoOffline; /** * * @author Ana */ public class Computador extends UnicastRemoteObject implements EstadoComputador, ComputadorRemoto, Serializable { private String descricao; private EstadoComputador estado; private String dir; private Arquivo arquivos; private Usuario usuario; // private InicializarDadosTelaPrincipal initTela=InicializarDadosTelaPrincipal.getInstance(); public Computador(Usuario usuario) throws RemoteException { try { // Usuário atual do computador que será enviado ao servidor para // autenticação this.usuario = usuario; // Estado inicial estado = new EstadoOffline(this); // Inicializa pasta pública compartilhada arquivos = ArquivoFactory.getFactory().getArquivo(); } catch (SistemaOperacionalNaoSuportadoException ex) { ex.exibeMensagem(); } } @Override public List<Arquivo> getArquivos() throws RemoteException { File pasta = arquivos.getFile(); if(!pasta.isDirectory()) { if(pasta.isFile()) { pasta.delete(); } pasta.mkdirs(); } File[] arquivosPasta = pasta.listFiles(); List<Arquivo> lista = new ArrayList<>(); for (int i = 0; i < arquivosPasta.length; i++) { if (arquivosPasta[i].isFile()) { String absPath = arquivosPasta[i].getAbsolutePath(); Arquivo arq = null; try { arq = ArquivoFactory.getFactory().getArquivo(absPath); } catch (SistemaOperacionalNaoSuportadoException ex) { Logger.getLogger(Computador.class.getName()).log(Level.SEVERE, null, ex); } if (arq != null) { lista.add(arq); } } } return lista; } @Override public void conectar() { try { estado.conectar(); } // se falhar ou conectar com o servidor mostra //mensagem de erro e fecha catch (FalhaNaConexaoComServidorException ex) { ex.exibeMensagem(); System.exit(0); } catch (UsuarioInvalidoException | UsuarioJaLogadoException ex) { ex.exibeMensagem(); } } @Override public void desconectar() { estado.desconectar(); } public EstadoComputador getEstado() { return estado; } public void setEstado(EstadoComputador estado) { this.estado = estado; } @Override public ServidorRemoto getServidorConectado() { try { return estado.getServidorConectado(); } catch (ComputadorNaoConectadoException ex) { ex.exibeMensagem(); } return null; } @Override public Usuario getUsuario() throws RemoteException { return usuario; } @Override public void setUsuario(Usuario usuario) { this.usuario = usuario; } @Override public RemoteInputStream iniciarTransferencia(Arquivo arquivo) throws RemoteException { RemoteInputStreamServer uploadService = null; try { uploadService = new SimpleRemoteInputStream(new FileInputStream(arquivo.getFile())); } catch (FileNotFoundException ex) { } return uploadService.export(); } @Override public void notificaAtualizacao() throws RemoteException { PrincipalController.atualizar = true; } @Override public String toString() { return usuario.getNome(); } }