Map dinamico

7 respostas
xandevieira

Bom dia, preciso montar um mapa dinamico Map<String, String> ...
Onde passarei qualquer metodo (que sera a chave) e o valor do metodo sera o valor.
Ex.

titulo.getTituloPK().getNutitulo().toString() == valor 20
credor.getCredorPK().getCdCredor().toString() == valor 2 
baixa.getBaixaPK().getNuParcela().toString() == valor 1

No “gerador” do mapa eu passaria os tres parametros e seria montado assim:

Map<String, String> map = new HashMap<String, String>();
map.put(titulo.getTituloPK().getNutitulo().toString(), 20);
map.put(credor.getCredorPK().getCdCredor().toString(), 2);
map.put(baixa.getBaixaPK().getNuParcela().toString(), 1);

Tem como fazer algo assim?

vlw

7 Respostas

alucardeck

não sei se entendi…

mas vc ker criar um map… onde a key será o método em especifico de uma classe?

com reflection vc consegue, mas… tem certeza que é isso mesmo que vc precisa fazer?
talvez tenha outra solução pro seu problema…

xandevieira

Isso mesmo, o key seria um metodo que eu passarei, dei uma olhada no reflection mas não entendi nd.

alucardeck

tem um bom artigo no GUJ sobre isso.
http://www.guj.com.br/articles/10

agora pense bem se vc deve resolver dessa forma :slight_smile:

nel

Bom dia!

Se quiser, podemos ajuda-lo a pensar nisso, se essa seria a solução adequada ao seu problema.
Queres compartilhar sua necessidade conosco? Creio que seria mais fácil para entedermos o contexto do problema e opinar sobre a solução adotada por você, até o momento.

Abraços.

xandevieira

Tenho uma tela no sistema onde é possíveo o usuario criar um historico padrão utilizando algumas “macros” pre-definidas por nós.
As macros são substituidas por valores.

Ex. Entrada de título <nutitulo> <tpdoc>/<nudoc> cliente <nmcliente> emprend. <nmempr> ref. <deobs>

Onde o

<nutitulo> seria substitui pelo valor de titulo.getTituloPK().getNutitulo().toString()
<tpdoc> por titulo.getCdDocumento()
<nudoc> por titulo.getNUDocumento()
<nmcliente> por titulo.getCliente().getNmCliente()
<nmempr> por titulo.getApropFin().getEmpreend().getNmEmpreend()
<deobs> por titulo.getDeObs()

Existem varias outras

A ideia seria reuniar num unico lugar as macros e substituir conforme for.
Pois a chamada a esse metodo que quero criar (seja por map ou outra coisa qq) será de varios outros metodos.

Tinha feito assim:

public static String getDeComplementoHistoricoPad(Integer cdOperacao, Map<String, HistoricoPad> mapHistorico, String... parametros) { String deComplemento = getHistoricoPad(cdOperacao, mapHistorico).getDeComplemento().toString(); try { System.out.println("parametros: " + parametros); System.out.println("deComplemento: " + deComplemento); for (int i = 0; i < parametros.length; i++) { String string = parametros[i]; deComplemento = TextUtils.replaceAll(deComplemento, "<cdempr>", string); deComplemento = TextUtils.replaceAll(deComplemento, "<cdimposto>", string); deComplemento = TextUtils.replaceAll(deComplemento, "<deobs>", string); deComplemento = TextUtils.replaceAll(deComplemento, "<deobsbaix", string); deComplemento = TextUtils.replaceAll(deComplemento, "><dtcontabi", string); deComplemento = TextUtils.replaceAll(deComplemento, "><nmcliente", string); deComplemento = TextUtils.replaceAll(deComplemento, "><nmcredor>", string); deComplemento = TextUtils.replaceAll(deComplemento, "<nmdoc>", string); deComplemento = TextUtils.replaceAll(deComplemento, "<nmempr>", string); deComplemento = TextUtils.replaceAll(deComplemento, "<nmimposto>", string); deComplemento = TextUtils.replaceAll(deComplemento, "<nucheque>", string); deComplemento = TextUtils.replaceAll(deComplemento, "<nuconta>", string); deComplemento = TextUtils.replaceAll(deComplemento, "<nudoc>", string); deComplemento = TextUtils.replaceAll(deComplemento, "<nudoccp>", string); deComplemento = TextUtils.replaceAll(deComplemento, "<nuparc>", string); deComplemento = TextUtils.replaceAll(deComplemento, "<nutitulo>", string); deComplemento = TextUtils.replaceAll(deComplemento, "<nuunid>", string); deComplemento = TextUtils.replaceAll(deComplemento, "<pgparc>", string); deComplemento = TextUtils.replaceAll(deComplemento, "<qtparc>", string); deComplemento = TextUtils.replaceAll(deComplemento, "<tpdoc>", string); deComplemento = TextUtils.replaceAll(deComplemento, "<unidsec>", string); if (br.com.softplan.sienge.crc.Baixa.FLPARCIALTOTAL_PARCIAL.equals(string)) { deComplemento = TextUtils.replaceAll(deComplemento, "<pgparc>", "parte"); } else { deComplemento = TextUtils.replaceAll(deComplemento, "<pgparc>", ""); } } } catch (Exception e) { deComplemento = "Houve um problema ao recuperar o histórico padrão."; } deComplemento = reset(deComplemento); return TextUtils.trunca(deComplemento, 399); }
Porem ele substitui tudo, a ideia no map dinamico me pareceu a mais adequada no momento.

