// Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the // "Software"), to deal in the Software without restriction, including // without limitation the rights to use, copy, modify, merge, publish, // distribute, sublicense, and/or sell copies of the Software, and to // permit persons to whom the Software is furnished to do so, subject to // the following conditions: // // The above copyright notice and this permission notice shall be // included in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // // Copyright (c) 2008 Novell, Inc. (http://www.novell.com) // // Authors: // Alan McGovern (amcgovern@novell.com) // using System; namespace System.IO.Packaging { internal static class Check { static void NotNull (object o, string name) { if (o == null) throw new ArgumentNullException (name); } public static void ContentTypeIsValid (string contentType) { if (string.IsNullOrEmpty (contentType)) return; // Must be in form of: type/subtype int index = contentType.IndexOf ('/'); bool result = (index > 0) && contentType.Length > (index + 1) && contentType.IndexOf ('/', index + 1) == -1; if(!result) throw new ArgumentException ("contentType", "contentType must be in the form of 'type/subtype'"); } public static void Id (object id) { NotNull (id, "id"); } public static void IdIsValid (string id) { if (id == null) return; // If the ID is a zero string, need to throw a ArgNullEx if (id.Length == 0) throw new ArgumentNullException ("id", "Cannot be whitespace or empty"); // FIXME: I need to XSD parse this to make sure it's valid // If it's not, throw an XmlException } private static bool EmptyOrBlank (string s) { return (s != null && (s == "" || s.Trim ().Length == 0)); } public static void Package(object package) { if (package == null) throw new ArgumentNullException ("package"); } public static void PackageUri (object packageUri) { NotNull (packageUri, "packageUri"); } public static void PackageUriIsValid (Uri packageUri) { if (!packageUri.IsAbsoluteUri) throw new ArgumentException ("packageUri", "Uri must be absolute"); } public static void PackUriIsValid (Uri packUri) { if (packUri.Scheme != PackUriHelper.UriSchemePack) throw new ArgumentException ("packUri", "Uri scheme is not a valid PackUri scheme"); if (!packUri.IsAbsoluteUri) throw new ArgumentException ("packUri", "PackUris must be absolute"); } public static void PartUri (object partUri) { if (partUri == null) throw new ArgumentNullException ("partUri"); } public static void PartUriIsValid (Uri partUri) { if (!partUri.OriginalString.StartsWith ("/")) throw new UriFormatException ("PartUris must start with '/'"); if (partUri.IsAbsoluteUri) throw new UriFormatException ("PartUris cannot be absolute"); } public static void RelationshipTypeIsValid (string relationshipType) { if (relationshipType == null) throw new ArgumentNullException ("relationshipType"); if (EmptyOrBlank (relationshipType)) throw new ArgumentException ("relationshipType", "Cannot be whitespace or empty"); } public static void PartUri (Uri partUri) { if (partUri == null) throw new ArgumentNullException ("partUri"); if (partUri.IsAbsoluteUri) throw new ArgumentException ("partUri", "Absolute URIs are not supported"); if (string.IsNullOrEmpty (partUri.OriginalString)) throw new ArgumentException ("partUri", "Part uri cannot be an empty string"); } public static void SourcePartUri (Uri sourcePartUri) { NotNull(sourcePartUri, "sourcePartUri"); } public static void SourceUri (Uri sourceUri) { if (sourceUri == null) throw new ArgumentNullException ("sourceUri"); // if (sourceUri.IsAbsoluteUri) // throw new ArgumentException ("sourceUri", "Absolute URIs are not supported"); if (string.IsNullOrEmpty (sourceUri.OriginalString)) throw new ArgumentException ("sourceUri", "Part uri cannot be an empty string"); } public static void TargetUri (Uri targetUri) { if (targetUri == null) throw new ArgumentNullException ("targetUri"); // if (targetUri.IsAbsoluteUri) // throw new ArgumentException ("targetUri", "Absolute URIs are not supported"); if (string.IsNullOrEmpty (targetUri.OriginalString)) throw new ArgumentException ("targetUri", "Part uri cannot be an empty string"); } } }