📄 xcal.java
字号:
/* * XCal.java * * Created on November 26, 2001, 11:17 PM */package com.sams.jxta.xcal;// JDOM interfaceimport org.jdom.*;import org.jdom.output.*;import org.jdom.input.*;import java.util.Date;import java.text.SimpleDateFormat;import javax.xml.parsers.*;import org.xml.sax.*;import org.w3c.dom.*;import org.xml.sax.SAXException;import java.io.*;import java.net.*;import java.lang.reflect.*;import java.util.*;import net.jxta.endpoint.Message;import net.jxta.endpoint.MessageElement;import net.jxta.peer.*;/** * * @author Administrator */public class XCal { protected SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd'T'kkmmss'Z'"); static final String supporedVersion="2.0"; String versionAttr = "version"; String valueOfXML = null; boolean changed = true; String method ="PUBLISH"; public static final String iCalTag = "iCalendar"; public static final String vCalTag = "vCalendar"; public static final String vcardURITag = "x-JXTA-URI"; public static final String veventTag = "vevent";// Encapsulates event data public static final String uidTag = "uid"; public static final String organizerTag = "organizer"; public static final String dtstampTag = "dtstamp"; public static final String summaryTag = "summary"; public static final String locationTag = "location"; public static final String X_VCARD_URI_Tag = "X-VCARD-URI"; public static final String dtstartTag = "dtstart"; public static final String dtendTag = "dtend"; public static final String categoriesTag = "categories"; public static final String itemTag = "item"; public static final String attendeeTag = "attendee"; public static final String noteTag = "note"; protected String uid=""; protected String vCardURI="";// URI of a VCARD protected String organizer=""; protected String dtstamp=format.format( new Date(System.currentTimeMillis())); protected String summary="test date"; protected String location=""; protected String vCardAddrType="";// type of address in VCARD "HOME", "WORK","" (unspecified returns the first addr) protected String dtstart=""; protected String dtend=""; protected ArrayList category ; // The following are for each attendie //protected String role[]={"CHAIR"};//REQ-PART //protected String isRSVP[]={"TRUE"}; protected ArrayList attendee=null; protected String note=""; /** Creates new XCal */ public XCal() { category = new ArrayList(); category.add("Meeting"); } public XCal(String message) { processMessage(message); } public String toString(){ return organizer+", "+summary+" at:"+location+" "+dtstart+"-"+dtend+" ["+dtstamp+"]"; } /* public XCal(Message message) { try{ processMessage(message); }catch(java.io.IOException ioe){ ioe.printStackTrace(); }catch( java.lang.reflect.InvocationTargetException ite){ ite.printStackTrace(); } } */ public String toXML(){ if (changed){ // Note that many compilers covert this into a series of appends // to a StringBuffer, thus making this effiecient when written this way. valueOfXML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?> \n" //+"<!DOCTYPE iCalendar PUBLIC \"-//IETF//DTD XCAL//iCalendar XML//EN\" \"http:////www.ietf.org//internet-drafts//draft-ietf-calsch-many-xcal-00.txt \" > \n" +"<icalendar> \n" +"<vcalendar method=\""+method+"\" version=\""+supporedVersion+"\" prodid=\"-//HandGen//NONSGML vGen v1.0//EN\"> \n" +"<vevent> \n" +" <uid>"+uid+"</uid> \n" +" <dtstamp>"+dtstamp+"</dtstamp> \n" +" <organizer>"+organizer+"</organizer> \n" +" <summary>"+summary+"</summary> \n" +" <location>"+location+"</location> \n" +" <X-VCARD URI=\""+vCardURI+"\" addrType=\""+vCardAddrType+"\"/> \n"// location via a VCard +" <dtstart>"+dtstart+"</dtstart> \n" +" <dtend>"+dtend+"</dtend> \n" +" <note>"+note+"</note> \n"; if(category != null){ valueOfXML+=" <categories> \n"; for(int i=0;i<category.size();i++){ String cat = (String)category.get(i); valueOfXML+=" <item>"+cat+"</item> \n"; } valueOfXML+=" </categories> \n"; } if(attendee != null){ for(int i=0;i<attendee.size();i++){ Attendee person = (Attendee)attendee. get(i); valueOfXML+=" <attendee role=\""+person.getRole()+"\" rsvp=\""+person.getRsvp()+"\">"+ person.getAttendee() +"</attendee> \n"; } } valueOfXML+="</vevent> \n" +"</vcalendar> \n" +"</icalendar> \n";/* TBD<class>CONFIDENTIAL</class><transp>TRANSPARENT</transp><categories><item>Anniversary</item><item>Personal</item><item>Special Occasion</item></categories><rrule>FREQ=YEARLY</rrule> */ }// if changed return valueOfXML; } public org.jdom.Document toJDOM(){ try{ ByteArrayInputStream in = new ByteArrayInputStream(toXML().getBytes()); SAXBuilder builder = new SAXBuilder(); org.jdom.Document doc = builder.build(in); return doc; }catch(JDOMException je){ je.printStackTrace(); return null; } } /* public void processMessage(Message msg) throws IOException, InvocationTargetException { try{ DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = docBuilderFactory.newDocumentBuilder(); MessageElement element = msg.getElement(iCalTag); org.w3c.dom.Document responseDoc = builder.parse(element.getStream()); org.w3c.dom.Element root = responseDoc.getDocumentElement(); processMessage(root); }catch(java.io.IOException ioe){ ioe.printStackTrace(); }catch(org.xml.sax.SAXParseException spe){ System.out.println(); System.out.println("line:"+spe.getLineNumber()); System.out.println("Column:"+spe.getColumnNumber()); System.out.println("PublicId:"+spe.getPublicId() ); System.out.println("SystemId:"+spe.getSystemId() ); System.out.println(msg); System.out.println("-------------------------------------------------------"); spe.printStackTrace(System.out); }catch(org.xml.sax.SAXException se){ se.printStackTrace(); }catch(javax.xml.parsers.ParserConfigurationException pce){ pce.printStackTrace(); changed = true; } }*/ public void processMessage(String msg) { try{ //DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); //DocumentBuilder builder = docBuilderFactory.newDocumentBuilder(); //MessageElement element = msg.getElement(vCardTag); //Document responseDoc = builder.parse(element.getStream()); ByteArrayInputStream in = new ByteArrayInputStream(msg.getBytes()); org.jdom.input.SAXBuilder builder = new org.jdom.input.SAXBuilder(); org.jdom.Document doc = builder.build(in); /* System.err.println("______________________________________________"); XMLOutputter outputter = new XMLOutputter(" ",true); try{ outputter.output(doc, System.err); }catch(java.io.IOException ioe){ } System.err.println("______________________________________________"); */ org.jdom.Element element = doc.getRootElement(); if (element.getName().equals("icalendar")){ element = element.getChild("vcalendar").getChild("vevent"); }else if (element.getName().equals("vcalendar")){ element = element.getChild("vevent"); } processMessage(element); }catch(org.jdom.JDOMException ioe){ ioe.printStackTrace(); } } public void processMessageX(org.w3c.dom.Element root) { NodeList vNodes = root.getChildNodes(); for (int h = 0; h < vNodes.getLength(); h++) { Node vNode = vNodes.item(h); /* String version = getText(vNode.getAttributeNode( versionAttr )); if(supporedVersion.equals(version)&& vCalTag.equals(vNode.getNodeName())){ System.out.println("Supported Version!"); }else{ System.out.println("##### Error Unsupported vCard document version:"+version); continue; } */ Enumeration enum= null; org.w3c.dom.Element tag,tag1,tag2,tag3 =null; NodeList hitNodes = vNode.getChildNodes(); for (int i = 0; i < hitNodes.getLength(); i++) { Node hitNode = hitNodes.item(i); if (hitNode.getNodeName().equals(veventTag)){ NodeList childNodesList = hitNode.getChildNodes(); for (int j = 0; j < childNodesList.getLength(); j++) { Node subNode = childNodesList.item(j); if (organizerTag.equals(subNode.getNodeName())){ organizer = getText(subNode); }else if (uidTag.equals(subNode.getNodeName())){ uid = getText(subNode); }else if (dtstampTag.equals(subNode.getNodeName())){ dtstamp = getText(subNode); }else if (summaryTag.equals(subNode.getNodeName())){ summary = getText(subNode); }else if (locationTag.equals(subNode.getNodeName())){ location = getText(subNode); }else if (dtstartTag.equals(subNode.getNodeName())){ dtstart = getText(subNode); }else if (dtendTag.equals(subNode.getNodeName())){ dtend = getText(subNode); // }else if (categoriesTag.equals(subNode.getNodeName())){ // categories = getText(subNode); }else if (attendeeTag.equals(subNode.getNodeName())){ NodeList attendeeNodesList = subNode.getChildNodes(); for (int k = 0; k < attendeeNodesList.getLength(); k++) { Node attendeeNode = attendeeNodesList.item(k); //attendee[0] = getText(attendeeNode); } }else if (noteTag.equals(subNode.getNodeName())){ note = getText(subNode); } } }else if (organizerTag.equals(hitNode.getNodeName())){ organizer = getText(hitNode); } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -