1 package org.gnomekr.potron.web.view; 2 3 import static org.gnomekr.potron.util.NavigationCases.NAV_TRANSLATION_ADD; 4 import static org.gnomekr.potron.util.NavigationCases.NAV_TRANSLATION_UPDATE; 5 import static org.gnomekr.potron.util.NavigationCases.NAV_TRANSLATION_LIST; 6 import static org.gnomekr.potron.util.PotronConstants.DEFAULT_FILE_ENCODING; 7 8 import java.io.IOException; 9 import java.io.InputStreamReader; 10 import java.io.Reader; 11 import java.io.UnsupportedEncodingException; 12 import java.util.ArrayList; 13 import java.util.List; 14 15 import javax.faces.application.FacesMessage; 16 import javax.faces.model.SelectItem; 17 18 import org.apache.commons.logging.Log; 19 import org.apache.commons.logging.LogFactory; 20 import org.apache.myfaces.custom.fileupload.UploadedFile; 21 import org.apache.myfaces.util.MessageUtils; 22 import org.gnomekr.potron.data.LanguageTeam; 23 import org.gnomekr.potron.data.Template; 24 import org.gnomekr.potron.data.Translation; 25 import org.gnomekr.potron.parser.ParseException; 26 import org.gnomekr.potron.service.IProjectManager; 27 import org.gnomekr.potron.service.ITranslationManager; 28 29 /*** 30 * TranslationView.java 31 * @author Xavier Cho 32 * @version $Revision 1.1 $ $Date: 2005/09/11 05:49:45 $ 33 * @jsf.bean 34 * name = "translation" 35 * scope = "request" 36 * @jsf.navigation 37 * from = "*" 38 * to = "/admin/translation/add.jsf" 39 * result = "translation.create" 40 * @jsf.navigation 41 * from = "*" 42 * to = "/admin/translation/update.jsf" 43 * result = "translation.update" 44 * @jsf.navigation 45 * from = "*" 46 * to = "/admin/translation/list.jsf" 47 * result = "translation.list" 48 */ 49 public class TranslationView extends AbstractFacesView { 50 51 private IProjectManager projectManager; 52 private ITranslationManager translationManager; 53 54 private long id = -1; 55 private long templateId = -1; 56 private long languageTeamId = -1; 57 private String name; 58 private String encoding = DEFAULT_FILE_ENCODING; 59 private String comment; 60 private UploadedFile file; 61 62 /*** 63 * @return 64 * @jsf.managed-property 65 * value = "#{projectManager}" 66 */ 67 public IProjectManager getProjectManager() { 68 return projectManager; 69 } 70 71 /*** 72 * @return 73 * @jsf.managed-property 74 * value = "#{translationManager}" 75 */ 76 public ITranslationManager getTranslationManager() { 77 return translationManager; 78 } 79 80 public List<SelectItem> getLanguageTeams() { 81 List<LanguageTeam> teams = projectManager.getLanguageTeams(); 82 List<SelectItem> items = new ArrayList<SelectItem>(teams.size()); 83 84 for (LanguageTeam team : teams) { 85 SelectItem item = new SelectItem(); 86 87 item.setLabel(team.getName()); 88 item.setValue(team.getId()); 89 item.setDescription(team.getEncoding()); 90 91 items.add(item); 92 } 93 94 return items; 95 } 96 97 public String addTranslation() { 98 Template template = projectManager.getTemplate(templateId); 99 100 LanguageTeam team = projectManager.getLanguageTeam(languageTeamId); 101 102 Translation translation = new Translation(); 103 translation.setName(name); 104 translation.setComment(comment); 105 translation.setTemplate(template); 106 translation.setLanguageTeam(team); 107 108 if (file != null && file.getSize() > 0) { 109 Reader reader; 110 111 try { 112 reader = new InputStreamReader(file.getInputStream(), encoding); 113 translationManager.addTranslation(translation, reader); 114 } catch (UnsupportedEncodingException e) { 115 MessageUtils.addMessage( 116 FacesMessage.SEVERITY_WARN, 117 "error.unknown.encoding", 118 null); 119 120 return NAV_TRANSLATION_ADD; 121 } catch (IOException e) { 122 Log log = LogFactory.getLog(getClass()); 123 if (log.isErrorEnabled()) { 124 log.error(e); 125 } 126 127 MessageUtils.addMessage( 128 FacesMessage.SEVERITY_ERROR, 129 "error.file.upload", 130 null); 131 132 return NAV_TRANSLATION_ADD; 133 } catch (ParseException e) { 134 Log log = LogFactory.getLog(getClass()); 135 if (log.isErrorEnabled()) { 136 log.error(e); 137 } 138 139 MessageUtils.addMessage( 140 FacesMessage.SEVERITY_ERROR, 141 "error.template.parse", 142 null); 143 144 return NAV_TRANSLATION_ADD; 145 } 146 } else { 147 translationManager.addTranslation(translation); 148 } 149 150 MessageUtils.addMessage( 151 FacesMessage.SEVERITY_INFO, 152 "msg.translation.add.successful", 153 null); 154 155 refreshNavigationTree(); 156 157 return NAV_TRANSLATION_LIST; 158 } 159 160 public String updateTranslation() { 161 Translation translation = translationManager.getTranslation(id); 162 163 LanguageTeam team = projectManager.getLanguageTeam(languageTeamId); 164 165 translation.setName(name); 166 translation.setLanguageTeam(team); 167 translation.setComment(comment); 168 169 if (file != null && file.getSize() > 0) { 170 Reader reader; 171 172 try { 173 reader = new InputStreamReader(file.getInputStream(), encoding); 174 translationManager.updateTranslation(translation, reader); 175 } catch (UnsupportedEncodingException e) { 176 MessageUtils.addMessage( 177 FacesMessage.SEVERITY_WARN, 178 "error.unknown.encoding", 179 null); 180 181 return NAV_TRANSLATION_UPDATE; 182 } catch (IOException e) { 183 Log log = LogFactory.getLog(getClass()); 184 if (log.isErrorEnabled()) { 185 log.error(e); 186 } 187 188 MessageUtils.addMessage( 189 FacesMessage.SEVERITY_ERROR, 190 "error.file.upload", 191 null); 192 193 return NAV_TRANSLATION_UPDATE; 194 } catch (ParseException e) { 195 Log log = LogFactory.getLog(getClass()); 196 if (log.isErrorEnabled()) { 197 log.error(e); 198 } 199 200 MessageUtils.addMessage( 201 FacesMessage.SEVERITY_ERROR, 202 "error.template.parse", 203 null); 204 205 return NAV_TRANSLATION_UPDATE; 206 } 207 } else { 208 translationManager.updateTranslation(translation); 209 } 210 211 MessageUtils.addMessage( 212 FacesMessage.SEVERITY_INFO, 213 "msg.translation.update.successful", 214 null); 215 216 refreshNavigationTree(); 217 218 return NAV_TRANSLATION_LIST; 219 } 220 221 public String removeTranslation() { 222 translationManager.removeTranslation(id); 223 224 MessageUtils.addMessage( 225 FacesMessage.SEVERITY_INFO, 226 "msg.translation.remove.successful", 227 null); 228 229 refreshNavigationTree(); 230 231 return NAV_TRANSLATION_LIST; 232 } 233 234 public List<Translation> getTranslations() { 235 Template template = projectManager.getTemplate(templateId); 236 return new ArrayList<Translation>(template.getTranslations()); 237 } 238 239 /*** 240 * @param id 241 */ 242 public void setId(long id) { 243 this.id = id; 244 245 Translation translation = translationManager.getTranslation(id); 246 247 if (translation != null) { 248 this.name = translation.getName(); 249 this.comment = translation.getComment(); 250 this.languageTeamId = translation.getLanguageTeam().getId(); 251 this.templateId = translation.getTemplate().getId(); 252 } 253 } 254 255 /*** 256 * @return Returns the comment. 257 */ 258 public String getComment() { 259 return comment; 260 } 261 262 /*** 263 * @param comment The comment to set. 264 */ 265 public void setComment(String comment) { 266 this.comment = comment; 267 } 268 269 /*** 270 * @return Returns the languageTeamId. 271 */ 272 public long getLanguageTeamId() { 273 return languageTeamId; 274 } 275 276 /*** 277 * @param languageTeamId The languageTeamId to set. 278 */ 279 public void setLanguageTeamId(long languageTeamId) { 280 this.languageTeamId = languageTeamId; 281 } 282 283 /*** 284 * @return Returns the name. 285 */ 286 public String getName() { 287 return name; 288 } 289 290 /*** 291 * @param name The name to set. 292 */ 293 public void setName(String name) { 294 this.name = name; 295 } 296 297 /*** 298 * @return Returns the templateId. 299 */ 300 public long getTemplateId() { 301 return templateId; 302 } 303 304 /*** 305 * @param templateId The templateId to set. 306 */ 307 public void setTemplateId(long templateId) { 308 this.templateId = templateId; 309 } 310 311 /*** 312 * @return Returns the id. 313 */ 314 public long getId() { 315 return id; 316 } 317 318 /*** 319 * @param projectManager The projectManager to set. 320 */ 321 public void setProjectManager(IProjectManager projectManager) { 322 this.projectManager = projectManager; 323 } 324 325 /*** 326 * @param translationManager The translationManager to set. 327 */ 328 public void setTranslationManager(ITranslationManager translationManager) { 329 this.translationManager = translationManager; 330 } 331 332 /*** 333 * @return 334 */ 335 public String getEncoding() { 336 return encoding; 337 } 338 339 /*** 340 * @param encoding 341 */ 342 public void setEncoding(String encoding) { 343 this.encoding = encoding; 344 } 345 346 public UploadedFile getFile() { 347 return file; 348 } 349 350 public void setFile(UploadedFile file) { 351 this.file = file; 352 } 353 }