org.mvnsearch.snippet.domain.manager.impl.SnippetServiceImpl.java Source code

Java tutorial

Introduction

Here is the source code for org.mvnsearch.snippet.domain.manager.impl.SnippetServiceImpl.java

Source

/*
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package org.mvnsearch.snippet.domain.manager.impl;

import org.apache.commons.lang.StringUtils;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Restrictions;
import org.joda.time.DateTime;
import org.mvnsearch.snippet.domain.Category;
import org.mvnsearch.snippet.domain.Snippet;
import org.mvnsearch.snippet.domain.extra.Comment;
import org.mvnsearch.snippet.domain.manager.CategoryManager;
import org.mvnsearch.snippet.domain.manager.SnippetManager;
import org.mvnsearch.snippet.domain.manager.SnippetService;
import org.springframework.jdbc.core.simple.ParameterizedRowMapper;
import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;

/**
 * snippet service implement
 *
 * @author linux_china@hotmail.com
 */
public class SnippetServiceImpl extends HibernateDaoSupport implements SnippetService {
    private SimpleJdbcTemplate jdbcTemplate;
    private CategoryManager categoryManager;
    private SnippetManager snippetManager;
    private int language = 0;

    /**
     * set language
     *
     * @param language language
     */
    public void setLanguage(int language) {
        this.language = language;
    }

