package org.fastcatsearch.http.action.management.dictionary; import org.fastcatsearch.db.dao.DictionaryDAO; import org.fastcatsearch.db.dao.DictionaryStatusDAO; import org.fastcatsearch.db.vo.DictionaryStatusVO; import org.fastcatsearch.http.ActionAuthority; import org.fastcatsearch.http.ActionAuthorityLevel; import org.fastcatsearch.http.ActionMapping; import org.fastcatsearch.http.action.ActionRequest; import org.fastcatsearch.http.action.ActionResponse; import org.fastcatsearch.http.action.AuthAction; import org.fastcatsearch.ir.util.Formatter; import org.fastcatsearch.plugin.Plugin; import org.fastcatsearch.plugin.PluginService; import org.fastcatsearch.plugin.analysis.AnalysisPlugin; import org.fastcatsearch.plugin.analysis.AnalysisPluginSetting; import org.fastcatsearch.plugin.analysis.AnalysisPluginSetting.DictionarySetting; import org.fastcatsearch.service.ServiceManager; import org.fastcatsearch.util.ResponseWriter; import java.io.File; import java.io.Writer; import java.util.Date; import java.util.List; @ActionMapping(value="/management/dictionary/overview", authority=ActionAuthority.Dictionary, authorityLevel=ActionAuthorityLevel.READABLE) public class GetDictionaryOverviewAction extends AuthAction { @Override public void doAuthAction(ActionRequest request, ActionResponse response) throws Exception { //TODO admin node인지 확인하고 해당 노드가 아니면 전달하여 받아온다. //해당노드이면 그대로 수행한다. String pluginId = request.getParameter("pluginId"); PluginService pluginService = ServiceManager.getInstance().getService(PluginService.class); Plugin plugin = pluginService.getPlugin(pluginId); if(!plugin.isLoaded()){ Writer writer = response.getWriter(); ResponseWriter resultWriter = getDefaultResponseWriter(writer); resultWriter.object().key("overview").array(); resultWriter.endArray().endObject(); resultWriter.done(); return; } AnalysisPlugin analysisPlugin = (AnalysisPlugin) plugin; AnalysisPluginSetting analysisPluginSetting = (AnalysisPluginSetting) plugin.getPluginSetting(); List<DictionarySetting> dictionaryList = analysisPluginSetting.getDictionarySettingList(); DictionaryStatusDAO dictionaryStatusDAO = analysisPlugin.dictionaryStatusDAO(); Writer writer = response.getWriter(); ResponseWriter resultWriter = getDefaultResponseWriter(writer); resultWriter.object().key("overview").array(); if(dictionaryList != null){ for(DictionarySetting dictionary : dictionaryList){ String dictionaryId = dictionary.getId(); String name = dictionary.getName(); DictionarySetting.Type type = dictionary.getType(); String tokenType = dictionary.getTokenType(); if(tokenType == null || tokenType.length() == 0){ tokenType = "NONE"; } String ignoreCase = dictionary.isIgnoreCase() ? "Y" : "N"; resultWriter.object() .key("id").value(dictionaryId) .key("name").value(name) .key("type").value(type) .key("tokenType").value(tokenType) .key("ignoreCase").value(ignoreCase); int entrySize = 0; String updateTime = null; int applyEntrySize = 0; String applyTime = null; if(type == DictionarySetting.Type.SYSTEM){ entrySize = analysisPlugin.getDictionary().size(); applyEntrySize = entrySize; updateTime = "-"; applyTime = "-"; }else{ DictionaryDAO dictionaryDAO = analysisPlugin.getDictionaryDAO(dictionaryId); if(dictionaryDAO != null){ entrySize = dictionaryDAO.getCount(null, null); } DictionaryStatusVO dictionaryStatusVO = dictionaryStatusDAO.getEntry(dictionaryId); applyEntrySize = dictionaryStatusVO.applyEntrySize; if(dictionaryStatusVO.updateTime.getTime() == 0){ updateTime = "-"; }else{ updateTime = Formatter.formatDateEndsMinute(new Date(dictionaryStatusVO.updateTime.getTime())); } if(dictionaryStatusVO.applyTime.getTime() == 0){ applyTime = "-"; }else{ applyTime = Formatter.formatDateEndsMinute(new Date(dictionaryStatusVO.applyTime.getTime())); } } resultWriter.key("entrySize").value(entrySize); resultWriter.key("updateTime").value(updateTime); resultWriter.key("applyEntrySize").value(applyEntrySize); resultWriter.key("applyTime").value(applyTime); //file 시간은 applyTime 와 중복되므로 향후 어떻게 할지 고려필요. File file = analysisPlugin.getDictionaryFile(dictionaryId); if(file.exists()){ String lastModified = Formatter.formatDate(new Date(file.lastModified())); resultWriter.key("fileTime").value(lastModified); }else{ resultWriter.key("fileTime").value("-"); } resultWriter.endObject(); } } resultWriter.endArray().endObject(); resultWriter.done(); } }