⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 articleserviceimpl.java

📁 版本信息:Jaoso新闻文章发布系统 0.9.1beta1 原POPTEN新闻发布系统现更名为Jaoso,不兼容popten,目前不提供popten升级Jaoso的程序.
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        ? " and article.artTitle like ? " : "");

        //sqlStr += ((StringUtils.isNotEmpty(catalog) && (catalog.trim().length() > 10)) ? " and article.catalog like ? " : "");
        MyQuery query = new MyQuery();

        if (StringUtils.isNotEmpty(title)) {
            query.addPara("%" + title + "%", Types.VARCHAR);
        }

        if (StringUtils.isNotEmpty(catalog)) {
            // query.addPara(catalog, Types.VARCHAR);
            Collection catalogs = new ArrayList();
            catalogs = getSubCatalogs(catalogs, catalog);
            sqlStr += (" and article.catalog in ('" +
            MyUtils.join("','", catalogs) + "') ");
        }

        if (StringUtils.isNotEmpty(status)) {
            sqlStr += (" and article.artStatus='" + status + "' ");
        }

        if (StringUtils.isNotEmpty(order)) {
            if (order.trim().equalsIgnoreCase("author")) {
                query.setOrderby(" order by article.author " + sort);
            } else if (order.trim().equalsIgnoreCase("catalog")) {
                query.setOrderby(" order by article.catalog " + sort);
            } else if (order.trim().equalsIgnoreCase("lastdate")) {
                query.setOrderby(" order by article.artLastdate " + sort);
            } else if (order.trim().equalsIgnoreCase("count")) {
                query.setOrderby(" order by article.artCount " + sort);
            } else if (order.trim().equalsIgnoreCase("title")) {
                query.setOrderby(" order by article.artTitle " + sort);
            } else {
                query.setOrderby(" order by article.artLastdate " + sort);
            }
        } else {
            query.setOrderby(" order by article.artLastdate desc");
        }

        if (StringUtils.isNumeric(page)) {
            query.setPageStartNo(Integer.parseInt(page));
        }

        query.setQueryString(sqlStr);
        ls = articleDAO.findArticle(query);

        return ls;
    }

    /**
     * DOCUMENT ME!
     *
     * @return DOCUMENT ME!
     */
    public final Article[] findAll() {
        return articleDAO.findAllArticle();
    }

    /**
    * Load a Article by name from Database
    * @return a Article instance
    * @param articleName String
    * @throws BuisnissException
    */
    public final Article findByName(final String name) {
        return articleDAO.getArticleByDesc(name);
    }

    /**
    * Remove a Article from Database
    *
    * @param ids article id array
    */
    public final void removeArticle(final Serializable[] ids) {
        for (int i = 0, n = ids.length; i < n; i++) {
            indexer.unIndex(getArticle(ids[i]));
            articleDAO.removeArticle(ids[i]);
            FileUtils.removeDir((String) ids[i]);
        }
    }

    /**
     * (non-Javadoc)
     * @see jaoso.news.service.ArticleService#removeCritic(java.io.Serializable[])
     */
    public final void removeCritic(final Serializable[] arg) {
        Article article;
        Critic critic;

        for (int i = 0, n = arg.length; i < n; i++) {
            critic = criticDAO.getCritic(arg[i]);
            article = critic.getArticle();
            article.getCritics().remove(critic);
            articleDAO.updateArticle(article);
        }
    }

    /**
     * (non-Javadoc)
     * @see jaoso.news.service.ArticleService#search(java.lang.String)
     */
    public final Article[] search(final String[] query) {
        String[] fields = { "title", "content" };
        Collection idList = SearchUtil.toIdList(searcher.search(fields, query[0]),
                Article.class.getName());

        if ((idList == null) || (idList.size() < 1)) {
            return null;
        }

        String queryString = "from Article a where a.artId in ('" +
            MyUtils.join("','", idList) + "')";
        MyQuery myquery = new MyQuery();
        myquery.setQueryString(queryString);
        myquery.setPageStartNo(Integer.parseInt(query[1]));

        Article[] result = articleDAO.findArticle(myquery);

        return result;
    }

    /**
     * (non-Javadoc)
     * @see jaoso.news.service.ArticleService#updateArticle(jaoso.news.domain.Article, java.util.Collection)
     */
    public final void updateArticle(final Article article,
        final Collection upLoadFiles) throws ArticleExistException {
        if (articleDAO.isExist(article.getArtTitle(), article.getArtId())) {
            throw new ArticleExistException("article already exist!");
        }

        Article po = articleDAO.getArticle(article.getArtId());
        article.setArtCount(po.getArtCount());

        try {
            MyBeanUtils.copyProperties(po, article);
        } catch (IllegalAccessException e) {
            log.error("updateArticle error: ", e);

            return;
        } catch (InvocationTargetException e) {
            log.error("updateArticle error: ", e);

            return;
        }

        Catalog catalog = catalogDAO.getCatalog(po.getCatalog().getCatalogId());

        if (!catalog.getArticles().contains(po)) {
            catalog.getArticles().add(po);
        }

        doFile(po, upLoadFiles);
        articleDAO.updateArticle(po);
        indexer.index(article);
    }

    /**
     * (non-Javadoc)
     * @see jaoso.news.service.ArticleService#viewArticle(java.io.Serializable)
     */
    public final Article viewArticle(final Serializable id) {
        Article article = articleDAO.getArticle(id);
        article.setArtCount(article.getArtCount() + 1);
        articleDAO.updateArticle(article);

        return article;
    }

    /**
     * 获得给定目录的子目录,如果子目录有子目录则递归调用直到没有为止.
     *
     * @param catalogs 放目录id的集合对象
     * @param id 指定目录的id
     *
     * @return 子目录id集合
     */
    private Collection getSubCatalogs(final Collection catalogs,
        final Serializable id) {
        if (!catalogs.contains(id)) {
            catalogs.add(id);
        }

        Catalog catalog = catalogDAO.getCatalog(id);
        Collection subcatalogs = catalog.getChildren();

        if (!MyUtils.isBlank(subcatalogs)) {
            for (Iterator i = subcatalogs.iterator(); i.hasNext();) {
                catalog = (Catalog) i.next();

                if (!MyUtils.isBlank(catalog.getChildren())) {
                    getSubCatalogs(catalogs, catalog.getCatalogId());
                } else {
                    if (!catalogs.contains(catalog.getCatalogId())) {
                        catalogs.add(catalog.getCatalogId());
                    }
                }
            }
        }

        return catalogs;
    }

    /**
     * DOCUMENT ME!
     *
     * @param art DOCUMENT ME!
     * @param upLoadFiles DOCUMENT ME!
     */
    private void doFile(final Article art, final Collection upLoadFiles) {
        //图片新路径
        String fileName = "";

        //原图片路径
        String imgsrc = "";

        //要上传或下载的图片
        Collection images;

        //所有图片的新路径
        Map newImages = new HashMap();

        //上传的图片
        FormFile upfile = null;
        String artContent = art.getArtContent();

        //找出要上传或下载的图片
        images = parseImage(artContent);

        int i = 0;

        for (Iterator it = images.iterator(); it.hasNext();) {
            imgsrc = (String) it.next();
            log.info("imgsrc: " + imgsrc);

            if (imgsrc.indexOf("http") != -1) {
                fileName = imgsrc;

                while (fileName.indexOf(".") != -1) {
                    fileName = fileName.substring((fileName.indexOf(".") + 1),
                            fileName.length());
                }

                fileName = art.getArtId() + "/" +
                    RandomStringUtils.randomAlphanumeric(12) + "." + fileName;

                //下载文件
                downLoadFile(imgsrc, fileName);
                fileName = "pages/upload/" + fileName;

                //替换文章内容的图片路径为新路径
                artContent = StringUtils.replace(artContent, imgsrc, fileName);

                //如果是图片新闻,保存图片路径
                if (!MyUtils.isBlank(art.getArtImage()) && (i++ == 0) &&
                        art.getArtImage().equalsIgnoreCase("Y")) {
                    art.setImageSrc(fileName);
                }
            } else {
                for (Iterator it2 = upLoadFiles.iterator(); it2.hasNext();) {
                    upfile = (FormFile) it2.next();

                    if (!MyUtils.isBlank(upfile.getFileName()) &&
                            (imgsrc.indexOf(upfile.getFileName()) != -1)) {
                        upLoadFiles.remove(upfile);

                        break;
                    }
                }

                if ((upfile == null) || MyUtils.isBlank(upfile.getFileName())) {
                    continue;
                }

                fileName = art.getArtId() + "/" +
                    RandomStringUtils.randomAlphanumeric(12) +
                    upfile.getFileName().substring(upfile.getFileName().indexOf("."),
                        upfile.getFileName().length());

                //上传文件
                upLoadFile(upfile, fileName);
                fileName = "pages/upload/" + fileName;

                //替换文章内容的图片路径为新路径
                artContent = StringUtils.replace(artContent, imgsrc, fileName);

                //如果是图片新闻,保存图片路径
                if (!MyUtils.isBlank(art.getArtImage()) && (i++ == 0) &&
                        art.getArtImage().equalsIgnoreCase("Y")) {
                    art.setImageSrc(fileName);
                }
            }
        }

        //保存处理完图片的文章内容
        art.setArtContent(artContent);
    }

    //end method

    /**
     * DOCUMENT ME!
     *
     * @param url DOCUMENT ME!
     * @param fileName DOCUMENT ME!
     */
    private void downLoadFile(final String url, final String fileName) {
        log.info("download file");

        URL uri = null;
        InputStream stream = null;

        try {
            uri = new URL(url);
            stream = uri.openStream();
            FileUtils.writeFile(stream, fileName);
        } catch (MalformedURLException e) {
            log.error("downLoadFile error: " + e);
        } catch (IOException e) {
            log.error("downLoadFile error: " + e);
        }
    }

    /**
     * DOCUMENT ME!
     *
     * @param html DOCUMENT ME!
     *
     * @return DOCUMENT ME!
     */
    private Collection parseImage(final String html) {
        Collection images = new ArrayList();

        try {
            Parser parser = new Parser();
            parser.setInputHTML(html);

            Node[] nodes = parser.extractAllNodesThatAre(ImageTag.class);

            for (int i = 0; i < nodes.length; i++) {
                ImageTag imageTag = (ImageTag) nodes[i];

                if ((imageTag.getImageURL().indexOf("http://") != -1) &&
                        (imageTag.getImageURL().indexOf("pages/upload") == -1)) {
                    images.add(imageTag.getImageURL());
                }

                if (imageTag.getImageURL().indexOf("file://") != -1) {
                    images.add(imageTag.getImageURL());
                }
            }
        } catch (ParserException e) {
            log.error("parseImage error: " + e);
        }

        return images;
    }

    /**
     * DOCUMENT ME!
     *
     * @param upfile DOCUMENT ME!
     * @param fileName DOCUMENT ME!
     */
    private void upLoadFile(final FormFile upfile, final String fileName) {
        try {
            log.info("upload file");
            FileUtils.writeFile(upfile.getInputStream(), fileName);
        } catch (FileNotFoundException e) {
            log.error("upLoadFile error: " + e);
        } catch (IOException e) {
            log.error("upLoadFile error: " + e);
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -