I used the scriptom to report on how I am spending my time. (ah.. have to fill those time sheet) Using Swingbuilder and JFreeChart, I threw in this simple script. You will need to setup dependency exactly as described on the help page here.
import org.codehaus.groovy.scriptom.ActiveXObject
import org.jfree.chart.ChartFactory
import javax.swing.WindowConstants as WC
def outlook = new ActiveXObject("Outlook.Application")
def namespace = outlook.GetNamespace("MAPI")
def calFolder = namespace.GetDefaultFolder(9)
def myItems = calFolder.Items
def today = new Date()
startWeek = today - 7
endWeek = today + 7
def categoryMap = [:]
for (i in 1..myItems.Count.value) {
def currentMeeting = myItems.Item(i)
if (currentMeeting.Start >= startWeek && currentMeeting.Start <= endWeek) {
println "Subject: " + currentMeeting.Subject.value
println "Category: " + currentMeeting.Categories
println "Duration: " + currentMeeting.Duration.value
category = currentMeeting.Categories
durationValue = currentMeeting.Duration.value
def value = categoryMap.get(category)
value = value?value:0
def newValue = value + durationValue
categoryMap.put(category,newValue);
}
}
def swing = new groovy.swing.SwingBuilder()
def titleString = 'Time Outlook: ' + String.format('%tm/%<td/%<tY', startWeek) + "-" + String.format('%tm/%<td/%<tY', endWeek)
def frame = swing.frame(title:titleString,
defaultCloseOperation:WC.EXIT_ON_CLOSE,
size:[800,600], locationRelativeTo: null) {
borderLayout()
panel(id:'canvas') { rigidArea(width:700, height:500) }
}
def bounds = new java.awt.Rectangle(0,0, 700,500).bounds
def piedata = new org.jfree.data.general.DefaultPieDataset()
for(entry in categoryMap)
{
piedata.setValue entry.key + " = " + entry.value, entry.value
}
def options = [false, true, false]
def chart = ChartFactory.createPieChart(titleString, piedata, *options)
chart.backgroundPaint = java.awt.Color.white
frame.pack()
frame.show()
chart.draw(swing.canvas.graphics, bounds)
Simple enough script... It gets the ActiveXObject for Outlook application. Then from namespace it gets calendarFolder (constant 9). You can find out more about constant here. calFolder contains all the meeting appointmentItems. Once you get to the appointmentItem you can ask for the properties using groovy dot-notation.
Here is the snapshot of the output
Blogged with the Flock Browser
1 comment:
Nice post. Thanks. Was surprised, that Scriptom immediately worked with my GroovyConsole (Windows Installer package).
Post a Comment