public String save() { if (currentStory != null) { try { Story merged = doInTransaction( new PersistenceAction<Story>() { public Story execute(EntityManager em) { if (currentStory.isNew()) { em.persist(currentStory); } else if (!em.contains(currentStory)) { return em.merge(currentStory); } return currentStory; } }); if (!currentStory.equals(merged)) { setCurrentStory(merged); int idx = getStoryList().indexOf(currentStory); if (idx != -1) { getStoryList().set(idx, merged); } } sprintManager.getCurrentSprint().addStory(merged); if (!storyList.contains(merged)) { getStoryList().add(merged); } } catch (Exception e) { getLogger(getClass()).log(Level.SEVERE, "Error on try to save Story: " + currentStory, e); addMessage("Error on try to save Story", FacesMessage.SEVERITY_ERROR); return null; } } return "show"; }