PDA

View Full Version : [Java] Come copiare automaticamente campi omonimi da un oggetto ad un altro?


e-commerce84
13-04-2011, 10:27
Ciao,
se ho una situazione del genere: ho un oggetto chiamato result di tipo Indirizzo che ha determinati campi..

Poi ho un altro oggetto chiamato indirizzo(ricevuto da un web servies) di un altro tipo ma che al suo interno ha gli stessi campi (al più con qualche differenza sui tipi

C'è modo di copiare automaticamente TUTTI i valori dei campi dell'oggetto indirizzo dentro gli omonimi campi dell'oggetto result?

Per far capire io faccio così:

[code]
private static Indirizzo popolaIndirizzi(
it.accenture.danni.services.AnagraficaServicesServiceStub.Indirizzo indirizzo) {
Indirizzo result=new Indirizzo();
result.setCap(indirizzo.getCap());
result.setCodiceTipoIndirizzo(indirizzo.getCodiceTipoIndirizzo());
result.setComune(indirizzo.getComune());
result.setDataFineValidita(indirizzo.getDataFineValidita().getTime());
result.setDataInizioValidita(indirizzo.getDataInizioValidita().getTime());
result.setDenomazioneIndirizzo(indirizzo.getDenominazioneIndirizzo());
result.setLocalita(indirizzo.getLocalita());
result.setNumeroCivico(indirizzo.getNumeroCivico());
return result;
}
[code]

Ricevo come parametro del metodo un oggetto di tipo: it.accenture.danni.services.AnagraficaServicesServiceStub.Indirizzo (l'oggetto rievuto dal web services) e copio i valori di tutti i campi negli omonimi campi dell'oggetto result che ha un tipo differente.

Le uniche differenze sono che alcuni campi nel tipo di destinazione vogliono un Date e non un Calendar, ed ho aggiustato la cosa caggiungendo un getTime()

Esiste un modo automatico per copiare i campi (ed eventualmente specificare solo i campi da aggiustare, come in questo caso quelli che vogliono il getTime()) ?

Mi avevano parlato di una libreria Apache che dovrebbe fare qualcosa del genere?

Qualcuno ne sà qualcosa?

Grazie
Andrea

banryu79
13-04-2011, 12:01
Potresti banalmente aggiungere un costruttore per il tipo Indirizzo che accetta come argomento un riferimento ad un it.accenture.danni.services.AnagraficaServicesServiceStub.Indirizzo.

Esiste un modo automatico per copiare i campi (ed eventualmente specificare solo i campi da aggiustare, come in questo caso quelli che vogliono il getTime()) ?

Mi avevano parlato di una libreria Apache che dovrebbe fare qualcosa del genere?

Qualcuno ne sà qualcosa?
Che io sappia non esiste "un modo automatico" per copiare i campi... non ho idea a che libreria Apache tu ti riferisca (non le conosco bene, ne ho solo visto alcune) ma sospetto che al massimo si possa fare qualcosa che sembri "automatico" tirando in ballo i meccanismi di reflection (e le convenzioni JavaBean)

ally
13-04-2011, 18:39
...si o un mapping o la reflection...ma se è solo un oggetto scarterei la seconda...

Gold
14-04-2011, 19:45
puoi usare dozer

http://dozer.sourceforge.net/