package open.dolphin.session; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import javax.ejb.Stateless; import javax.inject.Named; import javax.persistence.EntityManager; import javax.persistence.NoResultException; import javax.persistence.PersistenceContext; import open.dolphin.infomodel.LetterDate; import open.dolphin.infomodel.LetterItem; import open.dolphin.infomodel.LetterModule; import open.dolphin.infomodel.LetterText; /** * * @author Kazushi Minagawa, Digital Globe, Inc. */ @Named @Stateless public class LetterServiceBean { private static final String KARTE_ID = "karteId"; private static final String ID = "id"; private static final String QUERY_LETTER_BY_KARTE_ID = "from LetterModule l where l.karte.id=:karteId"; private static final String QUERY_LETTER_BY_ID = "from LetterModule l where l.id=:id"; private static final String QUERY_ITEM_BY_ID = "from LetterItem l where l.module.id=:id"; private static final String QUERY_TEXT_BY_ID = "from LetterText l where l.module.id=:id"; private static final String QUERY_DATE_BY_ID = "from LetterDate l where l.module.id=:id"; @PersistenceContext private EntityManager em; public long saveOrUpdateLetter(LetterModule model) { // 保存 em.persist(model); List<LetterItem> items = model.getLetterItems(); if (items != null) { for (LetterItem item : items) { item.setModule(model); em.persist(item); } } List<LetterText> texts = model.getLetterTexts(); if (texts != null) { for (LetterText txt : texts) { txt.setModule(model); em.persist(txt); } } List<LetterDate> dates = model.getLetterDates(); if (dates != null) { for (LetterDate date : dates) { date.setModule(model); em.persist(date); } } // 削除 if (model.getLinkId()!=0L) { try { List<LetterItem> itemList = (List<LetterItem>) em.createQuery(QUERY_ITEM_BY_ID) .setParameter(ID, model.getLinkId()) .getResultList(); for (LetterItem item : itemList) { em.remove(item); } }catch(NoResultException e) { Logger.getLogger("open.dolphin").log(Level.WARNING, "QUERY_ITEM_BY_ID : {0}", new Object[]{e.toString()}); } try { List<LetterText> textList = (List<LetterText>) em.createQuery(QUERY_TEXT_BY_ID) .setParameter(ID, model.getLinkId()) .getResultList(); for (LetterText txt : textList) { em.remove(txt); } }catch(NoResultException e) { Logger.getLogger("open.dolphin").log(Level.WARNING, "QUERY_TEXT_BY_ID : {0}", new Object[]{e.toString()}); } try { List<LetterDate> dateList = (List<LetterDate>) em.createQuery(QUERY_DATE_BY_ID) .setParameter(ID, model.getLinkId()) .getResultList(); for (LetterDate date : dateList) { em.remove(date); } }catch(NoResultException e) { Logger.getLogger("open.dolphin").log(Level.WARNING, "QUERY_DATE_BY_ID : {0}", new Object[]{e.toString()}); } try { LetterModule delete = (LetterModule) em.createQuery(QUERY_LETTER_BY_ID) .setParameter(ID, model.getLinkId()) .getSingleResult(); em.remove(delete); }catch(NoResultException e) { Logger.getLogger("open.dolphin").log(Level.WARNING, "QUERY_LETTER_BY_ID : {0}", new Object[]{e.toString()}); } } return model.getId(); } public List<LetterModule> getLetterList(long karteId) { List<LetterModule> list = (List<LetterModule>) em.createQuery(QUERY_LETTER_BY_KARTE_ID) .setParameter(KARTE_ID, karteId) .getResultList(); return list; } public LetterModule getLetter(long letterPk) { LetterModule ret = (LetterModule) em.createQuery(QUERY_LETTER_BY_ID) .setParameter(ID, letterPk) .getSingleResult(); // item List<LetterItem> items = (List<LetterItem>) em.createQuery(QUERY_ITEM_BY_ID) .setParameter(ID, ret.getId()) .getResultList(); ret.setLetterItems(items); // text List<LetterText> texts = (List<LetterText>) em.createQuery(QUERY_TEXT_BY_ID) .setParameter(ID, ret.getId()) .getResultList(); ret.setLetterTexts(texts); // date List<LetterDate> dates = (List<LetterDate>) em.createQuery(QUERY_DATE_BY_ID) .setParameter(ID, ret.getId()) .getResultList(); ret.setLetterDates(dates); return ret; } public void delete(long pk) { try { List<LetterItem> itemList = (List<LetterItem>) em.createQuery(QUERY_ITEM_BY_ID) .setParameter(ID, pk) .getResultList(); for (LetterItem item : itemList) { em.remove(item); } }catch(NoResultException e) { Logger.getLogger("open.dolphin").log(Level.WARNING, "QUERY_ITEM_BY_ID : {0}", new Object[]{e.toString()}); } try { List<LetterText> textList = (List<LetterText>) em.createQuery(QUERY_TEXT_BY_ID) .setParameter(ID, pk) .getResultList(); for (LetterText txt : textList) { em.remove(txt); } }catch(NoResultException e) { Logger.getLogger("open.dolphin").log(Level.WARNING, "QUERY_TEXT_BY_ID : {0}", new Object[]{e.toString()}); } try { List<LetterDate> dateList = (List<LetterDate>) em.createQuery(QUERY_DATE_BY_ID) .setParameter(ID, pk) .getResultList(); for (LetterDate date : dateList) { em.remove(date); } }catch(NoResultException e) { Logger.getLogger("open.dolphin").log(Level.WARNING, "QUERY_DATE_BY_ID : {0}", new Object[]{e.toString()}); } try { LetterModule delete = (LetterModule) em.createQuery(QUERY_LETTER_BY_ID) .setParameter(ID, pk) .getSingleResult(); em.remove(delete); }catch(NoResultException e) { Logger.getLogger("open.dolphin").log(Level.WARNING, "QUERY_LETTER_BY_ID : {0}", new Object[]{e.toString()}); } } }