1 package org.gnomekr.potron.web.view; 2 3 import static org.gnomekr.potron.util.NavigationCases.NAV_TRANSLATOR_CHECKOUT_LIST; 4 import static org.gnomekr.potron.util.NavigationCases.NAV_TRANSLATOR_LIST; 5 6 import java.util.ArrayList; 7 import java.util.List; 8 9 import javax.faces.application.FacesMessage; 10 import javax.faces.component.UIParameter; 11 import javax.faces.event.ValueChangeEvent; 12 13 import org.apache.commons.lang.StringUtils; 14 import org.apache.commons.logging.Log; 15 import org.apache.commons.logging.LogFactory; 16 import org.apache.myfaces.util.MessageUtils; 17 import org.gnomekr.potron.data.PluralForms; 18 import org.gnomekr.potron.data.TranslatedEntry; 19 import org.gnomekr.potron.data.Translation; 20 import org.gnomekr.potron.service.AlreadyCheckedOutException; 21 import org.gnomekr.potron.service.IStatisticsManager; 22 import org.gnomekr.potron.service.ITranslationManager; 23 import org.gnomekr.potron.util.SelectableTableEntry; 24 25 /*** 26 * TranslatorView.java 27 * @author Xavier Cho 28 * @version $Revision 1.1 $ $Date: 2005/08/28 11:47:15 $ 29 * @jsf.bean 30 * name = "translator" 31 * scope = "request" 32 * @jsf.navigation 33 * from = "*" 34 * to = "/user/translation.jsf" 35 * result = "translator.list" 36 * @jsf.navigation 37 * from = "*" 38 * to = "/user/entries.jsf" 39 * result = "translator.checkout.list" 40 * @jsf.navigation 41 * from = "*" 42 * to = "/user/checkIn.jsf" 43 * result = "translator.checkin" 44 * @jsf.navigation 45 * from = "*" 46 * to = "/user/detail.jsf" 47 * result = "translator.detail" 48 */ 49 public class TranslatorView extends AbstractFacesView { 50 51 private static final long serialVersionUID = 5120647410889206611L; 52 private static Log log = LogFactory.getLog(TranslatorView.class); 53 54 private long entryId = -1; 55 private long translationId = -1; 56 private boolean startWorkingNow = true; 57 58 private Translation translation; 59 private TranslatedEntry entry; 60 private ITranslationManager translationManager; 61 private IStatisticsManager statisticsManager; 62 63 private List<SelectableTableEntry<TranslatedEntry>> translatedEntries; 64 private List<SelectableTableEntry<TranslatedEntry>> untranslatedEntries; 65 66 /*** 67 * @return 68 * @jsf.managed-property 69 * value = "#{translationManager}" 70 */ 71 public ITranslationManager getTranslationManager() { 72 return translationManager; 73 } 74 75 /*** 76 * @param translationManager The translationManager to set. 77 */ 78 public void setTranslationManager(ITranslationManager translationManager) { 79 this.translationManager = translationManager; 80 } 81 82 /*** 83 * @return 84 * @jsf.managed-property 85 * value = "#{statisticsManager}" 86 */ 87 public IStatisticsManager getStatisticsManager() { 88 return statisticsManager; 89 } 90 91 /*** 92 * @param statisticsManager The statisticsManager to set. 93 */ 94 public void setStatisticsManager(IStatisticsManager statisticsManager) { 95 this.statisticsManager = statisticsManager; 96 } 97 98 public String checkOutSelectedEntries() { 99 List<TranslatedEntry> entriesToCheckOut = new ArrayList<TranslatedEntry>(); 100 101 if (untranslatedEntries != null) { 102 for (SelectableTableEntry<TranslatedEntry> entry : untranslatedEntries) { 103 if (entry.isSelected()) { 104 entriesToCheckOut.add(entry.getData()); 105 } 106 } 107 } 108 109 if (translatedEntries != null) { 110 for (SelectableTableEntry<TranslatedEntry> entry : translatedEntries) { 111 if (entry.isSelected()) { 112 entriesToCheckOut.add(entry.getData()); 113 } 114 } 115 } 116 117 int failedCount = 0; 118 for (TranslatedEntry entry : entriesToCheckOut) { 119 try { 120 translationManager.checkOutEntry(entry.getId()); 121 } catch (AlreadyCheckedOutException e) { 122 if (log.isWarnEnabled()) { 123 log 124 .warn("The specified entry has been already checked out : " 125 + entry); 126 } 127 128 failedCount++; 129 } 130 } 131 132 if (entriesToCheckOut.size() > failedCount) { 133 MessageUtils.addMessage( 134 FacesMessage.SEVERITY_INFO, 135 "msg.translator.checkout.successful", 136 null); 137 } 138 139 if (failedCount > 0) { 140 MessageUtils.addMessage( 141 FacesMessage.SEVERITY_WARN, 142 "error.already.checkedout", 143 new Integer[] { 144 failedCount 145 }); 146 } 147 148 if (startWorkingNow) { 149 return NAV_TRANSLATOR_CHECKOUT_LIST; 150 } else { 151 return NAV_TRANSLATOR_LIST; 152 } 153 } 154 155 public void updatePluralString(ValueChangeEvent vce) { 156 String pluralMessage = (String) vce.getNewValue(); 157 158 UIParameter param = (UIParameter) vce.getComponent().getChildren().get( 159 0); 160 Integer index = (Integer) param.getValue(); 161 162 entry.getPluralStrings().set(index, pluralMessage); 163 } 164 165 public String checkInEntry() { 166 long id = entry.getId(); 167 String translatedString = entry.getTranslatedString(); 168 boolean fuzzy = entry.isFuzzy(); 169 170 translationManager.checkInEntry(id, translatedString, entry 171 .getPluralStrings(), fuzzy); 172 173 MessageUtils.addMessage( 174 FacesMessage.SEVERITY_INFO, 175 "msg.translator.checkin.successful", 176 null); 177 178 return NAV_TRANSLATOR_CHECKOUT_LIST; 179 } 180 181 public String abandonCheckedOutEntry() { 182 translationManager.abandonCheckedOutEntry(entryId); 183 184 MessageUtils.addMessage( 185 FacesMessage.SEVERITY_INFO, 186 "msg.translator.abandon.successful", 187 null); 188 189 return NAV_TRANSLATOR_CHECKOUT_LIST; 190 } 191 192 /*** 193 * @return 194 */ 195 public List<TranslatedEntry> getCheckedOutEntries() { 196 List<TranslatedEntry> entries = translationManager 197 .getCheckedOutEntries(translationId); 198 199 return entries; 200 } 201 202 /*** 203 * @return 204 */ 205 public List<SelectableTableEntry<TranslatedEntry>> getTranslatedEntries() { 206 if (translatedEntries == null) { 207 List<TranslatedEntry> entries = translationManager 208 .getTranslatedEntries(translationId); 209 210 this.translatedEntries = new ArrayList<SelectableTableEntry<TranslatedEntry>>(); 211 212 for (TranslatedEntry entry : entries) { 213 translatedEntries 214 .add(new SelectableTableEntry<TranslatedEntry>(entry)); 215 } 216 } 217 218 return translatedEntries; 219 } 220 221 /*** 222 * @return 223 */ 224 public List<SelectableTableEntry<TranslatedEntry>> getUntranslatedEntries() { 225 if (untranslatedEntries == null) { 226 List<TranslatedEntry> entries = translationManager 227 .getUntranslatedEntries(translationId, false); 228 229 this.untranslatedEntries = new ArrayList<SelectableTableEntry<TranslatedEntry>>(); 230 231 for (TranslatedEntry entry : entries) { 232 untranslatedEntries 233 .add(new SelectableTableEntry<TranslatedEntry>(entry)); 234 } 235 } 236 237 return untranslatedEntries; 238 } 239 240 /*** 241 * @return 242 */ 243 public List<TranslatedEntry> getCheckedOutEntriesForCurrentUser() { 244 List<TranslatedEntry> entries = translationManager 245 .getCheckedOutEntries(getCurrentUserName()); 246 247 return entries; 248 } 249 250 /*** 251 * @return Returns the entry. 252 */ 253 public TranslatedEntry getEntry() { 254 if (entry == null) { 255 this.entry = translationManager.getEntry(entryId); 256 257 if (StringUtils.isNotEmpty(entry.getEntry().getPluralKey()) 258 && entry.getPluralStrings().isEmpty()) { 259 PluralForms plForms = entry.getTranslation().getPluralForms(); 260 261 List<String> emptyMessages = new ArrayList<String>(); 262 for (int i = 0; i < plForms.getCount() - 1; i++) { 263 emptyMessages.add(new String()); 264 } 265 266 entry.setPluralStrings(emptyMessages); 267 } 268 } 269 270 return entry; 271 } 272 273 /*** 274 * @return Returns the translation. 275 */ 276 public Translation getTranslation() { 277 if (translation == null) { 278 this.translation = translationManager.getTranslation(translationId); 279 } 280 281 return translation; 282 } 283 284 /*** 285 * @return Returns the translationId. 286 */ 287 public long getTranslationId() { 288 return translationId; 289 } 290 291 /*** 292 * @param translationId The translationId to set. 293 */ 294 public void setTranslationId(long translationId) { 295 this.translationId = translationId; 296 } 297 298 /*** 299 * @return 300 */ 301 public long getEntryId() { 302 return entryId; 303 } 304 305 /*** 306 * @param entryId 307 */ 308 public void setEntryId(long entryId) { 309 this.entryId = entryId; 310 } 311 312 /*** 313 * @return 314 */ 315 public boolean isStartWorkingNow() { 316 return startWorkingNow; 317 } 318 319 /*** 320 * @param startWorkingNow 321 */ 322 public void setStartWorkingNow(boolean startWorkingNow) { 323 this.startWorkingNow = startWorkingNow; 324 } 325 }