Aceito sugestões

Antes era assim (em cada método gerador de lançamento), mas fica inviavel manter assim pela manutenção em varios metodos.

deComplemento = TextUtils.replaceAll(deComplemento, "<nutitulo>", titulo.getTituloPK().getNuTitulo().toString());
			deComplemento = TextUtils.replaceAll(deComplemento, "<nudoc>", titulo.getNuDocumento());
			deComplemento = TextUtils.replaceAll(deComplemento, "<nmdoc>", titulo.getDocumento().getNmDocumento());
			deComplemento = TextUtils.replaceAll(deComplemento, "<tpdoc>", titulo.getCdDocumento().trim());
			deComplemento = TextUtils.replaceAll(deComplemento, "<deobs>", TextUtils.isValidText(titulo.getDeObservacao()) ? titulo.getDeObservacao() : "");
			deComplemento = TextUtils.replaceAll(deComplemento, "<dtcontabil>", DateUtils.convertBrDate(titulo.getDtContabil()));
			deComplemento = TextUtils.replaceAll(deComplemento, "<nmcliente>", titulo.getCliente().getNmCliente());
			deComplemento = TextUtils.replaceAll(deComplemento, "<pgparc>", "parte");
			deComplemento = TextUtils.replaceAll(deComplemento, "<nuunid>", getCdUnidade(titulo.getUnidadePrincipal()));
			deComplemento = TextUtils.replaceAll(deComplemento, "<nmempr>", getNmEmpreend(apropFin));
			deComplemento = TextUtils.replaceAll(deComplemento, "<cdempr>", getCdEmpreendUnidade(apropFin));
			deComplemento = TextUtils.replaceAll(deComplemento, "<qtparc>", titulo.getQtParcelas().toString());
			deComplemento = TextUtils.replaceAll(deComplemento, "<unidsec>", titulo.getUnidadesSegundariasStrForINC());
nel

Só para ver se eu entendi direito.
Você tem tags sendo que para cada tag, você possui um atributo especifico, cujo atributo encontra-se no seu Objeto Titulo.
Para cada tag, você associa um atributo e seu respectivo valor, como é caso dê:

= titulo.getTituloPK().getNutitulo().toString()

É isso?
Outra pergunta, você pode ter uma lista de títulos ou não?
E qual é o seu objetivo, é quando tiver a tag substituir por titulo.getTituloPK().getNutitulo().toString() e assim por diante?

Onde está armazenada essas tags?
Abraços.

xandevieira

Sim, terei uma lista de titulos, baixas, impostos, etc.

String deComplemento = getHistoricoPad(cdOperacao, mapHistorico).getDeComplemento().toString();
Criado 29 de março de 2011
Ultima resposta 29 de mar. de 2011
Respostas 7
Participantes 3