private static string constructUri(Uri baseUri, string resourceType, string id, string versionId, ResourceIdentityForm form)
        {
            if (form == ResourceIdentityForm.AbsoluteRestUrl || form == ResourceIdentityForm.RelativeRestUrl)
            {
                if (baseUri == null)
                {
                    return versionId != null ?
                        string.Format("{0}/{1}/{2}/{3}", resourceType, id, TransactionBuilder.HISTORY, versionId) :
                        string.Format("{0}/{1}", resourceType, id);
                }
                else
                {
                    if (versionId != null)
                        return construct(baseUri, resourceType, id, TransactionBuilder.HISTORY, versionId);
                    else
                        return construct(baseUri, resourceType, id);
                }
            }
            else if (form == ResourceIdentityForm.Urn)
            {
                return baseUri + id;
            }
            else if (form == ResourceIdentityForm.Local)
            {
                return "#" + id;
            }
            else
            {
                throw Error.NotImplemented("Unsupported uri kind " + form.ToString());
            }

        }
 private ResourceIdentity(Uri baseUri, string resourceType, string id, string versionId, ResourceIdentityForm form) :
     base(constructUri(baseUri, resourceType, id, versionId, form), UriKind.RelativeOrAbsolute)
 {
     BaseUri      = baseUri;
     ResourceType = resourceType;
     Id           = id;
     VersionId    = versionId;
     Form         = form;
 }
 private static string constructUri(Uri baseUri, string resourceType, string id, string versionId, ResourceIdentityForm form)
 {
     if (form == ResourceIdentityForm.AbsoluteRestUrl || form == ResourceIdentityForm.RelativeRestUrl)
     {
         if (baseUri == null)
         {
             return(versionId != null?
                    string.Format("{0}/{1}/{2}/{3}", resourceType, id, TransactionBuilder.HISTORY, versionId) :
                        string.Format("{0}/{1}", resourceType, id));
         }
         else
         {
             if (versionId != null)
             {
                 return(construct(baseUri, resourceType, id, TransactionBuilder.HISTORY, versionId));
             }
             else
             {
                 return(construct(baseUri, resourceType, id));
             }
         }
     }
     else if (form == ResourceIdentityForm.Urn)
     {
         return(baseUri + id);
     }
     else if (form == ResourceIdentityForm.Local)
     {
         return("#" + id);
     }
     else
     {
         throw Error.NotImplemented("Unsupported uri kind " + form.ToString());
     }
 }
 private ResourceIdentity(Uri baseUri, string resourceType, string id, string versionId, ResourceIdentityForm form) : 
     base(constructUri(baseUri,resourceType,id,versionId, form), UriKind.RelativeOrAbsolute)
 {
     BaseUri = baseUri;
     ResourceType = resourceType;
     Id = id;
     VersionId = versionId;
     Form = form;
 }