FileDocCategorySizeDatePackage
TestMetaDataIPI.javaAPI DocApache Poi 3.0.125209Mon Jan 01 12:39:44 GMT 2007org.apache.poi.hpsf.basic

TestMetaDataIPI

public class TestMetaDataIPI extends TestCase
Basing on: src/examples/src/org/apache/poi/hpsf/examples/ModifyDocumentSummaryInformation.java This class tests reading and writing of meta data. No actual document is created. All information is stored in a virtal document in a ByteArrayOutputStream
author
Matthias Günter
since
2006-03-03
version
$Id: TestEmptyProperties.java 353563 2004-06-22 16:16:33Z klute $

Fields Summary
private ByteArrayOutputStream
bout
private POIFSFileSystem
poifs
DirectoryEntry
dir
DocumentSummaryInformation
dsi
SummaryInformation
si
Constructors Summary
public TestMetaDataIPI(String s)
Standard constructor

param
s

 
       
    
	 super(s);
 
Methods Summary
public voidcloseAndReOpen()
Closes the ByteArrayOutputStream and reads it into a ByteArrayInputStream. When finished writing information this method is used in the tests to start reading from the created document and then the see if the results match.

	     
	     try {
			dsi.write(dir, DocumentSummaryInformation.DEFAULT_STREAM_NAME);
			si.write(dir,SummaryInformation.DEFAULT_STREAM_NAME);
		} catch (WritingNotSupportedException e) {
			e.printStackTrace();
			fail();
		} catch (IOException e) {
			e.printStackTrace();
			fail();
		}

        si=null;
        dsi=null;
		try {
			
			poifs.writeFilesystem(bout);
			bout.flush();
			
		} catch (IOException e) {

			e.printStackTrace();
			fail();
		}
	     
	     InputStream is=new ByteArrayInputStream(bout.toByteArray());
	   assertNotNull(is);
	   POIFSFileSystem poifs=null;
		try {
			poifs = new POIFSFileSystem(is);
		} catch (IOException e) {

			e.printStackTrace();
			fail();
		}
	     try {
			is.close();
		} catch (IOException e) {
			e.printStackTrace();
			fail();
		}
	    assertNotNull(poifs);
	     /* Read the document summary information. */
	     DirectoryEntry dir = poifs.getRoot();
	     
	     try
	     {
	         DocumentEntry dsiEntry = (DocumentEntry)
	             dir.getEntry(DocumentSummaryInformation.DEFAULT_STREAM_NAME);
	         DocumentInputStream dis = new DocumentInputStream(dsiEntry);
	         PropertySet ps = new PropertySet(dis);
	         dis.close();
	         dsi = new DocumentSummaryInformation(ps);
	     }
	     catch (FileNotFoundException ex)
	     {
	         fail();
	     } catch (IOException e) {
			e.printStackTrace();
			fail();
		} catch (NoPropertySetStreamException e) {
			e.printStackTrace();
			fail();
		} catch (MarkUnsupportedException e) {
			e.printStackTrace();
			fail();
		} catch (UnexpectedPropertySetTypeException e) {
			e.printStackTrace();
			fail();
		}
		  try
		    {
		        DocumentEntry dsiEntry = (DocumentEntry)
		            dir.getEntry(SummaryInformation.DEFAULT_STREAM_NAME);
		        DocumentInputStream dis = new DocumentInputStream(dsiEntry);
		        PropertySet ps = new PropertySet(dis);
		        dis.close();
		        si = new SummaryInformation(ps);
		      
		        
		    }
		    catch (FileNotFoundException ex)
		    {
		        /* There is no document summary information yet. We have to create a
		         * new one. */
		        si = PropertySetFactory.newSummaryInformation();
		        assertNotNull(si);
		    } catch (IOException e) {
				e.printStackTrace();
				fail();
			} catch (NoPropertySetStreamException e) {
				e.printStackTrace();
				fail();
			} catch (MarkUnsupportedException e) {
				e.printStackTrace();
				fail();
			} catch (UnexpectedPropertySetTypeException e) {
				e.printStackTrace();
				fail();
			}
  
