package org.fastcatsearch.http.action.management.settings; import java.io.File; import java.io.Writer; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.TreeMap; 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.IRService; import org.fastcatsearch.service.ServiceManager; import org.fastcatsearch.settings.SearchPageSettings; import org.fastcatsearch.settings.SettingFileNames; import org.fastcatsearch.settings.SearchPageSettings.SearchCategorySetting; import org.fastcatsearch.util.JAXBConfigs; import org.fastcatsearch.util.ResponseWriter; @ActionMapping(value = "/settings/search-config/update", authority = ActionAuthority.Settings, authorityLevel = ActionAuthorityLevel.WRITABLE) public class UpdateSearchPageConfigAction extends AuthAction { @Override public void doAuthAction(ActionRequest request, ActionResponse response) throws Exception { IRService irService = ServiceManager.getInstance().getService(IRService.class); Writer writer = response.getWriter(); ResponseWriter responseWriter = getDefaultResponseWriter(writer); Map<String, SearchCategorySetting> categoryMap = new TreeMap<String, SearchCategorySetting>(); SearchPageSettings searchPageSettings = irService.getSearchPageSettings(); SearchCategorySetting setting = null; int i = 0; for (Entry<String, String> e : request.getParameterMap().entrySet()) { logger.debug("[{}] key {} > {}", i++, e.getKey(), e.getValue()); String key = e.getKey(); String value = e.getValue(); if(value != null){ value = value.trim(); } if (key.equals("totalSearchListSize")) { int totalSearchListSize = Integer.parseInt(value); searchPageSettings.setTotalSearchListSize(totalSearchListSize); } else if (key.equals("searchListSize")) { int searchListSize = Integer.parseInt(value); searchPageSettings.setSearchListSize(searchListSize); } else if (key.equals("relateKeywordURL")) { searchPageSettings.setRelateKeywordURL(value); } else if (key.equals("realtimePopularKeywordURL")) { searchPageSettings.setRealtimePopularKeywordURL(value); } else if (key.equals("css")) { searchPageSettings.setCss(value); } else if (key.equals("js")) { searchPageSettings.setJavascript(value); } else if ((setting = getSetting(categoryMap, key, "order")) != null) { setting.setOrder(value); } else if ((setting = getSetting(categoryMap, key, "categoryId")) != null) { setting.setId(value); } else if ((setting = getSetting(categoryMap, key, "categoryName")) != null) { setting.setName(value); } else if ((setting = getSetting(categoryMap, key, "thumbnailField")) != null) { setting.setThumbnailField(value); } else if ((setting = getSetting(categoryMap, key, "titleField")) != null) { setting.setTitleField(value); } else if ((setting = getSetting(categoryMap, key, "bodyField")) != null) { setting.setBodyField(value); } else if ((setting = getSetting(categoryMap, key, "bundleField")) != null) { setting.setBundleField(value); } else if ((setting = getSetting(categoryMap, key, "searchQuery")) != null) { setting.setSearchQuery(value); } } List<SearchCategorySetting> searchCategorySettingList = new ArrayList<SearchCategorySetting>(); for(Entry<String, SearchCategorySetting> e : categoryMap.entrySet()){ String seq = e.getKey(); SearchCategorySetting s = e.getValue(); // logger.debug(">> {} > {}", seq, s); searchCategorySettingList.add(s); } searchPageSettings.setSearchCategorySettingList(searchCategorySettingList); responseWriter.object(); responseWriter.key("success").value(true); try{ File file = environment.filePaths().configPath().file(SettingFileNames.searchPageSettings); JAXBConfigs.writeConfig(file, searchPageSettings, SearchPageSettings.class); }catch(Exception e){ responseWriter.key("success").value(false); responseWriter.key("message").value(e.getMessage()); } responseWriter.endObject(); responseWriter.done(); } private SearchCategorySetting getSetting(Map<String, SearchCategorySetting> categoryMap, String key, String settingFieldName) { if (key.startsWith(settingFieldName)) { int pos = key.lastIndexOf('_'); if (pos > 0) { String seq = key.substring(pos + 1); SearchCategorySetting setting = categoryMap.get(seq); if (setting == null) { setting = new SearchCategorySetting(); categoryMap.put(seq, setting); } return setting; } } return null; } }