Options for XMPIterator construction. @since 24.01.2006
Inheritance: XmpOptions
Example #1
0
        /// <summary>
        /// Constructor with optionsl initial values. If <code>propName</code> is provided, 
        /// <code>schemaNs</code> has also be provided. </summary>
        /// <param name="xmp"> the iterated metadata object. </param>
        /// <param name="schemaNs"> the iteration is reduced to this schema (optional) </param>
        /// <param name="propPath"> the iteration is redurce to this property within the <code>schemaNs</code> </param>
        /// <param name="options"> advanced iteration options, see <seealso cref="IteratorOptions"/> </param>
        /// <exception cref="XmpException"> If the node defined by the paramters is not existing.  </exception>
        public XmpIteratorImpl(XmpMetaImpl xmp, string schemaNs, string propPath, IteratorOptions options) {
            // make sure that options is defined at least with defaults
            _options = options ?? new IteratorOptions();

            // the start node of the iteration depending on the schema and property filter
            XmpNode startNode;
            string initialPath = null;
            bool baseSchema = !String.IsNullOrEmpty(schemaNs);
            bool baseProperty = !String.IsNullOrEmpty(propPath);

            if (!baseSchema && !baseProperty) {
                // complete tree will be iterated
                startNode = xmp.Root;
            }
            else if (baseSchema && baseProperty) {
                // Schema and property node provided
                XmpPath path = XmpPathParser.ExpandXPath(schemaNs, propPath);

                // base path is the prop path without the property leaf
                XmpPath basePath = new XmpPath();
                for (int i = 0; i < path.Size() - 1; i++) {
                    basePath.Add(path.GetSegment(i));
                }

                startNode = XmpNodeUtils.FindNode(xmp.Root, path, false, null);
                _baseNs = schemaNs;
                initialPath = basePath.ToString();
            }
            else if (baseSchema && !baseProperty) {
                // Only Schema provided
                startNode = XmpNodeUtils.FindSchemaNode(xmp.Root, schemaNs, false);
            }
            else // !baseSchema  &&  baseProperty
            {
                // No schema but property provided -> error
                throw new XmpException("Schema namespace URI is required", XmpError.BADSCHEMA);
            }


            // create iterator
            if (startNode != null) {
                _nodeIterator = (!_options.JustChildren)
                                    ? new NodeIterator(this, startNode, initialPath, 1)
                                    : new NodeIteratorChildren(this, startNode, initialPath);
            }
            else {
                // create null iterator
                _nodeIterator = EmptyList.GetEnumerator();
            }
        }
Example #2
0
 /// <seealso cref= XMPMeta#iterator(String, String, IteratorOptions) </seealso>
 public virtual IXmpIterator Iterator(string schemaNs, string propName, IteratorOptions options) {
     return new XmpIteratorImpl(this, schemaNs, propName, options);
 }
Example #3
0
 /// <seealso cref= XMPMeta#iterator(IteratorOptions) </seealso>
 public virtual IXmpIterator Iterator(IteratorOptions options) {
     return Iterator(null, null, options);
 }