public java.lang.Stringelongate(java.lang.String s)
multiplies a string

param
s Input String
return
the multiplied String

	 StringBuffer sb=new StringBuffer();
	 for (int i=0;i<10000;i++){
		 sb.append(s);
		 sb.append(" ");
	 }
	 return sb.toString();
 
public voidsetUp()
Setup is used to get the document ready. Gets the DocumentSummaryInformation and the SummaryInformation to reasonable values

	 bout=new ByteArrayOutputStream();
	 poifs= new POIFSFileSystem();
     dir = poifs.getRoot();
     dsi=null;
     try
     {
         DocumentEntry dsiEntry = (DocumentEntry)
             dir.getEntry(DocumentSummaryInformation.DEFAULT_STREAM_NAME);
         DocumentInputStream dis = new DocumentInputStream(dsiEntry);
         PropertySet ps = new PropertySet(dis);
         dis.close();
         dsi = new DocumentSummaryInformation(ps);
       
         
     }
     catch (FileNotFoundException ex)
     {
         /* There is no document summary information yet. We have to create a
          * new one. */
         dsi = PropertySetFactory.newDocumentSummaryInformation();
         assertNotNull(dsi);
     } catch (IOException e) {
		e.printStackTrace();
		fail();
	} catch (NoPropertySetStreamException e) {
		e.printStackTrace();
		fail();
	} catch (MarkUnsupportedException e) {
		e.printStackTrace();
		fail();
	} catch (UnexpectedPropertySetTypeException e) {
		e.printStackTrace();
		fail();
	}
    assertNotNull(dsi);
    try
    {
        DocumentEntry dsiEntry = (DocumentEntry)
            dir.getEntry(SummaryInformation.DEFAULT_STREAM_NAME);
        DocumentInputStream dis = new DocumentInputStream(dsiEntry);
        PropertySet ps = new PropertySet(dis);
        dis.close();
        si = new SummaryInformation(ps);
      
        
    }
    catch (FileNotFoundException ex)
    {
        /* There is no document summary information yet. We have to create a
         * new one. */
        si = PropertySetFactory.newSummaryInformation();
        assertNotNull(si);
    } catch (IOException e) {
		e.printStackTrace();
		fail();
	} catch (NoPropertySetStreamException e) {
		e.printStackTrace();
		fail();
	} catch (MarkUnsupportedException e) {
		e.printStackTrace();
		fail();
	} catch (UnexpectedPropertySetTypeException e) {
		e.printStackTrace();
		fail();
	}
	assertNotNull(dsi);
    
    
 
public java.lang.Stringstrangize(java.lang.String s)
adds strange characters to the string

param
s Input String
return
the multiplied String

	 StringBuffer sb=new StringBuffer();
	 String[] umlaute= {"ä","ü","ö","Ü","$","Ö","Ü","É","Ö","@","ç","&"};
	 char j=0;
	 Random rand=new Random();
	 for (int i=0;i<5;i++){
		 sb.append(s);
		 sb.append(" ");
		 j=(char) rand.nextInt(220);
		 j+=33;
		 // System.out.println(j);
		 sb.append(">");
		 sb.append(new Character(j));
		 sb.append("=");
		 sb.append(umlaute[rand.nextInt(umlaute.length)]);
		 sb.append("<");
	 }
	 
	 return sb.toString();
public java.lang.StringstrangizeU(java.lang.String s)
adds strange characters to the string with the adding of unicode characters

param
s Input String
return
the multiplied String

	  
   	 StringBuffer sb=new StringBuffer();
   	 String[] umlaute= {"ä","ü","ö","Ü","$","Ö","Ü","É","Ö","@","ç","&"};
   	 char j=0;
   	 Random rand=new Random();
   	 for (int i=0;i<5;i++){
   		 sb.append(s);
   		 sb.append(" ");
   		 j=(char) rand.nextInt(220);
   		 j+=33;
   		 // System.out.println(j);
   		 sb.append(">");
   		 sb.append(new Character(j));
   		 sb.append("=");
   		 sb.append(umlaute[rand.nextInt(umlaute.length)]);
   		 sb.append("<");
   	 }
   	 sb.append("äöü\uD840\uDC00");
   	 return sb.toString();
   
