@Test
 @SuppressWarnings("unchecked")
 public void testResourceChangeSet() throws IOException {
   File tempDir = OperatingSystemUtils.createTempDir();
   File file = createTempFile(tempDir, true);
   ResourceTransaction transaction = resourceFactory.getTransaction();
   Assert.assertNotNull(transaction);
   Assert.assertFalse(transaction.isStarted());
   transaction.begin();
   Assert.assertTrue(transaction.isStarted());
   FileResource<?> fileResource = resourceFactory.create(FileResource.class, file);
   Assert.assertNotNull(fileResource);
   fileResource.setContents("Hello World");
   Assert.assertEquals("Hello World", fileResource.getContents());
   Collection<ResourceEvent> changeSet = transaction.getChangeSet();
   Assert.assertEquals(3, changeSet.size());
   Iterator<ResourceEvent> iterator = changeSet.iterator();
   // Created the file
   {
     ResourceEvent event = iterator.next();
     Assert.assertThat(event, is(instanceOf(ResourceCreated.class)));
     Assert.assertEquals(fileResource, event.getResource());
   }
   {
     ResourceEvent event = iterator.next();
     // Modified the Directory
     Assert.assertThat(event, is(instanceOf(ResourceModified.class)));
     Assert.assertThat(event.getResource(), is(instanceOf(DirectoryResource.class)));
   }
   {
     ResourceEvent event = iterator.next();
     // Modified the File resource
     Assert.assertThat(event, is(instanceOf(ResourceModified.class)));
     Assert.assertEquals(fileResource, event.getResource());
   }
   Assert.assertFalse(file.exists());
   Assert.assertTrue(fileResource.exists());
   transaction.commit();
   Assert.assertTrue(fileResource.exists());
   Assert.assertTrue(file.exists());
   Assert.assertEquals("Hello World", fileResource.getContents());
 }