Index: calendar-impl/impl/pom.xml
===================================================================
--- calendar-impl/impl/pom.xml (revision 104403)
+++ calendar-impl/impl/pom.xml (working copy)
@@ -64,21 +64,16 @@
javax.servlet
servlet-api
+
+ org.apache.xmlgraphics
+ fop
+ 1.0
+
- avalon-framework
- avalon-framework
- 20020627
-
-
org.mnode.ical4j
ical4j
1.0.2
-
- fop
- fop
- 0.20.5
-
Index: calendar-impl/impl/src/config/schedule.xsl
===================================================================
--- calendar-impl/impl/src/config/schedule.xsl (revision 104403)
+++ calendar-impl/impl/src/config/schedule.xsl (working copy)
@@ -494,6 +494,7 @@
cm
+
@@ -558,7 +559,7 @@
-
+
@@ -595,7 +596,6 @@
-
+
@@ -60,7 +60,6 @@
-
+
Index: calendar-impl/impl/src/config/schlist.xsl
===================================================================
--- calendar-impl/impl/src/config/schlist.xsl (revision 104403)
+++ calendar-impl/impl/src/config/schlist.xsl (working copy)
@@ -15,7 +15,7 @@
-
+
@@ -41,7 +41,6 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
Index: calendar-impl/impl/src/java/org/sakaiproject/calendar/impl/BaseCalendarService.java
===================================================================
--- calendar-impl/impl/src/java/org/sakaiproject/calendar/impl/BaseCalendarService.java (revision 104403)
+++ calendar-impl/impl/src/java/org/sakaiproject/calendar/impl/BaseCalendarService.java (working copy)
@@ -40,6 +40,7 @@
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Map.Entry;
import java.util.Observable;
import java.util.Properties;
import java.util.Set;
@@ -77,15 +78,19 @@
import net.fortuna.ical4j.model.property.Uid;
import net.fortuna.ical4j.model.property.Version;
-import org.apache.avalon.framework.logger.ConsoleLogger;
+import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.configuration.DefaultConfigurationBuilder;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.fop.apps.Driver;
import org.apache.fop.apps.FOPException;
-import org.apache.fop.apps.Options;
-import org.apache.fop.configuration.Configuration;
-import org.apache.fop.messaging.MessageHandler;
+import org.apache.fop.apps.FOUserAgent;
+import org.apache.fop.apps.Fop;
+import org.apache.fop.apps.FopFactory;
+import org.apache.fop.fonts.substitute.FontQualifier;
+import org.apache.fop.fonts.substitute.FontSubstitution;
+import org.apache.fop.fonts.substitute.FontSubstitutions;
+import org.apache.xmlgraphics.util.MimeConstants;
import org.sakaiproject.alias.api.Alias;
import org.sakaiproject.alias.cover.AliasService;
import org.sakaiproject.authz.api.AuthzPermissionException;
@@ -96,6 +101,7 @@
import org.sakaiproject.calendar.api.Calendar;
import org.sakaiproject.calendar.api.CalendarEdit;
import org.sakaiproject.calendar.api.CalendarEvent;
+import org.sakaiproject.calendar.api.CalendarEvent.EventAccess;
import org.sakaiproject.calendar.api.CalendarEventEdit;
import org.sakaiproject.calendar.api.CalendarEventVector;
import org.sakaiproject.calendar.api.CalendarService;
@@ -5427,8 +5433,9 @@
protected final static String WEEK_VIEW_XSLT_FILENAME = "schedule.xsl";
// FOP Configuration
- protected final static String FOP_USERCONFIG = "fonts/userconfig.xml";
- protected final static String FOP_FONTBASEDIR = "fonts";
+ protected final static String FOP_USERCONFIG = "userconfig.xml";
+ protected final static String FOP_DEFAULT_FONT_KEY = "fop.pdf.default.font";
+ protected final static String FOP_DEFAULT_FONT = "Helvetica";
// Mime Types
protected final static String PDF_MIME_TYPE = "application/pdf";
@@ -6184,28 +6191,21 @@
*/
protected void generatePDF(Document doc, String xslFileName, OutputStream streamOut)
{
- Driver driver = new Driver();
-
- org.apache.avalon.framework.logger.Logger logger = new ConsoleLogger(ConsoleLogger.LEVEL_ERROR);
- MessageHandler.setScreenLogger(logger);
- driver.setLogger(logger);
-
+ Fop fop = null;
try {
- String baseDir = getClass().getClassLoader().getResource(FOP_FONTBASEDIR).toString();
- Configuration.put("fontBaseDir", baseDir);
- InputStream userConfig = getClass().getClassLoader().getResourceAsStream(FOP_USERCONFIG);
- new Options(userConfig);
+ DefaultConfigurationBuilder cfgBuilder = new DefaultConfigurationBuilder();
+ Configuration cfg = cfgBuilder.build(getClass().getClassLoader().getResourceAsStream(FOP_USERCONFIG));
+ FopFactory fopFactory = FopFactory.newInstance();
+ fopFactory.setUserConfig(cfg);
+ fopFactory.setStrictValidation(false);
+ FOUserAgent foUserAgent = fopFactory.newFOUserAgent();
+ fopFactory.getFontManager().setFontSubstitutions(getFontSubstitutions());
+ fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, streamOut);
}
- catch (FOPException fe){
- M_log.warn(this+".generatePDF: ", fe);
- }
catch(Exception e){
M_log.warn(this+".generatePDF: ", e);
}
- driver.setOutputStream(streamOut);
- driver.setRenderer(Driver.RENDER_PDF);
-
try
{
InputStream in = getClass().getClassLoader().getResourceAsStream(xslFileName);
@@ -6248,7 +6248,7 @@
transformer.setParameter("from", rb.getString("event.from"));
transformer.setParameter("sched", rb.getString("sched.for"));
- transformer.transform(src, new SAXResult(driver.getContentHandler()));
+ transformer.transform(src, new SAXResult(fop.getDefaultHandler()));
}
catch (TransformerException e)
@@ -6257,9 +6257,30 @@
M_log.warn(this+".generatePDF(): " + e);
return;
}
+ catch (FOPException e)
+ {
+ e.printStackTrace();
+ M_log.warn(this+".generatePDF(): " + e);
+ return;
+ }
}
/**
+ * If a font is set in sakai.properties, then replace the default font.
+ * Otherwise, use FOP default font.
+ */
+ private FontSubstitutions getFontSubstitutions()
+ {
+ FontQualifier fromQualifier = new FontQualifier();
+ fromQualifier.setFontFamily("DEFAULT_FONT");
+ FontQualifier toQualifier = new FontQualifier();
+ toQualifier.setFontFamily(m_serverConfigurationService.getString(FOP_DEFAULT_FONT_KEY, FOP_DEFAULT_FONT));
+ FontSubstitutions result = new FontSubstitutions();
+ result.add(new FontSubstitution(fromQualifier, toQualifier));
+ return result;
+ }
+
+ /**
* Make a full-day time range given a year, month, and day
*/
protected TimeRange getFullDayTimeRangeFromYMD(int year, int month, int day)