/* * Copyright 2005-2008 the original author or authors. * * Licensed 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 org.openuap.cms.search.index.impl; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.openuap.cms.core.event.PublishEvent; import org.openuap.cms.repo.event.ContentIndexEvent; import org.openuap.cms.repo.model.ContentIndex; import org.openuap.cms.search.index.IndexEngine; import org.openuap.cms.search.index.IndexParameter; import org.openuap.cms.search.index.dao.IndexDao; import org.springframework.context.ApplicationEvent; import org.springframework.context.ApplicationListener; /** * <p> * 缺省索引引擎实现. * </p> * * <p> * $Id: DefaultIndexEngineImpl.java 4026 2011-03-22 14:58:42Z orangeforjava $ * </p> * * @author Joseph * @version 1.0 */ public class DefaultIndexEngineImpl implements IndexEngine, ApplicationListener { private IndexDao indexDao; /** * TODO 未进行错误处理以及增量支持 */ public void addIndexContent(IndexParameter parameter, List errors) { // int mode = parameter.getMode(); if (mode == parameter.SINGLE_MODE) { // 非按照模型模式 String indexIds = parameter.getIndexIds(); if (indexIds != null && !indexIds.equals("")) { String[] ids = indexIds.split(","); int size = ids.length; for (int i = 0; i < size; i++) { String id = ids[i]; Long iid = new Long(id); indexDao.indexContent(iid); } } } else { //按照内容表方式 String modelIds = parameter.getModelIds(); if (modelIds != null && !modelIds.equals("")) { String[] mids = modelIds.split(","); int size = mids.length; for (int i = 0; i < size; i++) { String mid = mids[i]; Long tid = new Long(mid); indexDao.indexContentByTable(tid); } } } } public void deleteIndexContent(IndexParameter parameter, List errors) { int mode = parameter.getMode(); if (mode == parameter.SINGLE_MODE) { String indexIds = parameter.getIndexIds(); if (indexIds != null && !indexIds.equals("")) { String[] ids = indexIds.split(","); int size = ids.length; for (int i = 0; i < size; i++) { String id = ids[i]; Long iid = new Long(id); indexDao.deleteIndexContent(iid); } } } } public void setIndexDao(IndexDao indexDao) { this.indexDao = indexDao; } /** * 处理事件 */ public void onApplicationEvent(ApplicationEvent event) { if (event instanceof PublishEvent) { PublishEvent pEvent = (PublishEvent) event; Map publish = pEvent.getPublish(); int eventType = pEvent.getEventType(); Long indexId = (Long) publish.get("indexId"); if (eventType == PublishEvent.CONTENT_PUBLISHED) { // 发布事件 //System.out.println("-------------------------"); //System.out.println("PublishEvent indexId="+indexId); //System.out.println("-------------------------"); IndexParameter p = new IndexParameter(); p.setMode(IndexParameter.SINGLE_MODE); p.setIndexIds(indexId.toString()); List errors = new ArrayList(); this.addIndexContent(p, errors); } else if (eventType == PublishEvent.CONTENT_UNPUBLISHED) { // 取消发布事件 IndexParameter p = new IndexParameter(); p.setMode(IndexParameter.SINGLE_MODE); p.setIndexIds(indexId.toString()); List errors = new ArrayList(); this.deleteIndexContent(p, errors); } } if (event instanceof ContentIndexEvent) { ContentIndexEvent ciEvent = (ContentIndexEvent) event; String eventType = ciEvent.getEventType(); ContentIndex ci = ciEvent.getContentIndex(); Long cid = ci.getIndexId(); //System.out.println("ci top="+ci.getTop()); if (eventType.equals(ContentIndexEvent.CONTENT_ADDED) || eventType.equals(ContentIndexEvent.CONTENT_UPDATED)) { this.indexDao.indexContent(cid); } else if (eventType.equals(ContentIndexEvent.CONTENT_DELETE)) { this.indexDao.deleteIndexContent(cid); } } } }