    /**
     * inject jdbc template
     *
     * @param jdbcTemplate jdbc template
     */
    public void setJdbcTemplate(SimpleJdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    /**
     * inject snippet manager
     *
     * @param snippetManager snippet manager
     */
    public void setSnippetManager(SnippetManager snippetManager) {
        this.snippetManager = snippetManager;
    }

    /**
     * inject category manager
     *
     * @param categoryManager category manager bean
     */
    public void setCategoryManager(CategoryManager categoryManager) {
        this.categoryManager = categoryManager;
    }

    /**
     * render template into code
     *
     * @param mnemonic    mnemonic
     * @param packageName package name
     * @param fileName    file name
     * @param author      author name
     * @return rendered code
     */
    public String renderTemplate(String mnemonic, String packageName, String fileName, String author) {
        DetachedCriteria criteria = DetachedCriteria.forClass(Snippet.class);
        criteria.add(Restrictions.eq("mnemonic", mnemonic));
        if (language > 0) {
            criteria.add(Restrictions.eq("language", language));
        }
        List<Snippet> snippets = getHibernateTemplate().findByCriteria(criteria);
        if (!snippets.isEmpty()) {
            Snippet snippet = snippets.get(0);
            String className = fileName;
            if (StringUtils.isNotEmpty(className) && className.indexOf(".") != -1) {
                className = className.substring(0, className.indexOf("."));
            }
            String code = snippet.getCode();
            if (StringUtils.isNotEmpty(author)) {
                code = code.replace("${USER}", author);
            }
            if (StringUtils.isNotEmpty(packageName)) {
                code = code.replace("${PACKAGE_NAME}", packageName);
            }
            if (StringUtils.isNotEmpty(fileName)) {
                code = code.replace("${NAME}", className);
                code = code.replace("${FILE_NAME}", fileName);
            }
            //date info replace
            DateTime now = new DateTime();
            code = code.replace("${YEAR}", String.valueOf(now.getYear()));
            code = code.replace("${MONTH}", String.valueOf(now.getMonthOfYear()));
            code = code.replace("${DAY}", String.valueOf(now.getDayOfMonth()));
            return code;
        }
        return "";
    }

    /**
     * find snippet by mnemonic
     *
     * @param mnemonic mnemonic
     * @return snippet object
     */
    public Map<String, String> findSnippetByMnemonic(String mnemonic) {
        Snippet snippet = snippetManager.findSnippetByMnemonic(mnemonic);
        return snippet != null ? convertSnippetToMap(snippet) : null;
    }

    /**
     * find mnemonic list according to prefix
     *
     * @param prefix prefix
     * @return mnemonic list, max size is 100
     */
    public List<String> findMnemonicList(String prefix) {
        List<String> mnemonicList = new ArrayList<String>();
        String SQLSelect = "select mnemonic from snippets where mnemonic like '" + prefix + "%'";
        if (language > 0) {
            SQLSelect = SQLSelect + " and language=" + language;
        }
        List<Map<String, Object>> maps = jdbcTemplate.queryForList(SQLSelect);
        for (Map<String, Object> map : maps) {
            mnemonicList.add((String) map.get("mnemonic"));
        }
        return mnemonicList;
    }

    /**
     * find mnemonic list according to prefix
     *
     * @param prefix prefix
     * @return mnemonic list, max size is 100
     */
    public List<String> findFileMnemonicList(String prefix) {
        List<String> mnemonicList = new ArrayList<String>();
        String SQLSelect = "select mnemonic from snippets where type = '1' and mnemonic like '" + prefix + "%'";
        if (language > 0) {
            SQLSelect = SQLSelect + " and language=" + language;
        }
        List<Map<String, Object>> maps = jdbcTemplate.queryForList(SQLSelect);
        for (Map<String, Object> map : maps) {
            mnemonicList.add((String) map.get("mnemonic"));
        }
        return mnemonicList;
    }

    /**
     * find mnemonic list according to prefix
     *
     * @param prefix prefix
     * @return mnemonic list, max size is 100
     */
    public List<String> findMnemonicListWithName(String prefix) {
        List<String> mnemonicList = new ArrayList<String>();
        String SQLSelect = "select mnemonic, name from snippets where mnemonic like '" + prefix + "%'";
        if (language > 0) {
            SQLSelect = SQLSelect + " and language=" + language;
        }
        List<Map<String, Object>> maps = jdbcTemplate.queryForList(SQLSelect);
        if (maps.size() > 0) {
            for (Map<String, Object> map : maps) {
                mnemonicList.add(map.get("mnemonic") + ":" + map.get("name"));
            }
        }
        return mnemonicList;
    }

    /**
     * find mnemonic list according to prefix
     *
     * @param prefix prefix
     * @return mnemonic list, max size is 100
     */
    public List<String> findMnemonicListWithNameAndIcon(String prefix) {
        List<String> mnemonicList = new ArrayList<String>();
        String SQLSelect = "select mnemonic, name, icon from snippets where mnemonic like '" + prefix + "%'";
        if (language > 0) {
            SQLSelect = SQLSelect + " and language=" + language;
        }
        List<Map<String, Object>> maps = jdbcTemplate.queryForList(SQLSelect);
        if (maps.size() > 0) {
            Map<Integer, String> icons = snippetManager.getAllSnippetIcon();
            for (Map<String, Object> map : maps) {
                String icon = icons.get(map.get("icon"));
                if (icon == null) {
                    icon = "text.png";
                }
                mnemonicList.add(icon + ":" + map.get("mnemonic") + ":" + map.get("name"));
            }
        }
        return mnemonicList;
    }

    /**
     * find snipepts by mnemonic
     *
     * @param mnemonicPrefix mnemonic prefix
     * @return snippet map list
     */
    public List<Map<String, String>> findSnippetsByMnemonic(String mnemonicPrefix) {
        DetachedCriteria criteria = DetachedCriteria.forClass(Snippet.class);
        criteria.add(Restrictions.like("mnemonic", mnemonicPrefix + "%"));
        if (language > 0) {
            criteria.add(Restrictions.eq("language", language));
        }
        List<Snippet> snippets = getHibernateTemplate().findByCriteria(criteria);
        if (!snippets.isEmpty()) {
            List<Map<String, String>> snippetList = new ArrayList<Map<String, String>>();
            for (Snippet snippet : snippets) {
                snippetList.add(convertSnippetToMap(snippet));
            }
            return snippetList;
        }
        return Collections.emptyList();
    }

    /**
     * find snippet according to word
     *
     * @param keyword key word
     * @return snippet map list
     */
    public List<Map<String, String>> findSnippetsByWord(String keyword) {
        List<Map<String, String>> infoList = new ArrayList<Map<String, String>>();
        List<Snippet> snippetList = snippetManager.findSnippetsByWord(keyword);
        for (Snippet snippet : snippetList) {
            if (language > 0) {
                if (snippet.getLanguage() == language) {
                    infoList.add(convertSnippetToMap(snippet));
                }
            } else {
                infoList.add(convertSnippetToMap(snippet));
            }
        }
        return infoList;
    }

    /**
     * find snipet map by id
     *
     * @param id snippet id
     * @return snippet map
     */
    public Map<String, String> findMapById(Integer id) {
        Snippet snippet = snippetManager.findById(id);
        return snippet != null ? convertSnippetToMap(snippet) : null;
    }

    /**
     * update snippet
     *
     * @param info snippet info
     */
    public Integer updateSnippet(Map<String, String> info) {
        Snippet snippet;
        if (StringUtils.isEmpty(info.get("id")) || "null".equals(info.get("id"))) {
            snippet = snippetManager.construct();
            snippet.setType("0");
            snippet.setCreatedAt(new DateTime());
        } else {
            Integer id = Integer.valueOf(info.get("id"));
            snippet = snippetManager.findById(id);
        }
        snippet.setCategoryId(Integer.valueOf(info.get("categoryId")));
        snippet.setName(info.get("name"));
        snippet.setMnemonic(info.get("mnemonic"));
        snippet.setKeywords(info.get("keywords"));
        snippet.setAuthor(info.get("author"));
        if (StringUtils.isNotEmpty(info.get("language"))) {
            snippet.setLanguage(Integer.valueOf(info.get("language")));
        }
        snippet.setCode(info.get("code"));
        snippet.setDescription(info.get("description"));
        snippet.setModifiedAt(new DateTime());
        snippet.save();
        return snippet.getId();
    }

    /**
     * find root category
     *
     * @return category map list
     */
    public List<Map<String, String>> findAllCategories() {
        final List<Map<String, String>> infoList = new ArrayList<Map<String, String>>();
        String SQLSelect = "select id, name from snippet_category  where id > 1 order by name asc";
        jdbcTemplate.query(SQLSelect, new ParameterizedRowMapper<Object>() {
            public Object mapRow(ResultSet resultSet, int i) throws SQLException {
                Map<String, String> info = new HashMap<String, String>();
                info.put("id", resultSet.getString("id"));
                info.put("name", resultSet.getString("name"));
                infoList.add(info);
                return null;
            }
        });
        return infoList;
    }

    /**
     * find snippet in category
     *
     * @param categoryId category id
     * @return snippet list
     */
    public List<Map<String, String>> findSnippetsInCategory(Integer categoryId) {
        Category category = categoryManager.findById(categoryId);
        return convertSnippetToMap(category.findSnippets());
    }

    /**
     * add snippet
     *
     * @param info snippet info
     */
    public void addSnippetComment(Integer snippetId, Map<String, String> info) {
        Comment comment = new Comment();
        comment.setSubject(info.get("subject"));
        comment.setContent(info.get("content"));
        comment.setCommentator(info.get("commentator"));
        comment.setCreatedAt(new DateTime());
        Snippet snippet = snippetManager.findById(snippetId);
        snippet.addComment(comment);
    }

    /**
     * list snippet comment
     *
     * @param snippetId snippet id
     * @return comment list
     */
    public List<Map<String, String>> findSnippetComments(Integer snippetId) {
        Snippet snippet = snippetManager.findById(snippetId);
        List<Comment> comments = snippet.findComments();
        List<Map<String, String>> infoList = new ArrayList<Map<String, String>>();
        for (Comment comment : comments) {
            infoList.add(convertCommentToMap(comment));
        }
        return infoList;
    }

    /**
     * convert comment to map
     *
     * @param comment comment
     * @return map info
     */
    public Map<String, String> convertCommentToMap(Comment comment) {
        Map<String, String> info = new HashMap<String, String>();
        info.put("id", String.valueOf(comment.getId()));
        info.put("subject", comment.getSubject());
        info.put("content", comment.getContent());
        info.put("createdAt", comment.getCreatedAt().toString());
        info.put("commentator", comment.getCommentator());
        info.put("commentatorEmail", comment.getCommentatorEmail());
        return info;
    }

    /**
     * find recent add snippets
     *
     * @return find recent add snippets
     */
    public List<Map<String, String>> findRecentAddedSnippets() {
        return convertSnippetToMap(snippetManager.findRecentAddedSnippets(20));
    }

    /**
     * convert snippet list to map list
     *
     * @param snippets snippets
     * @return map list
     */
    private List<Map<String, String>> convertSnippetToMap(List<Snippet> snippets) {
        List<Map<String, String>> infoList = new ArrayList<Map<String, String>>();
        for (Snippet snippet : snippets) {
            infoList.add(convertSnippetToMap(snippet));
        }
        return infoList;
    }

    /**
     * convert snippet to map
     *
     * @param snippet snippet object
     * @return map object
     */
    private Map<String, String> convertSnippetToMap(Snippet snippet) {
        Map<String, String> info = new HashMap<String, String>();
        info.put("id", String.valueOf(snippet.getId()));
        info.put("categoryId", String.valueOf(snippet.getCategoryId()));
        info.put("name", snippet.getName());
        info.put("mnemonic", snippet.getMnemonic());
        info.put("language", String.valueOf(snippet.getLanguage()));
        info.put("author", snippet.getAuthor());
        info.put("code", snippet.getCode());
        info.put("keywords", snippet.getKeywords());
        info.put("description", snippet.getDescription());
        return info;
    }

}