Ajuda com uma lista e um singleton

Bom, eu criei uma lista com um select no banco de dados, e criei ela no singleton, mas estou com duvida em como acessar os metodos, ou não é possível?

Codigo do meu DAO;

public List<Requisicao> pegarRequisicoesUser() {
	List<Requisicao> requisicoes = new ArrayList<>();
	String sql = "SELECT * FROM equipamento_requisicao equipreq INNER JOIN equipamento_user equipuser ON (equipreq.idequipamento_user = equipuser.id_equipamento_do_usuario)  INNER JOIN usuario user ON (user.id_usuario=equipuser.idusuario) INNER JOIN equipamentos equip ON (equip.id_equipamentos = equipuser.idequipamentos) INNER JOIN detalhe_status dStatus ON (dStatus.idequipamento_requisicao= equipreq.id_requisicao) INNER JOIN status_requisicao statusreq on (statusreq.id_status= dStatus.idstatus) INNER JOIN permissao p ON(user.idpermissao= p.id_permissao) INNER JOIN departamentos dp ON(user.iddepartamento = dp.id_departamentos) INNER JOIN chefe_departamento cp ON(dp.id_departamentos = cp.iddepartamento) where statusreq.categoria='Ativo' and user.id_usuario = "+ Sessao.getInstancia().getUsuario().getId() + " ";
	
	try {
		PreparedStatement stmt = con.prepareStatement(sql);
		ResultSet rs = stmt.executeQuery();
		
		while (rs.next()) {       
			//CHEFES DE DEPARTAMENTOS            
			// usuario chefe depart
			Usuario usuarioChefe = new Usuario();
			usuarioChefe.setId(rs.getLong("cp.idusuario")); 
			// usuario chefe depart
			
			// departamento chefe
			Departamento departamentoChefe = new Departamento();
			departamentoChefe.setId_departamento(rs.getInt("cp.iddepartamento"));
			// departamento chefe
			
			// INICIO DA TABELA CHEFE
			ChefesDepartamentos chefes = new ChefesDepartamentos();
			chefes.setId_chefe(rs.getInt("cp.id_chefe"));
			chefes.setCpIdusuario(usuarioChefe);
			chefes.setCpIddepartamento(departamentoChefe);
			// FIM TABELA CHEFE
			// FIM    // PARA ESTUDOS
			
			// INICIO TABELA USUARIO 
			//Permissao Usuario
			Permissao permissaoUsuario = new Permissao();
			permissaoUsuario.setId_permissao(rs.getInt("user.idpermissao"));
			permissaoUsuario.setCategoria_permissao(rs.getString("p.categoria"));
			//fim permissao usuario
			
			//incio departamento usuario
			Departamento departamentoUsuario = new Departamento();
			departamentoUsuario.setId_departamento(rs.getInt("dp.id_departamentos"));
			departamentoUsuario.setNome_setor(rs.getString("dp.nome_setor"));
			//FIM
			
			// usuario
			Usuario usuario = new Usuario();
			usuario.setNome(rs.getString("user.nome"));
			usuario.setId(rs.getLong("user.id_usuario"));
			usuario.setMatricula(rs.getString("user.matricula"));
			usuario.setLogin(rs.getString("user.login"));
			usuario.setpUsuario(permissaoUsuario);
			usuario.setdUsuario(departamentoUsuario);
			// FIM TABELA USUARIO               
			
			//equipamento // equipamento user tabelas
			Equipamentos equipamento = new Equipamentos();
			equipamento.setEquipamento_nome(rs.getString("equip.equipamento_nome"));
			equipamento.setSerial_equipamento(rs.getString("equipuser.serial_equipamento"));
			equipamento.setId_equipamento_do_Usuario(rs.getLong("equipreq.idequipamento_user"));
			
			//status tabela
			Status status = new Status();
			status.setCategoria(rs.getString("statusreq.categoria"));
			status.setIdstatus(rs.getInt("statusreq.id_status"));
			
			//status detalhes tabela
			Usuario usuarioStatus = new Usuario();//id do usuaro na tabela detalhes status
			usuarioStatus.setId(rs.getLong("dStatus.idusuario"));
			StatusDetalhes statusDetalhes = new StatusDetalhes();
			statusDetalhes.setId_statusdetalhes(rs.getLong("dStatus.id_statusdetalhes"));
			statusDetalhes.setData_status(rs.getTimestamp("dStatus.data"));
			statusDetalhes.setObservacao_status(rs.getString("dStatus.observacao"));
			statusDetalhes.setIdUsuario(usuarioStatus);
			statusDetalhes.setIdStatus(status);
			
			// Id da requisicao na tabela detalhes status
			Requisicao requisicaoStatus = new Requisicao();
			requisicaoStatus.setId(rs.getLong("dStatus.idequipamento_requisicao"));
			
			//requisicao tabela
			Requisicao req = new Requisicao();
			req.setId(rs.getLong("equipreq.id_requisicao"));
			req.setNome(rs.getString("equipreq.nome"));
			req.setData_criada(rs.getTimestamp("equipreq.data_requisicao"));
			req.setMotivo(rs.getString("equipreq.observacao"));
			req.setReqEquipamento(equipamento);
			req.setReqStatus(statusDetalhes);
			req.setReqUsuario(usuario);
			req.setReqStatus_Detalhes(statusDetalhes);
			req.setChefes(chefes);
			
			requisicoes.add(req);
		}
		
		stmt.close();
		rs.close();
	} catch (SQLException ex) {
		Logger.getLogger(RequisicaoDAO.class.getName()).log(Level.SEVERE, null, ex);
		return null;
	}
	
	return requisicoes;
}