public voidtearDown()
Setting a lot of things to null.

	bout=null;
	poifs=null;
	dir=null;
	dsi=null;
	 
 
public voidtestConvAndExistance()
Tests conversion in custom fields and errors

  	 
  	
      CustomProperties customProperties = dsi.getCustomProperties();
      if (customProperties == null){
          customProperties = new CustomProperties();
      }
      
      /* Insert some custom properties into the container. */
      customProperties.put("int", new Integer(12345));
      customProperties.put("negint", new Integer(-12345));
      customProperties.put("long", new Long(12345));
      customProperties.put("neglong", new Long(-12345));
      customProperties.put("boolean", new Boolean(true));
      customProperties.put("string", "a String");
      //customProperties.put("float", new Float(12345.0));  is not valid
      //customProperties.put("negfloat", new Float(-12345.1)); is not valid
      customProperties.put("double", new Double(12345.2));
      customProperties.put("negdouble", new Double(-12345.3));
      //customProperties.put("char", new Character('a')); is not valid
      
      Date date=new Date();
      customProperties.put("date", date);

      dsi.setCustomProperties(customProperties);


  	 closeAndReOpen();
    
     assertNotNull(dsi);
     assertNotNull(si);
      /* Change the category to "POI example". Any former category value will
       * be lost. If there has been no category yet, it will be created. */
      assertNull(dsi.getCategory());
      assertNull(dsi.getCompany());
      assertNull(dsi.getManager());
      
      assertNull(si.getAuthor());
      assertNull(si.getTitle());
      assertNull(si.getComments());
      assertNull(si.getKeywords());
      assertNull(si.getSubject());
      
      
      /* Read the custom properties. If there are no custom properties
       * yet, the application has to create a new CustomProperties object.
       * It will serve as a container for custom properties. */
      customProperties = dsi.getCustomProperties();
      if (customProperties == null){
     	 fail();
          }
      
      /* Insert some custom properties into the container. */

      Integer a3=(Integer) customProperties.get("int");
      assertEquals("int",new Integer(12345),a3);
      
      a3=(Integer) customProperties.get("negint");
      assertEquals("negint",new Integer(-12345),a3);
      
      Long al=(Long) customProperties.get("neglong");
      assertEquals("neglong",new Long(-12345),al);
      
      al=(Long) customProperties.get("long");
      assertEquals("long",new Long(12345),al);
      
      Boolean a4=(Boolean) customProperties.get("boolean");
      assertEquals("boolean",new Boolean(true),a4);
      
      Date a5=(Date) customProperties.get("date");
      assertEquals("Custom Date:",date,a5);
  
      Double d=(Double) customProperties.get("double");
      assertEquals("int",new Double(12345.2),d);
      
      d=(Double) customProperties.get("negdouble");
      assertEquals("string",new Double(-12345.3),d);

      String s=(String) customProperties.get("string");
      assertEquals("sring","a String",s);
      
      Object o=null;
      
      o=customProperties.get("string");
      if (!(o instanceof String)){
    	  fail();
      }
      o=customProperties.get("boolean");
      if (!(o instanceof Boolean)){
    	  fail();
      }
      
      o=customProperties.get("int");
      if (!(o instanceof Integer)){
    	  fail();
      }
      o=customProperties.get("negint");
      if (!(o instanceof Integer)){
    	  fail();
      }
      
      o=customProperties.get("long");
      if (!(o instanceof Long)){
    	  fail();
      }
      o=customProperties.get("neglong");
      if (!(o instanceof Long)){
    	  fail();
      }
      
      o=customProperties.get("double");
      if (!(o instanceof Double)){
    	  fail();
      }
      o=customProperties.get("negdouble");
      if (!(o instanceof Double)){
    	  fail();
      }
      
      o=customProperties.get("date");
      if (!(o instanceof Date)){
    	  fail();
      }
   	
