Exemplo n.º 1
0
        /**
         * Returns the {@link PackageRelationship#GetId()} of the
         * {@link PackageRelationship}, that sources from the {@link PackagePart} of
         * this {@link POIXMLDocumentPart} to the {@link PackagePart} of the given
         * parameter value.
         *
         * @param part
         *            The {@link POIXMLDocumentPart} for which the according
         *            relation-id shall be found.
         * @return The value of the {@link PackageRelationship#GetId()} or null, if
         *         parts are not related.
         */

        public String GetRelationId(POIXMLDocumentPart part)
        {
            foreach (KeyValuePair <String, POIXMLDocumentPart> entry in relations)
            {
                if (entry.Value == part)
                {
                    return(entry.Key);
                }
            }
            return(null);
        }
Exemplo n.º 2
0
        /**
         * Iterate through the underlying PackagePart and create child POIXMLFactory instances
         * using the specified factory
         *
         * @param factory   the factory object that Creates POIXMLFactory instances
         * @param context   context map Containing already visited noted keyed by tarGetURI
         */

        protected void Read(POIXMLFactory factory, Dictionary <PackagePart, POIXMLDocumentPart> context)
        {
            try
            {
                PackageRelationshipCollection rels = packagePart.Relationships;
                foreach (PackageRelationship rel in rels)
                {
                    if (rel.TargetMode == TargetMode.Internal)
                    {
                        Uri uri = rel.TargetUri;

                        PackagePart p;

                        if (uri.OriginalString.IndexOf('#') >= 0)
                        {
                            /*
                             * For internal references (e.g. '#Sheet1!A1') the namespace part is null
                             */
                            p = null;
                        }
                        else
                        {
                            PackagePartName relName = PackagingUriHelper.CreatePartName(uri);
                            p = packagePart.Package.GetPart(relName);
                            if (p == null)
                            {
                                logger.Log(POILogger.ERROR, "Skipped invalid entry " + rel.TargetUri);
                                continue;
                            }
                        }

                        if (p == null || !context.ContainsKey(p))
                        {
                            POIXMLDocumentPart childPart = factory.CreateDocumentPart(this, rel, p);
                            childPart.parent = this;
                            AddRelation(rel.Id, childPart);
                            if (p != null)
                            {
                                context[p] = childPart;
                                if (p.HasRelationships)
                                {
                                    childPart.Read(factory, context);
                                }
                            }
                        }
                        else
                        {
                            AddRelation(rel.Id, context[p]);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                if ((null != ex.InnerException) && (null != ex.InnerException.InnerException))
                {
                    // this type of exception is thrown when the XML Serialization does not match the input.
                    logger.Log(1, ex.InnerException.InnerException);
                }
                throw;
            }
        }
Exemplo n.º 3
0
        /**
         * Remove the relation to the specified part in this namespace and remove the
         * part, if it is no longer needed.
         */

        protected internal void RemoveRelation(POIXMLDocumentPart part)
        {
            RemoveRelation(part, true);
        }
Exemplo n.º 4
0
        /**
         * Add a new child POIXMLDocumentPart
         *
         * @param part the child to add
         */

        public void AddRelation(string id, POIXMLDocumentPart part)
        {
            relations[id] = part;
            part.IncrementRelationCounter();
        }
Exemplo n.º 5
0
        /**
         * Creates an POIXMLDocumentPart representing the given namespace part, relationship and parent
         * Called by {@link #read(POIXMLFactory, java.util.Map)} when Reading in an exisiting file.
         *
         * @param parent - Parent part
         * @param part - The namespace part that holds xml data represenring this sheet.
         * @param rel - the relationship of the given namespace part
         * @see #read(POIXMLFactory, java.util.Map)
         */

        public POIXMLDocumentPart(POIXMLDocumentPart parent, PackagePart part, PackageRelationship rel)
        {
            this.packagePart = part;
            this.packageRel  = rel;
            this.parent      = parent;
        }
Exemplo n.º 6
0
        /**
         * Create a POIXMLDocumentPart from existing namespace part and relation. This method is called
         * from {@link POIXMLDocument#load(POIXMLFactory)} when parsing a document
         *
         * @param parent parent part
         * @param rel   the namespace part relationship
         * @param part  the PackagePart representing the Created instance
         * @return A new instance of a POIXMLDocumentPart.
         */

        public abstract POIXMLDocumentPart CreateDocumentPart(POIXMLDocumentPart parent, PackageRelationship rel, PackagePart part);