DriveHQ Start Menu
Cloud Drive Mapping
Folder Sync
Cloud Backup
True Drop Box
FTP/SFTP Hosting
Group Account
DriveHQ Start Menu
Online File Server
My Storage
|
Manage Shares
|
Publishes
|
Drop Boxes
|
Group Account
WebDAV Drive Mapping
Cloud Drive Home
|
WebDAV Guide
|
Drive Mapping Tool
|
Drive Mapping URL
Complete Data Backup
Backup Guide
|
Online Backup Tool
|
Cloud-to-Cloud Backup
FTP, Email & Web Service
FTP Home
|
FTP Hosting FAQ
|
Email Hosting
|
EmailManager
|
Web Hosting
Help & Resources
About
|
Enterprise Service
|
Partnership
|
Comparisons
|
Support
Quick Links
Security and Privacy
Download Software
Service Manual
Use Cases
Group Account
Online Help
Blog
Contact
Cloud Surveillance
Sign Up
Login
Features
Business Features
Online File Server
FTP Hosting
Cloud Drive Mapping
Cloud File Backup
Email Backup & Hosting
Cloud File Sharing
Folder Synchronization
Group Management
True Drop Box
Full-text Search
AD Integration/SSO
Mobile Access
IP Camera & DVR Solution
More...
Personal Features
Personal Cloud Drive
Backup All Devices
Mobile APPs
Personal Web Hosting
Sub-Account (for Kids)
Home/PC/Kids Monitoring
More...
Software
DriveHQ Drive Mapping Tool
DriveHQ FileManager
DriveHQ Online Backup
DriveHQ Mobile Apps
Pricing
Business Plans & Pricing
Personal Plans & Pricing
Price Comparison with Others
Feature Comparison with Others
Install Mobile App
Sign up
Creating account...
Invalid character in username! Only 0-9, a-z, A-Z, _, -, . allowed.
Username is required!
Invalid email address!
E-mail is required!
Password is required!
Password is invalid!
Password and confirmation do not match.
Confirm password is required!
I accept
Membership Agreement
Please read the Membership Agreement and check "I accept"!
Free Quick Sign-up
Sign-up Page
Log in
Signing in...
Username or e-mail address is required!
Password is required!
Keep me logged in
Quick Login
Forgot Password
Up
Upload
Download
Share
Publish
New Folder
New File
Copy
Cut
Delete
Paste
Rate
Upgrade
Rotate
Effect
Edit
Slide
History
/* * Copyright 2006 Sony Computer Entertainment Inc. * * Licensed under the SCEA Shared Source License, Version 1.0 (the "License"); you may not use this * file except in compliance with the License. You may obtain a copy of the License at: * http://research.scea.com/scea_shared_source_license.html * * Unless required by applicable law or agreed to in writing, software distributed under the License * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or * implied. See the License for the specific language governing permissions and limitations under the * License. */ #ifndef __DAE_URI_H__ #define __DAE_URI_H__ #include
#include
//Contributed by Nus - Wed, 08 Nov 2006 /** * Initializing URI. */ extern "C" void initializeURI(void); /** * Terminating URI. */ extern "C" void terminateURI(void); //------------------------- /** * The @c daeURI is a simple class designed to aid in the parsing and resolution * of URI references inside COLLADA elements. * A @c daeURI is created for every @c anyURL and @c IDREF in the COLLADA schema. * For example, the
element has the url= attribute of type @c anyURL, and the *
element has the target= attribute of type @c IDREF. * The @c daeURI class contains a URI string; the @c setURI() method breaks the string into * its components including protocol, authority, path (directory), and ID. * It also has the capability to attempt to resolve this reference * into a @c daeElement, through the method @c resolveElement(). * If a @c daeURI is stored within a @c daeElement, it fills * its container field to point to the containing element. * * The main API on the @c daeURI, @c resolveElement(), uses a @c daeURIResolver * to search for the @c daeElement inside a @c daeDatabase. * * URIs are resolved hierarchically, where each URI is resolved based on * the following criteria via itself and its element's base URI, which represents the * URI of the document that contains the element, retrieved by *
daeElement::getBaseURI().
* If no base URI is provided, then the application URI * is used as a base. * * The URI resolution order for the COLLADA DOM is as follows: * - Absolute URI is specified (see definition below): * The URI ignores its parent/base URI when validating. * - Relative URI is specified: * The URI uses the base URI to provide the protocol, authority, and base path. * This URI's path is appended to the path given the the base URI. * This URI's file and ID are used. * - Each level of URI is resolved in this way against the base URI of the * containing file until the top level is reached. Then the application URI * is used as the default. * *
Definition of Absolute URI:
* For the purposes of the COLLADA DOM, a URI is considered absolute * if it starts by specifying a protocol. * For example, * - file://c:/data/foo.dae#myScene is an absolute URI. * - foo.dae#myScene is relative. * - foo.dae is a top-level file reference and is relative. * If the URI does not include a pound sign (#), the
id
is empty. */ class daeURI { private: void internalSetURI(daeString uri); public: /** * An enum describing the status of the URI resolution process. */ DLLSPEC enum ResolveState{ /** No URI specified */ uri_empty, /** URI specified but unresolved */ uri_loaded, /** Resolution pending */ uri_pending, /** Resolution successful */ uri_success, /** Failure due to unsupported URI scheme */ uri_failed_unsupported_protocol, /** Failure because the file was not found */ uri_failed_file_not_found, /** Failure because the ID was not found */ uri_failed_id_not_found, /** Failure due to an invalid ID */ uri_failed_invalid_id, /** A flag specifying that the URI should be resolved locally to its own document */ uri_resolve_local, /** A flag specifying that the URI should be resolved using this relative URI */ uri_resolve_relative, /** A flag specifying that the URI should be resolved using this absolute URI */ uri_resolve_absolute, /** Failure due to an invalid reference */ uri_failed_invalid_reference, /** Failure due to an external error */ uri_failed_externalization, /** Failure due to missing document */ uri_failed_missing_container, /** Failure because autmoatic loading of a document is turned off */ uri_failed_external_document }; private: /** Resolved version of the URI */ daeString uriString; /** Original URI before resolution */ daeString originalURIString; // Parceled out of storage as const char*'s /** Protocol substring parsed from the URI */ daeString protocol; /** authority substring parsed from the URI */ daeString authority; /** Path substring parsed from the URI */ daeString filepath; /** File name substring parsed from the URI */ daeString file; /** Id substring parsed from the URI */ daeString id; /** Extension parsed from the filename in the URI */ daeString extension; /** Reference to the element that the URI resolves to in memory */ daeElementRef element; /** Pointer to the element that owns this URI */ daeElement* container; /** Current resolver state of the URI */ ResolveState state; /** Flag for if this URI references an external element. */ daeBool external; public: /** * Constructs a daeURI object that contains no URI reference. */ DLLSPEC daeURI(); /** * Destructor */ DLLSPEC ~daeURI(); /** * Constructs a daeURI object that points to the application's current working * directory. * @param dummy An integer value that has no meaning. * @note This is used only to initialize the Application URI. It's a simple * workaround to insure that the ApplicationURI is initialized only once and before the user can call * daeURI::setBaseURI() (so when we initialize ApplicationURI there is no chance of wiping out a user value). */ DLLSPEC daeURI(int dummy); /** * Constructs a daeURI object from a URI passed in as a string. * @param URIString Passed to setURI() automatically. * @param nofrag If true, the fragment part of the URI is stripped off before construction. */ DLLSPEC daeURI(daeString URIString, daeBool nofrag = false); /** * Constructs a daeURI object using a
baseURI
and a
uriString.
* Calls setURI(URIString), and @c validate(baseURI). * @param baseURI Base URI to resolve against. * @param URIString String designating this URI. */ DLLSPEC daeURI(daeURI& baseURI, daeString URIString); /** * Constructs a daeURI object based on a simple copy from an existing @c daeURI. * @param constructFromURI URI to copy into this one. */ DLLSPEC daeURI(daeURI& constructFromURI); /** * Gets the ID string parsed from the URI. * @return Returns a pointer to the string. */ inline daeString getID(){return(id);}; /** * Gets the file string parsed from the URI. * @return Returns a pointer to the string. */ inline daeString getFile(){return(file);}; /** * Gets the path string to the file, without the path name, parsed from the URI. * @return Returns a pointer to the string. */ inline daeString getFilepath(){return(filepath);}; /** * Gets the protocol string parsed from the URI. * @return Returns a pointer to the string. */ inline daeString getProtocol(){return(protocol);}; /** * Gets the authority string parsed from the URI. * @return Returns a pointer to the string. */ inline daeString getAuthority(){return(authority);}; /** * Gets the extension string parsed from the URI. * @return Returns a pointer to the string. */ inline daeString getExtension(){return(extension);}; /** * Gets the element that this URI resolves to in memory. * @return Returns a ref to the element. */ inline daeElementRef getElement(){return(element);}; /** * Gets the element that this URI resolves to in memory. * @return Returns a ref to the element. */ inline daeElementConstRef getElement() const {return(element);}; /** * Sets the element that this URI resolves to in memory. * @param newref A ref to the element. */ inline void setElement(daeElementRef newref){element=newref;}; /** * Gets the resolve state of the URI. * @return Returns the current state. * @note This will be removed when daeURI starts managing its state internally. */ inline ResolveState getState() const {return(state);}; /** * Sets the resolve state of the URI. * @param newState The new state. * @note This will be removed when daeURI starts managing its state internally. */ inline void setState(ResolveState newState){state=newState;}; /** * Gets a pointer to the @c daeElement that contains this URI. * @return Returns the pointer to the containing daeElmement. */ inline daeElement* getContainer() const {return(container);}; /** * Sets the pointer to the @c daeElement that contains this URI. * @param element Pointer to the containing @c daeElmement. */ inline void setContainer(daeElement* element){container=element;}; /** * Copies parameter
uri
into data member
uriString,
and then decomposes each of *
protocol, authority, filepath, file,
and
id.
* After @c setURI(), the
state
is set to @c uri_loaded. * @param uri String to use to configure this URI. */ DLLSPEC void setURI(daeString uri); /** * Gets the URI stored in the daeURI. * @return Returns the full URI String, from
uriString.
*/ DLLSPEC daeString getURI() const; /** * Gets the original URI String as originally set, not flattened against the base URI. * @return Returns the original URI String as originally set, not flattened against the base URI. */ DLLSPEC daeString getOriginalURI() const; /** * Gets if this URI resolves to an element that is not contained in the same document as the URI. * @return Returns true if the URI references an external element. False otherwise. */ daeBool isExternalReference() const { return external; } /** * Uses the @c daeURIResolver static API to try to resolve this URI * into a @c daeElement reference, placing the resolved element into
element.
* This function can effectively force a load of a file, perform * a database query, and so on, based on the @c daeURIResolver plugins implemented. */ DLLSPEC void resolveElement(daeString typeNameHint = NULL); /** * Configures the
uriString
for this @c daeURI based on the element set in
element.
* Uses the element's base URI and ID information to configure * the URI string. */ DLLSPEC void resolveURI(); /** * Flattens this URI with base URI to obtain a useable * complete URI for resolution. * @param baseURI Base URI to flatten against if this URI is * relative. * @note After @c validate(), state is @c uri_pending as it is awaiting a call to * @c resolveElement(). */ DLLSPEC void validate(daeURI* baseURI = NULL); /** * Copies the URI specified in
from
into @c this. * Performs a simple copy without validating the URI. * @param from URI to copy from. */ DLLSPEC void copyFrom(daeURI& from); /** * Outputs all components of this URI to stderr. * Useful for debugging URIs, this outputs each part of the URI separately. */ DLLSPEC void print(); /** * Makes the "originalURI" in this URI relative to some other uri * @param uri the URI to make "this" relative to. * @note this is experimental and not fully tested, please don't use in critical code yet. */ DLLSPEC int makeRelativeTo(daeURI* uri); /** * Comparison operator. * @return Returns true if URI's are equal. */ inline bool operator==(const daeURI& other) const{ return (!strcmp(other.getURI(), getURI())); } daeURI &operator=( const daeURI& other) { setURI(other.getOriginalURI()); element = other.element; state = other.state; return *this; } private: /** * Resets this URI; frees all string references * and returns
state
to @c empty. */ void reset(); /** * Provides a shared initialization for all constructors */ void initialize(); public: /** * Gets the path part of the URI, including everything from immediately after the authority up to and * including the file name, but not the query or fragment. * @param dest The user allocated buffer that will receive the path. * @param size The size of the buffer. * @return Returns true for success, false if the path exceeded the size of the user provided buffer. */ DLLSPEC daeBool getPath(daeChar *dest, daeInt size); public: /** * Sets the application's default base URI. This is effectively the default protocol, * authority, and path in the case of top-level relative URIs. * @param uri Base URI to use as the default application URI. */ static DLLSPEC void setBaseURI(daeURI& uri); /** * Gets the application's default base URI. * @return Returns the base URI used in the case of top-level relative URIs. */ static DLLSPEC daeURI* getBaseURI(); /** * Performs RFC2396 path normalization. * @param path Path to be normalized. */ static DLLSPEC void normalizeURIPath(char *path); }; class daeURIResolver; typedef daeTArray
daeURIResolverPtrArray; /** * The @c daeURIResolver class is the plugin point for URI resolution. * This class is an abstract base class that defines an interface for * resolving URIs. * All instances of @c daeURIResolvers are tracked centrally. * Every URI is passed through this list of @c daeURIResolvers for resolution. * Before a @c daeURIResolver receives a URI, the API checks whether it supports * the protocol. * The list is ordered on a first come, first serve basis, and resolution * terminates after any resolver instance resolves the URI. */ class daeURIResolver { public: /** * This base constructor appends @c this to KnownResolvers list. */ DLLSPEC daeURIResolver(); /** * Destructor */ virtual DLLSPEC ~daeURIResolver(); protected: static daeURIResolverPtrArray &_KnownResolvers(); static daeBool _loadExternalDocuments; public: /** * Iterates through known resolvers * calling @c isProtocolSupported() and, if it is supported, calling * @c resolveElement(). * @param uri @c daeURI to resolve. */ static DLLSPEC void attemptResolveElement(daeURI &uri, daeString typeNameHint = NULL); /** * Iterates through known resolvers * calling @c isProtocolSupported() and, if it is supported, calling * @c resolveURI(). * @param uri @c daeURI to resolve. */ static DLLSPEC void attemptResolveURI(daeURI &uri); /** * Sets a flag that tells the URI resolver whether or not to load a separate document if a URI * being resolved points to one. * @param load Set to true if you want the URI Resolver to automatically load other documents to * resolve URIs. */ static DLLSPEC void setAutoLoadExternalDocuments( daeBool load ); /** * Gets a flag that tells if the URI resolver is set to load an external document if a URI * being resolved points to one. * @return Returns true if the resolver will automatically load documents to resolve a URI. * False otherwise. */ static DLLSPEC daeBool getAutoLoadExternalDocuments(); public: // Abstract Interface /** * Provides an abstract interface for converting a @c daeURI into a @c daeElement * @param uri @c daeURI to resolve. * @return Returns true if the @c daeURIResolver successfully resolved the URI, * returns false otherwise. */ virtual DLLSPEC daeBool resolveElement(daeURI& uri, daeString typeNameHint = NULL) = 0; /** * Provides an abstract interface for converting a @c daeElement into a @c daeURI * @param uri @c daeURI to resolve. * @return Returns true if the @c daeURIResolver successfully resolved the element * into a URI, returns false otherwise. */ virtual DLLSPEC daeBool resolveURI(daeURI& uri) = 0; /** * Gets the name of this resolver. * @return Returns the resolver name as a string. */ virtual DLLSPEC daeString getName() = 0; /** * Determines whether this resolver supports a particular protocol * for resolution. * @param protocol Determine whether the resolver supports this protocol. * @return Returns true if this @c daeURIResolver understands how to resolve using this protocol, returns * false otherwise */ virtual DLLSPEC daeBool isProtocolSupported(daeString protocol) = 0; /** * Determines whether this resolver supports the given extension. * This keeps parsers from trying to process incompatible * file formats. * @param extension Extension string found after the '.' in the file name. * @return Returns true if the given extension is supported, returns false otherwise. */ virtual DLLSPEC daeBool isExtensionSupported(daeString extension) = 0; }; #endif //__DAE_URI_H__
daeURI.h
Page URL
File URL
Prev
31/33
Next
Download
( 17 KB )
Note: The DriveHQ service banners will NOT be displayed if the file owner is a paid member.
Comments
Total ratings:
0
Average rating:
Not Rated
Would you like to comment?
Join DriveHQ
for a free account, or
Logon
if you are already a member.