[jboss-user] [JBoss Seam] - Why is called @Factory method always ?
miloslav.vlach
do-not-reply at jboss.com
Thu Jul 19 15:42:58 EDT 2007
I have a component which display some list and I am using @Factory method. But when I call add, from this component, which do not access to the list, the @Factory method is called. Why ?
| package cz.bpsolutions.ims.services.diary;
|
| import java.io.Serializable;
| import java.util.ArrayList;
| import java.util.Calendar;
| import java.util.Date;
| import java.util.List;
| import java.util.Locale;
|
| import javax.ejb.Remove;
| import javax.ejb.Stateful;
| import javax.persistence.EntityManager;
| import javax.persistence.PersistenceContext;
| import javax.persistence.PersistenceContextType;
|
| import org.hibernate.Criteria;
| import org.hibernate.criterion.Order;
| import org.hibernate.criterion.Restrictions;
| import org.hibernate.ejb.EntityManagerImpl;
| import org.jboss.seam.ScopeType;
| import org.jboss.seam.annotations.Begin;
| import org.jboss.seam.annotations.Destroy;
| import org.jboss.seam.annotations.End;
| import org.jboss.seam.annotations.Factory;
| import org.jboss.seam.annotations.In;
| import org.jboss.seam.annotations.Logger;
| import org.jboss.seam.annotations.Name;
| import org.jboss.seam.annotations.Out;
| import org.jboss.seam.annotations.datamodel.DataModel;
| import org.jboss.seam.annotations.datamodel.DataModelSelection;
| import org.jboss.seam.annotations.security.Restrict;
| import org.jboss.seam.log.Log;
|
| import cz.bpsolutions.ims.model.Account;
| import cz.bpsolutions.ims.model.DiaryEntry;
| import cz.bpsolutions.ims.model.Request;
| import cz.bpsolutions.ims.services.other.Configuration;
| import cz.bpsolutions.tools.BiInfo;
|
| @Name("diaryEntryAction")
| @Restrict("#{identity.loggedIn}")
| @Stateful
| public class DiaryEntryAction implements Serializable, DiaryEntryActionLocal {
| private static final long serialVersionUID = 6790052898169296206L;
|
| @Logger
| Log log;
|
| Date date;
|
| @In(required = false, scope = ScopeType.SESSION)
| Account loggedUser;
|
| @PersistenceContext(type = PersistenceContextType.EXTENDED)
| EntityManager em;
|
| @DataModel
| List<DiaryEntry> diaryEntries;
|
| @In(required = false)
| DiaryEntry diaryEntry;
|
| @DataModelSelection(value = "diaryEntries")
| DiaryEntry selectedDiaryEntry;
|
| @In(required = false)
| Request request;
|
|
| @Factory("diaryEntries")
| public void load() {
| log.info("loading date #0, user #1", getDate(), loggedUser);
|
| Criteria c = ((EntityManagerImpl) (em.getDelegate())).getSession().createCriteria(DiaryEntry.class);
|
| Date startDay;
| Date endDay;
|
| Calendar cal = Calendar.getInstance(new Locale("cs", "CZ"));
|
| cal.setTime(getDate());
|
| cal.set(Calendar.HOUR, 0);
| cal.set(Calendar.MINUTE, 0);
| cal.set(Calendar.SECOND, 0);
| cal.set(Calendar.AM_PM, 0);
|
| startDay = cal.getTime();
|
| cal.set(Calendar.HOUR, 23);
| cal.set(Calendar.MINUTE, 59);
| cal.set(Calendar.SECOND, 59);
|
| endDay = cal.getTime();
| log.info("dates: #0, #1", startDay, endDay);
|
| c.add(Restrictions.eq("user.id", loggedUser.getId()));
| c.add(Restrictions.or(Restrictions.between("dateFrom", startDay, endDay), Restrictions.between("dateTo", startDay, endDay)));
|
| c.addOrder(Order.asc("dateFrom"));
|
| diaryEntries = c.list();
| log.info("loaded #0 of rows.", diaryEntries.size());
| }
|
| /*
| * (non-Javadoc)
| *
| * @see cz.bpsolutions.ims.services.diary.DiaryEntryActionLocal#save()
| */
|
| public String save() {
| log.info("saving the diary entry #0", diaryEntry);
| loggedUser = em.find(Account.class, loggedUser.getId());
|
| // Date time correction
| Calendar c = Calendar.getInstance(Configuration.locale);
| Calendar c1 = Calendar.getInstance(Configuration.locale);
|
| c.setTime(diaryEntry.getDateFrom());
| c1.setTime(date);
| c.set(Calendar.DAY_OF_MONTH, c1.get(Calendar.DAY_OF_MONTH));
| c.set(Calendar.MONTH, c1.get(Calendar.MONTH));
| c.set(Calendar.YEAR, c1.get(Calendar.YEAR));
|
| diaryEntry.setDateFrom(c.getTime());
|
| c.setTime(diaryEntry.getDateTo());
| c.set(Calendar.DAY_OF_MONTH, c1.get(Calendar.DAY_OF_MONTH));
| c.set(Calendar.MONTH, c1.get(Calendar.MONTH));
| c.set(Calendar.YEAR, c1.get(Calendar.YEAR));
|
| diaryEntry.setDateTo(c.getTime());
|
| diaryEntry.setUser(loggedUser);
|
| loggedUser.getDiaryEntries().add(diaryEntry);
|
|
| if (request != null && request.getId() != null) {
| request = em.find(Request.class, request.getId());
| diaryEntry.setRequest(request);
| request.getDiaryEntries().add(diaryEntry);
| em.persist(request);
| }
|
|
| em.persist(diaryEntry);
| em.persist(loggedUser);
|
| load();
|
| diaryEntry = new DiaryEntry();
|
| return "saved";
| }
|
| @Begin(join = true)
| public void reset() {
| diaryEntries = null;
| }
|
| public Date getDate() {
| if (date == null)
| date = new Date();
| return date;
| }
|
| @Begin(join = true)
| public void setDate(Date date) {
| this.date = date;
| }
|
| @Begin(join = true)
| public void changeDate() {
| log.info("Changing the date...#0", getDate());
| diaryEntries = null;
| }
|
| @Begin(join = true)
| public void changeDateToNow() {
| log.info("changing to now");
| setDate(new Date());
| diaryEntries = null;
| }
|
| public Long getWorkedHours() {
| Long workedSeconds = 0l;
|
| if (diaryEntries == null) {
| load();
| }
|
| if (diaryEntries != null) {
| for (DiaryEntry d : diaryEntries) {
| if (DiaryType.WORK_DAY.equals(d.getDiaryType())) {
| workedSeconds += d.getDateTo().getTime() - d.getDateFrom().getTime();
| } else if (DiaryType.DOCTOR.equals(d.getDiaryType())) {
| workedSeconds += d.getDateTo().getTime() - d.getDateFrom().getTime();
| } else if (DiaryType.VACATION.equals(d.getDiaryType())) {
| workedSeconds += d.getDateTo().getTime() - d.getDateFrom().getTime();
| } else if (DiaryType.VACATION2.equals(d.getDiaryType())) {
| workedSeconds += d.getDateTo().getTime() - d.getDateFrom().getTime();
| }
| }
| }
|
| log.info("worked seconds: #0", workedSeconds);
| return workedSeconds;
| }
|
| public List<BiInfo> getWorkMapInfo() {
|
| List<BiInfo> ret = new ArrayList<BiInfo>();
|
| int workDay = Configuration.workDay;
| long workedDay = getWorkedHours() / 1000;
| double percent = 0l;
|
| if (diaryEntries != null) {
| Long divider = (workDay > workedDay ? workDay : workedDay);
| if (workDay > workedDay) {
| divider += workDay - workedDay;
| }
| for (DiaryEntry d : diaryEntries) {
| BiInfo b = new BiInfo();
|
| b.first = d.getDiaryType();
| b.second = 100 * (d.getDateTo().getTime() - d.getDateFrom().getTime()) / (1000.0 * divider);
| percent += 100 * (d.getDateTo().getTime() - d.getDateFrom().getTime()) / (1000.0 * divider);
|
| ret.add(b);
| }
|
| if (workDay > workedDay) {
| // neodpracovano
| BiInfo b = new BiInfo();
|
| b.first = DiaryType.NOT_CREATED;
| b.second = 100 - percent;
|
| ret.add(b);
| }
| }
|
| return ret;
| }
|
| @Destroy
| @Remove
| public void remove() {
| }
|
| public String delete() {
| log.info("removind the diaryentry: #0", selectedDiaryEntry);
| em.refresh(selectedDiaryEntry);
|
| Request r = selectedDiaryEntry.getRequest();
| if (r != null) {
| r.getDiaryEntries().remove(selectedDiaryEntry);
|
| em.persist(r);
| }
| em.remove(selectedDiaryEntry);
|
| diaryEntries = null;
| return "deleted";
| }
|
| @End(beforeRedirect=true)
| public String done() {
| log.info("saved...conversation end");
| return "done";
| }
| }
|
|
| 21:38:16,359 INFO [DiaryEntryAction] loading date Thu Jul 19 21:38:16 CEST 2007, user cz.bpsolutions.ims.model.Account at 1e4605c
| 21:38:16,359 INFO [DiaryEntryAction] dates: Thu Jul 19 00:00:00 CEST 2007, Thu Jul 19 23:59:59 CEST 2007
| 21:38:16,390 INFO [DiaryEntryAction] loaded 5 of rows.
| 21:38:16,390 INFO [DiaryEntryAction] worked seconds: 33420000
| 21:38:16,390 INFO [DiaryEntryAction] saving the diary entry cz.bpsolutions.ims.model.DiaryEntry at 520467
| 21:38:16,406 INFO [DiaryEntryAction] loading date Thu Jul 19 21:38:16 CEST 2007, user cz.bpsolutions.ims.model.Account at 141b041
| 21:38:16,406 INFO [DiaryEntryAction] dates: Thu Jul 19 00:00:00 CEST 2007, Thu Jul 19 23:59:59 CEST 2007
| 21:38:16,406 INFO [DiaryEntryAction] loaded 6 of rows.
| 21:38:16,468 INFO [UserService] locating the user mvlach
| 21:38:16,468 INFO [UserService] locating the user mvlach
| 21:38:16,468 INFO [DiaryEntryAction] worked seconds: 33420000
| 21:38:16,484 INFO [DiaryEntryAction] worked seconds: 33420000
|
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4065936#4065936
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4065936
More information about the jboss-user
mailing list