Package open.dolphin.ejb

Source Code of open.dolphin.ejb.RemoteStampServiceImpl

package open.dolphin.ejb;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.annotation.Resource;
import javax.annotation.security.RolesAllowed;
import javax.ejb.Remote;
import javax.ejb.SessionContext;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import open.dolphin.infomodel.IStampTreeModel;
import open.dolphin.infomodel.PublishedTreeModel;
import open.dolphin.infomodel.StampModel;
import open.dolphin.infomodel.StampTreeModel;
import open.dolphin.infomodel.SubscribedTreeModel;
import org.apache.log4j.Logger;
import org.jboss.ejb3.annotation.SecurityDomain;

@Stateless
@SecurityDomain("openDolphin")
@RolesAllowed("user")
@Remote({RemoteStampService.class})

public class RemoteStampServiceImpl extends DolphinService implements RemoteStampService {
    private static final long serialVersionUID = -9201185729129886533L;
    private Logger logger = Logger.getLogger("CONSOLE");
   
    @Resource
    private SessionContext ctx;
   
    @PersistenceContext
    private EntityManager em;
   
    /**
     * user個人のStampTreeを保存/更新する。
     * @param model 保存する StampTree
     * @return id
     */
    @Override
    public long putTree(StampTreeModel model) {
       
        StampTreeModel saveOrUpdate = em.merge(model);
        return saveOrUpdate.getId();
    }
   
    /**
     * User個人及びサブスクライブしているTreeを取得する。
     * @param userPk userId(DB key)
     * @return User個人及びサブスクライブしているTreeのリスト
     */
    @Override
    public List<IStampTreeModel> getTrees(long userPk) {
       
        List<IStampTreeModel> ret = new ArrayList<IStampTreeModel>();
        boolean newUser = false;
       
        //
        // パーソナルツリーを取得する
        //
        try {
            StampTreeModel personal = (StampTreeModel) em.createQuery("from StampTreeModel s where s.user.id=:userPk")
            .setParameter("userPk", userPk)
            .getSingleResult();
            ret.add(personal);
           
        } catch (NoResultException ne) {
            // 新規ユーザの場合ここへくる
            newUser = true;
        }
       
        //
        // 新規ユーザの場合、空のリストを返す
        //
        if (newUser) {
            return ret;
        }
       
        //
        // ユーザがサブスクライブしているStampTreeのリストを取得する
        //
        List subscribed = em.createQuery("from SubscribedTreeModel s where s.user.id=:userPk")
        .setParameter("userPk", userPk)
        .getResultList();
       
        //
        // サブスクライブリストから公開Treeを取得する
        //
        for (Iterator iter=subscribed.iterator(); iter.hasNext(); ) {
           
            SubscribedTreeModel sm = (SubscribedTreeModel) iter.next();
           
            //
            // 公開Treeが削除されている場合
            // サブスクライブTreeも削除する
            //
            try {
                PublishedTreeModel published = (PublishedTreeModel) em.find(PublishedTreeModel.class, sm.getTreeId());
               
                if (published == null) {
                    //
                    // 公開Treeが削除されている場合
                    // サブスクライブリストレコードを削除する
                    //
                    em.remove(sm);
                    //System.out.println("published is null but no exception");
                } else {
                    //
                    // 公開Treeがあれば加える
                    //
                    ret.add(published);
                }
               
            } catch (NoResultException ne) {
                //
                // 削除されているのでサブスクライブリストからも除く
                // id の関係かここへ来ない
                //
                em.remove(sm);
                //System.out.println("removed subscribedTree");
            }
        }
       
        return ret;
    }
   
