Package jp.co.nskint.uq.pd.signage.service

Source Code of jp.co.nskint.uq.pd.signage.service.LayoutService

/** Copyright 2011 NIHON SYSTEM KAIHATSU LIMITED */
package jp.co.nskint.uq.pd.signage.service;

import java.io.StringWriter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;

import jp.co.nskint.uq.pd.signage.meta.LayoutMeta;
import jp.co.nskint.uq.pd.signage.model.Layout;
import jp.co.nskint.uq.pd.signage.model.Manager;
import jp.co.nskint.uq.pd.signage.model.User;
import jp.co.nskint.uq.pd.signage.model.xml.LayoutXml;

import org.slim3.datastore.Datastore;

import com.google.appengine.api.datastore.Key;
import com.google.appengine.api.datastore.Transaction;

/**
* レイアウト情報 サービス
*
* @author NAGASAWA takahiro <tnagasaw@nskint.co.jp>
*
*/
public class LayoutService extends Service {
    /**
     * レイアウト情報の保存
     *
     * @param layout
     *            レイアウト情報
     */
    public void put(Manager manager, Layout layout) {
        // XMLモデルを文字列に変換
        LayoutXml xmlModel = layout.getXmlModel();
        if (xmlModel != null) {
            try {
                StringWriter writer = new StringWriter();
                JAXBContext context =
                    JAXBContext.newInstance("jp.co.nskint.uq.pd.signage.model.xml");
                context.createMarshaller().marshal(xmlModel, writer);
                layout.setXml(writer.toString());
            } catch (JAXBException e) {
                throw new IllegalStateException(e);
            }
        }

        layout.setManagerRef(manager);

        Transaction tx = Datastore.beginTransaction();
        layout.setManagerRef(manager);
        Datastore.put(tx, layout);
        tx.commit();
    }

    /**
     * レイアウト情報の取得
     *
     * @param lid
     *            レイアウトID
     * @return レイアウト情報
     */
    public Layout get(User user, long lid) {
        Transaction tx = Datastore.beginTransaction();
        Layout result = this.get(tx, user, lid);
        tx.commit();
        return result;
    }

    /**
     * レイアウト情報の取得
     *
     * @param tx
     *            トランザクション
     * @param lid
     *            レイアウトID
     * @return レイアウト情報
     */
    protected Layout get(Transaction tx, User user, long lid) {
        Key key = LayoutService.createKey(lid);
        if( key == null) {
            return null;
        }
        Layout result;

        result =
            Datastore.getOrNull(tx, LayoutMeta.get(), key);
        if(User.TYPE_ADMINISTRATOR.equals(user.getType())
                || user.equals(result.getManagerRef().getModel())) {
            return result;
        }
        return null;
    }

    public void delete(User user, List<Long> lids) {
        Transaction tx = Datastore.beginTransaction();
        this.delete(tx, user, lids);
        tx.commit();
    }
    /**
     * レイアウト情報の削除
     * @param tx トランザクション
     * @param manager 代表者情報
     * @param lids 削除対象のレイアウトIDを格納したリスト
     */
    protected void delete(Transaction tx, User user, List<Long> lids) {
        if(lids == null) {
            return ;
        }
        List<Key> keys = new ArrayList<Key>();
        Iterator<Long> ite = lids.iterator();

        while (ite.hasNext()) {
            Long lid = (Long) ite.next();
            Key key = LayoutService.createKey(lid);
            if(key == null) {
                continue ;
            }
            keys.add(key);
        }

        Datastore.delete(tx, keys);
    }


    /**
     * @param lid
     * @return
     */
    public static Key createKey(long lid) {
        if(lid < 1) {
            return null;
        }
        return Datastore.createKey(LayoutMeta.get(), lid);
    }

    /**
     * レイアウト情報の新規IDを取得する
     * @return レイアウト情報の新規ID
     */
    public static Key createNewKey() {
        return Datastore.allocateId(LayoutMeta.get());
    }
}
TOP

Related Classes of jp.co.nskint.uq.pd.signage.service.LayoutService

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.