package br.com.centralit.citcorpore.integracao; import java.util.ArrayList; import java.util.Collection; import java.util.List; import br.com.centralit.citcorpore.bean.IntegranteViagemDTO; import br.com.centralit.citcorpore.bean.SolicitacaoServicoDTO; import br.com.citframework.dto.IDto; import br.com.citframework.excecao.PersistenceException; import br.com.citframework.integracao.Condition; import br.com.citframework.integracao.CrudDaoDefaultImpl; import br.com.citframework.integracao.Field; import br.com.citframework.integracao.Order; import br.com.citframework.util.Constantes; @SuppressWarnings({ "rawtypes", "unchecked" }) public class IntegranteViagemDao extends CrudDaoDefaultImpl { public IntegranteViagemDao() { super(Constantes.getValue("DATABASE_ALIAS"), null); } @Override public Collection find(IDto obj) throws PersistenceException { return null; } @Override public Collection<Field> getFields() { Collection<Field> listFields = new ArrayList<>(); listFields.add(new Field("idintegranteviagem", "idIntegranteViagem", true, true, false, false)); listFields.add(new Field("idsolicitacaoservico", "idSolicitacaoServico", false, false, false, false)); listFields.add(new Field("idempregado", "idEmpregado", false, false, false, false)); listFields.add(new Field("idrespprestacaocontas", "idRespPrestacaoContas", false, false, false, false)); listFields.add(new Field("integrantefuncionario", "integranteFuncionario", false, false, false, false)); listFields.add(new Field("remarcacao", "remarcacao", false, false, false, false)); listFields.add(new Field("nome", "nome", false, false, false, false)); listFields.add(new Field("iditemtrabalho", "idItemTrabalho", false, false, false, false)); listFields.add(new Field("emprestacaocontas", "emPrestacaoContas", false, false, false, false)); listFields.add(new Field("idtarefa", "idTarefa", false, false, false, false)); listFields.add(new Field("infonaofuncionario", "infoNaoFuncionario", false, false, false, false)); listFields.add(new Field("estado", "estado", false, false, false, false)); return listFields; } @Override public String getTableName() { return "integranteviagem"; } @Override public Collection list() throws PersistenceException { return null; } @Override public Class getBean() { return IntegranteViagemDTO.class; } /** * Retorna uma cole��o de todos os integrante ligados a idsolicitacao * * @param idSolicitacao * @return * @throws Exception */ public Collection<IntegranteViagemDTO> findAllByIdSolicitacao(Integer idSolicitacao) throws PersistenceException { List condicao = new ArrayList(); condicao.add(new Condition("idSolicitacaoServico", "=", idSolicitacao)); // condicao.add(new Condition(Condition.AND, "remarcacao", "=", "N")); return super.findByCondition(condicao, null); } /** * TODO Este metodo esta em desuso, pode ser removido na proxima vers�o */ public Collection<IntegranteViagemDTO> findAllByIdSolicitacaoRemarcacaoNao(Integer idSolicitacao) throws PersistenceException { List condicao = new ArrayList(); condicao.add(new Condition("idSolicitacaoServico", "=", idSolicitacao)); condicao.add(new Condition(Condition.AND, "remarcacao", "=", "N")); return super.findByCondition(condicao, null); } /** * Retorna uma cole��o de integrante que foram remarcados e est�o ligados a idsolicitacao * * @param idSolicitacao * @return * @throws Exception */ public Collection<IntegranteViagemDTO> findAllRemarcacaoByIdSolicitacao(Integer idSolicitacao) throws PersistenceException { List condicao = new ArrayList(); condicao.add(new Condition("idSolicitacaoServico", "=", idSolicitacao)); condicao.add(new Condition(Condition.AND, "remarcacao", "=", "S")); return super.findByCondition(condicao, null); } /** * Busca um cole��o de integrantes que n�o est�o na etapa de presta��o de contas com base no idsolicitacao passado * * @param idSolicitacao * @return * @throws Exception */ public Collection<IntegranteViagemDTO> findAllPrestacaoContasByIdSolicitacao(Integer idSolicitacao) throws PersistenceException { List condicao = new ArrayList(); condicao.add(new Condition("idSolicitacaoServico", "=", idSolicitacao)); condicao.add(new Condition(Condition.AND, "remarcacao", "=", "N")); condicao.add(new Condition(Condition.AND, "emPrestacaoContas", "<>", "S")); /*condicao.add(new Order("idintegranteviagem"));*/ return super.findByCondition(condicao, null); } /** * TODO Este metodo esta em desuso, pode ser removido na proxima vers�o */ public Collection<IntegranteViagemDTO> findAllPrestacaoContasByIdSolicitacaoTarefa(Integer idSolicitacao, Integer idTarefa) throws PersistenceException { ArrayList parametros = new ArrayList(); List list = new ArrayList(); List fields = new ArrayList(); StringBuilder sql = new StringBuilder(); sql.append("SELECT idintegranteviagem, idsolicitacaoservico, idempregado, idrespprestacaocontas "); sql.append("FROM integranteviagem "); sql.append("WHERE idsolicitacaoservico = ? "); sql.append("AND idtarefa IS NULL"); parametros.add(idSolicitacao); list = this.execSQL(sql.toString(), parametros.toArray()); fields.add("idIntegranteViagem"); fields.add("idSolicitacaoServico"); fields.add("idEmpregado"); fields.add("idRespPrestacaoContas"); return listConvertion(IntegranteViagemDTO.class, list, fields ); } /** * TODO Este metodo esta em desuso, pode ser removido na proxima vers�o */ public IntegranteViagemDTO findByIdSolicitacaoServicoIdEmpregado(Integer idSolicitacao, Integer idEmpregado) throws PersistenceException { ArrayList parametros = new ArrayList(); List list = new ArrayList(); List fields = new ArrayList(); StringBuilder sql = new StringBuilder(); sql.append("SELECT * "); sql.append("FROM integranteviagem "); sql.append("WHERE idsolicitacaoservico = ? "); sql.append("AND idempregado = ?"); parametros.add(idSolicitacao); parametros.add(idEmpregado); list = this.execSQL(sql.toString(), parametros.toArray()); fields.add("idIntegranteViagem"); fields.add("idSolicitacaoServico"); fields.add("idEmpregado"); fields.add("idRespPrestacaoContas"); fields.add("idTarefa"); Collection<IntegranteViagemDTO> integranteViagemDTOs = listConvertion(IntegranteViagemDTO.class, list, fields ); if(integranteViagemDTOs != null){ for(IntegranteViagemDTO integranteViagemDTO: integranteViagemDTOs){ integranteViagemDTO = (IntegranteViagemDTO) restore(integranteViagemDTO); return integranteViagemDTO; } } return null; } /** * TODO Este metodo esta em desuso, pode ser removido na proxima vers�o */ public Collection<IntegranteViagemDTO> findAllByIdSolicitacaoAndViagemRemarcada(SolicitacaoServicoDTO solicitacaoServicoDTO) throws PersistenceException { List condicao = new ArrayList(); condicao.add(new Condition(Condition.AND, "idSolicitacaoServico", "=", solicitacaoServicoDTO.getIdSolicitacaoServico())); condicao.add(new Condition(Condition.AND, "remarcacao", "=", "S")); return super.findByCondition(condicao, null); } /** * Atualiza os dados de remarca��o do integrante com base no integranteDTO passado * * @param integrante * @return * @throws Exception */ public Boolean updateBySolicitacaoEmpregado(IntegranteViagemDTO integrante)throws PersistenceException { List parametros = new ArrayList(); String sql = "update " + getTableName() + " set remarcacao = ? where idSolicitacaoServico = ? "; parametros.add(integrante.getRemarcacao()); parametros.add(integrante.getIdSolicitacaoServico()); if (integrante.getIdEmpregado() != null && integrante.getIdEmpregado() > 0) { sql += " and idEmpregado = ? "; parametros.add(integrante.getIdEmpregado()); } try { super.execUpdate(sql, parametros.toArray()); return true; } catch (PersistenceException e) { return false; } } /** * Verifica se houve remarca��o para a solicitacao passada * * @param idsolicitacaoservico * @return * @throws PersistenceException */ public boolean isHouveRemarcacaoViagem(Integer idsolicitacaoservico) throws PersistenceException{ ArrayList parametros = new ArrayList(); List list = new ArrayList(); StringBuilder sql = new StringBuilder(); sql.append("SELECT DISTINCT i.iditemtrabalho, "); sql.append(" i.idinstancia, "); sql.append(" aff.idusuario, "); sql.append(" aff.tipo, "); sql.append(" el.template, "); sql.append(" i.situacao, "); sql.append(" inte.idempregado "); sql.append("FROM bpm_atribuicaofluxo aff "); sql.append(" INNER JOIN bpm_itemtrabalhofluxo i "); sql.append(" ON aff.iditemtrabalho = i.iditemtrabalho "); sql.append(" INNER JOIN bpm_elementofluxo el "); sql.append(" ON el.idelemento = i.idelemento "); sql.append(" INNER JOIN execucaosolicitacao ex "); sql.append(" ON ex.idinstanciafluxo = i.idinstancia "); sql.append(" INNER JOIN integranteviagem inte "); sql.append(" ON inte.idtarefa = i.iditemtrabalho "); sql.append(" INNER JOIN itemcontrolefinanceiroviagem item "); sql.append(" ON item.idempregado = inte.idempregado "); sql.append(" AND item.idsolicitacaoservico = ex.idsolicitacaoservico "); sql.append(" INNER JOIN controlefinanceiroviagem contr "); sql.append(" ON contr.idcontrolefinanceiroviagem = "); sql.append(" item.idcontrolefinanceiroviagem "); sql.append("WHERE ex.idsolicitacaoservico = ? "); sql.append(" AND contr.iditemtrabalho IS NULL "); sql.append(" AND inte.remarcacao = ? "); sql.append(" AND el.template = ? "); sql.append(" AND item.datafim IS NULL "); sql.append(" AND aff.tipo <> 'Acompanhamento' "); sql.append(" AND i.situacao <> 'Cancelado' "); sql.append("ORDER BY aff.idatribuicao DESC "); parametros.add(idsolicitacaoservico); parametros.add("S"); parametros.add("PrestacaoContasViagem"); list = this.execSQL(sql.toString(), parametros.toArray()); if(list!=null && !list.isEmpty()){ return true; }else{ return false; } } /** * Retorna uma cole��o de integrantes com base nos dados de idsolicitacaoservico e idempregado do integranteDTO passado * * @param integrante * @return * @throws Exception */ public Collection<IntegranteViagemDTO> restoreByIntegranteSolicitacao(IntegranteViagemDTO integrante) throws PersistenceException { List condicao = new ArrayList(); List ordenacao = new ArrayList(); condicao.add(new Condition("idSolicitacaoServico", "=", integrante.getIdSolicitacaoServico())); condicao.add(new Condition(Condition.AND, "idEmpregado", "=", integrante.getIdEmpregado())); ordenacao.add(new Order("idEmpregado")); return super.findByCondition(condicao, ordenacao); } /** * Verifica se o integrante existe com base no idsolicitacao e idempregado passados * * @param idsolicitacaoServico * @param idEmpregado * @return * @throws Exception */ public boolean verificarSeIntegranteViagemExiste(Integer idsolicitacaoServico,Integer idEmpregado) throws PersistenceException { List condicao = new ArrayList(); condicao.add(new Condition("idSolicitacaoServico", "=", idsolicitacaoServico)); condicao.add(new Condition("idEmpregado", "=", idEmpregado)); condicao.add(new Condition(Condition.AND, "remarcacao", "=", "N")); List lista = (List) super.findByCondition(condicao, null); if(lista!=null && !lista.isEmpty()){ return true; }else{ return false; } } /** * TODO Este metodo esta em desuso, pode ser removido na proxima vers�o */ public Integer retornaQtdeIntegrantes(Integer idSolicitacao) throws PersistenceException { Collection<IntegranteViagemDTO> listaIntegrantes = this.findAllByIdSolicitacao(idSolicitacao); if(listaIntegrantes == null) return new Integer(0); else return listaIntegrantes.size(); } /** * Recupera uma cole��o de integrantes ornenados pelo idempregado com base no idsolicitacaoservico e idempregado passados * * @param idsolicitacaoServico * @param idEmpregado * @return * @throws Exception */ public Collection<IntegranteViagemDTO> recuperaIntegranteByEmpregado(Integer idsolicitacaoServico,Integer idEmpregado) throws PersistenceException { List condicao = new ArrayList(); List ordenacao = new ArrayList(); condicao.add(new Condition("idSolicitacaoServico", "=", idsolicitacaoServico)); condicao.add(new Condition(Condition.AND, "idEmpregado", "=", idEmpregado)); //condicao.add(new Condition(Condition.AND, "remarcacao", "=", "N")); ordenacao.add(new Order("idEmpregado")); return super.findByCondition(condicao, ordenacao); } /** * Recupera uma cole��o de integrantes ordenados por idempregado com base no idsolicitacaoservico e idresponsavel passados * * @param idsolicitacaoServico * @param idResponsavel * @return * @throws Exception */ public Collection<IntegranteViagemDTO> recuperaIntegranteByResponsavel(Integer idsolicitacaoServico,Integer idResponsavel) throws PersistenceException { List condicao = new ArrayList(); List ordenacao = new ArrayList(); condicao.add(new Condition("idSolicitacaoServico", "=", idsolicitacaoServico)); condicao.add(new Condition(Condition.AND, "idRespPrestacaoContas", "=", idResponsavel)); //condicao.add(new Condition(Condition.AND, "remarcacao", "=", "N")); ordenacao.add(new Order("idEmpregado")); return super.findByCondition(condicao, ordenacao); } /** * TODO Este metodo esta em desuso, pode ser removido na proxima vers�o */ public Collection<IntegranteViagemDTO> recuperaIntegranteByNomeNaoFuncionario(Integer idsolicitacaoServico, String nomeNaoFuncionario) throws PersistenceException { List condicao = new ArrayList(); List ordenacao = new ArrayList(); condicao.add(new Condition("idSolicitacaoServico", "=", idsolicitacaoServico)); condicao.add(new Condition(Condition.AND, "nomeNaoFuncionario", "=", nomeNaoFuncionario)); //condicao.add(new Condition(Condition.AND, "remarcacao", "=", "N")); ordenacao.add(new Order("idEmpregado")); return super.findByCondition(condicao, ordenacao); } /** * Recupera um integrante com base no idsolicitacaoservico e idempregado passado * * @param idsolicitacaoServico * @param idEmpregado * @return * @throws Exception */ public IntegranteViagemDTO recuperaIntegrante(Integer idsolicitacaoServico,Integer idEmpregado) throws PersistenceException { List result = new ArrayList<IntegranteViagemDTO>(); result = (List) recuperaIntegranteByEmpregado(idsolicitacaoServico, idEmpregado); if(result != null){ return (IntegranteViagemDTO) result.get(0); }else{ Integer idResponsavel = idEmpregado; result = (List) recuperaIntegranteByResponsavel(idsolicitacaoServico, idResponsavel); if(result!=null){ return (IntegranteViagemDTO) result.get(0); } } return null; } /** * Recupera um integrante com base no idsolicitacaoservico e idtarefa passado * * @param idSolicitacaoServico * @param idTarefa * @return * @throws Exception */ public IntegranteViagemDTO getIntegranteByIdSolicitacaoAndTarefa(Integer idSolicitacaoServico, Integer idTarefa) throws PersistenceException { List condicao = new ArrayList(); List ordenacao = new ArrayList(); List result = new ArrayList<IntegranteViagemDTO>(); condicao.add(new Condition("idSolicitacaoServico", "=", idSolicitacaoServico)); condicao.add(new Condition(Condition.AND, "idTarefa", "=", idTarefa)); ordenacao.add(new Order("idEmpregado")); result = (List) super.findByCondition(condicao, ordenacao); if(result != null && !result.isEmpty()) { return (IntegranteViagemDTO) result.get(0); } return null; } /** * TODO Este metodo esta em desuso, pode ser removido na proxima vers�o */ public IntegranteViagemDTO recuperaIntegrante(Integer idsolicitacaoServico,Integer idEmpregado,String funcionario) throws PersistenceException { List result = new ArrayList<IntegranteViagemDTO>(); if(funcionario == null) return null; if(funcionario.equals("S")){ //Recupera pelo empregado result = (List) recuperaIntegranteByEmpregado(idsolicitacaoServico, idEmpregado); if(result != null) return (IntegranteViagemDTO) result.get(0); } else { //Recupera pelo responsavel result = (List) recuperaIntegranteByResponsavel(idsolicitacaoServico, idEmpregado); if(result != null) return (IntegranteViagemDTO) result.get(0); } return null; } /** * TODO Este metodo esta em desuso, pode ser removido na proxima vers�o */ public IntegranteViagemDTO recuperaIntegranteNaoFuncionario(Integer idsolicitacaoServico, String nomeNaoFuncionario) throws PersistenceException { List result = new ArrayList<IntegranteViagemDTO>(); result = (List) recuperaIntegranteByNomeNaoFuncionario(idsolicitacaoServico, nomeNaoFuncionario); if(result != null){ return (IntegranteViagemDTO) result.get(0); } return null; } /** * TODO Este metodo esta em desuso, pode ser removido na proxima vers�o */ public IntegranteViagemDTO findById(Integer idIntegranteViagem) throws PersistenceException { List condicao = new ArrayList(); condicao.add(new Condition("idIntegranteViagem", "=", idIntegranteViagem)); List result = new ArrayList<IntegranteViagemDTO>(); result = (List) super.findByCondition(condicao, null); if(result != null && !result.isEmpty()) return (IntegranteViagemDTO) result.get(0); else return null; } /** * TODO Este metodo esta em desuso, pode ser removido na proxima vers�o */ public void atualizarIdItemTrabalho(Integer idTarefa, Integer idSolicitacaoServico){ List parametros = new ArrayList(); String sql = "update " + getTableName() + " set iditemtrabalho = ? " + " where remarcacao = 'S' and idsolicitacaoservico = ?"; parametros.add(idTarefa); parametros.add(idSolicitacaoServico); try { super.execUpdate(sql, parametros.toArray()); } catch (PersistenceException e) { return; } } /** * TODO Este metodo esta em desuso, pode ser removido na proxima vers�o */ public void atualizarRemarcacaoDoIntegrante(Integer idIntegrante){ List parametros = new ArrayList(); String sql = "update " + getTableName() + " set remarcacao = 'N', emprestacaocontas = 'N', idtarefa = null " + " where remarcacao = 'S' and idintegranteviagem = ?"; parametros.add(idIntegrante); try { super.execUpdate(sql, parametros.toArray()); } catch (PersistenceException e) { return; } } /** * * * @param integranteViagemDTO * @param eOu * @return * @throws Exception */ public Collection<IntegranteViagemDTO> findAllIntegrantesParaRemarcacao(IntegranteViagemDTO integranteViagemDTO, String eOu) throws PersistenceException { ArrayList parametros = new ArrayList(); List list = new ArrayList(); List fields = new ArrayList(); StringBuilder sql = new StringBuilder(); sql.append("SELECT distinct iv.idintegranteviagem, iv.nome, iv.estado "); sql.append("FROM integranteviagem iv "); sql.append("inner join roteiroviagem rt on rt.idintegrante = iv.idintegranteviagem "); sql.append("WHERE (iv.estado = 'Aguardando Adiantamento' or iv.estado = 'Aguardando Presta��o de Contas')"); sql.append("and rt.volta >= CURDATE() "); sql.append("and rt.datafim is null "); if(integranteViagemDTO.getIdSolicitacaoServico() != null && !integranteViagemDTO.getIdSolicitacaoServico().equals("")){ sql.append("AND iv.idsolicitacaoservico = ? "); parametros.add(integranteViagemDTO.getIdSolicitacaoServico()); } if(integranteViagemDTO.getIdEmpregado() != null && !integranteViagemDTO.getIdEmpregado().equals("")){ sql.append("AND iv.idempregado = ?"); parametros.add(integranteViagemDTO.getIdEmpregado()); }else{ if(integranteViagemDTO.getNomeEmpregado() != null && !integranteViagemDTO.getNomeEmpregado().equalsIgnoreCase("")){ sql.append("AND iv.nome like '%"+integranteViagemDTO.getNomeEmpregado()+"%'"); } } if(integranteViagemDTO.getDataInicio() != null && integranteViagemDTO.getDataFim() != null){ if(integranteViagemDTO.getDataInicio() != null && integranteViagemDTO.getDataInicioAux() != null){ sql.append("and ( (rt.ida >= ? "); sql.append("and rt.ida <= ?) "); parametros.add(integranteViagemDTO.getDataInicio()); parametros.add(integranteViagemDTO.getDataInicioAux()); } if(integranteViagemDTO.getDataFim() != null){ if(eOu != null && eOu.equalsIgnoreCase("or")){ sql.append("or (rt.volta >= ? "); sql.append("and rt.volta <= ?)) "); }else{ sql.append("and (rt.volta >= ? "); sql.append("and rt.volta <= ?)) "); } parametros.add(integranteViagemDTO.getDataFim()); parametros.add(integranteViagemDTO.getDataFimAux()); } }else{ if(integranteViagemDTO.getDataInicio() != null && integranteViagemDTO.getDataInicioAux() != null){ sql.append("and (rt.ida >= ? "); sql.append("and rt.ida <= ?) "); parametros.add(integranteViagemDTO.getDataInicio()); parametros.add(integranteViagemDTO.getDataInicioAux()); } if(integranteViagemDTO.getDataFim() != null && integranteViagemDTO.getDataFimAux() != null){ sql.append("and (rt.volta >= ? "); sql.append("and rt.volta <= ?) "); parametros.add(integranteViagemDTO.getDataFim()); parametros.add(integranteViagemDTO.getDataFimAux()); } } list = this.execSQL(sql.toString(), parametros.toArray()); fields.add("idIntegranteViagem"); fields.add("nome"); fields.add("estado"); return listConvertion(IntegranteViagemDTO.class, list, fields ); } @Override public void updateNotNull(IDto obj) throws PersistenceException { super.updateNotNull(obj); } /** * TODO Este metodo esta em desuso, pode ser removido na proxima vers�o */ public Collection<IntegranteViagemDTO> recuperaIntegrantesViagemByCompras(Integer idSolicitacaoServico) throws PersistenceException { List condicao = new ArrayList(); condicao.add(new Condition("idSolicitacaoServico", "=", idSolicitacaoServico)); condicao.add(new Condition("estado", "=", "Aguardando Financeiro")); List result = new ArrayList<IntegranteViagemDTO>(); result = (List) super.findByCondition(condicao, null); if(result != null && !result.isEmpty()) return result; else return null; } /** * * * @param idSolicitacao * @param estado * @return * @throws Exception */ public Collection<IntegranteViagemDTO> recuperaIntegrantesViagemByIdSolicitacaoEstado(Integer idSolicitacao, String estado) throws PersistenceException { List condicao = new ArrayList(); condicao.add(new Condition("idSolicitacaoServico", "=", idSolicitacao)); condicao.add(new Condition("estado", "=", estado)); List result = new ArrayList<IntegranteViagemDTO>(); result = (List) super.findByCondition(condicao, null); if(result != null && !result.isEmpty()) return result; else return null; } /** * Recupera uma cole��o de integrantes que podem estar ou n�o na etapa de prestacao de contas depende do parametro "prestContas" e do "estado" passados. * * @param idSolicitacao * @param estado * @param prestContas * @return * @throws Exception */ public Collection<IntegranteViagemDTO> recuperaIntegrantesViagemByIdSolicitacaoEstadoPrestConta(Integer idSolicitacao, String estado, String prestContas) throws PersistenceException { List condicao = new ArrayList(); condicao.add(new Condition("idSolicitacaoServico", "=", idSolicitacao)); condicao.add(new Condition(Condition.AND, "remarcacao", "=", "N")); condicao.add(new Condition(Condition.AND, "emPrestacaoContas", "=", prestContas)); condicao.add(new Condition(Condition.AND, "estado", "=", estado)); condicao.add(new Condition(Condition.AND, "idTarefa", "is", null)); /*condicao.add(new Order("idintegranteviagem"));*/ return super.findByCondition(condicao, null); } /** * Busca o integrante pelo idsolicitacao e idtarefa passados * * @param idSolicitacao * @param idTarefa * @return * @throws Exception */ public IntegranteViagemDTO findByIdSolicitacaoServicoIdTarefa(Integer idSolicitacao, Integer idTarefa) throws PersistenceException { List condicao = new ArrayList(); List ordenacao = new ArrayList(); condicao.add(new Condition("idSolicitacaoServico", "=", idSolicitacao)); condicao.add(new Condition(Condition.AND, "idTarefa", "=", idTarefa)); ordenacao.add(new Order("idIntegranteViagem")); List result = new ArrayList<IntegranteViagemDTO>(); result = (List) super.findByCondition(condicao, null); if(result != null && !result.isEmpty()) return (IntegranteViagemDTO) result.get(0); else return null; } }