[from now] 2012/05/30 18:33:12

diff --git a/src/main/java/org/ryu22e/nico2cal/controller/myCalendar/SaveController.java b/src/main/java/org/ryu22e/nico2cal/controller/myCalendar/SaveController.java
index b1f8807..ff88af5 100644
--- a/src/main/java/org/ryu22e/nico2cal/controller/myCalendar/SaveController.java
+++ b/src/main/java/org/ryu22e/nico2cal/controller/myCalendar/SaveController.java
@@ -13,6 +13,7 @@ import org.slim3.controller.Navigation;
 import org.slim3.controller.validator.Validators;
 import org.slim3.util.BeanUtil;

+import com.google.appengine.api.datastore.Key;
 import com.google.gson.Gson;
 import com.google.gson.reflect.TypeToken;
 import com.google.gson.stream.JsonWriter;
@@ -51,7 +52,8 @@ public final class SaveController extends Controller {
         BeanUtil.copy(request, myCalendar);
         myCalendar.setKeywords(Arrays.asList(paramValues("keywords[]")));
         myCalendar.setDisabled(false);
-        calendarService.putMyCalendar(myCalendar);
+        Key key = calendarService.putMyCalendar(myCalendar);
+        calendarService.importToMyCalendar(key);

         Map<String, String> map = new HashMap<String, String>();
         map.put("status", "ok");
diff --git a/src/main/java/org/ryu22e/nico2cal/service/CalendarService.java b/src/main/java/org/ryu22e/nico2cal/service/CalendarService.java
index a442760..34a478e 100644
--- a/src/main/java/org/ryu22e/nico2cal/service/CalendarService.java
+++ b/src/main/java/org/ryu22e/nico2cal/service/CalendarService.java
@@ -3,9 +3,12 @@ package org.ryu22e.nico2cal.service;
 import java.io.IOException;
 import java.net.URI;
 import java.net.URISyntaxException;
+import java.util.ArrayList;
 import java.util.Collections;
+import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Set;
 import java.util.TimeZone;
 import java.util.logging.Logger;

@@ -34,6 +37,7 @@ import org.ryu22e.nico2cal.util.GoogleApiKeyUtil;
 import org.ryu22e.nico2cal.util.HtmlRemoveUtil;
 import org.slim3.datastore.Datastore;
 import org.slim3.datastore.ModelQuery;
+import org.slim3.util.AppEngineUtil;
 import org.slim3.util.BeanUtil;
 import org.slim3.util.CopyOptions;
 import org.slim3.util.DateUtil;
@@ -275,6 +279,20 @@ public class CalendarService {
     }

     /**
+     * @param keywords
+     * @return
+     */
+    private List<String> generateKeywords(List<String> keywords) {
+        Set<String> set = new HashSet<String>();
+        for (String keyword : keywords) {
+            if (!"".equals(keyword)) {
+                set.add(keyword);
+            }
+        }
+        return new ArrayList<String>(set);
+    }
+
+    /**
      * 連携対象のGoogle Calendarを登録する。
      * @param myCalendar {@link MyCalendar}
      * @return 登録後のKey
@@ -310,6 +328,7 @@ public class CalendarService {
             options.exclude("key", "user");
             BeanUtil.copy(myCalendar, entity, options);
         }
+        entity.setKeywords(generateKeywords(entity.getKeywords()));
         return Datastore.put(entity);
     }

@@ -406,7 +425,15 @@ public class CalendarService {
                     // カレンダーのSummaryに生放送のタイトルを設定する。
                     event.setSummary(nicolive.getTitle());
                     // カレンダーのDescriptionに生放送の説明文を設定する。
-                    event.setDescription(nicolive.getDescription().toString());
+                    try {
+                        event.setDescription(HtmlRemoveUtil.removeHtml(nicolive
+                            .getDescription()
+                            .getValue()));
+                    } catch (SAXException e) {
+                        LOGGER.warning(e.getMessage());
+                    } catch (IOException e) {
+                        LOGGER.warning(e.getMessage());
+                    }
                     java.util.Calendar c =
                             DateUtil.toCalendar(nicolive.getOpenTime());
                     // 生放送会場日時をcom.google.api.client.util.DateTimeに変換する。
@@ -417,13 +444,20 @@ public class CalendarService {
                     // カレンダーのStartに生放送会場日時を設定する。
                     EventDateTime start = new EventDateTime();
                     start.setDateTime(datetime);
+                    start.setTimeZone(timezone.getID());
                     event.setStart(start);
                     // カレンダーのEndに生放送会場日時を設定する。
                     EventDateTime end = new EventDateTime();
+                    end.setTimeZone(timezone.getID());
                     end.setDateTime(datetime);
                     event.setEnd(end);

-                    client.events().insert(myCalendar.getCalendarId(), event);
+                    if (AppEngineUtil.isProduction()) {
+                        client
+                            .events()
+                            .insert(myCalendar.getCalendarId(), event)
+                            .execute();
+                    }

                     // インポートしたNicoliveをmyCalendarLogに登録して、二度とインポートしないようにする。
                     MyCalendarLog myCalendarLog = new MyCalendarLog();
diff --git a/src/test/java/org/ryu22e/nico2cal/service/CalendarServiceTest.java b/src/test/java/org/ryu22e/nico2cal/service/CalendarServiceTest.java
index 0407468..cd99f94 100644
--- a/src/test/java/org/ryu22e/nico2cal/service/CalendarServiceTest.java
+++ b/src/test/java/org/ryu22e/nico2cal/service/CalendarServiceTest.java
@@ -344,8 +344,12 @@ public final class CalendarServiceTest extends AppEngineTestCase {

         MyCalendar myCalendar = new MyCalendar();
         myCalendar.setCalendarId("test2");
-        myCalendar.setKeywords(Arrays
-            .asList("keyword1", "keyword2", "keyword3"));
+        myCalendar.setKeywords(Arrays.asList(
+            "keyword1",
+            "keyword2",
+            "keyword3",
+            "keyword3",
+            ""));
         Key key = service.putMyCalendar(myCalendar);
         MyCalendar storedMyCalendar =
                 Datastore.getOrNull(MyCalendar.class, key);