public voidtestFour()
Iterative testing: writing, reading etc.

	   for (int i=1;i<100;i++){
		   setUp();
		   testThree();
		   tearDown();
	   }
   
public voidtestOne()
Sets the most important information in DocumentSummaryInformation and Summary Information and rereads it

	 
	 //DocumentSummaryInformation
	 dsi.setCompany("xxxCompanyxxx");
	 dsi.setManager("xxxManagerxxx");
	 dsi.setCategory("xxxCategoryxxx");
	 
	 //SummaryInformation
	 si.setTitle("xxxTitlexxx");
	 si.setAuthor("xxxAuthorxxx");
	 si.setComments("xxxCommentsxxx");
	 si.setKeywords("xxxKeyWordsxxx");
	 si.setSubject("xxxSubjectxxx");
	 
	 //Custom Properties (in DocumentSummaryInformation
     CustomProperties customProperties = dsi.getCustomProperties();
     if (customProperties == null){
         customProperties = new CustomProperties();
     }
     
     /* Insert some custom properties into the container. */
     customProperties.put("Key1", "Value1");
     customProperties.put("Schlüssel2", "Wert2");
     customProperties.put("Sample Integer", new Integer(12345));
     customProperties.put("Sample Boolean", new Boolean(true));
     Date date=new Date();
     customProperties.put("Sample Date", date);
     customProperties.put("Sample Double", new Double(-1.0001));
     customProperties.put("Sample Negative Integer", new Integer(-100000));

     dsi.setCustomProperties(customProperties);

     //start reading
	 closeAndReOpen();
     
	 //testing
     assertNotNull(dsi);
     assertNotNull(si);
     
     assertEquals("Category","xxxCategoryxxx",dsi.getCategory());
     assertEquals("Company","xxxCompanyxxx",dsi.getCompany());
     assertEquals("Manager","xxxManagerxxx",dsi.getManager());
     
     assertEquals("","xxxAuthorxxx",si.getAuthor());
     assertEquals("","xxxTitlexxx",si.getTitle());
     assertEquals("","xxxCommentsxxx",si.getComments());
     assertEquals("","xxxKeyWordsxxx",si.getKeywords());
     assertEquals("","xxxSubjectxxx",si.getSubject());
     

     /* Read the custom properties. If there are no custom properties yet,
      * the application has to create a new CustomProperties object. It will
      * serve as a container for custom properties. */
     customProperties = dsi.getCustomProperties();
     if (customProperties == null){
    	 fail();
         }
     
     /* Insert some custom properties into the container. */
     String a1=(String) customProperties.get("Key1");
     assertEquals("Key1","Value1",a1);
     String a2=(String) customProperties.get("Schlüssel2");
     assertEquals("Schlüssel2","Wert2",a2);
     Integer a3=(Integer) customProperties.get("Sample Integer");
     assertEquals("Sample Number",new Integer(12345),a3);
     Boolean a4=(Boolean) customProperties.get("Sample Boolean");
     assertEquals("Sample Boolean",new Boolean(true),a4);
     Date a5=(Date) customProperties.get("Sample Date");
     assertEquals("Custom Date:",date,a5);
     
     Double a6=(Double) customProperties.get("Sample Double");
     assertEquals("Custom Float",new Double(-1.0001),a6);
     
     Integer a7=(Integer) customProperties.get("Sample Negative Integer");
     assertEquals("Neg", new Integer(-100000),a7);
 
public voidtestSix()
Iterative testing of the unicode test

	   for (int i=1;i<100;i++){
		   setUp();
		   testUnicode();
		   tearDown();
	   }
   
public voidtestThree()
Tests with strange characters in keys and data (Umlaute etc.)

	 
	String company=strangize("company");
	String manager=strangize("manager");
	String category=strangize("category");
	String title=strangize("title");
	String author=strangize("author");
	String comments=strangize("comments");
	String keywords=strangize("keywords");
	String subject=strangize("subject");
	String p1=strangize("p1");
	String p2=strangize("p2");
	String k1=strangize("k1");
	String k2=strangize("k2");
	
	 dsi.setCompany(company);
	 dsi.setManager(manager);
	 dsi.setCategory(category);
	 
	 si.setTitle(title);
	 si.setAuthor(author);
	 si.setComments(comments);
	 si.setKeywords(keywords);
	 si.setSubject(subject);
   CustomProperties customProperties = dsi.getCustomProperties();
   if (customProperties == null){
       customProperties = new CustomProperties();
   }
   
   /* Insert some custom properties into the container. */
   customProperties.put(k1, p1);
   customProperties.put(k2, p2);
   customProperties.put("Sample Number", new Integer(12345));
   customProperties.put("Sample Boolean", new Boolean(false));
   Date date=new Date(0);
   customProperties.put("Sample Date", date);

   dsi.setCustomProperties(customProperties);


	 closeAndReOpen();
 
  assertNotNull(dsi);
  assertNotNull(si);
   /* Change the category to "POI example". Any former category value will
    * be lost. If there has been no category yet, it will be created. */
   assertEquals("Category",category,dsi.getCategory());
   assertEquals("Company",company,dsi.getCompany());
   assertEquals("Manager",manager,dsi.getManager());
   
   assertEquals("",author,si.getAuthor());
   assertEquals("",title,si.getTitle());
   assertEquals("",comments,si.getComments());
   assertEquals("",keywords,si.getKeywords());
   assertEquals("",subject,si.getSubject());
   
   
   /* Read the custom properties. If there are no custom properties yet,
    * the application has to create a new CustomProperties object. It will
    * serve as a container for custom properties. */
   customProperties = dsi.getCustomProperties();
   if (customProperties == null){
  	 fail();
       }
   
   /* Insert some custom properties into the container. */
   // System.out.println(k1);
   String a1=(String) customProperties.get(k1);
   assertEquals("Key1",p1,a1);
   String a2=(String) customProperties.get(k2);
   assertEquals("Schlüssel2",p2,a2);
   Integer a3=(Integer) customProperties.get("Sample Number");
   assertEquals("Sample Number",new Integer(12345),a3);
   Boolean a4=(Boolean) customProperties.get("Sample Boolean");
   assertEquals("Sample Boolean",new Boolean(false),a4);
   Date a5=(Date) customProperties.get("Sample Date");
   assertEquals("Custom Date:",date,a5);
  

	
public voidtestTwo()
Test very long input in each of the fields (approx 30-60KB each)

	 
	String company=elongate("company");
	String manager=elongate("manager");
	String category=elongate("category");
	String title=elongate("title");
	String author=elongate("author");
	String comments=elongate("comments");
	String keywords=elongate("keywords");
	String subject=elongate("subject");
	String p1=elongate("p1");
	String p2=elongate("p2");
	String k1=elongate("k1");
	String k2=elongate("k2");
	
	 dsi.setCompany(company);
	 dsi.setManager(manager);
	 dsi.setCategory(category);
	 
	 si.setTitle(title);
	 si.setAuthor(author);
	 si.setComments(comments);
	 si.setKeywords(keywords);
	 si.setSubject(subject);
    CustomProperties customProperties = dsi.getCustomProperties();
    if (customProperties == null){
        customProperties = new CustomProperties();
    }
    
    /* Insert some custom properties into the container. */
    customProperties.put(k1, p1);
    customProperties.put(k2, p2);
    customProperties.put("Sample Number", new Integer(12345));
    customProperties.put("Sample Boolean", new Boolean(true));
    Date date=new Date();
    customProperties.put("Sample Date", date);

    dsi.setCustomProperties(customProperties);


	 closeAndReOpen();
  
   assertNotNull(dsi);
   assertNotNull(si);
    /* Change the category to "POI example". Any former category value will
     * be lost. If there has been no category yet, it will be created. */
    assertEquals("Category",category,dsi.getCategory());
    assertEquals("Company",company,dsi.getCompany());
    assertEquals("Manager",manager,dsi.getManager());
    
    assertEquals("",author,si.getAuthor());
    assertEquals("",title,si.getTitle());
    assertEquals("",comments,si.getComments());
    assertEquals("",keywords,si.getKeywords());
    assertEquals("",subject,si.getSubject());
    
    
    /* Read the custom properties. If there are no custom properties
     * yet, the application has to create a new CustomProperties object.
     * It will serve as a container for custom properties. */
    customProperties = dsi.getCustomProperties();
    if (customProperties == null){
   	 fail();
        }
    
    /* Insert some custom properties into the container. */
    String a1=(String) customProperties.get(k1);
    assertEquals("Key1",p1,a1);
    String a2=(String) customProperties.get(k2);
    assertEquals("Schlüssel2",p2,a2);
    Integer a3=(Integer) customProperties.get("Sample Number");
    assertEquals("Sample Number",new Integer(12345),a3);
    Boolean a4=(Boolean) customProperties.get("Sample Boolean");
    assertEquals("Sample Boolean",new Boolean(true),a4);
    Date a5=(Date) customProperties.get("Sample Date");
    assertEquals("Custom Date:",date,a5);


	
