Shinsuke Sugaya 10 years ago
parent
commit
c9014bf859

+ 34 - 20
src/main/java/jp/sf/fess/service/SuggestBadWordService.java

@@ -41,6 +41,8 @@ import org.seasar.dbflute.cbean.EntityRowHandler;
 public class SuggestBadWordService extends BsSuggestBadWordService implements
         Serializable {
 
+    private static final String DELETE_PREFIX = "--";
+
     private static final long serialVersionUID = 1L;
 
     private static final Log log = LogFactory
@@ -90,29 +92,34 @@ public class SuggestBadWordService extends BsSuggestBadWordService implements
             List<String> list;
             csvReader.readValues(); // ignore header
             while ((list = csvReader.readValues()) != null) {
+                String badWord = getValue(list, 0);
+                if (StringUtil.isBlank(badWord)) {
+                    // skip
+                    continue;
+                }
                 try {
+                    boolean isDelete = false;
+                    if (badWord.startsWith(DELETE_PREFIX)) {
+                        isDelete = true;
+                        badWord = badWord.substring(2);
+                    }
                     final SuggestBadWordCB cb = new SuggestBadWordCB();
-                    cb.query().setSuggestWord_Equal(strip(list.get(0)));
+                    cb.query().setSuggestWord_Equal(badWord);
                     SuggestBadWord suggestBadWord = suggestBadWordBhv
                             .selectEntity(cb);
-                    if (suggestBadWord == null) {
+                    if (isDelete) {
+                        suggestBadWord.setDeletedBy("system");
+                        suggestBadWord.setDeletedTime(new Timestamp(System
+                                .currentTimeMillis()));
+                        suggestBadWordBhv.update(suggestBadWord);
+                    } else if (suggestBadWord == null) {
                         suggestBadWord = new SuggestBadWord();
-                        suggestBadWord.setSuggestWord(strip(list.get(0)));
-                        suggestBadWord.setTargetRole(strip(list.get(1)));
-                        suggestBadWord.setTargetLabel(strip(list.get(2)));
+                        suggestBadWord.setSuggestWord(badWord);
                         suggestBadWord.setCreatedBy("system");
                         suggestBadWord.setCreatedTime(new Timestamp(System
                                 .currentTimeMillis()));
                         suggestBadWordBhv.insert(suggestBadWord);
-                    } else if (list.get(1).equals("\"\"")
-                            && list.get(2).equals("\"\"")) {
-                        suggestBadWord.setDeletedBy("system");
-                        suggestBadWord.setDeletedTime(new Timestamp(System
-                                .currentTimeMillis()));
-                        suggestBadWordBhv.update(suggestBadWord);
                     } else {
-                        suggestBadWord.setTargetRole(strip(list.get(1)));
-                        suggestBadWord.setTargetLabel(strip(list.get(2)));
                         suggestBadWord.setUpdatedBy("system");
                         suggestBadWord.setUpdatedTime(new Timestamp(System
                                 .currentTimeMillis()));
@@ -135,9 +142,7 @@ public class SuggestBadWordService extends BsSuggestBadWordService implements
         final CsvWriter csvWriter = new CsvWriter(writer, cfg);
         try {
             final List<String> list = new ArrayList<>();
-            list.add("SuggestWord");
-            list.add("Role");
-            list.add("Label");
+            list.add("BadWord");
             csvWriter.writeValues(list);
 
             final SuggestBadWordCB cb = new SuggestBadWordCB();
@@ -148,8 +153,6 @@ public class SuggestBadWordService extends BsSuggestBadWordService implements
                         public void handle(final SuggestBadWord entity) {
                             final List<String> list = new ArrayList<String>();
                             addToList(list, entity.getSuggestWord());
-                            addToList(list, entity.getTargetRole());
-                            addToList(list, entity.getTargetLabel());
                             try {
                                 csvWriter.writeValues(list);
                             } catch (final IOException e) {
@@ -174,7 +177,18 @@ public class SuggestBadWordService extends BsSuggestBadWordService implements
         }
     }
 
-    private static String strip(final String item) {
-        return item.substring(1, item.length() - 1);
+    private static String getValue(final List<String> list, final int index) {
+        if (index < list.size()) {
+            return StringUtil.EMPTY;
+        }
+        String item = list.get(index).trim();
+        if (StringUtil.isBlank(item)) {
+            return StringUtil.EMPTY;
+        }
+        if (item.length() > 1 && item.charAt(0) == '"'
+                && item.charAt(item.length() - 1) == '"') {
+            item = item.substring(1, item.length() - 2);
+        }
+        return item;
     }
 }

+ 43 - 17
src/main/java/jp/sf/fess/service/SuggestElevateWordService.java

@@ -93,36 +93,50 @@ public class SuggestElevateWordService extends BsSuggestElevateWordService
             List<String> list;
             csvReader.readValues(); // ignore header
             while ((list = csvReader.readValues()) != null) {
+                final String suggestWord = getValue(list, 0);
+                if (StringUtil.isBlank(suggestWord)) {
+                    // skip
+                    continue;
+                }
                 try {
                     final SuggestElevateWordCB cb = new SuggestElevateWordCB();
-                    cb.query().setSuggestWord_Equal(strip(list.get(0)));
+                    final String role = getValue(list, 2);
+                    final String label = getValue(list, 3);
+                    cb.query().setSuggestWord_Equal(suggestWord);
+                    if (StringUtil.isNotBlank(role)) {
+                        cb.query().setTargetRole_Equal(role);
+                    }
+                    if (StringUtil.isNotBlank(label)) {
+                        cb.query().setTargetLabel_Equal(label);
+                    }
                     SuggestElevateWord suggestElevateWord = suggestElevateWordBhv
                             .selectEntity(cb);
+                    final String reading = getValue(list, 1);
+                    final String boost = getValue(list, 4);
                     if (suggestElevateWord == null) {
                         suggestElevateWord = new SuggestElevateWord();
-                        suggestElevateWord.setSuggestWord(strip(list.get(0)));
-                        suggestElevateWord.setReading(strip(list.get(1)));
-                        suggestElevateWord.setTargetRole(strip(list.get(2)));
-                        suggestElevateWord.setTargetLabel(strip(list.get(3)));
-                        suggestElevateWord.setBoost(new BigDecimal(strip(list
-                                .get(4))));
+                        suggestElevateWord.setSuggestWord(suggestWord);
+                        suggestElevateWord.setReading(reading);
+                        suggestElevateWord.setTargetRole(role);
+                        suggestElevateWord.setTargetLabel(label);
+                        suggestElevateWord
+                                .setBoost(StringUtil.isBlank(boost) ? BigDecimal.ONE
+                                        : new BigDecimal(boost));
                         suggestElevateWord.setCreatedBy("system");
                         suggestElevateWord.setCreatedTime(new Timestamp(System
                                 .currentTimeMillis()));
                         suggestElevateWordBhv.insert(suggestElevateWord);
-                    } else if (list.get(1).equals("\"\"")
-                            && list.get(2).equals("\"\"")
-                            && list.get(3).equals("\"\"")) {
+                    } else if (StringUtil.isBlank(reading)
+                            && StringUtil.isBlank(boost)) {
                         suggestElevateWord.setDeletedBy("system");
                         suggestElevateWord.setDeletedTime(new Timestamp(System
                                 .currentTimeMillis()));
                         suggestElevateWordBhv.update(suggestElevateWord);
                     } else {
-                        suggestElevateWord.setReading(strip(list.get(1)));
-                        suggestElevateWord.setTargetRole(strip(list.get(2)));
-                        suggestElevateWord.setTargetLabel(strip(list.get(3)));
-                        suggestElevateWord.setBoost(new BigDecimal(strip(list
-                                .get(4))));
+                        suggestElevateWord.setReading(reading);
+                        suggestElevateWord
+                                .setBoost(StringUtil.isBlank(boost) ? BigDecimal.ONE
+                                        : new BigDecimal(boost));
                         suggestElevateWord.setUpdatedBy("system");
                         suggestElevateWord.setUpdatedTime(new Timestamp(System
                                 .currentTimeMillis()));
@@ -189,7 +203,19 @@ public class SuggestElevateWordService extends BsSuggestElevateWordService
         }
     }
 
-    private static String strip(final String item) {
-        return item.substring(1, item.length() - 1);
+    static String getValue(final List<String> list, final int index) {
+        if (index < list.size()) {
+            return StringUtil.EMPTY;
+        }
+        String item = list.get(index).trim();
+        if (StringUtil.isBlank(item)) {
+            return StringUtil.EMPTY;
+        }
+        if (item.length() > 1 && item.charAt(0) == '"'
+                && item.charAt(item.length() - 1) == '"') {
+            item = item.substring(1, item.length() - 2);
+        }
+        return item;
     }
+
 }