読者です 読者をやめる 読者になる 読者になる

待機中にリモートで自分のwebサービスを着々とコーディングしてるわけだが、
何だかんだでまたseasar2のserviceの記述が長くなってしまった件。
jsp側でURLエンコードしようとすると長くなりすぎるので、
java側でURLエンコードさせる必要があったので書いてみたのだが、
MarkingエンティティにgraphUrlという変数(メンバ)がないだけで、
これだけ無駄なコードを書く羽目に。

public List<MarkingDto> findAllOrderByScore() throws UnsupportedEncodingException {
    	List<Marking> list = select().innerJoin(song()).orderBy(desc(score())).getResultList();
    	List<MarkingDto> markingList = new ArrayList<MarkingDto>();
    	for (int i=0;i<list.size();i++){
    		MarkingDto markingDto = new MarkingDto();

    		StringBuilder str=new StringBuilder();
    		str.append("http://chart.apis.google.com/chart?cht=r&chxt=y,x&chls=4|4&chco=FF0000,00FF00&chxp=0,0,20,40,60,80,100");
    		str.append("&chd=t:");
    		str.append(list.get(i).song.avgPitch+","+list.get(i).song.avgStability+","+list.get(i).song.avgExpress+","
    				+list.get(i).song.avgVibrato+","+list.get(i).song.avgRhythm+","+list.get(i).song.avgPitch+"|"+list.get(i).chInterval+","
    				+list.get(i).chStability+","+list.get(i).chExpress+","+list.get(i).chVibrato+","+list.get(i).chRhythm+","+list.get(i).chInterval+"&chxl=1:");
    		str.append(URLEncoder.encode("|音程|安定性|表現力|ビブラート|リズム", "utf-8"));
    		str.append("&chm=s,FF0000,0,-1,12,0|s,FFFFFF,0,-1,8,0|o,00FF00,1,-1,12,0|o,FFFFFF,1,-1,8,0&chts=000000,13&chtt=");
    		str.append(URLEncoder.encode(list.get(i).song.artist+"/"+list.get(i).song.songTitle+"  ("+
    				list.get(i).song.requestNo4+"-"+list.get(i).song.requestNo2+")","utf-8"));
    		str.append("&chdl=");
    		str.append(URLEncoder.encode("全国平均|自分", "utf-8"));
    		str.append("&chs=350x260");
    		markingDto.graphUrl=new String(str);
    		//要素のコピー
    		markingDto.chExpress=list.get(i).chExpress;
    		markingDto.chInterval=list.get(i).chInterval;
    		markingDto.chRhythm=list.get(i).chRhythm;
    		markingDto.chStability=list.get(i).chStability;
    		markingDto.chVibrato=list.get(i).chVibrato;
    		markingDto.dateTime=list.get(i).dateTime;
    		markingDto.fall=list.get(i).fall;
    		markingDto.highPitch=list.get(i).highPitch;
    		markingDto.longTone=list.get(i).longTone;
    		markingDto.lowPitch=list.get(i).lowPitch;
    		markingDto.measure=list.get(i).measure;
    		markingDto.modulation=list.get(i).modulation;
    		markingDto.publicFlg=list.get(i).publicFlg;
    		markingDto.reportNo=list.get(i).reportNo;
    		markingDto.requestNo4=list.get(i).requestNo4;
    		markingDto.requestNo2=list.get(i).requestNo2;
    		markingDto.sob=list.get(i).sob;
    		markingDto.score=list.get(i).score;
    		markingDto.song=list.get(i).song;
    		markingDto.timing=list.get(i).timing;
    		markingDto.vibrato=list.get(i).vibrato;
    		markingDto.vibratoTime=list.get(i).vibratoTime;
    		markingDto.vibratoType=list.get(i).vibratoType;

    		markingList.add(markingDto);
       	}
        return markingList;
}

MarkingDtoはMarkingをExtendsさせたけどもっとマシな要素コピーの方法ないものか。