public voidtestUnicode()
Unicode test

	   String company=strangizeU("company");
		String manager=strangizeU("manager");
		String category=strangizeU("category");
		String title=strangizeU("title");
		String author=strangizeU("author");
		String comments=strangizeU("comments");
		String keywords=strangizeU("keywords");
		String subject=strangizeU("subject");
		String p1=strangizeU("p1");
		String p2=strangizeU("p2");
		String k1=strangizeU("k1");
		String k2=strangizeU("k2");
		
		 dsi.setCompany(company);
		 dsi.setManager(manager);
		 dsi.setCategory(category);
		 
		 si.setTitle(title);
		 si.setAuthor(author);
		 si.setComments(comments);
		 si.setKeywords(keywords);
		 si.setSubject(subject);
	   CustomProperties customProperties = dsi.getCustomProperties();
	   if (customProperties == null){
	       customProperties = new CustomProperties();
	   }
	   
	   /* Insert some custom properties into the container. */
	   customProperties.put(k1, p1);
	   customProperties.put(k2, p2);
	   customProperties.put("Sample Number", new Integer(12345));
	   customProperties.put("Sample Boolean", new Boolean(true));
	   Date date=new Date();
	   customProperties.put("Sample Date", date);

	   dsi.setCustomProperties(customProperties);


		 closeAndReOpen();
	 
	  assertNotNull(dsi);
	  assertNotNull(si);
	   /* Change the category to "POI example". Any former category value will
	    * be lost. If there has been no category yet, it will be created. */
	   assertEquals("Category",category,dsi.getCategory());
	   assertEquals("Company",company,dsi.getCompany());
	   assertEquals("Manager",manager,dsi.getManager());
	   
	   assertEquals("",author,si.getAuthor());
	   assertEquals("",title,si.getTitle());
	   assertEquals("",comments,si.getComments());
	   assertEquals("",keywords,si.getKeywords());
	   assertEquals("",subject,si.getSubject());
	   
	   
       /* Read the custom properties. If there are no custom properties yet,
        * the application has to create a new CustomProperties object. It will
        * serve as a container for custom properties. */
	   customProperties = dsi.getCustomProperties();
	   if (customProperties == null){
	  	 fail();
	       }
	   
	   /* Insert some custom properties into the container. */
	   // System.out.println(k1);
	   String a1=(String) customProperties.get(k1);
	   assertEquals("Key1",p1,a1);
	   String a2=(String) customProperties.get(k2);
	   assertEquals("Schlüssel2",p2,a2);
       Integer a3=(Integer) customProperties.get("Sample Number");
	   assertEquals("Sample Number",new Integer(12345),a3);
	   Boolean a4=(Boolean) customProperties.get("Sample Boolean");
	   assertEquals("Sample Boolean",new Boolean(true),a4);
	   Date a5=(Date) customProperties.get("Sample Date");
	   assertEquals("Custom Date:",date,a5);