You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ye...@apache.org on 2008/10/12 15:10:31 UTC

svn commit: r703814 - in /poi/branches/ooxml/src/ooxml: interfaces-jdk15/org/apache/poi/ss/usermodel/ java/org/apache/poi/ java/org/apache/poi/xssf/usermodel/

Author: yegor
Date: Sun Oct 12 06:10:30 2008
New Revision: 703814

URL: http://svn.apache.org/viewvc?rev=703814&view=rev
Log:
refactored POIXMLFactory and related classes; simplified XSSFRelation - now it's just a set of definitions of XSSF relations, all read/load stuff is not used anymore and was removed. Also, removed Workbook.getCustomPallete() - it's OLE-specific

Modified:
    poi/branches/ooxml/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Workbook.java
    poi/branches/ooxml/src/ooxml/java/org/apache/poi/POIXMLDocument.java
    poi/branches/ooxml/src/ooxml/java/org/apache/poi/POIXMLDocumentPart.java
    poi/branches/ooxml/src/ooxml/java/org/apache/poi/POIXMLFactory.java
    poi/branches/ooxml/src/ooxml/java/org/apache/poi/POIXMLRelation.java
    poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFFactory.java
    poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFPictureData.java
    poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRelation.java
    poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java
    poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java

Modified: poi/branches/ooxml/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Workbook.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Workbook.java?rev=703814&r1=703813&r2=703814&view=diff
==============================================================================
--- poi/branches/ooxml/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Workbook.java (original)
+++ poi/branches/ooxml/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Workbook.java Sun Oct 12 06:10:30 2008
@@ -374,8 +374,6 @@
      */
     void removeName(String name);
 
-    Palette getCustomPalette();
-
     /**
      * Adds a picture to the workbook.
      *

Modified: poi/branches/ooxml/src/ooxml/java/org/apache/poi/POIXMLDocument.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/ooxml/java/org/apache/poi/POIXMLDocument.java?rev=703814&r1=703813&r2=703814&view=diff
==============================================================================
--- poi/branches/ooxml/src/ooxml/java/org/apache/poi/POIXMLDocument.java (original)
+++ poi/branches/ooxml/src/ooxml/java/org/apache/poi/POIXMLDocument.java Sun Oct 12 06:10:30 2008
@@ -22,7 +22,6 @@
 
 import org.apache.poi.poifs.common.POIFSConstants;
 import org.apache.poi.util.IOUtils;
-import org.apache.poi.util.PackageHelper;
 import org.apache.xmlbeans.XmlException;
 import org.openxml4j.exceptions.InvalidFormatException;
 import org.openxml4j.exceptions.OpenXML4JException;

Modified: poi/branches/ooxml/src/ooxml/java/org/apache/poi/POIXMLDocumentPart.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/ooxml/java/org/apache/poi/POIXMLDocumentPart.java?rev=703814&r1=703813&r2=703814&view=diff
==============================================================================
--- poi/branches/ooxml/src/ooxml/java/org/apache/poi/POIXMLDocumentPart.java (original)
+++ poi/branches/ooxml/src/ooxml/java/org/apache/poi/POIXMLDocumentPart.java Sun Oct 12 06:10:30 2008
@@ -143,43 +143,35 @@
      * Create a new child POIXMLDocumentPart
      *
      * @param descriptor the part descriptor
-     * @param cls the Class object identifying the type of instance to create
+     * @param factory the factory that will create an instance of the requested relation
      * @return the created child POIXMLDocumentPart
      */
