diff --git a/src/main/java/org/codelibs/fess/api/es/EsApiManager.java b/src/main/java/org/codelibs/fess/api/es/EsApiManager.java index 97df945a1..ba0585006 100644 --- a/src/main/java/org/codelibs/fess/api/es/EsApiManager.java +++ b/src/main/java/org/codelibs/fess/api/es/EsApiManager.java @@ -137,7 +137,7 @@ public class EsApiManager extends BaseApiManager { curlRequest.param(entry.getKey(), entry.getValue()[0]); } }); - final CurlResponse curlResponse = curlRequest.onConnect((req, con) -> { + try (final CurlResponse curlResponse = curlRequest.onConnect((req, con) -> { con.setDoOutput(true); if (httpMethod != Method.GET) { try (ServletInputStream in = request.getInputStream(); OutputStream out = con.getOutputStream()) { @@ -146,13 +146,14 @@ public class EsApiManager extends BaseApiManager { throw new WebApiException(HttpServletResponse.SC_BAD_REQUEST, e); } } - }).execute(); + }).execute()) { - try (ServletOutputStream out = response.getOutputStream(); InputStream in = curlResponse.getContentAsStream()) { - response.setStatus(curlResponse.getHttpStatusCode()); - CopyUtil.copy(in, out); - } catch (final ClientAbortException e) { - logger.debug("Client aborts this request.", e); + try (ServletOutputStream out = response.getOutputStream(); InputStream in = curlResponse.getContentAsStream()) { + response.setStatus(curlResponse.getHttpStatusCode()); + CopyUtil.copy(in, out); + } catch (final ClientAbortException e) { + logger.debug("Client aborts this request.", e); + } } catch (final Exception e) { if (e.getCause() instanceof ClientAbortException) { logger.debug("Client aborts this request.", e); diff --git a/src/main/java/org/codelibs/fess/app/web/admin/dict/kuromoji/AdminDictKuromojiAction.java b/src/main/java/org/codelibs/fess/app/web/admin/dict/kuromoji/AdminDictKuromojiAction.java index 841fe5beb..db486242e 100644 --- a/src/main/java/org/codelibs/fess/app/web/admin/dict/kuromoji/AdminDictKuromojiAction.java +++ b/src/main/java/org/codelibs/fess/app/web/admin/dict/kuromoji/AdminDictKuromojiAction.java @@ -214,9 +214,7 @@ public class AdminDictKuromojiAction extends FessAdminAction { verifyTokenKeep(() -> downloadpage(form.dictId)); return kuromojiService.getKuromojiFile(form.dictId).map(file -> { return asStream(new File(file.getPath()).getName()).contentTypeOctetStream().stream(out -> { - try (InputStream inputStream = file.getInputStream()) { - out.write(inputStream); - } + file.writeOut(out); }); }).orElseGet(() -> { throwValidationError(messages -> messages.addErrorsFailedToDownloadKuromojiFile(GLOBAL), () -> downloadpage(form.dictId)); diff --git a/src/main/java/org/codelibs/fess/app/web/admin/dict/mapping/AdminDictMappingAction.java b/src/main/java/org/codelibs/fess/app/web/admin/dict/mapping/AdminDictMappingAction.java index f4f06b337..6b2973e42 100644 --- a/src/main/java/org/codelibs/fess/app/web/admin/dict/mapping/AdminDictMappingAction.java +++ b/src/main/java/org/codelibs/fess/app/web/admin/dict/mapping/AdminDictMappingAction.java @@ -217,9 +217,7 @@ public class AdminDictMappingAction extends FessAdminAction { verifyTokenKeep(() -> downloadpage(form.dictId)); return charMappingService.getCharMappingFile(form.dictId).map(file -> { return asStream(new File(file.getPath()).getName()).contentTypeOctetStream().stream(out -> { - try (InputStream inputStream = file.getInputStream()) { - out.write(inputStream); - } + file.writeOut(out); }); }).orElseGet(() -> { throwValidationError(messages -> messages.addErrorsFailedToDownloadMappingFile(GLOBAL), () -> downloadpage(form.dictId)); diff --git a/src/main/java/org/codelibs/fess/app/web/admin/dict/protwords/AdminDictProtwordsAction.java b/src/main/java/org/codelibs/fess/app/web/admin/dict/protwords/AdminDictProtwordsAction.java index f4b1d9569..07f1ef1a6 100644 --- a/src/main/java/org/codelibs/fess/app/web/admin/dict/protwords/AdminDictProtwordsAction.java +++ b/src/main/java/org/codelibs/fess/app/web/admin/dict/protwords/AdminDictProtwordsAction.java @@ -212,9 +212,7 @@ public class AdminDictProtwordsAction extends FessAdminAction { verifyTokenKeep(() -> downloadpage(form.dictId)); return protwordsService.getProtwordsFile(form.dictId).map(file -> { return asStream(new File(file.getPath()).getName()).contentTypeOctetStream().stream(out -> { - try (InputStream inputStream = file.getInputStream()) { - out.write(inputStream); - } + file.writeOut(out); }); }).orElseGet(() -> { throwValidationError(messages -> messages.addErrorsFailedToDownloadProtwordsFile(GLOBAL), () -> downloadpage(form.dictId)); diff --git a/src/main/java/org/codelibs/fess/app/web/admin/dict/stemmeroverride/AdminDictStemmeroverrideAction.java b/src/main/java/org/codelibs/fess/app/web/admin/dict/stemmeroverride/AdminDictStemmeroverrideAction.java index 45dee5a2d..9574b650e 100644 --- a/src/main/java/org/codelibs/fess/app/web/admin/dict/stemmeroverride/AdminDictStemmeroverrideAction.java +++ b/src/main/java/org/codelibs/fess/app/web/admin/dict/stemmeroverride/AdminDictStemmeroverrideAction.java @@ -217,9 +217,7 @@ public class AdminDictStemmeroverrideAction extends FessAdminAction { .getStemmerOverrideFile(form.dictId) .map(file -> { return asStream(new File(file.getPath()).getName()).contentTypeOctetStream().stream(out -> { - try (InputStream inputStream = file.getInputStream()) { - out.write(inputStream); - } + file.writeOut(out); }); }) .orElseGet( diff --git a/src/main/java/org/codelibs/fess/app/web/admin/dict/stopwords/AdminDictStopwordsAction.java b/src/main/java/org/codelibs/fess/app/web/admin/dict/stopwords/AdminDictStopwordsAction.java index ea8129927..d2b7921d5 100644 --- a/src/main/java/org/codelibs/fess/app/web/admin/dict/stopwords/AdminDictStopwordsAction.java +++ b/src/main/java/org/codelibs/fess/app/web/admin/dict/stopwords/AdminDictStopwordsAction.java @@ -210,9 +210,7 @@ public class AdminDictStopwordsAction extends FessAdminAction { verifyTokenKeep(() -> downloadpage(form.dictId)); return stopwordsService.getStopwordsFile(form.dictId).map(file -> { return asStream(new File(file.getPath()).getName()).contentTypeOctetStream().stream(out -> { - try (InputStream inputStream = file.getInputStream()) { - out.write(inputStream); - } + file.writeOut(out); }); }).orElseGet(() -> { throwValidationError(messages -> messages.addErrorsFailedToDownloadStopwordsFile(GLOBAL), () -> downloadpage(form.dictId)); diff --git a/src/main/java/org/codelibs/fess/app/web/admin/dict/synonym/AdminDictSynonymAction.java b/src/main/java/org/codelibs/fess/app/web/admin/dict/synonym/AdminDictSynonymAction.java index c828b3591..65236f61f 100644 --- a/src/main/java/org/codelibs/fess/app/web/admin/dict/synonym/AdminDictSynonymAction.java +++ b/src/main/java/org/codelibs/fess/app/web/admin/dict/synonym/AdminDictSynonymAction.java @@ -217,9 +217,7 @@ public class AdminDictSynonymAction extends FessAdminAction { verifyTokenKeep(() -> downloadpage(form.dictId)); return synonymService.getSynonymFile(form.dictId).map(file -> { return asStream(new File(file.getPath()).getName()).contentTypeOctetStream().stream(out -> { - try (InputStream inputStream = file.getInputStream()) { - out.write(inputStream); - } + file.writeOut(out); }); }).orElseGet(() -> { throwValidationError(messages -> messages.addErrorsFailedToDownloadSynonymFile(GLOBAL), () -> downloadpage(form.dictId)); diff --git a/src/main/java/org/codelibs/fess/app/web/api/admin/dict/kuromoji/ApiAdminDictKuromojiAction.java b/src/main/java/org/codelibs/fess/app/web/api/admin/dict/kuromoji/ApiAdminDictKuromojiAction.java index 00ed9e476..69ae86112 100644 --- a/src/main/java/org/codelibs/fess/app/web/api/admin/dict/kuromoji/ApiAdminDictKuromojiAction.java +++ b/src/main/java/org/codelibs/fess/app/web/api/admin/dict/kuromoji/ApiAdminDictKuromojiAction.java @@ -136,9 +136,7 @@ public class ApiAdminDictKuromojiAction extends FessApiAdminAction { validateApi(body, messages -> {}); return kuromojiService.getKuromojiFile(body.dictId).map(file -> { return asStream(new File(file.getPath()).getName()).contentTypeOctetStream().stream(out -> { - try (InputStream inputStream = file.getInputStream()) { - out.write(inputStream); - } + file.writeOut(out); }); }).orElseGet(() -> { throwValidationErrorApi(messages -> messages.addErrorsFailedToDownloadProtwordsFile(GLOBAL)); diff --git a/src/main/java/org/codelibs/fess/app/web/api/admin/dict/mapping/ApiAdminDictMappingAction.java b/src/main/java/org/codelibs/fess/app/web/api/admin/dict/mapping/ApiAdminDictMappingAction.java index f39a99262..c28c26f99 100644 --- a/src/main/java/org/codelibs/fess/app/web/api/admin/dict/mapping/ApiAdminDictMappingAction.java +++ b/src/main/java/org/codelibs/fess/app/web/api/admin/dict/mapping/ApiAdminDictMappingAction.java @@ -136,9 +136,7 @@ public class ApiAdminDictMappingAction extends FessApiAdminAction { validateApi(body, messages -> {}); return charMappingService.getCharMappingFile(body.dictId).map(file -> { return asStream(new File(file.getPath()).getName()).contentTypeOctetStream().stream(out -> { - try (InputStream inputStream = file.getInputStream()) { - out.write(inputStream); - } + file.writeOut(out); }); }).orElseGet(() -> { throwValidationErrorApi(messages -> messages.addErrorsFailedToDownloadProtwordsFile(GLOBAL)); diff --git a/src/main/java/org/codelibs/fess/app/web/api/admin/dict/protwords/ApiAdminDictProtwordsAction.java b/src/main/java/org/codelibs/fess/app/web/api/admin/dict/protwords/ApiAdminDictProtwordsAction.java index dbed72074..a2b1992ff 100644 --- a/src/main/java/org/codelibs/fess/app/web/api/admin/dict/protwords/ApiAdminDictProtwordsAction.java +++ b/src/main/java/org/codelibs/fess/app/web/api/admin/dict/protwords/ApiAdminDictProtwordsAction.java @@ -135,9 +135,7 @@ public class ApiAdminDictProtwordsAction extends FessApiAdminAction { validateApi(body, messages -> {}); return protwordsService.getProtwordsFile(body.dictId).map(file -> { return asStream(new File(file.getPath()).getName()).contentTypeOctetStream().stream(out -> { - try (InputStream inputStream = file.getInputStream()) { - out.write(inputStream); - } + file.writeOut(out); }); }).orElseGet(() -> { throwValidationErrorApi(messages -> messages.addErrorsFailedToDownloadProtwordsFile(GLOBAL)); diff --git a/src/main/java/org/codelibs/fess/app/web/api/admin/dict/stemmeroverride/ApiAdminDictStemmeroverrideAction.java b/src/main/java/org/codelibs/fess/app/web/api/admin/dict/stemmeroverride/ApiAdminDictStemmeroverrideAction.java index 93aae8408..1b1ceec76 100644 --- a/src/main/java/org/codelibs/fess/app/web/api/admin/dict/stemmeroverride/ApiAdminDictStemmeroverrideAction.java +++ b/src/main/java/org/codelibs/fess/app/web/api/admin/dict/stemmeroverride/ApiAdminDictStemmeroverrideAction.java @@ -142,9 +142,7 @@ public class ApiAdminDictStemmeroverrideAction extends FessApiAdminAction { validateApi(body, messages -> {}); return stemmerOverrideService.getStemmerOverrideFile(body.dictId).map(file -> { return asStream(new File(file.getPath()).getName()).contentTypeOctetStream().stream(out -> { - try (InputStream inputStream = file.getInputStream()) { - out.write(inputStream); - } + file.writeOut(out); }); }).orElseGet(() -> { throwValidationErrorApi(messages -> messages.addErrorsFailedToDownloadProtwordsFile(GLOBAL)); diff --git a/src/main/java/org/codelibs/fess/app/web/api/admin/dict/stopwords/ApiAdminDictStopwordsAction.java b/src/main/java/org/codelibs/fess/app/web/api/admin/dict/stopwords/ApiAdminDictStopwordsAction.java index 0cdc344dc..2c5878167 100644 --- a/src/main/java/org/codelibs/fess/app/web/api/admin/dict/stopwords/ApiAdminDictStopwordsAction.java +++ b/src/main/java/org/codelibs/fess/app/web/api/admin/dict/stopwords/ApiAdminDictStopwordsAction.java @@ -135,9 +135,7 @@ public class ApiAdminDictStopwordsAction extends FessApiAdminAction { validateApi(body, messages -> {}); return stopwordsService.getStopwordsFile(body.dictId).map(file -> { return asStream(new File(file.getPath()).getName()).contentTypeOctetStream().stream(out -> { - try (InputStream inputStream = file.getInputStream()) { - out.write(inputStream); - } + file.writeOut(out); }); }).orElseGet(() -> { throwValidationErrorApi(messages -> messages.addErrorsFailedToDownloadStopwordsFile(GLOBAL)); diff --git a/src/main/java/org/codelibs/fess/app/web/api/admin/dict/synonym/ApiAdminDictSynonymAction.java b/src/main/java/org/codelibs/fess/app/web/api/admin/dict/synonym/ApiAdminDictSynonymAction.java index 3e6a95416..1e8dfb089 100644 --- a/src/main/java/org/codelibs/fess/app/web/api/admin/dict/synonym/ApiAdminDictSynonymAction.java +++ b/src/main/java/org/codelibs/fess/app/web/api/admin/dict/synonym/ApiAdminDictSynonymAction.java @@ -136,9 +136,7 @@ public class ApiAdminDictSynonymAction extends FessApiAdminAction { validateApi(body, messages -> {}); return synonymService.getSynonymFile(body.dictId).map(file -> { return asStream(new File(file.getPath()).getName()).contentTypeOctetStream().stream(out -> { - try (InputStream inputStream = file.getInputStream()) { - out.write(inputStream); - } + file.writeOut(out); }); }).orElseGet(() -> { throwValidationErrorApi(messages -> messages.addErrorsFailedToDownloadProtwordsFile(GLOBAL)); diff --git a/src/main/java/org/codelibs/fess/dict/DictionaryFile.java b/src/main/java/org/codelibs/fess/dict/DictionaryFile.java index 1d5910a93..5c0c18e2c 100644 --- a/src/main/java/org/codelibs/fess/dict/DictionaryFile.java +++ b/src/main/java/org/codelibs/fess/dict/DictionaryFile.java @@ -15,6 +15,9 @@ */ package org.codelibs.fess.dict; +import java.io.BufferedInputStream; +import java.io.IOException; +import java.io.InputStream; import java.util.ArrayList; import java.util.Collection; import java.util.Date; @@ -22,7 +25,9 @@ import java.util.Iterator; import java.util.List; import java.util.ListIterator; +import org.codelibs.curl.CurlResponse; import org.dbflute.optional.OptionalEntity; +import org.lastaflute.web.servlet.request.stream.WrittenStreamOut; public abstract class DictionaryFile { protected DictionaryManager dictionaryManager; @@ -56,6 +61,13 @@ public abstract class DictionaryFile { return this; } + public void writeOut(WrittenStreamOut out) throws IOException { + try (final CurlResponse curlResponse = dictionaryManager.getContentResponse(this); + final InputStream inputStream = new BufferedInputStream(curlResponse.getContentAsStream())) { + out.write(inputStream); + } + } + public abstract String getType(); public abstract PagingList selectList(int offset, int size); diff --git a/src/main/java/org/codelibs/fess/dict/DictionaryManager.java b/src/main/java/org/codelibs/fess/dict/DictionaryManager.java index e6a3fffe6..4a7003886 100644 --- a/src/main/java/org/codelibs/fess/dict/DictionaryManager.java +++ b/src/main/java/org/codelibs/fess/dict/DictionaryManager.java @@ -17,7 +17,6 @@ package org.codelibs.fess.dict; import java.io.File; import java.io.IOException; -import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; @@ -110,12 +109,8 @@ public class DictionaryManager { }); } - public InputStream getContentInputStream(final DictionaryFile dictFile) { - try { - return ComponentUtil.getCurlHelper().get("/_configsync/file").param("path", dictFile.getPath()).execute().getContentAsStream(); - } catch (final IOException e) { - throw new DictionaryException("Failed to access " + dictFile.getPath(), e); - } + public CurlResponse getContentResponse(final DictionaryFile dictFile) { + return ComponentUtil.getCurlHelper().get("/_configsync/file").param("path", dictFile.getPath()).execute(); } public void addCreator(final DictionaryCreator creator) { diff --git a/src/main/java/org/codelibs/fess/dict/kuromoji/KuromojiFile.java b/src/main/java/org/codelibs/fess/dict/kuromoji/KuromojiFile.java index db5c94426..769db4d12 100644 --- a/src/main/java/org/codelibs/fess/dict/kuromoji/KuromojiFile.java +++ b/src/main/java/org/codelibs/fess/dict/kuromoji/KuromojiFile.java @@ -15,7 +15,6 @@ */ package org.codelibs.fess.dict.kuromoji; -import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.Closeable; @@ -33,6 +32,7 @@ import java.util.List; import org.codelibs.core.io.CloseableUtil; import org.codelibs.core.lang.StringUtil; +import org.codelibs.curl.CurlResponse; import org.codelibs.fess.Constants; import org.codelibs.fess.dict.DictionaryException; import org.codelibs.fess.dict.DictionaryFile; @@ -61,7 +61,7 @@ public class KuromojiFile extends DictionaryFile { @Override public synchronized OptionalEntity get(final long id) { if (kuromojiItemList == null) { - reload(null, null); + reload(null); } for (final KuromojiItem kuromojiItem : kuromojiItemList) { @@ -75,7 +75,7 @@ public class KuromojiFile extends DictionaryFile { @Override public synchronized PagingList selectList(final int offset, final int size) { if (kuromojiItemList == null) { - reload(null, null); + reload(null); } if (offset >= kuromojiItemList.size() || offset < 0) { @@ -93,14 +93,14 @@ public class KuromojiFile extends DictionaryFile { @Override public synchronized void insert(final KuromojiItem item) { try (KuromojiUpdater updater = new KuromojiUpdater(item)) { - reload(updater, null); + reload(updater); } } @Override public synchronized void update(final KuromojiItem item) { try (KuromojiUpdater updater = new KuromojiUpdater(item)) { - reload(updater, null); + reload(updater); } } @@ -109,14 +109,21 @@ public class KuromojiFile extends DictionaryFile { final KuromojiItem kuromojiItem = item; kuromojiItem.setNewToken(StringUtil.EMPTY); try (KuromojiUpdater updater = new KuromojiUpdater(item)) { - reload(updater, null); + reload(updater); + } + } + + protected void reload(final KuromojiUpdater updater) { + try (CurlResponse curlResponse = dictionaryManager.getContentResponse(this)) { + reload(updater, curlResponse.getContentAsStream()); + } catch (final IOException e) { + throw new DictionaryException("Failed to parse " + path, e); } } protected void reload(final KuromojiUpdater updater, final InputStream in) { final List itemList = new ArrayList<>(); - try (BufferedReader reader = - new BufferedReader(new InputStreamReader(in != null ? in : dictionaryManager.getContentInputStream(this), Constants.UTF_8))) { + try (BufferedReader reader = new BufferedReader(new InputStreamReader(in, Constants.UTF_8))) { long id = 0; String line = null; while ((line = reader.readLine()) != null) { @@ -178,10 +185,6 @@ public class KuromojiFile extends DictionaryFile { return new File(path).getName(); } - public InputStream getInputStream() throws IOException { - return new BufferedInputStream(dictionaryManager.getContentInputStream(this)); - } - public synchronized void update(final InputStream in) throws IOException { try (KuromojiUpdater updater = new KuromojiUpdater(null)) { reload(updater, in); diff --git a/src/main/java/org/codelibs/fess/dict/mapping/CharMappingFile.java b/src/main/java/org/codelibs/fess/dict/mapping/CharMappingFile.java index ee590a26d..9cc77e7d8 100644 --- a/src/main/java/org/codelibs/fess/dict/mapping/CharMappingFile.java +++ b/src/main/java/org/codelibs/fess/dict/mapping/CharMappingFile.java @@ -15,7 +15,6 @@ */ package org.codelibs.fess.dict.mapping; -import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.Closeable; @@ -35,6 +34,7 @@ import java.util.regex.Pattern; import org.codelibs.core.io.CloseableUtil; import org.codelibs.core.lang.StringUtil; +import org.codelibs.curl.CurlResponse; import org.codelibs.fess.Constants; import org.codelibs.fess.dict.DictionaryException; import org.codelibs.fess.dict.DictionaryFile; @@ -66,7 +66,7 @@ public class CharMappingFile extends DictionaryFile { @Override public OptionalEntity get(final long id) { if (mappingItemList == null) { - reload(null, null); + reload(null); } for (final CharMappingItem mappingItem : mappingItemList) { @@ -80,7 +80,7 @@ public class CharMappingFile extends DictionaryFile { @Override public synchronized PagingList selectList(final int offset, final int size) { if (mappingItemList == null) { - reload(null, null); + reload(null); } if (offset >= mappingItemList.size() || offset < 0) { @@ -98,14 +98,14 @@ public class CharMappingFile extends DictionaryFile { @Override public synchronized void insert(final CharMappingItem item) { try (MappingUpdater updater = new MappingUpdater(item)) { - reload(updater, null); + reload(updater); } } @Override public synchronized void update(final CharMappingItem item) { try (MappingUpdater updater = new MappingUpdater(item)) { - reload(updater, null); + reload(updater); } } @@ -115,15 +115,22 @@ public class CharMappingFile extends DictionaryFile { mappingItem.setNewInputs(StringUtil.EMPTY_STRINGS); mappingItem.setNewOutput(StringUtil.EMPTY); try (MappingUpdater updater = new MappingUpdater(item)) { - reload(updater, null); + reload(updater); + } + } + + protected void reload(final MappingUpdater updater) { + try (CurlResponse curlResponse = dictionaryManager.getContentResponse(this)) { + reload(updater, curlResponse.getContentAsStream()); + } catch (final IOException e) { + throw new DictionaryException("Failed to parse " + path, e); } } protected void reload(final MappingUpdater updater, final InputStream in) { final Pattern parsePattern = Pattern.compile("(.*)\\s*=>\\s*(.*)\\s*$"); final List itemList = new ArrayList<>(); - try (BufferedReader reader = - new BufferedReader(new InputStreamReader(in != null ? in : dictionaryManager.getContentInputStream(this), Constants.UTF_8))) { + try (BufferedReader reader = new BufferedReader(new InputStreamReader(in, Constants.UTF_8))) { long id = 0; String line = null; while ((line = reader.readLine()) != null) { @@ -192,10 +199,6 @@ public class CharMappingFile extends DictionaryFile { return new File(path).getName(); } - public InputStream getInputStream() throws IOException { - return new BufferedInputStream(dictionaryManager.getContentInputStream(this)); - } - public synchronized void update(final InputStream in) throws IOException { try (MappingUpdater updater = new MappingUpdater(null)) { reload(updater, in); diff --git a/src/main/java/org/codelibs/fess/dict/protwords/ProtwordsFile.java b/src/main/java/org/codelibs/fess/dict/protwords/ProtwordsFile.java index 98245b24d..eb3b33c2f 100644 --- a/src/main/java/org/codelibs/fess/dict/protwords/ProtwordsFile.java +++ b/src/main/java/org/codelibs/fess/dict/protwords/ProtwordsFile.java @@ -15,7 +15,6 @@ */ package org.codelibs.fess.dict.protwords; -import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.Closeable; @@ -33,6 +32,7 @@ import java.util.List; import org.codelibs.core.io.CloseableUtil; import org.codelibs.core.lang.StringUtil; +import org.codelibs.curl.CurlResponse; import org.codelibs.fess.Constants; import org.codelibs.fess.dict.DictionaryException; import org.codelibs.fess.dict.DictionaryFile; @@ -60,7 +60,7 @@ public class ProtwordsFile extends DictionaryFile { @Override public synchronized OptionalEntity get(final long id) { if (protwordsItemList == null) { - reload(null, null); + reload(null); } for (final ProtwordsItem ProtwordsItem : protwordsItemList) { @@ -74,7 +74,7 @@ public class ProtwordsFile extends DictionaryFile { @Override public synchronized PagingList selectList(final int offset, final int size) { if (protwordsItemList == null) { - reload(null, null); + reload(null); } if (offset >= protwordsItemList.size() || offset < 0) { @@ -92,14 +92,14 @@ public class ProtwordsFile extends DictionaryFile { @Override public synchronized void insert(final ProtwordsItem item) { try (ProtwordsUpdater updater = new ProtwordsUpdater(item)) { - reload(updater, null); + reload(updater); } } @Override public synchronized void update(final ProtwordsItem item) { try (ProtwordsUpdater updater = new ProtwordsUpdater(item)) { - reload(updater, null); + reload(updater); } } @@ -108,14 +108,21 @@ public class ProtwordsFile extends DictionaryFile { final ProtwordsItem ProtwordsItem = item; ProtwordsItem.setNewInput(StringUtil.EMPTY); try (ProtwordsUpdater updater = new ProtwordsUpdater(item)) { - reload(updater, null); + reload(updater); + } + } + + protected void reload(final ProtwordsUpdater updater) { + try (CurlResponse curlResponse = dictionaryManager.getContentResponse(this)) { + reload(updater, curlResponse.getContentAsStream()); + } catch (final IOException e) { + throw new DictionaryException("Failed to parse " + path, e); } } protected void reload(final ProtwordsUpdater updater, final InputStream in) { final List itemList = new ArrayList<>(); - try (BufferedReader reader = - new BufferedReader(new InputStreamReader(in != null ? in : dictionaryManager.getContentInputStream(this), Constants.UTF_8))) { + try (BufferedReader reader = new BufferedReader(new InputStreamReader(in, Constants.UTF_8))) { long id = 0; String line = null; while ((line = reader.readLine()) != null) { @@ -179,10 +186,6 @@ public class ProtwordsFile extends DictionaryFile { return new File(path).getName(); } - public InputStream getInputStream() throws IOException { - return new BufferedInputStream(dictionaryManager.getContentInputStream(this)); - } - public synchronized void update(final InputStream in) throws IOException { try (ProtwordsUpdater updater = new ProtwordsUpdater(null)) { reload(updater, in); diff --git a/src/main/java/org/codelibs/fess/dict/stemmeroverride/StemmerOverrideFile.java b/src/main/java/org/codelibs/fess/dict/stemmeroverride/StemmerOverrideFile.java index 2b7ced842..7931740a6 100644 --- a/src/main/java/org/codelibs/fess/dict/stemmeroverride/StemmerOverrideFile.java +++ b/src/main/java/org/codelibs/fess/dict/stemmeroverride/StemmerOverrideFile.java @@ -15,7 +15,6 @@ */ package org.codelibs.fess.dict.stemmeroverride; -import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.Closeable; @@ -35,6 +34,7 @@ import java.util.regex.Pattern; import org.codelibs.core.io.CloseableUtil; import org.codelibs.core.lang.StringUtil; +import org.codelibs.curl.CurlResponse; import org.codelibs.fess.Constants; import org.codelibs.fess.dict.DictionaryException; import org.codelibs.fess.dict.DictionaryFile; @@ -66,7 +66,7 @@ public class StemmerOverrideFile extends DictionaryFile { @Override public synchronized OptionalEntity get(final long id) { if (stemmerOverrideItemList == null) { - reload(null, null); + reload(null); } for (final StemmerOverrideItem stemmerOverrideItem : stemmerOverrideItemList) { @@ -80,7 +80,7 @@ public class StemmerOverrideFile extends DictionaryFile { @Override public synchronized PagingList selectList(final int offset, final int size) { if (stemmerOverrideItemList == null) { - reload(null, null); + reload(null); } if (offset >= stemmerOverrideItemList.size() || offset < 0) { @@ -98,14 +98,14 @@ public class StemmerOverrideFile extends DictionaryFile { @Override public synchronized void insert(final StemmerOverrideItem item) { try (StemmerOverrideUpdater updater = new StemmerOverrideUpdater(item)) { - reload(updater, null); + reload(updater); } } @Override public synchronized void update(final StemmerOverrideItem item) { try (StemmerOverrideUpdater updater = new StemmerOverrideUpdater(item)) { - reload(updater, null); + reload(updater); } } @@ -115,15 +115,22 @@ public class StemmerOverrideFile extends DictionaryFile { stemmerOverrideItem.setNewInput(StringUtil.EMPTY); stemmerOverrideItem.setNewOutput(StringUtil.EMPTY); try (StemmerOverrideUpdater updater = new StemmerOverrideUpdater(item)) { - reload(updater, null); + reload(updater); + } + } + + protected void reload(final StemmerOverrideUpdater updater) { + try (CurlResponse curlResponse = dictionaryManager.getContentResponse(this)) { + reload(updater, curlResponse.getContentAsStream()); + } catch (final IOException e) { + throw new DictionaryException("Failed to parse " + path, e); } } protected void reload(final StemmerOverrideUpdater updater, final InputStream in) { final Pattern parsePattern = Pattern.compile("(.*)\\s*=>\\s*(.*)\\s*$"); final List itemList = new ArrayList<>(); - try (BufferedReader reader = - new BufferedReader(new InputStreamReader(in != null ? in : dictionaryManager.getContentInputStream(this), Constants.UTF_8))) { + try (BufferedReader reader = new BufferedReader(new InputStreamReader(in, Constants.UTF_8))) { long id = 0; String line = null; while ((line = reader.readLine()) != null) { @@ -189,10 +196,6 @@ public class StemmerOverrideFile extends DictionaryFile { return new File(path).getName(); } - public InputStream getInputStream() throws IOException { - return new BufferedInputStream(dictionaryManager.getContentInputStream(this)); - } - public synchronized void update(final InputStream in) throws IOException { try (StemmerOverrideUpdater updater = new StemmerOverrideUpdater(null)) { reload(updater, in); diff --git a/src/main/java/org/codelibs/fess/dict/stopwords/StopwordsFile.java b/src/main/java/org/codelibs/fess/dict/stopwords/StopwordsFile.java index 4fc738b7c..30b2ce2e7 100644 --- a/src/main/java/org/codelibs/fess/dict/stopwords/StopwordsFile.java +++ b/src/main/java/org/codelibs/fess/dict/stopwords/StopwordsFile.java @@ -15,7 +15,6 @@ */ package org.codelibs.fess.dict.stopwords; -import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.Closeable; @@ -33,6 +32,7 @@ import java.util.List; import org.codelibs.core.io.CloseableUtil; import org.codelibs.core.lang.StringUtil; +import org.codelibs.curl.CurlResponse; import org.codelibs.fess.Constants; import org.codelibs.fess.dict.DictionaryException; import org.codelibs.fess.dict.DictionaryFile; @@ -60,7 +60,7 @@ public class StopwordsFile extends DictionaryFile { @Override public synchronized OptionalEntity get(final long id) { if (stopwordsItemList == null) { - reload(null, null); + reload(null); } for (final StopwordsItem StopwordsItem : stopwordsItemList) { @@ -74,7 +74,7 @@ public class StopwordsFile extends DictionaryFile { @Override public synchronized PagingList selectList(final int offset, final int size) { if (stopwordsItemList == null) { - reload(null, null); + reload(null); } if (offset >= stopwordsItemList.size() || offset < 0) { @@ -92,14 +92,14 @@ public class StopwordsFile extends DictionaryFile { @Override public synchronized void insert(final StopwordsItem item) { try (SynonymUpdater updater = new SynonymUpdater(item)) { - reload(updater, null); + reload(updater); } } @Override public synchronized void update(final StopwordsItem item) { try (SynonymUpdater updater = new SynonymUpdater(item)) { - reload(updater, null); + reload(updater); } } @@ -108,14 +108,21 @@ public class StopwordsFile extends DictionaryFile { final StopwordsItem StopwordsItem = item; StopwordsItem.setNewInput(StringUtil.EMPTY); try (SynonymUpdater updater = new SynonymUpdater(item)) { - reload(updater, null); + reload(updater); + } + } + + protected void reload(final SynonymUpdater updater) { + try (CurlResponse curlResponse = dictionaryManager.getContentResponse(this)) { + reload(updater, curlResponse.getContentAsStream()); + } catch (final IOException e) { + throw new DictionaryException("Failed to parse " + path, e); } } protected void reload(final SynonymUpdater updater, final InputStream in) { final List itemList = new ArrayList<>(); - try (BufferedReader reader = - new BufferedReader(new InputStreamReader(in != null ? in : dictionaryManager.getContentInputStream(this), Constants.UTF_8))) { + try (BufferedReader reader = new BufferedReader(new InputStreamReader(in, Constants.UTF_8))) { long id = 0; String line = null; while ((line = reader.readLine()) != null) { @@ -179,10 +186,6 @@ public class StopwordsFile extends DictionaryFile { return new File(path).getName(); } - public InputStream getInputStream() throws IOException { - return new BufferedInputStream(dictionaryManager.getContentInputStream(this)); - } - public synchronized void update(final InputStream in) throws IOException { try (SynonymUpdater updater = new SynonymUpdater(null)) { reload(updater, in); diff --git a/src/main/java/org/codelibs/fess/dict/synonym/SynonymFile.java b/src/main/java/org/codelibs/fess/dict/synonym/SynonymFile.java index 9152a20e4..05ee870b7 100644 --- a/src/main/java/org/codelibs/fess/dict/synonym/SynonymFile.java +++ b/src/main/java/org/codelibs/fess/dict/synonym/SynonymFile.java @@ -15,7 +15,6 @@ */ package org.codelibs.fess.dict.synonym; -import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.Closeable; @@ -33,6 +32,7 @@ import java.util.List; import org.codelibs.core.io.CloseableUtil; import org.codelibs.core.lang.StringUtil; +import org.codelibs.curl.CurlResponse; import org.codelibs.fess.Constants; import org.codelibs.fess.dict.DictionaryException; import org.codelibs.fess.dict.DictionaryFile; @@ -60,7 +60,7 @@ public class SynonymFile extends DictionaryFile { @Override public synchronized OptionalEntity get(final long id) { if (synonymItemList == null) { - reload(null, null); + reload(null); } for (final SynonymItem synonymItem : synonymItemList) { @@ -74,7 +74,7 @@ public class SynonymFile extends DictionaryFile { @Override public synchronized PagingList selectList(final int offset, final int size) { if (synonymItemList == null) { - reload(null, null); + reload(null); } if (offset >= synonymItemList.size() || offset < 0) { @@ -92,14 +92,14 @@ public class SynonymFile extends DictionaryFile { @Override public synchronized void insert(final SynonymItem item) { try (SynonymUpdater updater = new SynonymUpdater(item)) { - reload(updater, null); + reload(updater); } } @Override public synchronized void update(final SynonymItem item) { try (SynonymUpdater updater = new SynonymUpdater(item)) { - reload(updater, null); + reload(updater); } } @@ -109,14 +109,21 @@ public class SynonymFile extends DictionaryFile { synonymItem.setNewInputs(StringUtil.EMPTY_STRINGS); synonymItem.setNewOutputs(StringUtil.EMPTY_STRINGS); try (SynonymUpdater updater = new SynonymUpdater(item)) { - reload(updater, null); + reload(updater); + } + } + + protected void reload(final SynonymUpdater updater) { + try (CurlResponse curlResponse = dictionaryManager.getContentResponse(this)) { + reload(updater, curlResponse.getContentAsStream()); + } catch (final IOException e) { + throw new DictionaryException("Failed to parse " + path, e); } } protected void reload(final SynonymUpdater updater, final InputStream in) { final List itemList = new ArrayList<>(); - try (BufferedReader reader = - new BufferedReader(new InputStreamReader(in != null ? in : dictionaryManager.getContentInputStream(this), Constants.UTF_8))) { + try (BufferedReader reader = new BufferedReader(new InputStreamReader(in, Constants.UTF_8))) { long id = 0; String line = null; while ((line = reader.readLine()) != null) { @@ -250,10 +257,6 @@ public class SynonymFile extends DictionaryFile { return new File(path).getName(); } - public InputStream getInputStream() throws IOException { - return new BufferedInputStream(dictionaryManager.getContentInputStream(this)); - } - public synchronized void update(final InputStream in) throws IOException { try (SynonymUpdater updater = new SynonymUpdater(null)) { reload(updater, in);