/**
         * Literal value set/get methods
         * @throws XmpException
         */
        private static void CoverLiteralProperties()
        {
            writeMajorLabel("Test SetProperty... and getProperty... methods " +
                            "(set/get with literal values)");

            var meta      = XmpMetaFactory.ParseFromString(TestData.DATETIME_RDF);
            var dateValue = XmpDateTimeFactory.Create(2000, 1, 2, 3, 4, 5, 0);

            meta.SetPropertyBoolean(TestData.NS1, "Bool0", false);
            meta.SetPropertyBoolean(TestData.NS1, "Bool1", true);
            meta.SetPropertyInteger(TestData.NS1, "Int", 42);
            meta.SetPropertyDouble(TestData.NS1, "Double", 4.2);

            meta.SetPropertyDate(TestData.NS1, "Date10", dateValue);

/*
 *          TODO reinstate this code
 *
 *          int offset = (/* hour #1# 06 * 3600 * 1000 + /* minute #1# 07 * 60 * 1000) * /* sign #1# 1;
 *          dateValue.SetTimeZone(new SimpleTimeZone(offset, "test"));
 *          meta.SetPropertyDate (NS1, "Date11", dateValue);
 *          offset *= -1;
 *          dateValue.SetTimeZone(new SimpleTimeZone(offset, "test"));
 *          meta.SetPropertyDate (NS1, "Date12", dateValue);
 *          dateValue.SetNanosecond(9);
 *          meta.SetPropertyDate (NS1, "Date13", dateValue);
 */

            printXmpMeta(meta, "A few basic binary Set... calls");
            log.WriteLine();

            bool b = meta.GetPropertyBoolean(TestData.NS1, "Bool0");

            log.WriteLine("getPropertyBoolean ns1:Bool0 =   " + b);

            b = meta.GetPropertyBoolean(TestData.NS1, "Bool1");
            log.WriteLine("getPropertyBoolean ns1:Bool1 =   " + b);

            int integer = meta.GetPropertyInteger(TestData.NS1, "Int");

            log.WriteLine("getPropertyBoolean ns1:Int =   " + integer);

            double d = meta.GetPropertyDouble(TestData.NS1, "Double");

            log.WriteLine("getPropertyBoolean ns1:Int =   " + d);
            log.WriteLine();

            for (int i = 1; i <= 13; i++)
            {
                var dateName = "Date" + i;
                var dt       = meta.GetPropertyDate(TestData.NS1, dateName);
                log.WriteLine("getPropertyDate (" + i + ") =   " + dt);
                meta.SetPropertyDate(TestData.NS2, dateName, dateValue);
            }

            printXmpMeta(meta, "Get and re-set the dates in NS2");
        }
        /// <summary>
        /// Converts the node value to string, apply special conversions for defined
        /// types in XMP.
        /// </summary>
        /// <param name="value">the node value to set</param>
        /// <returns>Returns the String representation of the node value.</returns>
        private static string SerializeNodeValue(object value)
        {
            if (value == null)
            {
                return(null);
            }

            if (value is bool)
            {
                return(XmpCore.XmpUtils.ConvertFromBoolean((bool)value));
            }

            if (value is int)
            {
                return(XmpCore.XmpUtils.ConvertFromInteger((int)value));
            }

            if (value is long)
            {
                return(XmpCore.XmpUtils.ConvertFromLong((long)value));
            }

            if (value is double)
            {
                return(XmpCore.XmpUtils.ConvertFromDouble((double)value));
            }

            string strValue;
            var    dateTime = value as IXmpDateTime;

            if (dateTime != null)
            {
                strValue = XmpCore.XmpUtils.ConvertFromDate(dateTime);
            }
            else
            {
                var calendar = value as GregorianCalendar;
                if (calendar != null)
                {
                    var dt = XmpDateTimeFactory.CreateFromCalendar(calendar);
                    strValue = XmpCore.XmpUtils.ConvertFromDate(dt);
                }
                else
                {
                    var sbytes = value as byte[];
                    strValue = sbytes != null?XmpCore.XmpUtils.EncodeBase64(sbytes) : value.ToString();
                }
            }

            return(strValue != null?Utils.RemoveControlChars(strValue) : null);
        }
        internal static IXmpMeta Get(ImageDetails details)
        {
            var xmp = XmpMetaFactory.Create();

            var idNs     = "https://id.parliament.uk/";
            var schemaNs = $"{idNs}schema/";

            XmpMetaFactory.SchemaRegistry.RegisterNamespace(idNs, "id");
            XmpMetaFactory.SchemaRegistry.RegisterNamespace(schemaNs, "schema");

            xmp.SetProperty(XmpConstants.NsIptccore, "CiAdrCity", "London");
            xmp.SetProperty(XmpConstants.NsIptccore, "CiAdrCtry", "UK");
            xmp.SetProperty(XmpConstants.NsIptccore, "CiAdrRegion", "London");
            xmp.SetProperty(XmpConstants.NsIptccore, "CiEmailWork", "*****@*****.**");
            xmp.SetProperty(XmpConstants.NsIptccore, "CiTelWork", "+447740424810");
            xmp.SetProperty(XmpConstants.NsIptccore, "CiUrlWork", "http://www.mcandrewphoto.co.uk");

            xmp.SetProperty(XmpConstants.NsPhotoshop, "Source", "Chris McAndrew / UK Parliament");
            xmp.SetProperty(XmpConstants.NsPhotoshop, "Credit", "Chris McAndrew / UK Parliament (Attribution 3.0 Unported (CC BY 3.0))");
            xmp.SetPropertyDate(XmpConstants.NsPhotoshop, "DateCreated", XmpDateTimeFactory.Create(2017, 6, 17, 11, 30, 41, 0));

            xmp.SetProperty(XmpConstants.NsDC, "rights", "Attribution 3.0 Unported (CC BY 3.0)");
            xmp.SetProperty(XmpConstants.NsDC, "title", $"{details.GivenName} {details.FamilyName}");
            xmp.SetProperty(XmpConstants.NsDC, "description", $"{details.GivenName} {details.FamilyName} - UK Parliament official portraits 2017");
            xmp.SetProperty(XmpConstants.NsDC, "creator", "Chris McAndrew / UK Parliament");

            // <rdf:Description rdf:about="http://id.parliament.uk/IMAGE1" />
            xmp.SetObjectName($"{idNs}{details.Id}");

            // id:IMAGE1 a schema:Image
            xmp.SetProperty(XmpConstants.NsRdf, "type", $"{schemaNs}Image", new PropertyOptions {
                IsUri = true
            });

            // id:IMAGE1 schema:parlHasSubject id:PERSON1
            xmp.SetProperty(schemaNs, "imageHasSubject", details.MemberUri, new PropertyOptions {
                IsUri = true
            });

            // id:PERSON1 a schema:Person
            xmp.SetQualifier(schemaNs, "imageHasSubject", XmpConstants.NsRdf, "type", $"{schemaNs}Person", new PropertyOptions {
                IsUri = true
            });

            return(xmp);
        }
