1 //==============================================================================
2 // file : NewsCMD.java
3 // project: East Networks News System
4 //
5 // last change: date: $Date: 2003/09/10 09:28:37 $
6 // by: $Author: bitiboy $
7 // revision: $Revision: 1.1 $
8 //------------------------------------------------------------------------------
9 // copyright: GNU GPL Software License (see class documentation)
10 //==============================================================================
11 package net.eastol.news.command;
12
13
14 /*
15 * $Id: NewsCMD.java,v 1.1 2003/09/10 09:28:37 bitiboy Exp $
16 *
17 * Copyright 2003 Acai Software All Rights Reserved.
18 *
19 * This file NewsCMD.java is part of the East Networks News System.
20
21 * The East Networks News System is free software; you can redistribute it and/or modify
22 * it under the terms of the GNU General Public License as published by
23 * the Free Software Foundation; either version 2 of the License, or
24 * (at your option) any later version.
25
26 * East Networks News System is distributed in the hope that it will be useful,
27 * but WITHOUT ANY WARRANTY; without even the implied warranty of
28 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
29 * GNU General Public License for more details.
30
31 * You should have received a copy of the GNU General Public License
32 * along with the East Networks News System; if not, write to the Free Software
33 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
34
35 * http://www.justhis.com http://ejb.cn
36 * CONTACT: email = webmaster@justhis.com superaxis@sohu.com
37 */
38 import com.justhis.jdo.JDOUtil;
39
40 import com.justhis.jibx.JibxUtil;
41
42 import com.justhis.lucene.LuceneException;
43 import com.justhis.lucene.xml.IndexFiles;
44
45 import com.justhis.util.exception.LogicException;
46 import com.justhis.util.exception.UtilException;
47
48 import net.eastol.news.common.CommonCommand;
49 import net.eastol.news.jdo.bean.NewsBean;
50 import net.eastol.news.jdo.bean.NewsBeanBase;
51 import net.eastol.news.jdo.bean.NewsClass;
52 import net.eastol.news.jdo.bean.NewsSys;
53 import net.eastol.news.jibx.bean.NewsCommonXML;
54 import net.eastol.news.jibx.bean.PageBean;
55
56 import org.apache.lucene.analysis.Analyzer;
57 import org.apache.lucene.analysis.standard.StandardAnalyzer;
58 import org.apache.lucene.document.Document;
59 import org.apache.lucene.queryParser.ParseException;
60 import org.apache.lucene.queryParser.QueryParser;
61 import org.apache.lucene.search.Hits;
62 import org.apache.lucene.search.IndexSearcher;
63 import org.apache.lucene.search.Searcher;
64
65 import org.jibx.runtime.JiBXException;
66
67 import java.io.FileNotFoundException;
68 import java.io.IOException;
69
70 import java.sql.SQLException;
71
72 import java.util.ArrayList;
73 import java.util.Collection;
74 import java.util.Collections;
75 import java.util.Date;
76 import java.util.Iterator;
77
78 import javax.jdo.Extent;
79 import javax.jdo.Query;
80 import javax.jdo.Transaction;
81
82 import javax.servlet.ServletException;
83
84
85 /***
86 * TODO DOCUMENT ME!
87 *
88 * @author <a href="http://blog.ejb.cn">acai</a>
89 * @version $Revision $
90 */
91 public class NewsCMD extends CommonCommand {
92 //~ Static fields/initializers ---------------------------------------------
93
94 /***
95 * @see com.justhis.control.Command#getName()
96 */
97 /*** TODO */
98 private static String indexPath = "index";
99
100 //~ Instance fields --------------------------------------------------------
101
102 /*** TODO */
103 int perPage = 0;
104
105 //~ Methods ----------------------------------------------------------------
106
107 /***
108 * TODO
109 *
110 * @return TODO
111 */
112 public String getName() {
113 return null;
114 }
115
116 /***
117 * @see com.justhis.control.Command#execute()
118 */
119 public String execute()
120 throws LogicException, SQLException, ServletException,
121 UtilException {
122 indexPath = warPath + "/WEB-INF/index";
123 perPage = this.getSystemConfig().getPageSize();
124
125 if ("AddNews".equals(action)) {
126 addNews();
127 } else if ("AddNewsForm".equals(action)) {
128 showAddNewsForm();
129 } else if ("AdminNews".equals(action)) {
130 showNewsList();
131 } else if ("Default".equals(action)) {
132 showDefaultPage();
133 } else if ("ShowNews".equals(action)) {
134 return showNewsById();
135 } else if ("ShowClass".equals(action)) {
136 showClassById();
137 } else if ("Search".equals(action)) {
138 try {
139 searchNews();
140 } catch (LuceneException e) {
141 throw new UtilException(e.getMessage(), e);
142 }
143 }
144
145 return null;
146 }
147
148 /***
149 * @return TODO
150 */
151 private Collection getClassList()
152 throws UtilException, SQLException, LogicException {
153 NewsSys ns = (NewsSys) JDOUtil.findObjectById(this.getPM(),
154 NewsSys.class, systemOID
155 );
156
157 return ns.getClassList();
158 }
159
160 /***
161 * TODO
162 *
163 * @param oidStr TODO
164 * @param order TODO
165 *
166 * @return TODO
167 *
168 * @throws UtilException TODO
169 * @throws SQLException TODO
170 * @throws LogicException TODO
171 */
172 private Collection getNewsList(String oidStr, String order)
173 throws UtilException, SQLException, LogicException {
174 Collection c = JDOUtil.findObjList(getPM(), NewsBean.class, order);
175
176 return c;
177 }
178
179 /***
180 * TODO
181 *
182 * @param oidStr TODO
183 * @param order TODO
184 * @param filter TODO
185 *
186 * @return TODO
187 *
188 * @throws UtilException TODO
189 * @throws SQLException TODO
190 * @throws LogicException TODO
191 */
192 private Collection getNewsList(String oidStr, String order, String filter)
193 throws UtilException, SQLException, LogicException {
194 Collection c = JDOUtil.findObjList(getPM(), NewsBean.class, order,
195 filter
196 );
197
198 return c;
199 }
200
201 /***
202 * @param object
203 * @param string
204 *
205 * @return TODO
206 */
207 private Collection getNewsListByClassId(String classId, String order)
208 throws SQLException, LogicException {
209 Class newsClass = NewsBean.class;
210 pm = this.getPM();
211
212 Extent newsBeans = pm.getExtent(newsClass, false);
213 String filter = "newsClassId == classObjId";
214 String param = "String classObjId";
215 Query q = pm.newQuery(newsBeans, filter);
216 q.declareParameters(param);
217 q.setOrdering(order);
218
219 Collection newsList = (Collection) q.execute(classId);
220
221 return newsList;
222 }
223
224 /***
225 * TODO DOCUMENT ME!
226 *
227 * @throws SQLException TODO
228 * @throws LogicException TODO
229 * @throws UtilException TODO
230 * @throws ServletException TODO
231 */
232 private void addNews()
233 throws SQLException, LogicException, UtilException,
234 ServletException {
235 NewsBean nb = new NewsBean();
236
237 nb.setKey(xp.getProperty("Key"));
238
239 nb.setSummary(xp.getProperty("Summary"));
240
241 nb.setFrom(xp.getProperty("Source"));
242 nb.setTitleImg(xp.getProperty("TitleImg"));
243 nb.setTopicId(xp.getIntProperty("TopicID"));
244
245 nb.setClassId(xp.getProperty("ClassID"));
246 nb.setNClassId(xp.getProperty("NClassID"));
247 nb.setAuthor(xp.getProperty("Author"));
248 nb.setTitle(xp.getProperty("Title"));
249 nb.setContent(xp.getProperty("Body"));
250
251 nb.setHtml(xp.getBooleanProperty("Htmlable"));
252 System.out.println("HTMLBooean================="
253 + xp.getBooleanProperty("Htmlable")
254 );
255 nb.setHeadLine(xp.getBooleanProperty("Headline"));
256 System.out.println("HeadLineBooean================="
257 + xp.getBooleanProperty("Headline")
258 );
259
260 nb.setHighlight(xp.getBooleanProperty("HighLight"));
261
262 nb.setDate(new Date());
263
264 nb.setKeyNewsList(this.findKeyNewsList(xp.getProperty("Key")));
265
266 Transaction trans = getTransaction();
267 trans.begin();
268
269 //ArrayList ans.getClassList();
270 JDOUtil.createObject(trans, nb);
271 trans.commit();
272 this.printNewsData(nb);
273
274 /***
275 * ????????????
276 */
277 try {
278 IndexFiles.addDocument(indexPath,
279 warPath + "/xml/" + nb.getObjectId()
280 + ".xml"
281 );
282 } catch (LuceneException e) {
283 throw new UtilException(e.getMessage(), e);
284 }
285
286 showSuccessNewsForm();
287 }
288
289 /***
290 * @param doc
291 *
292 * @return TODO
293 */
294 private NewsBeanBase doc2NewsBeanBase(Document doc) {
295 NewsBeanBase nb = new NewsBeanBase();
296
297 nb.setAuthor(doc.get("author"));
298 nb.setTitle(doc.get("title"));
299 nb.setObjectId(doc.get("objectId"));
300
301 //nb.setDate(doc.get("date"));
302 return nb;
303 }
304
305 /***
306 * @param string
307 *
308 * @return TODO
309 */
310 private ArrayList findKeyNewsList(String key)
311 throws SQLException, LogicException {
312 pm = this.getPM();
313
314 Extent newsBeans = pm.getExtent(NewsBean.class, false);
315 String filter = " title==key";
316 String param = "String key";
317 Query q = pm.newQuery(newsBeans, filter);
318 q.declareParameters(param);
319 q.setOrdering("date descending");
320
321 Collection newsList = (Collection) q.execute(key);
322 int size = newsList.size();
323
324 if (size == 0) {
325 return null;
326 }
327
328 if (size > 10) {
329 size = 10;
330 } else {
331 return new ArrayList(newsList);
332 }
333
334 return new ArrayList(new ArrayList(newsList).subList(0, size));
335 }
336
337 /***
338 *
339 */
340 private void printNewsData(NewsBean nb) throws UtilException {
341 try {
342 JibxUtil.marshallDocument(nb, "../xsl/Show.xsl",
343 warPath + "/xml/" + nb.getObjectId()
344 + ".xml"
345 );
346 } catch (FileNotFoundException e) {
347 throw new UtilException(e.getMessage(), e);
348 } catch (JiBXException e) {
349 throw new UtilException(e.getMessage(), e);
350 }
351 }
352
353 /***
354 * TODO DOCUMENT ME!
355 *
356 * @throws LuceneException TODO
357 * @throws ServletException TODO
358 * @throws UtilException TODO
359 */
360 private void searchNews()
361 throws LuceneException, ServletException, UtilException {
362 Searcher searcher = null;
363
364 try {
365 String keyWords = xp.getProperty("keyword");
366 Collection c = Collections.synchronizedList(new ArrayList());
367
368 searcher = new IndexSearcher(indexPath);
369
370 Analyzer analyzer = new StandardAnalyzer();
371
372 org.apache.lucene.search.Query query = QueryParser.parse("title:\""
373 + keyWords
374 + "\" "
375 + keyWords,
376 "content",
377 analyzer
378 );
379 System.out.println("Searching for: " + query.toString());
380
381 Hits hits = searcher.search(query);
382 System.out.println(hits.length() + " total matching documents");
383
384 int currentPage = xp.getIntProperty("currentPage");
385
386 if (currentPage <= 0) {
387 currentPage = 1;
388 }
389
390 PageBean pb = new PageBean();
391 pb.setRecordSize(hits.length());
392 pb.setCurrentPage(currentPage);
393
394 int start = (currentPage - 1) * perPage;
395
396 int end = Math.min(hits.length(), start + perPage);
397
398 for (int i = start; i < end; i++) {
399 Document doc = hits.doc(i);
400
401 c.add(doc2NewsBeanBase(doc));
402 }
403
404 NewsCommonXML ncx = new NewsCommonXML();
405 ncx.setNewsCollection(c);
406 ncx.setMsg(keyWords);
407 ncx.setPageBean(pb);
408
409 this.go(ncx, "Search.xsl");
410 } catch (IOException e) {
411 throw new LuceneException(e.getMessage(), e);
412 } catch (ParseException e) {
413 throw new LuceneException(e.getMessage(), e);
414 } finally {
415 if (searcher != null) {
416 try {
417 searcher.close();
418 } catch (IOException e1) {
419 }
420 }
421 }
422 }
423
424 /***
425 * TODO DOCUMENT ME!
426 *
427 * @throws ServletException TODO
428 * @throws UtilException TODO
429 * @throws SQLException TODO
430 * @throws LogicException TODO
431 */
432 private void showAddNewsForm()
433 throws ServletException, UtilException, SQLException,
434 LogicException {
435 NewsSys ns = (NewsSys) JDOUtil.findObjectById(this.getPM(),
436 NewsSys.class, systemOID
437 );
438 NewsCommonXML ncx = new NewsCommonXML();
439
440 ncx.setClassCollection(ns.getClassList());
441 this.go(ncx, "AdminArticleAdd.xsl");
442 }
443
444 /***
445 * TODO DOCUMENT ME!
446 *
447 * @throws ServletException TODO
448 * @throws UtilException TODO
449 * @throws SQLException TODO
450 * @throws LogicException TODO
451 */
452 private void showClassById()
453 throws ServletException, UtilException, SQLException,
454 LogicException {
455 NewsCommonXML ncx = new NewsCommonXML();
456 String classId = xp.getProperty("objectId");
457 ncx.setDayHotNews(getNewsListByClassId(classId, "dayHits descending"));
458 ncx.setHotNews(getNewsListByClassId(classId, "hits descending"));
459
460 Collection c = getNewsListByClassId(classId, "date descending");
461
462 ArrayList newsList = new ArrayList(c);
463
464 int currentPage = xp.getIntProperty("currentPage");
465
466 if (currentPage <= 0) {
467 currentPage = 1;
468 }
469
470 PageBean pb = new PageBean();
471 pb.setRecordSize(newsList.size());
472 pb.setCurrentPage(currentPage);
473
474 int startId = (currentPage - 1) * perPage;
475 newsList = new ArrayList(newsList.subList(startId,
476 ((newsList.size() > (startId
477 + perPage))
478 ? (startId + perPage)
479 : newsList.size())
480 )
481 );
482
483 ncx.setNewsCollection(newsList);
484
485 //ncx.setClassCollection(this.getClassList());
486 ncx.setPageBean(pb);
487 this.go(ncx);
488 }
489
490 /***
491 * TODO DOCUMENT ME!
492 *
493 * @throws UtilException TODO
494 * @throws SQLException TODO
495 * @throws LogicException TODO
496 * @throws ServletException TODO
497 */
498 private void showDefaultPage()
499 throws UtilException, SQLException, LogicException,
500 ServletException {
501 NewsCommonXML ncx = new NewsCommonXML();
502 ncx.setDayHotNews(getNewsList(null, "dayHits descending"));
503 ncx.setWeekHotNews(getNewsList(null, "weekHits descending"));
504 ncx.setHotNews(getNewsList(null, "hits descending"));
505 ncx.setHeadLineNews(getNewsList(null, null, "headLine==true"));
506
507 Collection classC = getClassList();
508
509 //ncx.setClassCollection(classC);
510 Iterator classIt = classC.iterator();
511
512 while (classIt.hasNext()) {
513 NewsClass nc = (NewsClass) classIt.next();
514
515 ncx.addNewsCollection(getNewsListByClassId(nc.getObjectId(),
516 "date descending"
517 )
518 );
519 }
520
521 this.go(ncx);
522 }
523
524 /***
525 * TODO DOCUMENT ME!
526 *
527 * @return TODO
528 *
529 * @throws ServletException TODO
530 * @throws UtilException TODO
531 * @throws SQLException TODO
532 * @throws LogicException TODO
533 */
534 private String showNewsById()
535 throws ServletException, UtilException, SQLException,
536 LogicException {
537 NewsCommonXML ncx = new NewsCommonXML();
538 Transaction trans = getTransaction();
539 trans.begin();
540
541 NewsBean nb = (NewsBean) JDOUtil.findObjectById(trans, NewsBean.class,
542 xp.getProperty("objectId")
543 );
544 nb.setHits(nb.getHits() + 1);
545
546 System.out.println("News now hits is " + nb.getHits());
547 ncx.setNews(nb);
548 trans.commit();
549
550 String path = "/xml/" + nb.getObjectId() + ".xml";
551 System.out.println(path);
552
553 //this.printNewsData(nb);
554 return path;
555
556 //this.go(ncx);
557 }
558
559 /***
560 * TODO DOCUMENT ME!
561 *
562 * @throws ServletException TODO
563 * @throws UtilException TODO
564 * @throws SQLException TODO
565 * @throws LogicException TODO
566 */
567 private void showNewsList()
568 throws ServletException, UtilException, SQLException,
569 LogicException {
570 NewsCommonXML ncx = new NewsCommonXML();
571
572 ncx.setNewsCollection(JDOUtil.findObjList(this.getPM(), NewsBean.class));
573 this.go(ncx);
574 }
575
576 /***
577 * TODO
578 *
579 * @throws ServletException TODO
580 * @throws UtilException TODO
581 * @throws SQLException TODO
582 * @throws LogicException TODO
583 */
584 private void showSuccessNewsForm()
585 throws ServletException, UtilException,
586 SQLException, LogicException {
587 NewsSys ns = (NewsSys) JDOUtil.findObjectById(this.getPM(),
588 NewsSys.class, systemOID
589 );
590 NewsCommonXML ncx = new NewsCommonXML();
591 ncx.setMsg("Successful!");
592 ncx.setClassCollection(ns.getClassList());
593 this.go(ncx, "AdminArticleAdd.xsl");
594 }
595 }
596
597
598 /*
599 * $Log: NewsCMD.java,v $
600 * Revision 1.1 2003/09/10 09:28:37 bitiboy
601 * *** empty log message ***
602 *
603 *
604 */
This page was automatically generated by Maven