Package gaej2011.controller

Source Code of gaej2011.controller.MinutesController

package gaej2011.controller;

import gaej2011.meta.MinutesMeta;
import gaej2011.model.Minutes;
import gaej2011.service.MinutesService;

import java.io.IOException;
import java.util.List;

import javax.servlet.http.HttpServletResponse;

import org.slim3.controller.Controller;
import org.slim3.controller.Navigation;
import org.slim3.datastore.Datastore;
import org.slim3.util.StringUtil;

import com.google.appengine.api.blobstore.BlobInfo;
import com.google.appengine.api.blobstore.BlobInfoFactory;
import com.google.appengine.api.blobstore.BlobKey;
import com.google.appengine.api.blobstore.BlobstoreService;
import com.google.appengine.api.blobstore.BlobstoreServiceFactory;
import com.google.appengine.api.datastore.Key;
import com.google.appengine.api.datastore.KeyFactory;
import com.google.appengine.api.mail.MailService;
import com.google.appengine.api.mail.MailService.Message;
import com.google.appengine.api.mail.MailServiceFactory;
import com.google.appengine.api.users.User;
import com.google.appengine.api.users.UserServiceFactory;

public class MinutesController extends Controller {

    @Override
    protected Navigation run() throws Exception {
        if (isPost()) {
            return doPost();
        } else if (StringUtil.isEmpty(asString("download")) == false) {
            return doDownload();
        } else if (StringUtil.isEmpty(asString("delete")) == false) {
            return doDelete();
        } else {
            return doGet();
        }
    }

    private Navigation doDelete() throws IOException {
        User currentUser = UserServiceFactory.getUserService().getCurrentUser();
        if (currentUser == null) {
            response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
            return null;
        }
        Key minutesKey;
        try {
            minutesKey = asKey("delete");
            if (minutesKey == null) {
                response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
                return null;
            }
        } catch (IllegalArgumentException e) {
            response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
            return null;
        }
        Minutes minutes = Datastore.getOrNull(Minutes.class, minutesKey);
        if (minutes == null) {
            response.setStatus(HttpServletResponse.SC_NOT_FOUND);
            return null;
        }
        if (minutes.getAuthor().equals(currentUser) == false) {
            response.setStatus(HttpServletResponse.SC_FORBIDDEN);
            return null;
        }
        // TSV 作成と削除をする
        BlobKey blobKey = MinutesService.exportAsTSV(minutes);
        MinutesService.deleteMinutes(minutes);
        // ダウンロードURL をメールで送信する
        Message message = new Message();
        message.setSender("minutes@yourappid.appspotmail.com");
        message.setSubject(" 議事録[" + minutes.getTitle() + "] がTSV に変換されました");
        message.setTo(currentUser.getEmail());
        StringBuilder b = new StringBuilder();
        b
            .append(request.getScheme())
            .append("://")
            .append(request.getServerName());
        if (request.getServerPort() != 80) {
            b.append(":").append(request.getServerPort());
        }
        b.append("/minutes?download=").append(blobKey.getKeyString());
        message.setTextBody(b.toString());
        MailService mailService = MailServiceFactory.getMailService();
        mailService.send(message);
        response.setStatus(HttpServletResponse.SC_NO_CONTENT);
        return null;
    }

    private Navigation doDownload() throws IOException {
        String blobKeyString = asString("download");
        if (StringUtil.isEmpty(blobKeyString)) {
            response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
            return null;
        }
        BlobstoreService blobstoreService =
            BlobstoreServiceFactory.getBlobstoreService();
        BlobKey blobKey = new BlobKey(blobKeyString);
        BlobInfo blobInfo = new BlobInfoFactory().loadBlobInfo(blobKey);
        response.setContentType(blobInfo.getContentType());
        response.setContentLength((int) blobInfo.getSize());
        response.setHeader(
            "Content-disposition",
            "attachment;" + blobInfo.getFilename());
        byte[] data =
            blobstoreService.fetchData(blobKey, 0, blobInfo.getSize());
        response.getOutputStream().write(data);
        response.flushBuffer();
        return null;
    }

    Navigation doGet() throws IOException {
        List<Minutes> minutes = MinutesService.list();
        response.setCharacterEncoding("utf-8");
        response.setContentType("application/json");
        response.getWriter().write(MinutesMeta.get().modelsToJson(minutes));
        response.flushBuffer();
        return null;
    }

    Navigation doPost() throws IOException {
        if (UserServiceFactory.getUserService().getCurrentUser() == null) {
            response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
            return null;
        }
        String title = asString("title");
        if (StringUtil.isEmpty(title)) {
            response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
            return null;
        }
        Key key = MinutesService.put(title);
        sendMail(KeyFactory.keyToString(key));
        response.setStatus(HttpServletResponse.SC_NO_CONTENT);
        return null;
    }

    private void sendMail(String keyString) throws IOException {
        Message message = new Message();
        message.setSender("minutes@yourappid.appspotmail.com");
        message.setSubject(" 新しい議事録が追加されました");
        StringBuilder b = new StringBuilder();
        b
            .append(request.getScheme())
            .append("://")
            .append(request.getServerName());
        if (request.getServerPort() != 80) {
            b.append(":").append(request.getServerPort());
        }
        b.append("/minutes.html?minutes=").append(keyString);
        message.setTextBody(b.toString());
        MailService mailService = MailServiceFactory.getMailService();
        mailService.sendToAdmins(message);
    }
}
TOP

Related Classes of gaej2011.controller.MinutesController

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.