-    protected POIXMLDocumentPart createRelationship(POIXMLRelation descriptor, Class<? extends POIXMLDocumentPart> cls){
-        return createRelationship(descriptor, cls, -1);
+    protected POIXMLDocumentPart createRelationship(POIXMLRelation descriptor, POIXMLFactory factory){
+        return createRelationship(descriptor, factory, -1, false);
     }
 
-    /**
-     * Create a new child POIXMLDocumentPart
-     *
-     * @param descriptor the part descriptor
-     * @param cls the Class object identifying the type of instance to create
-     * @param idx part number
-     * @return the created child POIXMLDocumentPart
-     */
-    protected POIXMLDocumentPart createRelationship(POIXMLRelation descriptor, Class<? extends POIXMLDocumentPart> cls, int idx){
-        return createRelationship(descriptor, cls, idx, false);
+    protected POIXMLDocumentPart createRelationship(POIXMLRelation descriptor, POIXMLFactory factory, int idx){
+        return createRelationship(descriptor, factory, idx, false);
     }
 
     /**
      * Create a new child POIXMLDocumentPart
      *
      * @param descriptor the part descriptor
-     * @param cls the Class object identifying the type of instance to create
+     * @param factory the factory that will create an instance of the requested relation
      * @param idx part number
-     * @param norel if true, then no relationship is added. 
+     * @param noRelation if true, then no relationship is added.
      * @return the created child POIXMLDocumentPart
      */
-    protected POIXMLDocumentPart createRelationship(POIXMLRelation descriptor, Class<? extends POIXMLDocumentPart> cls, int idx, boolean norel){
+    protected POIXMLDocumentPart createRelationship(POIXMLRelation descriptor, POIXMLFactory factory, int idx, boolean noRelation){
         try {
 
             PackagePartName ppName = PackagingURIHelper.createPartName(descriptor.getFileName(idx));
             PackageRelationship rel = null;
-            if(!norel) rel = packagePart.addRelationship(ppName, TargetMode.INTERNAL, descriptor.getRelation());
+            if(!noRelation) rel = packagePart.addRelationship(ppName, TargetMode.INTERNAL, descriptor.getRelation());
 
             PackagePart part = packagePart.getPackage().createPart(ppName, descriptor.getContentType());
-            POIXMLDocumentPart doc = cls.newInstance();
+            POIXMLDocumentPart doc = factory.newDocumentPart(descriptor);
             doc.packageRel = rel;
             doc.packagePart = part;
             doc.parent = this;
@@ -206,7 +198,7 @@
                     logger.log(POILogger.ERROR, "Skipped invalid entry " + rel.getTargetURI());
                     continue;
                 }
-                POIXMLDocumentPart childPart = factory.create(rel, p);
+                POIXMLDocumentPart childPart = factory.createDocumentPart(rel, p);
                 childPart.parent = this;
                 addRelation(childPart);
 

Modified: poi/branches/ooxml/src/ooxml/java/org/apache/poi/POIXMLFactory.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/ooxml/java/org/apache/poi/POIXMLFactory.java?rev=703814&r1=703813&r2=703814&view=diff
==============================================================================
--- poi/branches/ooxml/src/ooxml/java/org/apache/poi/POIXMLFactory.java (original)
+++ poi/branches/ooxml/src/ooxml/java/org/apache/poi/POIXMLFactory.java Sun Oct 12 06:10:30 2008
@@ -25,16 +25,24 @@
  *
  * @author Yegor Kozlov
  */
-public class POIXMLFactory {
+public abstract class POIXMLFactory {
 
     /**
-     * Creates a new instance of a {@link POIXMLDocumentPart}
+     * Create a POIXMLDocumentPart from existing package part and relation. This method is called
+     * from {@link POIXMLDocumentPart#read(POIXMLFactory)} when parsing a document
      *
      * @param rel   the package part relationship
      * @param part  the PackagePart representing the created instance
      * @return A new instance of a POIXMLDocumentPart.
      */
-     public POIXMLDocumentPart create(PackageRelationship rel, PackagePart part){
-        return new POIXMLDocumentPart(part, rel);
-    }
+     public abstract POIXMLDocumentPart createDocumentPart(PackageRelationship rel, PackagePart part);
+
+    /**
+     * Create a new POIXMLDocumentPart using the supplied descriptor. This method is used when adding new parts
+     * to a document, for example, when adding a sheet to a workbook, slide to a presentation, etc.
+     *
+     * @param descriptor  described the object to create
+     * @return A new instance of a POIXMLDocumentPart.
+     */
+     public abstract POIXMLDocumentPart newDocumentPart(POIXMLRelation descriptor);
 }

Modified: poi/branches/ooxml/src/ooxml/java/org/apache/poi/POIXMLRelation.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/ooxml/java/org/apache/poi/POIXMLRelation.java?rev=703814&r1=703813&r2=703814&view=diff
==============================================================================
--- poi/branches/ooxml/src/ooxml/java/org/apache/poi/POIXMLRelation.java (original)
+++ poi/branches/ooxml/src/ooxml/java/org/apache/poi/POIXMLRelation.java Sun Oct 12 06:10:30 2008
@@ -21,7 +21,7 @@
  *
  * @author Yegor Kozlov
  */
-public class POIXMLRelation {
+public abstract class POIXMLRelation {
 
     /**
      * Describes the content stored in a part.
@@ -39,19 +39,36 @@
     protected String _defaultName;
 
     /**
+     * Defines what object is used to construct instances of this relationship
+     */
+    private Class<? extends POIXMLDocumentPart> _cls;
+
+    /**
      * Instantiates a POIXMLRelation.
      *
      * @param type content type
      * @param rel  relationship
      * @param defaultName default item name
+     * @param cls defines what object is used to construct instances of this relationship
      */
-    public POIXMLRelation(String type, String rel, String defaultName) {
+    public POIXMLRelation(String type, String rel, String defaultName, Class<? extends POIXMLDocumentPart> cls) {
         _type = type;
         _relation = rel;
         _defaultName = defaultName;
+        _cls = cls;
     }
 
     /**
+     * Instantiates a POIXMLRelation.
+     *
+     * @param type content type
+     * @param rel  relationship
+     * @param defaultName default item name
+     */
+    public POIXMLRelation(String type, String rel, String defaultName) {
+        this(type, rel, defaultName, null);
+    }
+    /**
      * Return the content type. Content types define a media type, a subtype, and an
      * optional set of parameters, as defined in RFC 2616.
      *
@@ -93,4 +110,13 @@
         }
         return _defaultName.replace("#", Integer.toString(index));
     }
+
+    /**
+     * Return type of the obejct used to construct instances of this relationship
+     *
+     * @return the class of the object used to construct instances of this relation
+     */
+    public Class<? extends POIXMLDocumentPart> getRelationClass(){
+        return _cls;
+    }
 }

Modified: poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFFactory.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFFactory.java?rev=703814&r1=703813&r2=703814&view=diff
==============================================================================
--- poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFFactory.java (original)
+++ poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFFactory.java Sun Oct 12 06:10:30 2008
@@ -19,14 +19,12 @@
 import org.apache.poi.POIXMLDocumentPart;
 import org.apache.poi.POIXMLFactory;
 import org.apache.poi.POIXMLException;
-import org.apache.poi.xssf.model.SharedStringsTable;
-import org.apache.poi.xssf.model.StylesTable;
-import org.apache.poi.xssf.model.CommentsTable;
+import org.apache.poi.POIXMLRelation;
+import org.apache.poi.util.POILogger;
+import org.apache.poi.util.POILogFactory;
 import org.openxml4j.opc.PackageRelationship;
 import org.openxml4j.opc.PackagePart;
 
-import java.util.Map;
-import java.util.HashMap;
 import java.lang.reflect.Constructor;
 
 /**
@@ -35,25 +33,40 @@
  * @author Yegor Kozlov
  */
 public class XSSFFactory extends POIXMLFactory  {
-    protected static Map<String, Class> parts = new HashMap<String, Class>();
-    static {
-        parts.put(XSSFRelation.WORKSHEET.getRelation(), XSSFSheet.class);
-        parts.put(XSSFRelation.SHARED_STRINGS.getRelation(), SharedStringsTable.class);
-        parts.put(XSSFRelation.STYLES.getRelation(), StylesTable.class);
-        parts.put(XSSFRelation.SHEET_COMMENTS.getRelation(), CommentsTable.class);
-        parts.put(XSSFRelation.DRAWINGS.getRelation(), XSSFDrawing.class);
-        parts.put(XSSFRelation.IMAGES.getRelation(), XSSFPictureData.class);
+    private static POILogger logger = POILogFactory.getLogger(XSSFFactory.class);
+
+    private XSSFFactory(){
+
+    }
+
+    public static XSSFFactory getInstance(){
+        return new XSSFFactory();
     }
 
-    public POIXMLDocumentPart create(PackageRelationship rel, PackagePart p){
-        Class cls = parts.get(rel.getRelationshipType());
-        if(cls == null) return super.create(rel, p);
+    public POIXMLDocumentPart createDocumentPart(PackageRelationship rel, PackagePart part){
+        XSSFRelation descriptor = XSSFRelation.getInstance(rel.getRelationshipType());
+        if(descriptor == null || descriptor.getRelationClass() == null){
+            logger.log(POILogger.DEBUG, "using default POIXMLDocumentPart for " + rel.getRelationshipType());
+            return new POIXMLDocumentPart(part, rel);
+        }
 
         try {
+            Class cls = descriptor.getRelationClass();
             Constructor<? extends POIXMLDocumentPart> constructor = cls.getConstructor(PackagePart.class, PackageRelationship.class);
-            return constructor.newInstance(p, rel);
+            return constructor.newInstance(part, rel);
+        } catch (Exception e){
+            throw new POIXMLException(e);
+        }
+    }
+
+    public POIXMLDocumentPart newDocumentPart(POIXMLRelation descriptor){
+        try {
+            Class cls = descriptor.getRelationClass();
+            Constructor<? extends POIXMLDocumentPart> constructor = cls.getConstructor();
+            return constructor.newInstance();
         } catch (Exception e){
             throw new POIXMLException(e);
         }
     }
+
 }

Modified: poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFPictureData.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFPictureData.java?rev=703814&r1=703813&r2=703814&view=diff
==============================================================================
--- poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFPictureData.java (original)
+++ poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFPictureData.java Sun Oct 12 06:10:30 2008
@@ -39,12 +39,12 @@
     protected static final POIXMLRelation[] RELATIONS;
     static {
         RELATIONS = new POIXMLRelation[8];
-        RELATIONS[Workbook.PICTURE_TYPE_EMF] = new POIXMLRelation("image/x-emf", XSSFRelation.IMAGES.getRelation(), "/xl/media/image#.emf");
-        RELATIONS[Workbook.PICTURE_TYPE_WMF] = new POIXMLRelation("image/x-wmf", XSSFRelation.IMAGES.getRelation(), "/xl/media/image#.wmf");
-        RELATIONS[Workbook.PICTURE_TYPE_PICT] = new POIXMLRelation("image/pict", XSSFRelation.IMAGES.getRelation(), "/xl/media/image#.pict");
-        RELATIONS[Workbook.PICTURE_TYPE_JPEG] = new POIXMLRelation("image/jpeg", XSSFRelation.IMAGES.getRelation(), "/xl/media/image#.jpeg");
-        RELATIONS[Workbook.PICTURE_TYPE_PNG] = new POIXMLRelation("image/png", XSSFRelation.IMAGES.getRelation(), "/xl/media/image#.png");
-        RELATIONS[Workbook.PICTURE_TYPE_DIB] = new POIXMLRelation("image/dib", XSSFRelation.IMAGES.getRelation(), "/xl/media/image#.dib");
+        RELATIONS[Workbook.PICTURE_TYPE_EMF] = XSSFRelation.IMAGE_EMF;
+        RELATIONS[Workbook.PICTURE_TYPE_WMF] = XSSFRelation.IMAGE_WMF;
+        RELATIONS[Workbook.PICTURE_TYPE_PICT] = XSSFRelation.IMAGE_PICT;
+        RELATIONS[Workbook.PICTURE_TYPE_JPEG] = XSSFRelation.IMAGE_JPEG;
+        RELATIONS[Workbook.PICTURE_TYPE_PNG] = XSSFRelation.IMAGE_PNG;
+        RELATIONS[Workbook.PICTURE_TYPE_DIB] = XSSFRelation.IMAGE_DIB;
     }
 
     /**

Modified: poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRelation.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRelation.java?rev=703814&r1=703813&r2=703814&view=diff
==============================================================================
--- poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRelation.java (original)
+++ poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRelation.java Sun Oct 12 06:10:30 2008
@@ -18,39 +18,37 @@
 
 import java.io.IOException;
 import java.io.InputStream;
-import java.io.OutputStream;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
 import java.util.Iterator;
-import java.util.List;
+import java.util.Map;
+import java.util.HashMap;
 
 import org.apache.poi.POIXMLDocument;
 import org.apache.poi.POIXMLRelation;
+import org.apache.poi.POIXMLDocumentPart;
+import org.apache.poi.xssf.model.StylesTable;
+import org.apache.poi.xssf.model.SharedStringsTable;
+import org.apache.poi.xssf.model.CommentsTable;
 import org.apache.poi.util.POILogFactory;
 import org.apache.poi.util.POILogger;
-import org.apache.poi.xssf.model.BinaryPart;
-import org.apache.poi.xssf.model.CommentsTable;
-import org.apache.poi.xssf.model.Control;
-import org.apache.poi.xssf.model.Drawing;
-import org.apache.poi.xssf.model.SharedStringsTable;
-import org.apache.poi.xssf.model.StylesTable;
-import org.apache.poi.xssf.model.ThemeTable;
-import org.apache.poi.xssf.model.XSSFChildContainingModel;
-import org.apache.poi.xssf.model.XSSFModel;
-import org.apache.poi.xssf.model.XSSFWritableModel;
 import org.openxml4j.exceptions.InvalidFormatException;
 import org.openxml4j.opc.PackagePart;
 import org.openxml4j.opc.PackagePartName;
 import org.openxml4j.opc.PackageRelationship;
 import org.openxml4j.opc.PackageRelationshipCollection;
 import org.openxml4j.opc.PackagingURIHelper;
-import org.openxml4j.opc.TargetMode;
 
 /**
  * 
  */
-public final class XSSFRelation<W extends XSSFModel> extends POIXMLRelation {
+public final class XSSFRelation extends POIXMLRelation {
+
+    private static POILogger log = POILogFactory.getLogger(XSSFRelation.class);
+
+    /**
+     * A map to lookup POIXMLRelation by its relation type
+     */
+    protected static Map<String, XSSFRelation> _table = new HashMap<String, XSSFRelation>();
+
 
 	public static final XSSFRelation WORKBOOK = new XSSFRelation(
 			"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml",
@@ -68,15 +66,15 @@
 			"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml",
 			"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet",
 			"/xl/worksheets/sheet#.xml",
-			null
+			XSSFSheet.class
 	);
-	public static final XSSFRelation<SharedStringsTable> SHARED_STRINGS = create(
+	public static final XSSFRelation SHARED_STRINGS = new XSSFRelation(
 			"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml",
 			"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings",
 			"/xl/sharedStrings.xml",
 			SharedStringsTable.class
 	);
-	public static final XSSFRelation<StylesTable> STYLES = create(
+	public static final XSSFRelation STYLES = new XSSFRelation(
 		    "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml",
 		    "http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles",
 		    "/xl/styles.xml",
@@ -86,22 +84,58 @@
 			"application/vnd.openxmlformats-officedocument.drawing+xml",
 			"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing",
 			"/xl/drawings/drawing#.xml",
-			null
+			XSSFDrawing.class
 	);
-	public static final XSSFRelation<Drawing> VML_DRAWINGS = create(
+	public static final XSSFRelation VML_DRAWINGS = new XSSFRelation(
 			"application/vnd.openxmlformats-officedocument.vmlDrawing",
 			"http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing",
 			"/xl/drawings/vmlDrawing#.vml",
-			Drawing.class
+			null
 	);
     public static final XSSFRelation IMAGES = new XSSFRelation(
-            //client will substitute $type and $ext with the appropriate values depending on the passed data
-            "image/$type",
+            null,
      		"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",
-    		"/xl/media/image#.$ext",
-    		null
+    		null,
+    		XSSFPictureData.class
     );
-	public static final XSSFRelation<CommentsTable> SHEET_COMMENTS = create(
+    public static final XSSFRelation IMAGE_EMF = new XSSFRelation(
+            "image/x-emf",
+     		"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",
+    		"/xl/media/image#.emf",
+    		XSSFPictureData.class
+    );
+    public static final XSSFRelation IMAGE_WMF = new XSSFRelation(
+            "image/x-wmf",
+     		"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",
+    		"/xl/media/image#.wmf",
+    		XSSFPictureData.class
+    );
+    public static final XSSFRelation IMAGE_PICT = new XSSFRelation(
+            "image/pict",
+     		"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",
+    		"/xl/media/image#.pict",
+    		XSSFPictureData.class
+    );
+    public static final XSSFRelation IMAGE_JPEG = new XSSFRelation(
+            "image/jpeg",
+     		"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",
+    		"/xl/media/image#.jpeg",
+    		XSSFPictureData.class
+    );
+    public static final XSSFRelation IMAGE_PNG = new XSSFRelation(
+            "image/png",
+     		"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",
+    		"/xl/media/image#.png",
+    		XSSFPictureData.class
+    );
+    public static final XSSFRelation IMAGE_DIB = new XSSFRelation(
+            "image/dib",
+     		"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",
+    		"/xl/media/image#.dib",
+    		XSSFPictureData.class
+    );
+
+  public static final XSSFRelation SHEET_COMMENTS = new XSSFRelation(
 		    "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml",
 		    "http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments",
 		    "/xl/comments#.xml",
@@ -113,111 +147,54 @@
 		    null,
 		    null
 	);
-	public static final XSSFRelation<BinaryPart> OLEEMBEDDINGS = create(
+	public static final XSSFRelation OLEEMBEDDINGS = new XSSFRelation(
 	        null,
 	        POIXMLDocument.OLE_OBJECT_REL_TYPE,
 	        null,
-	        BinaryPart.class
+	        null
 	);
-	public static final XSSFRelation<BinaryPart> PACKEMBEDDINGS = create(
+	public static final XSSFRelation PACKEMBEDDINGS = new XSSFRelation(
             null,
             POIXMLDocument.PACK_OBJECT_REL_TYPE,
             null,
-            BinaryPart.class
+            null
     );
 
-	public static final XSSFRelation<BinaryPart> VBA_MACROS = create(
+	public static final XSSFRelation VBA_MACROS = new XSSFRelation(
             "application/vnd.ms-office.vbaProject",
             "http://schemas.microsoft.com/office/2006/relationships/vbaProject",
             "/xl/vbaProject.bin",
-	        BinaryPart.class
+	        null
     );
-	public static final XSSFRelation<Control> ACTIVEX_CONTROLS = create(
+	public static final XSSFRelation ACTIVEX_CONTROLS = new XSSFRelation(
 			"application/vnd.ms-office.activeX+xml",
 			"http://schemas.openxmlformats.org/officeDocument/2006/relationships/control",
 			"/xl/activeX/activeX#.xml",
-			Control.class
+			null
 	);
-	public static final XSSFRelation<BinaryPart> ACTIVEX_BINS = create(
+	public static final XSSFRelation ACTIVEX_BINS = new XSSFRelation(
 			"application/vnd.ms-office.activeX",
 			"http://schemas.microsoft.com/office/2006/relationships/activeXControlBinary",
 			"/xl/activeX/activeX#.bin",
-	        BinaryPart.class
+	        null
 	);
-    public static final XSSFRelation<ThemeTable> THEME = create(
+    public static final XSSFRelation THEME = new XSSFRelation(
             "application/vnd.openxmlformats-officedocument.theme+xml",
             "http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme",
             "/xl/theme/theme#.xml",
-            ThemeTable.class
+            null
     );
 	
 	
-    private static POILogger log = POILogFactory.getLogger(XSSFRelation.class);
-    
-    private static <R extends XSSFModel> XSSFRelation<R> create(String type, String rel, String defaultName, Class<R> cls) {
-    	return new XSSFRelation<R>(type, rel, defaultName, cls);
-    }
-   
-	private Constructor<W> _constructor;
-	private final boolean _constructorTakesTwoArgs;
-	
-	private XSSFRelation(String type, String rel, String defaultName, Class<W> cls) {
-		super(type, rel, defaultName);
 
-		if (cls == null) {
-			_constructor = null;
-			_constructorTakesTwoArgs = false;
-		} else {
-			Constructor<W> c;
-			boolean twoArg;
-			
-			// Find the right constructor 
-			try {
-				c = cls.getConstructor(InputStream.class, String.class);
-				twoArg = true;
-			} catch(NoSuchMethodException e) {
-				try {
-					c = cls.getConstructor(InputStream.class);
-					twoArg = false;
-				} catch(NoSuchMethodException e2) {
-					throw new RuntimeException(e2);
-				}
-			}
-			_constructor = c;
-			_constructorTakesTwoArgs = twoArg;
-		}
-	}
+	private XSSFRelation(String type, String rel, String defaultName, Class<? extends POIXMLDocumentPart> cls) {
+        super(type, rel, defaultName, cls);
 
-	/**
-	 * Does one of these exist for the given core
-	 *  package part?
-	 */
-	public boolean exists(PackagePart corePart) throws InvalidFormatException {
-		if(corePart == null) {
-			// new file, can't exist
-			return false;
-		}
-		
-        PackageRelationshipCollection prc =
-        	corePart.getRelationshipsByType(_relation);
-        Iterator<PackageRelationship> it = prc.iterator();
-        return it.hasNext();
-	}
-	
-	/**
-	 * Returns the filename for the nth one of these, 
-	 *  eg /xl/comments4.xml
-	 */
-	public String getFileName(int index) {
-		if(_defaultName.indexOf("#") == -1) {
-			// Generic filename in all cases
-			return getDefaultFileName();
-		}
-		return _defaultName.replace("#", Integer.toString(index));
-	}
+        if(cls != null && !_table.containsKey(rel)) _table.put(rel, this);
+    }
 
-	/**
-	 * Fetches the InputStream to read the contents, based
+    /**
+	 *  Fetches the InputStream to read the contents, based
 	 *  of the specified core part, for which we are defined
 	 *  as a suitable relationship
 	 */
@@ -235,150 +212,16 @@
         	return null;
         }
 	}
-	
-	/**
-	 * Loads all the XSSFModels of this type which are
-	 *  defined as relationships of the given parent part
-	 */
-	public List<W> loadAll(PackagePart parentPart) throws Exception {
-		List<W> found = new ArrayList<W>();
-		for(PackageRelationship rel : parentPart.getRelationshipsByType(_relation)) {
-			PackagePart part = XSSFWorkbook.getTargetPart(parentPart.getPackage(), rel);
-			found.add(create(part, rel));
-		}
-		return found;
-	}
-	
-	/**
-	 * Load a single Model, which is defined as a suitable
-	 *  relationship from the specified core (parent) 
-	 *  package part.
-	 */
-	public W load(PackagePart corePart) throws Exception {
-        PackageRelationshipCollection prc =
-        	corePart.getRelationshipsByType(_relation);
-        Iterator<PackageRelationship> it = prc.iterator();
-        if(it.hasNext()) {
-            PackageRelationship rel = it.next();
-            PackagePartName relName = PackagingURIHelper.createPartName(rel.getTargetURI());
-            PackagePart part = corePart.getPackage().getPart(relName);
-            return create(part, rel);
-        } else {
-        	log.log(POILogger.WARN, "No part " + _defaultName + " found");
-        	return null;
-        }
-	}
-	
-	/**
-	 * Does the actual Model creation
-	 */
-	private W create(PackagePart thisPart, PackageRelationship rel) 
-			throws IOException, InvalidFormatException {
-		
-		if (_constructor == null) {
-			throw new IllegalStateException("Model class not set");
-		}
-		// Instantiate, if we can
-		InputStream inp = thisPart.getInputStream();
-		if (inp == null) {
-			return null; // TODO - is this valid?
-		}
-		Object[] args;
-		if (_constructorTakesTwoArgs) {
-			args = new Object[] { inp, rel.getId(), };
-		} else {
-			args = new Object[] { inp, };
-		}
-		W result;
-        try {
-        	try {
-				result = _constructor.newInstance(args);
-			} catch (IllegalArgumentException e) {
-				throw new RuntimeException(e);
-			} catch (InstantiationException e) {
-				throw new RuntimeException(e);
-			} catch (IllegalAccessException e) {
-				throw new RuntimeException(e);
-			} catch (InvocationTargetException e) {
-				Throwable t = e.getTargetException();
-				if (t instanceof IOException) {
-					throw (IOException)t;
-				}
-				if (t instanceof RuntimeException) {
-					throw (RuntimeException)t;
-				}
-				throw new RuntimeException(t);
-			}
-        } finally {
-        	inp.close();
-        }
-        
-		// Do children, if required
-		if(result instanceof XSSFChildContainingModel) {
-			XSSFChildContainingModel ccm = 
-				(XSSFChildContainingModel)result;
-			for(String relType : ccm.getChildrenRelationshipTypes()) {
-				for(PackageRelationship cRel : thisPart.getRelationshipsByType(relType)) {
-					PackagePart childPart = XSSFWorkbook.getTargetPart(thisPart.getPackage(), cRel);
-					ccm.generateChild(childPart, cRel.getId());
-				}
-			}
-		}
- 		
-		
-        return result;
-	}
-	
-	/**
-	 * Save, with the default name
-	 * @return The internal reference ID it was saved at, normally then used as an r:id
-	 */
-	protected String save(XSSFWritableModel model, PackagePart corePart) throws IOException {
-		return save(model, corePart, _defaultName);
-	}
-	/**
-	 * Save, with the name generated by the given index
-	 * @return The internal reference ID it was saved at, normally then used as an r:id
-	 */
-	protected String save(XSSFWritableModel model, PackagePart corePart, int index) throws IOException {
-		return save(model, corePart, getFileName(index));
-	}
-	/**
-	 * Save, with the specified name
-	 * @return The internal reference ID it was saved at, normally then used as an r:id
-	 */
-	protected String save(XSSFWritableModel model, PackagePart corePart, String name) throws IOException {
-        PackagePartName ppName = null;
-        try {
-        	ppName = PackagingURIHelper.createPartName(name);
-        } catch(InvalidFormatException e) {
-        	throw new IllegalStateException("Can't create part with name " + name + " for " + model, e);
-        }
-        PackageRelationship rel =
-        	corePart.addRelationship(ppName, TargetMode.INTERNAL, _relation);
-        PackagePart part = corePart.getPackage().createPart(ppName, _type);
-        
-        OutputStream out = part.getOutputStream();
-        model.writeTo(out);
-        out.close();
-        
-		// Do children, if required
-		if(model instanceof XSSFChildContainingModel) {
-			XSSFChildContainingModel ccm = 
-				(XSSFChildContainingModel)model;
-			// Loop over each child, writing it out
-			int numChildren = ccm.getNumberOfChildren();
-			for(int i=0; i<numChildren; i++) {
-				XSSFChildContainingModel.WritableChild child =
-					ccm.getChildForWriting(i);
-				child.getRelation().save(
-						child.getModel(),
-						part, 
-						(i+1)
-				);
-			}
-		}
-        
-        return rel.getId();
-	}
+
+
+    /**
+     * Get POIXMLRelation by relation type
+     *
+     * @param rel relation type, for example,
+     *    <code>http://schemas.openxmlformats.org/officeDocument/2006/relationships/image</code>
+     * @return registered POIXMLRelation or null if not found
+     */
+    public static XSSFRelation getInstance(String rel){
+        return _table.get(rel);
+    }
 }

Modified: poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java?rev=703814&r1=703813&r2=703814&view=diff
==============================================================================
--- poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java (original)
+++ poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java Sun Oct 12 06:10:30 2008
@@ -22,13 +22,11 @@
 import java.util.*;
 import javax.xml.namespace.QName;
 
-import org.apache.poi.hssf.usermodel.HSSFPrintSetup;
 import org.apache.poi.hssf.util.PaneInformation;
 import org.apache.poi.ss.usermodel.CellStyle;
 import org.apache.poi.ss.usermodel.CommentsSource;
 import org.apache.poi.ss.usermodel.Footer;
 import org.apache.poi.ss.usermodel.Header;
-import org.apache.poi.ss.usermodel.PrintSetup;
 import org.apache.poi.ss.usermodel.Row;
 import org.apache.poi.ss.usermodel.Sheet;
 import org.apache.poi.ss.util.CellRangeAddress;
@@ -71,10 +69,6 @@
     protected CommentsSource sheetComments;
     protected CTMergeCells ctMergeCells;
 
-
-    protected List<Control> controls;
-
-
     public static final short LeftMargin = 0;
     public static final short RightMargin = 1;
     public static final short TopMargin = 2;
@@ -167,7 +161,7 @@
 
     public List<Control> getControls()
     {
-        return controls;
+        return null;
     }
 
     /**
@@ -267,7 +261,7 @@
         if(ctDrawing == null) {
             //drawingNumber = #drawings.size() + 1
             int drawingNumber = getPackagePart().getPackage().getPartsByRelationshipType(XSSFRelation.DRAWINGS.getRelation()).size() + 1;
-            drawing = (XSSFDrawing)createRelationship(XSSFRelation.DRAWINGS, XSSFDrawing.class, drawingNumber);
+            drawing = (XSSFDrawing)createRelationship(XSSFRelation.DRAWINGS, XSSFFactory.getInstance(), drawingNumber);
             String relId = drawing.getPackageRelationship().getId();
 
             //add CT_Drawing element which indicates that this sheet contains drawing components built on the drawingML platform.
@@ -632,7 +626,7 @@
     public short getLeftCol() {
         String cellRef = worksheet.getSheetViews().getSheetViewArray(0).getTopLeftCell();
         CellReference cellReference = new CellReference(cellRef);
-        return (short)cellReference.getCol();
+        return cellReference.getCol();
     }
 
     public double getMargin(short margin) {
@@ -1220,8 +1214,8 @@
      * @see #setZoom(int)
      */
     public void setZoom(int numerator, int denominator) {
-        Float result = new Float(numerator)/new Float(denominator)*100;
-        setZoom(result.intValue());
+        int zoom = 100*numerator/denominator;
+        setZoom(zoom);
     }
 
     /**
@@ -1368,7 +1362,7 @@
 
     public void ungroupRow(int fromRow, int toRow) {
         for(int i=fromRow;i<=toRow;i++){
-            XSSFRow xrow=(XSSFRow)getRow(i-1);
+            XSSFRow xrow=getRow(i-1);
             if(xrow!=null){
                 CTRow ctrow=xrow.getCTRow();
                 short outlinelevel=ctrow.getOutlineLevel();
@@ -1384,12 +1378,12 @@
 
     private void setSheetFormatPrOutlineLevelRow(){
         short maxLevelRow=getMaxOutlineLevelRows();
-        getSheetTypeSheetFormatPr().setOutlineLevelRow((short)(maxLevelRow));
+        getSheetTypeSheetFormatPr().setOutlineLevelRow(maxLevelRow);
     }
 
     private void setSheetFormatPrOutlineLevelCol(){
         short maxLevelCol=getMaxOutlineLevelCols();
-        getSheetTypeSheetFormatPr().setOutlineLevelCol((short)(maxLevelCol));
+        getSheetTypeSheetFormatPr().setOutlineLevelCol(maxLevelCol);
     }
 
     protected CTSheetViews getSheetTypeSheetViews() {
@@ -1519,7 +1513,7 @@
 
     private CommentsSource getComments() {
         if (sheetComments == null) {
-            sheetComments = (CommentsTable)createRelationship(XSSFRelation.SHEET_COMMENTS, CommentsTable.class, (int)sheet.getSheetId());
+            sheetComments = (CommentsTable)createRelationship(XSSFRelation.SHEET_COMMENTS, XSSFFactory.getInstance(), (int)sheet.getSheetId());
         }
         return sheetComments;
     }

Modified: poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java?rev=703814&r1=703813&r2=703814&view=diff
==============================================================================
--- poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java (original)
+++ poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java Sun Oct 12 06:10:30 2008
@@ -19,14 +19,10 @@
 
 import java.io.IOException;
 import java.io.OutputStream;
-import java.io.InputStream;
-import java.io.ByteArrayInputStream;
 import java.util.*;
 import javax.xml.namespace.QName;
 import org.apache.poi.POIXMLDocument;
 import org.apache.poi.POIXMLDocumentPart;
-import org.apache.poi.ss.usermodel.Palette;
-import org.apache.poi.ss.usermodel.PictureData;
 import org.apache.poi.ss.usermodel.Row;
 import org.apache.poi.ss.usermodel.Sheet;
 import org.apache.poi.ss.usermodel.Workbook;
@@ -34,12 +30,10 @@
 import org.apache.poi.util.POILogFactory;
 import org.apache.poi.util.POILogger;
 import org.apache.poi.util.PackageHelper;
-import org.apache.poi.util.IOUtils;
 import org.apache.poi.xssf.model.*;
 import org.apache.poi.POIXMLException;
 import org.apache.xmlbeans.XmlObject;
 import org.apache.xmlbeans.XmlOptions;
-import org.openxml4j.exceptions.InvalidFormatException;
 import org.openxml4j.exceptions.OpenXML4JException;
 import org.openxml4j.opc.*;
 import org.openxml4j.opc.Package;
@@ -131,7 +125,7 @@
     public XSSFWorkbook(Package pkg) throws IOException {
         super();
         if(pkg.getPackageAccess() == PackageAccess.READ){
-            //current implementation of OpenXML4J is funny.
+            //YK: current implementation of OpenXML4J is funny.
             //Packages opened by Package.open(InputStream is) are read-only,
             //there is no way to change or even save such an instance in a OutputStream.
             //The workaround is to create a copy via a temp file
@@ -155,7 +149,7 @@
 
         try {
             //build the POIXMLDocumentPart tree, this workbook is the root
-            read(new XSSFFactory());
+            read(XSSFFactory.getInstance());
 
             PackagePart corePart = getCorePart();
 
@@ -202,7 +196,7 @@
 
             if(sharedStringSource == null) {
                 //Create SST if it is missing
-                sharedStringSource = (SharedStringsTable)createRelationship(XSSFRelation.SHARED_STRINGS, SharedStringsTable.class);
+                sharedStringSource = (SharedStringsTable)createRelationship(XSSFRelation.SHARED_STRINGS, XSSFFactory.getInstance());
             }
 
             // Process the named ranges
@@ -240,8 +234,8 @@
         bv.setActiveTab(0);
         workbook.addNewSheets();
 
-        sharedStringSource = (SharedStringsTable)createRelationship(XSSFRelation.SHARED_STRINGS, SharedStringsTable.class);
-        stylesSource = (StylesTable)createRelationship(XSSFRelation.STYLES, StylesTable.class);
+        sharedStringSource = (SharedStringsTable)createRelationship(XSSFRelation.SHARED_STRINGS, XSSFFactory.getInstance());
+        stylesSource = (StylesTable)createRelationship(XSSFRelation.STYLES, XSSFFactory.getInstance());
 
         namedRanges = new LinkedList<XSSFName>();
         sheets = new LinkedList<XSSFSheet>();
@@ -273,7 +267,7 @@
      */
     public int addPicture(byte[] pictureData, int format) {
         int imageNumber = getAllPictures().size() + 1;
-        XSSFPictureData img = (XSSFPictureData)createRelationship(XSSFPictureData.RELATIONS[format], XSSFPictureData.class, imageNumber, true);
+        XSSFPictureData img = (XSSFPictureData)createRelationship(XSSFPictureData.RELATIONS[format], XSSFFactory.getInstance(), imageNumber, true);
         try {
             OutputStream out = img.getPackagePart().getOutputStream();
             out.write(pictureData);
@@ -392,7 +386,7 @@
                throw new IllegalArgumentException( "The workbook already contains a sheet of this name" );
 
         int sheetNumber = getNumberOfSheets() + 1;
-        XSSFSheet wrapper = (XSSFSheet)createRelationship(XSSFRelation.WORKSHEET, XSSFSheet.class, sheetNumber);
+        XSSFSheet wrapper = (XSSFSheet)createRelationship(XSSFRelation.WORKSHEET, XSSFFactory.getInstance(), sheetNumber);
 
         CTSheet sheet = addSheet(sheetname);
         wrapper.sheet = sheet;
@@ -496,11 +490,6 @@
         return stylesSource.getStyleAt(idx);
     }
 
-    public Palette getCustomPalette() {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
     /**
      * Get the font at the given index number
      *
@@ -508,7 +497,7 @@
      * @return XSSFFont at the index
      */
     public XSSFFont getFontAt(short idx) {
-        return (XSSFFont)stylesSource.getFontAt(idx);
+        return stylesSource.getFontAt(idx);
     }
 
     /**



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org