File Source: RebuildWebsiteIndexOperation.java
1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. The ASF licenses this file to You
4 * under the Apache License, Version 2.0 (the "License"); you may not
5 * use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License. For additional information regarding
15 * copyright in this work, please see the NOTICE file in the top level
16 * directory of this distribution.
17 */
18 /* Created on Jul 16, 2003 */
19 package org.apache.roller.weblogger.business.search.operations;
20
21 import java.io.IOException;
22 import java.text.MessageFormat;
23 import java.util.Date;
24 import java.util.Iterator;
25 import java.util.List;
26
27 import org.apache.commons.logging.Log;
28 import org.apache.commons.logging.LogFactory;
29 import org.apache.lucene.index.IndexReader;
30 import org.apache.lucene.index.IndexWriter;
31 import org.apache.lucene.index.Term;
32 import org.apache.roller.weblogger.WebloggerException;
33 import org.apache.roller.weblogger.business.search.IndexManagerImpl;
34 import org.apache.roller.weblogger.business.search.FieldConstants;
35 import org.apache.roller.weblogger.business.search.IndexUtil;
36 import org.apache.roller.weblogger.business.Weblogger;
37 import org.apache.roller.weblogger.business.UserManager;
38 import org.apache.roller.weblogger.business.WeblogManager;
39 import org.apache.roller.weblogger.pojos.WeblogEntry;
40 import org.apache.roller.weblogger.pojos.Weblog;
41
42 /**
43 * An index operation that rebuilds a given users index (or all indexes).
44 * @author Mindaugas Idzelis (min@idzelis.com)
45 */
46 public class RebuildWebsiteIndexOperation extends WriteToIndexOperation {
47
48 //~ Static fields/initializers =============================================
49
/*
P/P * Method: org.apache.roller.weblogger.business.search.operations.RebuildWebsiteIndexOperation__static_init
*
* Presumptions:
* org.apache.commons.logging.LogFactory:getFactory(...)@50 != null
*
* Postconditions:
* init'ed(mLogger)
*/
50 private static Log mLogger =
51 LogFactory.getFactory().getInstance(RebuildWebsiteIndexOperation.class);
52
53 //~ Instance fields ========================================================
54
55 private Weblog website;
56 private Weblogger roller;
57
58 //~ Constructors ===========================================================
59
60 /**
61 * Create a new operation that will recreate an index.
62 *
63 * @param website The website to rebuild the index for, or null for all users.
64 */
65 public RebuildWebsiteIndexOperation(Weblogger roller, IndexManagerImpl mgr, Weblog website) {
/*
P/P * Method: void org.apache.roller.weblogger.business.search.operations.RebuildWebsiteIndexOperation(Weblogger, IndexManagerImpl, Weblog)
*
* Postconditions:
* this.manager == mgr
* init'ed(this.manager)
* this.roller == roller
* init'ed(this.roller)
* this.website == website
* init'ed(this.website)
*/
66 super(mgr);
67 this.roller = roller;
68 this.website = website;
69 }
70
71 //~ Methods ================================================================
72
73 public void doRun() {
/*
P/P * Method: void doRun()
*
* Preconditions:
* mLogger != null
* init'ed(this.website)
* (soft) init'ed(this.reader)
* (soft) init'ed(this.writer)
* (soft) org/apache/roller/weblogger/business/WebloggerImpl.log != null
* (soft) org/apache/roller/weblogger/business/search/IndexManagerImpl.mLogger != null
* (soft) org/apache/roller/weblogger/business/search/operations/IndexOperation.mLogger != null
* (soft) org/apache/roller/weblogger/config/WebloggerConfig.config != null
* (soft) org/apache/roller/weblogger/config/WebloggerConfig.log != null
* (soft) this.manager != null
* ...
*
* Presumptions:
* java.util.Iterator:next(...)@134 != null
* javax.persistence.Query:getResultList(...)@645 != null
* weblogManager.strategy.emf@113 != null
* weblogManager.strategy.threadLocalEntityManager@113 != null
* weblogManager.strategy@113 != null
*
* Postconditions:
* init'ed(this.reader)
* init'ed(this.website)
* this.writer == One-of{old this.writer, &new IndexWriter(beginWriting#1)}
* init'ed(this.writer)
* new IndexWriter(beginWriting#1) num objects <= 1
*
* Test Vectors:
* this.website: Addr_Set{null}, Inverse{null}
* java.util.Iterator:hasNext(...)@133: {0}, {1}
*/
74 Date start = new Date();
75
76 // since this operation can be run on a separate thread we must treat
77 // the weblog object passed in as a detached object which is proned to
78 // lazy initialization problems, so requery for the object now
79 if(this.website != null) {
80 try {
81 UserManager uMgr = roller.getUserManager();
82 this.website = uMgr.getWebsite(this.website.getId());
83 } catch (WebloggerException ex) {
84 mLogger.error("Error getting website object", ex);
85 return;
86 }
87 }
88
89 IndexReader reader = beginDeleting();
90
91 try {
92 if (reader != null) {
93 Term tWebsite = null;
94 if (website != null) {
95 tWebsite = IndexUtil.getTerm(
96 FieldConstants.WEBSITE_HANDLE, website.getHandle());
97 }
98 if (tWebsite != null) {
99 reader.delete(tWebsite);
100 } else {
101 Term all =
102 IndexUtil.getTerm(FieldConstants.CONSTANT,
103 FieldConstants.CONSTANT_V);
104 reader.delete(all);
105 }
106 }
107 } catch (IOException e) {
108 mLogger.info("Problems deleting doc from index", e);
109 } finally {
110 endDeleting();
111 }
112
113 IndexWriter writer = beginWriting();
114
115 try {
116 if (writer != null) {
117 WeblogManager weblogManager = roller.getWeblogManager();
118
119
120 List entries = weblogManager .getWeblogEntries(
121
122 website, // website
123 null,
124 null, // startDate
125 null, // endDate
126 null, // catName
127 null,WeblogEntry.PUBLISHED, // status
128 null, // text
129 null, // sortby (null means pubTime)
130 null,
131 null,
132 0, -1); // offset, length, locale
133 for (Iterator wbItr = entries.iterator(); wbItr.hasNext();) {
134 WeblogEntry entry = (WeblogEntry) wbItr.next();
135 writer.addDocument(getDocument(entry));
136 mLogger.debug(
137 MessageFormat.format("Indexed entry {0}: {1}",
138 new Object[] {entry.getPubTime(), entry.getAnchor()}));
139 }
140 // release the database connection
141 roller.release();
142 }
143 } catch (Exception e) {
144 mLogger.error("ERROR adding doc to index", e);
145 } finally {
146 endWriting();
147 if (roller != null) roller.release();
148 }
149
150 Date end = new Date();
151 double length = (end.getTime() - start.getTime()) / (double) 1000;
152
153 if (website == null) {
154 mLogger.info(
155 "Completed rebuilding index for all users in '" + length + "' secs");
156 } else {
157 mLogger.info("Completed rebuilding index for website handle: '" +
158 website.getHandle() + "' in '" + length + "' seconds");
159 }
160 }
161 }
SofCheck Inspector Build Version : 2.18479
| RebuildWebsiteIndexOperation.java |
2009-Jan-02 14:25:38 |
| RebuildWebsiteIndexOperation.class |
2009-Sep-04 03:12:31 |