From: <es...@us...> - 2009-11-13 16:41:40
|
Revision: 427 http://columba.svn.sourceforge.net/columba/?rev=427&view=rev Author: eschman Date: 2009-11-13 16:41:32 +0000 (Fri, 13 Nov 2009) Log Message: ----------- [feature] add calendar support for iCalendar files on the internet. No gui for creating them yet Modified Paths: -------------- columba/trunk/calendar/src/main/java/org/columba/calendar/command/ImportCalendarCommand.java columba/trunk/calendar/src/main/java/org/columba/calendar/config/CalendarList.java columba/trunk/calendar/src/main/java/org/columba/calendar/parser/CalendarImporter.java columba/trunk/calendar/src/main/resources/org/columba/calendar/plugin/plugin.xml columba/trunk/calendar/src/test/java/org/columba/calendar/parser/CalendarImporterTest.java Added Paths: ----------- columba/trunk/calendar/src/main/java/org/columba/calendar/item/WebICalCalendarItem.java columba/trunk/calendar/src/main/java/org/columba/calendar/store/WebICalCalendarStore.java Modified: columba/trunk/calendar/src/main/java/org/columba/calendar/command/ImportCalendarCommand.java =================================================================== --- columba/trunk/calendar/src/main/java/org/columba/calendar/command/ImportCalendarCommand.java 2009-11-13 15:44:18 UTC (rev 426) +++ columba/trunk/calendar/src/main/java/org/columba/calendar/command/ImportCalendarCommand.java 2009-11-13 16:41:32 UTC (rev 427) @@ -52,7 +52,7 @@ for (int i = 0; i < sourceFiles.length; i++) { Iterator<IEventInfo> it = new CalendarImporter() - .importCalendar(calendar, sourceFiles[i]); + .importCalendar(calendar.getId(), sourceFiles[i]); while (it.hasNext()) { IEventInfo event = it.next(); Modified: columba/trunk/calendar/src/main/java/org/columba/calendar/config/CalendarList.java =================================================================== --- columba/trunk/calendar/src/main/java/org/columba/calendar/config/CalendarList.java 2009-11-13 15:44:18 UTC (rev 426) +++ columba/trunk/calendar/src/main/java/org/columba/calendar/config/CalendarList.java 2009-11-13 16:41:32 UTC (rev 427) @@ -42,8 +42,7 @@ private int nextUid = 1; - private static CalendarList instance = new CalendarList(CalendarConfig - .getInstance().getCalendarConfig().getElement("/list")); + private static CalendarList instance; private CalendarList(XmlElement listNode) { this.listNode = listNode; @@ -100,6 +99,10 @@ } public static CalendarList getInstance() { + if (instance == null) { + instance = new CalendarList(CalendarConfig + .getInstance().getCalendarConfig().getElement("/list")); + } return instance; } Added: columba/trunk/calendar/src/main/java/org/columba/calendar/item/WebICalCalendarItem.java =================================================================== --- columba/trunk/calendar/src/main/java/org/columba/calendar/item/WebICalCalendarItem.java (rev 0) +++ columba/trunk/calendar/src/main/java/org/columba/calendar/item/WebICalCalendarItem.java 2009-11-13 16:41:32 UTC (rev 427) @@ -0,0 +1,18 @@ +package org.columba.calendar.item; + +import org.columba.calendar.base.CalendarItem; +import org.columba.calendar.store.WebICalCalendarStore; +import org.columba.core.config.DefaultItem; + +public class WebICalCalendarItem extends CalendarItem { + + public WebICalCalendarItem(DefaultItem item) { + super(item); + + store = new WebICalCalendarStore(getId(), item.getString("property", "url")); + } + + public CATEGORY getCategory() { + return CATEGORY.WEB; + } +} Property changes on: columba/trunk/calendar/src/main/java/org/columba/calendar/item/WebICalCalendarItem.java ___________________________________________________________________ Added: svn:mime-type + text/plain Modified: columba/trunk/calendar/src/main/java/org/columba/calendar/parser/CalendarImporter.java =================================================================== --- columba/trunk/calendar/src/main/java/org/columba/calendar/parser/CalendarImporter.java 2009-11-13 15:44:18 UTC (rev 426) +++ columba/trunk/calendar/src/main/java/org/columba/calendar/parser/CalendarImporter.java 2009-11-13 16:41:32 UTC (rev 427) @@ -19,6 +19,7 @@ import java.io.File; import java.io.FileInputStream; +import java.io.InputStream; import java.net.URL; import java.util.Calendar; import java.util.HashMap; @@ -42,7 +43,6 @@ import net.fortuna.ical4j.model.property.RRule; import org.columba.calendar.base.UUIDGenerator; -import org.columba.calendar.base.api.ICalendarItem; import org.columba.calendar.model.Event; import org.columba.calendar.model.EventInfo; import org.columba.calendar.model.Recurrence; @@ -57,11 +57,15 @@ super(); } - public Iterator<IEventInfo> importCalendar(ICalendarItem calendarItem, File file) throws Exception { + public Iterator<IEventInfo> importCalendar(String calendarId, File file) throws Exception { + FileInputStream in = new FileInputStream(file); + + return importCalendar(calendarId, in); + } + + public Iterator<IEventInfo> importCalendar(String calendarId, InputStream in) throws Exception { Vector<IEventInfo> v = new Vector<IEventInfo>(); - FileInputStream in = new FileInputStream(file); - CalendarBuilder builder = new CalendarBuilder(); net.fortuna.ical4j.model.Calendar calendar = builder.build(in); @@ -302,7 +306,7 @@ for (String category : categories) event.addCategory(category); - IEventInfo eventInfo = new EventInfo(uid, calendarItem.getId(), event); + IEventInfo eventInfo = new EventInfo(uid, calendarId, event); v.add(eventInfo); } else if (component.getName().equals(Component.VTIMEZONE)) { Added: columba/trunk/calendar/src/main/java/org/columba/calendar/store/WebICalCalendarStore.java =================================================================== --- columba/trunk/calendar/src/main/java/org/columba/calendar/store/WebICalCalendarStore.java (rev 0) +++ columba/trunk/calendar/src/main/java/org/columba/calendar/store/WebICalCalendarStore.java 2009-11-13 16:41:32 UTC (rev 427) @@ -0,0 +1,106 @@ +package org.columba.calendar.store; + +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLConnection; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import org.columba.calendar.model.ComponentInfoList; +import org.columba.calendar.model.api.IComponentInfo; +import org.columba.calendar.model.api.IComponentInfoList; +import org.columba.calendar.model.api.IEventInfo; +import org.columba.calendar.parser.CalendarImporter; +import org.columba.calendar.store.api.StoreException; + +public class WebICalCalendarStore extends AbstractCalendarStore { + + Map<String, IEventInfo> map; + Map<String, String> contactEventMap; + + String id; + + public WebICalCalendarStore(String id, String stringUrl) { + this.id = id; + + map = new HashMap<String, IEventInfo>(); + + URL url = null; + try { + url = new URL(stringUrl); + } catch (MalformedURLException e) { + e.printStackTrace(); + return; + } + + URLConnection connection; + try { + connection = url.openConnection(); + Iterator<IEventInfo> it = new CalendarImporter().importCalendar(id, + connection.getInputStream()); + + while (it.hasNext()) { + IEventInfo eventinfo = it.next(); + map.put(eventinfo.getId(), eventinfo); + } + } catch (Exception e) { + e.printStackTrace(); + } + + addActivitiesToDepository(); + } + + public String getId() { + return id; + } + + public void add(IComponentInfo basicModel) throws StoreException { + throw new StoreException("read only"); + } + + public boolean exists(Object id) throws StoreException { + return map.containsKey(id); + } + + public IComponentInfo get(Object id) throws StoreException { + return map.get(id); + } + + public void modify(Object id, IComponentInfo basicModel) throws StoreException { + throw new StoreException("read only"); + } + + public IComponentInfoList getComponentInfoList() throws StoreException { + ComponentInfoList list = new ComponentInfoList(); + Iterator<IEventInfo> it = map.values().iterator(); + while(it.hasNext()) { + list.add(it.next()); + } + return list; + } + + public IComponentInfoList getComponentInfoList(String calendarId) + throws StoreException { + ComponentInfoList list = new ComponentInfoList(); + Iterator<IEventInfo> it = map.values().iterator(); + while(it.hasNext()) { + list.add(it.next()); + } + return list; + } + + public Iterator<String> getIdIterator() throws StoreException { + return map.keySet().iterator(); + } + + public Iterator<String> getIdIterator(String calendarId) + throws StoreException { + return map.keySet().iterator(); + } + + public boolean isReadOnly(String uid) throws StoreException { + return true; + } + +} Property changes on: columba/trunk/calendar/src/main/java/org/columba/calendar/store/WebICalCalendarStore.java ___________________________________________________________________ Added: svn:mime-type + text/plain Modified: columba/trunk/calendar/src/main/resources/org/columba/calendar/plugin/plugin.xml =================================================================== --- columba/trunk/calendar/src/main/resources/org/columba/calendar/plugin/plugin.xml 2009-11-13 15:44:18 UTC (rev 426) +++ columba/trunk/calendar/src/main/resources/org/columba/calendar/plugin/plugin.xml 2009-11-13 16:41:32 UTC (rev 427) @@ -9,6 +9,7 @@ <extensionlist id="org.columba.calendar.item"> <extension id="LocalCalendarItem" class="org.columba.calendar.item.LocalCalendarItem" /> <extension id="BirthdayCalendarItem" class="org.columba.calendar.item.BirthdayCalendarItem" /> + <extension id="WebICalCalendarItem" class="org.columba.calendar.item.WebICalCalendarItem" /> </extensionlist> <extensionlist id="org.columba.core.component"> Modified: columba/trunk/calendar/src/test/java/org/columba/calendar/parser/CalendarImporterTest.java =================================================================== --- columba/trunk/calendar/src/test/java/org/columba/calendar/parser/CalendarImporterTest.java 2009-11-13 15:44:18 UTC (rev 426) +++ columba/trunk/calendar/src/test/java/org/columba/calendar/parser/CalendarImporterTest.java 2009-11-13 16:41:32 UTC (rev 427) @@ -23,11 +23,8 @@ import java.util.SimpleTimeZone; import java.util.TimeZone; -import org.columba.calendar.base.CalendarItem; import org.columba.calendar.model.api.IEventInfo; import org.columba.calendar.model.api.IRecurrence; -import org.columba.core.config.DefaultItem; -import org.columba.core.xml.XmlElement; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; @@ -46,16 +43,10 @@ public void testImportCalendar() { File example1 = new File("src/test/resources/SunbirdEvents.ics"); - DefaultItem node = new DefaultItem(new XmlElement()); - node.setString("uid", "example"); - node.setString("type", "LocalCalendarItem"); - node.setString("name", "example"); - node.setString("color", null); - CalendarItem calendarItem = new CalendarItem(node); CalendarImporter importer = new CalendarImporter(); Iterator<IEventInfo> i = null; try { - i = importer.importCalendar(calendarItem, example1); + i = importer.importCalendar("example", example1); } catch (Exception e) { e.printStackTrace(); @@ -115,16 +106,10 @@ @Test public void testImportCalendarRecurrence() { File example1 = new File("src/test/resources/SunbirdRecurrendEvents.ics"); - DefaultItem node = new DefaultItem(new XmlElement()); - node.setString("uid", "example"); - node.setString("type", "LocalCalendarItem"); - node.setString("name", "example"); - node.setString("color", null); - CalendarItem calendarItem = new CalendarItem(node); CalendarImporter importer = new CalendarImporter(); Iterator<IEventInfo> i = null; try { - i = importer.importCalendar(calendarItem, example1); + i = importer.importCalendar("example", example1); } catch (Exception e) { e.printStackTrace(); Assert.fail("Got following exception:" + e.getMessage()); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |