Package gaej2011.service

Source Code of gaej2011.service.MinutesService

package gaej2011.service;

import gaej2011.meta.MemoMeta;
import gaej2011.meta.MinutesMeta;
import gaej2011.model.Memo;
import gaej2011.model.Minutes;

import java.io.IOException;
import java.io.PrintWriter;
import java.nio.channels.Channels;
import java.util.Date;
import java.util.List;

import org.slim3.datastore.Datastore;
import org.slim3.memcache.Memcache;

import com.google.appengine.api.blobstore.BlobKey;
import com.google.appengine.api.datastore.Key;
import com.google.appengine.api.datastore.Transaction;
import com.google.appengine.api.files.AppEngineFile;
import com.google.appengine.api.files.FileService;
import com.google.appengine.api.files.FileServiceFactory;
import com.google.appengine.api.files.FileWriteChannel;
import com.google.appengine.api.prospectivesearch.ProspectiveSearchServiceFactory;
import com.google.appengine.api.users.UserServiceFactory;

public class MinutesService {

    public static Key put(String string) {
        Minutes minutes = new Minutes();
        minutes.setTitle(string);
        minutes.setCreatedAt(new Date());
        minutes.setAuthor(UserServiceFactory.getUserService().getCurrentUser());
        Datastore.put(minutes);
        Memcache.delete(MEMCACHE_KEY_LIST);
        return minutes.getKey();
    }

    static final MinutesMeta meta = MinutesMeta.get();

    static final String MEMCACHE_KEY_LIST = "LIST_OF_MINUTES";

    public static List<Minutes> list() {
        List<Minutes> list = Memcache.get(MEMCACHE_KEY_LIST);
        if (list != null) {
            return list;
        }
        list = Datastore.query(meta).sort(meta.createdAt.desc).asList();
        Memcache.put(MEMCACHE_KEY_LIST, list);
        return list;
    }

    public static void incrementMemoCount(Key minutesKey) {
        Transaction tx = Datastore.beginTransaction();
        try {
            Minutes minutes = Datastore.get(tx, meta, minutesKey);
            minutes.setMemoCount(minutes.getMemoCount() + 1);
            minutes.setUpdatedAt(new Date());
            ProspectiveSearchServiceFactory
                .getProspectiveSearchService()
                .match(meta.modelToEntity(minutes), "HotMinutes");
            Datastore.put(tx, minutes);
            tx.commit();
        } finally {
            if (tx.isActive()) {
                tx.rollback();
            }
        }
        Memcache.delete(MEMCACHE_KEY_LIST);
    }

    public static List<Key> queryForUpdateMemoCount() {
        long now = new Date().getTime();
        Date before24hours = new Date(now - 24 * 60 * 60 * 1000);
        Date before48hours = new Date(now - 48 * 60 * 60 * 1000);
        return Datastore
            .query(meta)
            .filter(meta.updatedAt.lessThan(before24hours))
            .filter(meta.updatedAt.greaterThan(before48hours))
            .asKeyList();
    }

    public static void updateMemoCount(Key minutesKey) {
        MemoMeta memoMeta = MemoMeta.get();
        int memoCount =
            Datastore
                .query(memoMeta)
                .filter(memoMeta.minutes.equal(minutesKey))
                .count();
        Minutes minutes = Datastore.get(meta, minutesKey);
        minutes.setMemoCount(memoCount);
        Datastore.put(minutes);
        Memcache.delete(MEMCACHE_KEY_LIST);
    }

    public static void deleteMinutes(Minutes minutes) {
        Key minutesKey = minutes.getKey();
        Memcache.delete(minutesKey);
        Memcache.delete(MEMCACHE_KEY_LIST);
        List<Key> deleteKeyList =
            Datastore
                .query(Memo.class)
                .filter(MemoMeta.get().minutes.equal(minutesKey))
                .asKeyList();
        Datastore.delete(deleteKeyList);
        Datastore.delete(minutesKey);
    }

    public static BlobKey exportAsTSV(Minutes minutes) throws IOException {
        FileService fileService = FileServiceFactory.getFileService();
        AppEngineFile file =
            fileService.createNewBlobFile(
                "text/tab-separated-values",
                minutes.getTitle());
        FileWriteChannel writeChannel =
            fileService.openWriteChannel(file, true);
        PrintWriter writer =
            new PrintWriter(Channels.newWriter(writeChannel, "utf-8"));
        List<Memo> list = MemoService.list(minutes.getKey());
        for (Memo memo : list) {
            writer.print("\"");
            writer.print(memo.getCreatedAt());
            writer.print("\"");
            writer.print("\t");
            writer.print("\"");
            writer.print(memo.getAuthor().getEmail());
            writer.print("\"");
            writer.print("\t");
            writer.print("\"");
            writer.print(memo.getMemo());
            writer.print("\"");
            writer.println();
        }
        writer.close();
        writeChannel.closeFinally();
        return fileService.getBlobKey(file);
    }
}
TOP

Related Classes of gaej2011.service.MinutesService

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.