Exemple #4
0
        /// <summary>
        /// Converts the node value to string, apply special conversions for defined
        /// types in XMP.
        /// </summary>
        /// <param name="value">the node value to set</param>
        /// <returns>Returns the String representation of the node value.</returns>
        private static string SerializeNodeValue(object value)
        {
            switch (value)
            {
            case null:
                return(null);

            case bool b:
                return(XmpCore.XmpUtils.ConvertFromBoolean(b));

            case int i:
                return(XmpCore.XmpUtils.ConvertFromInteger(i));

            case long l:
                return(XmpCore.XmpUtils.ConvertFromLong(l));

            case double d:
                return(XmpCore.XmpUtils.ConvertFromDouble(d));
            }

            string strValue;

            switch (value)
            {
            case IXmpDateTime dateTime:
                strValue = XmpCore.XmpUtils.ConvertFromDate(dateTime);
                break;

            case GregorianCalendar calendar:
                var dt = XmpDateTimeFactory.CreateFromCalendar(calendar);
                strValue = XmpCore.XmpUtils.ConvertFromDate(dt);
                break;

            default:
                strValue = value is byte[] sbytes?XmpCore.XmpUtils.EncodeBase64(sbytes) : value.ToString();

                break;
            }

            return(strValue != null?Utils.RemoveControlChars(strValue) : null);
        }
        /**
         * Date/Time utilities
         */
        private static void CoverDateTime()
        {
            writeMajorLabel("Test date/time utilities and special values");

            var date1 = XmpDateTimeFactory.Create(2000, 1, 31, 12, 34, 56, -1);

            date1.TimeZone = TimeZoneInfo.FindSystemTimeZoneById("PST");

            var date2 = XmpDateTimeFactory.Create(0, 0, 0, 0, 0, 0, 0);

            GregorianCalendar cal = new GregorianCalendar(2007, 1, 28);
            var date3             = XmpDateTimeFactory.CreateFromCalendar(cal);

            var currentDateTime = XmpDateTimeFactory.GetCurrentDateTime();

            log.WriteLine("Print date 2000 Jan 31 12:34:56 PST =   {0}", date1);
            log.WriteLine("Print zero date =   {0}", date2);
            log.WriteLine("Print date created by a calendar =   {0}", date3);
            log.WriteLine("Print current date =   {0}", currentDateTime);
            log.WriteLine();
        }