    /**
     * まだ保存されていない個人用のTreeを保存し公開する。
     */
    @Override
    public long saveAndPublishTree(StampTreeModel model, byte[] publishBytes) {
       
        //
        // 最初に保存する
        //
        em.persist(model);
       
        //
        // 公開用Treeモデルを生成し値をコピーする
        // 公開Treeのid=個人用TreeのId
        //
        PublishedTreeModel publishedModel = new PublishedTreeModel();
        publishedModel.setId(model.getId());
        publishedModel.setUser(model.getUser());
        publishedModel.setName(model.getName());
        publishedModel.setPublishType(model.getPublishType());
        publishedModel.setCategory(model.getCategory());
        publishedModel.setPartyName(model.getPartyName());
        publishedModel.setUrl(model.getUrl());
        publishedModel.setDescription(model.getDescription());
        publishedModel.setPublishedDate(model.getPublishedDate());
        publishedModel.setLastUpdated(model.getLastUpdated());
        publishedModel.setTreeBytes(publishBytes);
       
        //
        // 公開Treeを保存する
        //
        em.persist(publishedModel);
       
        // id を返す
        return model.getId();
       
    }
   
   
    /**
     * 保存されている個人用のTreeを新規に公開する。
     * @param model 公開するStampTree
     */
    @Override
    public int publishTree(StampTreeModel model, byte[] publishBytes) {
       
        //
        // 最初に更新する
        //
        em.merge(model);
       
        //
        // 公開用StampTreeModelを生成し値をコピーする
        // 公開Treeのid=個人用TreeのId
        //
        PublishedTreeModel publishedModel = new PublishedTreeModel();
        publishedModel.setId(model.getId());
        publishedModel.setUser(model.getUser());
        publishedModel.setName(model.getName());
        publishedModel.setPublishType(model.getPublishType());
        publishedModel.setCategory(model.getCategory());
        publishedModel.setPartyName(model.getPartyName());
        publishedModel.setUrl(model.getUrl());
        publishedModel.setDescription(model.getDescription());
        publishedModel.setPublishedDate(model.getPublishedDate());
        publishedModel.setLastUpdated(model.getLastUpdated());
        publishedModel.setTreeBytes(publishBytes);
       
        //
        // 公開Treeを保存する
        //
        em.persist(publishedModel);
       
        return 1;
    }
   
    /**
     * 公開しているTreeを更新する。
     * @param model 公開しているTree
     * @return 更新した数
     */
    @Override
    public int updatePublishedTree(StampTreeModel model, byte[] publishBytes) {
       
        //
        // 最初に更新する
        //
        em.merge(model);
       
        //
        // 公開用Treeへコピーする
        //
        PublishedTreeModel publishedModel = new PublishedTreeModel();
        publishedModel.setId(model.getId());
        publishedModel.setUser(model.getUser());
        publishedModel.setName(model.getName());
        publishedModel.setPublishType(model.getPublishType());
        publishedModel.setCategory(model.getCategory());
        publishedModel.setPartyName(model.getPartyName());
        publishedModel.setUrl(model.getUrl());
        publishedModel.setDescription(model.getDescription());
        publishedModel.setPublishedDate(model.getPublishedDate());
        publishedModel.setLastUpdated(model.getLastUpdated());
        publishedModel.setTreeBytes(publishBytes);
       
        //
        // 公開Treeを更新する
        // 検索し値を設定するほうがいいのではないか?
        //
        em.merge(publishedModel);
       
        return 1;
       
    }
   
    /**
     * 公開したTreeを削除する。
     * @param id 削除するTreeのId
     * @return 削除した数
     */
    @Override
    public int cancelPublishedTree(StampTreeModel model) {
        //
        // 公開属性を更新する
        //
        em.merge(model);
       
        //
        // 公開Treeを削除する
        //
        PublishedTreeModel exist = (PublishedTreeModel) em.find(PublishedTreeModel.class, model.getId());
        em.remove(exist);
       
        return 1;
    }
   
    /**
     * 公開されているStampTreeのリストを取得する。
     * @return ローカル及びパブリックTreeのリスト
     */
    @SuppressWarnings("unchecked")
    @Override
    public List<PublishedTreeModel> getPublishedTrees() {
       
        // ログインユーザの施設IDを取得する
        String fid = this.getCallersFacilityId(ctx);
       
        List<PublishedTreeModel> ret = new ArrayList<PublishedTreeModel>();
       
        // local に公開されているTreeを取得する
        // publishType=施設ID
        List locals = em.createQuery("from PublishedTreeModel p where p.publishType=:fid")
        .setParameter("fid", fid)
        .getResultList();
        ret.addAll((List<PublishedTreeModel>) locals);
       
        // パブリックTeeを取得する
        List publics = em.createQuery("from PublishedTreeModel p where p.publishType='global'")
        .getResultList();
        ret.addAll((List<PublishedTreeModel>) publics);
       
        return ret;
    }
   
