1 Reply Latest reply on Nov 19, 2009 3:26 PM by walterjwhite

    CustomEntityHome. Possibly helpful

    pdhaigh

      Below is an extended EntityHome class that we find regularly useful. It provides the following convenience additions:





      1. Overrideable placeholders for code to be run pre-update or pre-persist (e.g. to set an updatedBy field) without having to replicate the update/persist methods

      2. Catches and logs validation failures on persist

      3. Allows calling of persistNoMessage() to suppress the facesMessages for that transaction. Same for update

      4. Prevents spurious entityNotFound exceptions being logged when accessing non-existent entity.



      public class CustomEntityHome<E> extends EntityHome<E>
      {     
           private static final long serialVersionUID = 1L;
      
           @Logger
           private Log log;
           
           private Boolean showMessages = true;
           
           @Transactional     
           public void prePersist()
           {
                
           }
           
           @Transactional     
           public void preUpdate()
           {
                
           }
           
           @Transactional     
           public void preRemove()
           {
                
           }     
           
           @Override
           protected void initInstance()
           {
                try
                {
                     super.initInstance();
                }
                catch (EntityNotFoundException e)
                {
                     // This is optional - you might have a hard-coded not found page, or client editable.
      //                    FacesMessages.instance().add(StatusMessage.Severity.WARN,"Sorry, the page you were looking for was not found.");
                     
                     super.setId(null);
                     Redirect.instance().setViewId(Constants.PAGE_NOT_FOUND_VIEW_ID);                    
                        Redirect.instance().execute();               
                }
           }     
           
           @Override
           @Transactional     
           public String persist()
           {
                prePersist();
      
                try
                {
                     getEntityManager().persist( getInstance() );
                     getEntityManager().flush();
                     assignId( PersistenceProvider.instance().getId( getInstance(), getEntityManager() ) );
                     if (this.showMessages) createdMessage();
                     raiseAfterTransactionSuccessEvent();
                     return "persisted";
                }
                catch (InvalidStateException ve)
                {
                     log.warn("Caught validation failure",ve);
                     for (InvalidValue invalidValue : ve.getInvalidValues())
                     {
                          log.warn(invalidValue.toString());
                     }
                     throw ve;
                }           
           }
           
           @Override
           @Transactional     
           public String update()
           {     
                preUpdate();
               joinTransaction();
               getEntityManager().flush();
               if (this.showMessages) updatedMessage();
               raiseAfterTransactionSuccessEvent();
               return "updated";
           }
           
           @Override
           @Transactional
           public String remove()
           {
                preRemove();
                getEntityManager().remove( getInstance() );
                getEntityManager().flush();
                if (this.showMessages) deletedMessage();
                raiseAfterTransactionSuccessEvent();
                return "removed";
           }     
           
           @Transactional
           public String persistNoMessage()
           {
                   showMessages = false;
                String result = persist();
                showMessages = true;
                return result;
           }     
         
           @Transactional
           public String updateNoMessage()
           {
                   showMessages = false;
                String result = update();
                showMessages = true;
                return result;
           }  
           
           @Transactional
           public String removeNoMessage()
           {
                   showMessages = false;
                String result = remove();
                showMessages = true;
                return result;
           }       
      
      
           public Boolean getShowMessages()
           {
                return showMessages;
           }
      
           public void setShowMessages(Boolean showMessages)
           {
                this.showMessages = showMessages;
           }
           
      }