com.sktelecom.cep.notebook.repo.JDBCNotebookRepo.java Source code

Java tutorial

Introduction

Here is the source code for com.sktelecom.cep.notebook.repo.JDBCNotebookRepo.java

Source

/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.sktelecom.cep.notebook.repo;

import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.UUID;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

import org.apache.zeppelin.conf.ZeppelinConfiguration;
import org.apache.zeppelin.notebook.Note;
import org.apache.zeppelin.notebook.NoteInfo;
import org.apache.zeppelin.notebook.Paragraph;
import org.apache.zeppelin.notebook.repo.NotebookRepo;
import org.apache.zeppelin.scheduler.Job.Status;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

/**
*
*/
public class JDBCNotebookRepo implements NotebookRepo {
    Logger logger = LoggerFactory.getLogger(JDBCNotebookRepo.class);

    private DataSource dataSource;

    private JdbcTemplate jdbcTemplate;

    private ZeppelinConfiguration conf;

    public JDBCNotebookRepo(ZeppelinConfiguration conf) throws IOException, NamingException {
        this.conf = conf;

        Context ctx = new InitialContext();
        dataSource = (DataSource) ctx.lookup("java:comp/env/jdbc/cepDS");
        this.jdbcTemplate = new JdbcTemplate(dataSource);
    }

    @Override
    public List<NoteInfo> list() throws IOException {
        StringBuffer sb = new StringBuffer();
        sb.append("select nb.note_id, nb.note_name, nb.note_content, wo.own_user_id as user_id ");
        sb.append("  from notebook nb ");
        sb.append(
                "       inner join workspace_object wo ON wo.wrkspc_obj_id = nb.wrkspc_obj_id AND wo.obj_status != 'DROPPED' ");
        List<NoteInfo> infos = jdbcTemplate.query(sb.toString(), new RowMapper<NoteInfo>() {
            public NoteInfo mapRow(ResultSet rs, int rowNum) throws SQLException {
                NoteInfo info = null;
                try {
                    info = getNoteInfo(rs.getString("note_content"));
                    info.setUserId(rs.getString("user_id"));
                    info.setName(rs.getString("note_name"));
                } catch (IOException e) {
                    e.printStackTrace();
                }
                return info;
            }
        });
        return infos;
    }

    private Note getNote(String json) throws IOException {
        GsonBuilder gsonBuilder = new GsonBuilder();
        gsonBuilder.setPrettyPrinting();
        Gson gson = gsonBuilder.create();

        Note note = gson.fromJson(json, Note.class);
        for (Paragraph p : note.getParagraphs()) {
            if (p.getStatus() == Status.PENDING || p.getStatus() == Status.RUNNING) {
                p.setStatus(Status.ABORT);
            }
        }
        return note;
    }

    private NoteInfo getNoteInfo(String json) throws IOException {
        Note note = getNote(json);
        return new NoteInfo(note);
    }

    @Override
    public Note get(String noteId) throws IOException {
        try {
            StringBuffer sb = new StringBuffer();
            sb.append("select nb.note_id, nb.note_name, nb.note_content, wo.own_user_id as user_id ");
            sb.append("  from notebook nb ");
            sb.append("       inner join workspace_object wo on wo.wrkspc_obj_id = nb.wrkspc_obj_id ");
            sb.append(" where nb.note_id = ? ");
            Note note = jdbcTemplate.queryForObject(sb.toString(), new Object[] { noteId }, new RowMapper<Note>() {
                public Note mapRow(ResultSet rs, int rowNum) throws SQLException {
                    Note note = null;
                    try {
                        note = getNote(rs.getString("note_content"));
                        note.setUserId(rs.getString("user_id"));
                        note.setName(rs.getString("note_name"));
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    return note;
                }
            });
            return note;
        } catch (EmptyResultDataAccessException e) {
            return null;
        }
    }

    @Override
    public void save(Note note) throws IOException {
        GsonBuilder gsonBuilder = new GsonBuilder();
        gsonBuilder.setPrettyPrinting();
        Gson gson = gsonBuilder.create();
        String json = gson.toJson(note);

        Note orgNote = get(note.id());
        if (orgNote == null) {
            if (note.getName() == null) {
                note.setName("Note " + note.id());
            }
            String wrkspcObjId = UUID.randomUUID().toString();
            String assignId = UUID.randomUUID().toString();
            //share_type : ALL / ASSIGN / NONE
            //obj_status : CREATED, SHARED, DROPPED
            jdbcTemplate.update(
                    "insert into workspace_object(wrkspc_obj_id, wrkspc_obj_type, share_type, obj_status, create_user_id, own_user_id) values (?, ?, ?, ?, ?, ?)",
                    wrkspcObjId, "NOTEBOOK", "NONE", "CREATED", note.getUserId(), note.getUserId());
            jdbcTemplate.update(
                    "insert into workspace_assign(assign_id, wrkspc_id, wrkspc_obj_id, update_date, update_user_id) values (?, ?, ?, NOW(), ?)",
                    assignId, note.getWorkspaceId(), wrkspcObjId, note.getUserId());
            jdbcTemplate.update(
                    "insert into notebook(wrkspc_obj_id, note_id, note_name, note_content, update_date, update_user_id) values (?, ?, ?, ?, NOW(), ?)",
                    wrkspcObjId, note.id(), note.getName(), json, note.getUserId());
        } else {
            jdbcTemplate.update(
                    "update notebook set note_content = ?, note_name = ?, update_date = NOW(), update_user_id = ? where note_id = ?",
                    json, note.getName(), note.getUserId(), note.id());
        }
    }

    @Override
    public void remove(String noteId) throws IOException {
        //jdbcTemplate.update("delete from notebook where note_id = ?", noteId);
        jdbcTemplate.update("update workspace_object set obj_status = ? where wrkspc_obj_id = ?", "DROPPED",
                noteId);
    }
}