Why is called @Factory method always ?
mvlach Jul 19, 2007 3:42 PMI 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@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@520467 21:38:16,406 INFO [DiaryEntryAction] loading date Thu Jul 19 21:38:16 CEST 2007, user cz.bpsolutions.ims.model.Account@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