codigo do meu singleton:

private List<Requisicao> requisicaolist;

public List<Requisicao> getRequisicaolist() {
	return requisicaolist;
}

public void setRequisicaolist(List<Requisicao> requisicaolist) {
	this.requisicaolist = requisicaolist;
}

como eu conseguiria chamar metodos

RequisicaoDAO dao = new RequisicaoDAO();
aSessao.getInstancia().setRequisicaolist(dao.pegarRequisicoesUser());

ou não é possível e eu estou viajando?

aSessao é o nome da classe ou é uma variável? Como você está declarando isso?

**[quote=“lucastody, post:2, topic:389611, full:true”]

aSessao é o nome da classe ou é uma variável? Como você está declarando isso?
[/quote]
nome da variável.
private static Sessao aSessao;

Do jeito que vc fez, vc até consegue, só tem que tomar alguns cuidados com a validade dos dados que estão carregados no singleton.

Sendo um singleton, vc não precisa declarar variável pra ela não. Apenas chame assim:

Sessao.getInstancia().seuMetodo();

mas no caso é uma lista
eu setei essa lista ao logar com um metodo do meu DAO para criar uma lista

minha dúvida é como acessar esses metodos / esses valores dessa lista.

Use o método get que retorna a lista

List<Requisicao> requisicaolist = Sessao.getInstancia.getRequisicaolist()

Com a lista obtida, vc consegue percorrer ela e acessar seus itens e as propriedades de cada item.

1 curtida

então no caso depois de setar essa lista
RequisicaoDAO dao = new RequisicaoDAO();
aSessao.getInstancia().setRequisicaolist(dao.pegarRequisicoesUser());

eu utilizo isso para percorrer ela?

List requisicaolist = Sessao.getInstancia.getRequisicaolist()

Sim. Você obtem ela dessa forma e depois acessa os itens que precisar.

1 curtida

Vlww manoo
Uma pessoa tinha me falo que isso que estou fazendo não é um singleton
é realmente isso?

Não vi sua classe singleton completa. Mas se essa implementação estiver garantindo que terá apenas UMA instância dela no seu sistema todo, sim, é um singleton.

REFERENCIA: https://www.geeksforgeeks.org/singleton-class-java/

sim sim eu instancio apenas uma vez.

package Model;

public class Sessao {
    private static Sessao instance = null;
    private Usuario usuario;
    private Matricula matricula;
    private Boletim boletim;
    private Status status;
    private Departamento departamento;
    private Equipamentos equipamentos;

    private Sessao() {
    }

    public Boletim getBoletim() {
        return boletim;
    }