    /**
     * 公開Treeにサブスクライブする。
     * @param addList サブスクライブする
     * @return
     */
    @Override
    public List<Long> subscribeTrees(List<SubscribedTreeModel> addList) {
       
        List<Long> ret = new ArrayList<Long>();
        for (SubscribedTreeModel model : addList) {
            em.persist(model);
//pns       ret.add(new Long(model.getId()));
            ret.add(Long.valueOf(model.getId()));
        }
        return ret;
    }
   
    /**
     * 公開Treeにアンサブスクライブする。
     * @param ids アンサブスクライブするTreeのIdリスト
     * @return
     */
    @Override
    public int unsubscribeTrees(List<SubscribedTreeModel> removeList) {
       
        int cnt = 0;
       
        for (SubscribedTreeModel model : removeList) {
            SubscribedTreeModel remove = (SubscribedTreeModel) em.createQuery("from SubscribedTreeModel s where s.user.id=:userPk and s.treeId=:treeId")
            .setParameter("userPk", model.getUser().getId())
            .setParameter("treeId", model.getTreeId())
            .getSingleResult();
            em.remove(remove);
            cnt++;
        }
       
        return cnt;
    }
   
    /**
     * ASP StampTreeを取得する。
     * @param managerId ASP TreeマネージャID
     * @return ASP提供のStampTree
     */
    @Override
    public StampTreeModel getAspTree(String managerId) {
       
        StampTreeModel ret = null;
       
        try {
            ret =  (StampTreeModel)em.createQuery("from StampTreeModel s where s.userId = :mid")
            .setParameter("mid", managerId)
            .getSingleResult();
        } catch (NoResultException e) {
        }
        return ret;
    }
   
    /**
     * Stampを保存する。
     * @param model StampModel
     * @return 保存件数
     */
    @Override
    public List<String> putStamp(List<StampModel> list) {
        List<String> ret = new ArrayList<String>();
        for (StampModel model : list) {
            em.persist(model);
            ret.add(model.getId());
        }
        return ret;
    }
   
    /**
     * Stampを保存する。
     * @param model StampModel
     * @return 保存件数
     */
    @Override
    public String putStamp(StampModel model) {
        em.persist(model);
        return model.getId();
    }
   
    /**
     * Stampを取得する。
     * @param stampId 取得する StampModel の id
     * @return StampModel
     */
    @Override
    public StampModel getStamp(String stampId) {
       
        try {
            return (StampModel) em.find(StampModel.class, stampId);
        } catch (NoResultException e) {
        }
       
        return null;
    }
   
    /**
     * Stampを取得する。
     * @param stampId 取得する StampModel の id
     * @return StampModel
     */
    @Override
    public List<StampModel> getStamp(List<String> ids) {
       
        List<StampModel> ret = new ArrayList<StampModel>();
       
        try {
            for (String stampId : ids) {
                StampModel test = (StampModel) em.find(StampModel.class, stampId);
                ret.add(test);
            }
        } catch (Exception e) {
        }
       
        return ret;
    }
   
    /**
     * Stampを削除する。
     * @param stampId 削除する StampModel の id
     * @return 削除件数
     */
    @Override
    public int removeStamp(String stampId) {
        StampModel exist = (StampModel) em.find(StampModel.class, stampId);
        em.remove(exist);
        return 1;
    }
   
    /**
     * Stampを削除する。
     * @param stampId 削除する StampModel の id List
     * @return 削除件数
     */
    @Override
    public int removeStamp(List<String> ids) {  
        int cnt =0;
        for (String stampId : ids) {
            StampModel exist = (StampModel) em.find(StampModel.class, stampId);
            if (exist != null) { em.remove(exist); } // zombie stamps cause exist == null
            cnt++;
        }
        return cnt;
    }
}
TOP

Related Classes of open.dolphin.ejb.RemoteStampServiceImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.