001 package org.trails.page;
002
003 import org.apache.tapestry.annotations.Bean;
004 import org.apache.tapestry.annotations.Lifecycle;
005 import org.apache.tapestry.annotations.InjectObject;
006 import org.hibernate.validator.InvalidStateException;
007 import org.trails.persistence.HibernatePersistenceService;
008 import org.trails.persistence.PersistenceException;
009 import org.trails.validation.HibernateValidationDelegate;
010
011 public abstract class HibernateEditPage extends EditPage
012 {
013
014 @Bean(lifecycle = Lifecycle.REQUEST)
015 public abstract HibernateValidationDelegate getHibernateValidationDelegate();
016
017 /**
018 * @todo: remove when the components reuse issue goes away.
019 */
020 public HibernateValidationDelegate getDelegate()
021 {
022 return getHibernateValidationDelegate();
023 }
024
025 @InjectObject("service:trails.hibernate.PersistenceService")
026 public abstract HibernatePersistenceService getHibernatePersistenceService();
027
028 /**
029 * @todo: remove when the components reuse issue goes away.
030 */
031 public HibernatePersistenceService getPersistenceService()
032 {
033 return getHibernatePersistenceService();
034 }
035
036 @Override
037 protected boolean save()
038 {
039 if (!getDelegate().getHasErrors())
040 {
041 try
042 {
043 if (isReferencedByParentPage() && isModelNew())
044 {
045 setModel(getPersistenceService().saveCollectionElement(
046 getAssociationDescriptor().getAddExpression(), getModel(), getParent()));
047 setModelNew(false);
048 } else
049 {
050 setModel(getPersistenceService().save(getModel()));
051 }
052
053 } catch (PersistenceException pe)
054 {
055 getDelegate().record(pe);
056 return false;
057 } catch (InvalidStateException ivex)
058 {
059 getDelegate().record(getClassDescriptor(), ivex);
060 return false;
061 }
062 return true;
063 }
064 return false;
065 }
066 }