/*
* This file is part of the TimeFinder project.
* Visit http://www.timefinder.de for more information.
* Copyright (c) 2009 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.timefinder.core.io;
import de.timefinder.data.CalendarSettings;
import de.timefinder.data.ICalendarSettings;
import de.timefinder.data.JavaOneInterval;
import de.timefinder.planner.TimeFinderPlanner;
import org.joda.time.DateTime;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import javax.swing.*;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
/**
* @author Peter Karich, peat_hal ‘at’ users ‘dot’ sourceforge ‘dot’ net
*/
public class ImportJavaOne {
public static void main(String[] args) throws Exception {
String file = "C:\\Users\\btn417\\Documents\\sessions_catalog.j1";
// String file = "/home/peterk/sessions_catalog.j1";
final List list = new ImportJavaOne().parse(
new FileInputStream(file));
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame frame = new JFrame("TimeFinder Planner");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
CalendarSettings settings = new CalendarSettings();
ImportJavaOne.overwriteSettings(settings);
TimeFinderPlanner planner = new TimeFinderPlanner(settings);
planner.addAllInterval(list);
frame.setContentPane(planner);
frame.setSize(1000, 640);
frame.setVisible(true);
}
});
}
public static void overwriteSettings(ICalendarSettings settings) {
// track every 10 minutes:
settings.setMillisPerTimeslot(10 * 60 * 1000);
// 14 hours
settings.setTimeslotsPerDay(6 * 16);
settings.setNumberOfDays(5);
settings.setStartDate(new DateTime(2009, 6, 1, 8, 0, 0, 0));
}
public List<JavaOneInterval> parse(InputStream is) throws Exception {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setValidating(false);
factory.setNamespaceAware(false);
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(is);
return parse(doc);
}
public List<JavaOneInterval> parse(Document doc) {
List<JavaOneInterval> eventList = new ArrayList<JavaOneInterval>();
NodeList nl = doc.getElementsByTagName("tr");
for (int i = 0; i < nl.getLength(); i++) {
if (nl.item(i).getNodeType() != Node.ELEMENT_NODE) {
continue;
}
Element el = (Element) nl.item(i);
NodeList columnNodeList = el.getElementsByTagName("td");
JavaOneInterval event = new JavaOneInterval();
eventList.add(event);
for (int jj = 0; jj < columnNodeList.getLength(); jj++) {
if (columnNodeList.item(jj).getNodeType() != Node.ELEMENT_NODE) {
continue;
}
Element columnElement = (Element) columnNodeList.item(jj);
switch (jj) {
case 0:
event.setId(columnElement.getTextContent().trim());
break;
case 1:
event.setDescription(columnElement.getTextContent().trim());
break;
case 2:
event.setType(columnElement.getTextContent().trim());
break;
case 3:
event.setSpeakers(columnElement.getTextContent().trim());
break;
case 4:
NodeList timeNodes = columnElement.getChildNodes();
for (int j = 0; j < timeNodes.getLength(); j++) {
if (timeNodes.item(j) != null) {
String dateStr = timeNodes.item(j).getTextContent().trim();
if (dateStr.contains("June")) {
int day = Integer.parseInt(dateStr.split(" ")[1]);
String timeStrs[] = timeNodes.item(j + 2).getTextContent().trim().split(" - ");
String startStr = timeStrs[0];
String endStr = timeStrs[1];
int index = startStr.indexOf(":");
int index2 = startStr.indexOf(" ");
int startHour = Integer.parseInt(startStr.substring(0, index));
int startMinute = Integer.parseInt(startStr.substring(index + 1, index2));
index = endStr.indexOf(":");
index2 = endStr.indexOf(" ");
int endHour = Integer.parseInt(endStr.substring(0, index));
int endMinute = Integer.parseInt(endStr.substring(index + 1, index2));
if (timeStrs[0].endsWith("PM")) {
if (startHour != 12) {
startHour += 12;
}
}
if (timeStrs[1].endsWith("PM")) {
if (endHour != 12) {
endHour += 12;
}
}
DateTime start = new DateTime(2009, 6, day, startHour, startMinute, 0, 0);
DateTime end = new DateTime(2009, 6, day, endHour, endMinute, 0, 0);
event.setStartDateTime(start);
event.setEndDateTime(end);
}
}
}
break;
default:
System.out.println("error");
}
}
}
// System.out.println("events: " + eventList.size());
// for (JavaOneEvent ev : eventList) {
// System.out.println(ev);
// }
return eventList;
}
}