[Yanel-commits] rev 47966 -
public/yanel/trunk/src/contributions/resources/calendar/src/java/org/wyona/yanel/impl/resources/calendar
michi at wyona.com
michi at wyona.com
Sun Mar 7 17:27:54 CET 2010
Author: michi
Date: 2010-03-07 17:27:54 +0100 (Sun, 07 Mar 2010)
New Revision: 47966
Modified:
public/yanel/trunk/src/contributions/resources/calendar/src/java/org/wyona/yanel/impl/resources/calendar/CalendarResource.java
Log:
generate xml refactored and well-formedness check added
Modified: public/yanel/trunk/src/contributions/resources/calendar/src/java/org/wyona/yanel/impl/resources/calendar/CalendarResource.java
===================================================================
--- public/yanel/trunk/src/contributions/resources/calendar/src/java/org/wyona/yanel/impl/resources/calendar/CalendarResource.java 2010-03-07 15:59:26 UTC (rev 47965)
+++ public/yanel/trunk/src/contributions/resources/calendar/src/java/org/wyona/yanel/impl/resources/calendar/CalendarResource.java 2010-03-07 16:27:54 UTC (rev 47966)
@@ -124,49 +124,36 @@
if (eventsPath == null) {
eventsPath = getPath();
}
- log.error("DEBUG: Generate calendar from XML based events: " + eventsPath);
+ log.warn("DEBUG: Generate calendar from XML based events: " + eventsPath);
org.wyona.yarep.core.Path[] children = dataRepo.getChildren(new org.wyona.yarep.core.Path(eventsPath));
//org.wyona.yarep.core.Path[] children = dataRepo.search("categories", categories);
- StringBuffer calendar = new StringBuffer("<?xml version=\"1.0\"?>\n<calendar>");
- for (int i = 0; i < children.length; i++) {
- if (dataRepo.isResource(children[i])) {
- InputStream in = dataRepo.getInputStream(children[i]);
- java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
- //StringBuffer event = new StringBuffer();
-
- byte[] buffer = new byte[8192];
- int bytesRead;
- while ((bytesRead = in.read(buffer)) != -1) {
- //event.append(new String(buffer));
- baos.write(buffer, 0, bytesRead);
- }
-
- String event = baos.toString();
- int endOfProcessingInstruction = event.indexOf("?>");
- if (endOfProcessingInstruction > 0) {
- calendar.append(event.toString().substring(endOfProcessingInstruction + 2));
- } else {
- log.error("No processing instruction: " + children[i]);
- }
- }
+ String calendarAsXML = getCalendarAsXML(children);
+ try {
+ org.wyona.commons.xml.XMLHelper.isWellFormed(new java.io.StringBufferInputStream(calendarAsXML));
+ } catch(Exception e) {
+ String errorMessage = "Calendar as XML is not well-formed!";
+ log.error(errorMessage);
+ View view = new View();
+ view.setMimeType("text/plain");
+ view.setInputStream(new java.io.StringBufferInputStream(errorMessage));
+ return view;
}
- calendar.append("</calendar>");
if(viewId != null && viewId.equals("xml")) {
//response.getOutputStream();
View view = new View();
view.setMimeType(getMimeType(viewId));
- view.setInputStream(new java.io.StringBufferInputStream(calendar.toString()));
+ view.setInputStream(new java.io.StringBufferInputStream(calendarAsXML));
return view;
} else if (viewId != null && viewId.equals("xhtml")) {
String xslt = getRTD().getConfigFile().getParent() + File.separator + "xslt" + File.separator + "xml2xhtml.xsl";
java.io.ByteArrayOutputStream out = new java.io.ByteArrayOutputStream();
try {
Transformer transformer = TransformerFactory.newInstance().newTransformer(new StreamSource(new File(xslt)));
- transformer.transform(new StreamSource(new java.io.StringBufferInputStream(calendar.toString())), new StreamResult(out));
+ transformer.transform(new StreamSource(new java.io.StringBufferInputStream(calendarAsXML)), new StreamResult(out));
} catch(Exception e) {
log.error(e.getMessage(), e);
}
@@ -183,7 +170,7 @@
Transformer transformer = TransformerFactory.newInstance().newTransformer(new StreamSource(new File(xslt)));
// TODO: This will cause encoding problems. See for instance http://skew.org/xml/tutorial/
- transformer.transform(new StreamSource(new java.io.StringBufferInputStream(calendar.toString())), new StreamResult(out));
+ transformer.transform(new StreamSource(new java.io.StringBufferInputStream(calendarAsXML)), new StreamResult(out));
} catch(Exception e) {
log.error(e.getMessage(), e);
throw new Exception(e);
@@ -379,4 +366,36 @@
String[] props = {"classes", "categories"};
return props;
}
+
+ /**
+ * Get calendar as XML string
+ */
+ private String getCalendarAsXML(org.wyona.yarep.core.Path[] children) throws Exception {
+ Repository dataRepo = getRealm().getRepository();
+ StringBuilder calendar = new StringBuilder("<?xml version=\"1.0\"?>\n<calendar>");
+ for (int i = 0; i < children.length; i++) {
+ if (dataRepo.isResource(children[i])) {
+ InputStream in = dataRepo.getInputStream(children[i]);
+ java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
+ //StringBuffer event = new StringBuffer();
+
+ byte[] buffer = new byte[8192];
+ int bytesRead;
+ while ((bytesRead = in.read(buffer)) != -1) {
+ //event.append(new String(buffer));
+ baos.write(buffer, 0, bytesRead);
+ }
+
+ String event = baos.toString();
+ int endOfProcessingInstruction = event.indexOf("?>");
+ if (endOfProcessingInstruction > 0) {
+ calendar.append(event.toString().substring(endOfProcessingInstruction + 2));
+ } else {
+ log.error("No processing instruction: " + children[i]);
+ }
+ }
+ }
+ calendar.append("</calendar>");
+ return calendar.toString();
+ }
}
More information about the Yanel-commits
mailing list