    public void setBoletim(Boletim boletim) {
        this.boletim = boletim;
    }

    public Status getStatus() {
        return status;
    }

    public void setStatus(Status status) {
        this.status = status;
    }

    public Departamento getDepartamento() {
        return departamento;
    }

    public void setDepartamento(Departamento departamento) {
        this.departamento = departamento;
    }

    public Equipamentos getEquipamentos() {
        return equipamentos;
    }

    public void setEquipamentos(Equipamentos equipamentos) {
        this.equipamentos = equipamentos;
    }

    public void setMatricula(Matricula matricula) {
        this.matricula = matricula;
    }

    public Matricula getMatricula() {
        return matricula;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    public Long pegarID(Usuario usuario) {
        return usuario.getId();
    }

    public Usuario getUsuario() {
        return usuario;
    }  }
        return instance;
    }

}

    public static Sessao getInstancia() {
        if (instance == null) {
            instance = new Sessao();

Está meio estranha essa classe que vc postou.

está um pouco bagunçada, mas nela tem os get’s / set’s das minhas classes model.

package Model;

public class Sessao {

private static Sessao instance = null;
private Usuario usuario;
private Matricula matricula;
private Boletim boletim;
private Status status;
private Departamento departamento;
private Equipamentos equipamentos;

private Sessao() {
}

public static Sessao getInstancia() {
    if (instance == null) {
        instance = new Sessao();
    }
    return instance;
}


//gets sets
  public Boletim getBoletim() {
    return boletim;
}

public void setBoletim(Boletim boletim) {
    this.boletim = boletim;
}

public Status getStatus() {
    return status;
}

public void setStatus(Status status) {
    this.status = status;
}

public Departamento getDepartamento() {
    return departamento;
}

public void setDepartamento(Departamento departamento) {
    this.departamento = departamento;
}

public Equipamentos getEquipamentos() {
    return equipamentos;
}

public void setEquipamentos(Equipamentos equipamentos) {
    this.equipamentos = equipamentos;
}

public void setMatricula(Matricula matricula) {
    this.matricula = matricula;
}

public Matricula getMatricula() {
    return matricula;
}

public void setUsuario(Usuario usuario) {
    this.usuario = usuario;
}

public Long pegarID(Usuario usuario) {
    return usuario.getId();
}

public Usuario getUsuario() {
    return usuario;
}

}

1 curtida

Sim. Essa classe está implementando singleton. Pra mim, está OK.

1 curtida

vlw mesmo man

você pode me tirar só mais uma dúvida?

List requisicaolist = Sessao.getInstancia.getRequisicaolist()

depois de ter pegado a lista
como eu percorreria para pegar ex
req.setMotivo(rs.getString(“equipreq.observacao”));
ou
req.setReqUsuario(usuario);

Vamos pegar o motivo da primeira requisição da lista:

List<Requisicao> requisicoes = Sessao.getInstancia.getRequisicaolist()
Requisicao requisicao = requisicoes.get(0);

String motivo = requisicao.getMotivo();
Usuario usuario = requisicao.getReqUsuario();

vlw man
no caso
eu estaria pegando apenas o primeiro usuario ?
Usuario usuario = requisicao.getReqUsuario();
caso eu queria pegar todos teria que criar uma lista ?

Acho que a relação não é essa. Nesse exemplo que fiz, vc está pegando o usuário da primeira requisição da lista. Nâo necessariamente é o primeiro usuário de algo.

então caso eu queria pegar os usarios da lista eu queria que fazer um list

List = requisicao.getReqUsuario();

Pelo que vi no seu código, desse jeito não funcionará, pois o método getReqUsuario() retornar um único usuário e não uma lista (pelo que entendi da sua modelagem, uma requisição possui UM usuário).

Agora, se vc quiser pegar os usuários de todas as requisições, vc consegue fazer isso percorrendo as requisições com um laço e pegando o usuário de cada item e adicionando numa lista.

List<Requisicao> requisicoes = Sessao.getInstancia.getRequisicaolist()
List<Usuario> usuarios = new ArrayList<>();

for(Requisicao req : requisicoes) {
	usuario.add(requisicao.getReqUsuario());
}
1 curtida