/// <summary> /// CREATE new item, replace if it exists. URI identifies the context for the item in question. /// No parameters are required for POST, just thepayload. /// </summary> private void DoPost(AssetRequestData rdata) { bool modified = false; bool created = false; Rest.Log.DebugFormat("{0} REST Asset handler, Method = <{1}> ENTRY", MsgId, rdata.method); if (rdata.Parameters.Length != 0) { Rest.Log.WarnFormat("{0} Parameters ignored <{1}>", MsgId, rdata.path); Rest.Log.InfoFormat("{0} POST of an asset has no parameters", MsgId, rdata.path); } rdata.initXmlReader(); XmlReader xml = rdata.reader; if (!xml.ReadToFollowing("Asset")) { Rest.Log.DebugFormat("{0} Invalid request data: <{1}>", MsgId, rdata.path); rdata.Fail(Rest.HttpStatusCodeBadRequest, "invalid request data"); } UUID uuid = new UUID(xml.GetAttribute("id")); AssetBase asset = Rest.AssetServices.Get(uuid.ToString()); modified = (asset != null); created = !modified; asset = new AssetBase(); asset.FullID = uuid; asset.Name = xml.GetAttribute("name"); asset.Description = xml.GetAttribute("desc"); asset.Type = SByte.Parse(xml.GetAttribute("type")); asset.Local = Int32.Parse(xml.GetAttribute("local")) != 0; asset.Temporary = Int32.Parse(xml.GetAttribute("temporary")) != 0; asset.Data = Convert.FromBase64String(xml.ReadElementContentAsString("Asset", "")); Rest.AssetServices.Store(asset); if (created) { rdata.appendStatus(String.Format("<p> Created asset {0}, UUID {1} <p>", asset.Name, asset.FullID)); rdata.Complete(Rest.HttpStatusCodeCreated); } else { if (modified) { rdata.appendStatus(String.Format("<p> Modified asset {0}, UUID {1} <p>", asset.Name, asset.FullID)); rdata.Complete(Rest.HttpStatusCodeOK); } else { rdata.Complete(Rest.HttpStatusCodeNoContent); } } rdata.Respond(String.Format("Asset {0} : Normal completion", rdata.method)); }
/// <summary> /// The only parameter we recognize is a UUID.If an asset with this identification is /// found, it's content, base-64 encoded, is returned to the client. /// </summary> private void DoGet(AssetRequestData rdata) { Rest.Log.DebugFormat("{0} REST Asset handler, Method = <{1}> ENTRY", MsgId, rdata.method); if (rdata.Parameters.Length == 1) { UUID uuid = new UUID(rdata.Parameters[0]); AssetBase asset = Rest.AssetServices.Get(uuid.ToString()); if (asset != null) { Rest.Log.DebugFormat("{0} Asset located <{1}>", MsgId, rdata.Parameters[0]); rdata.initXmlWriter(); rdata.writer.WriteStartElement(String.Empty, "Asset", String.Empty); rdata.writer.WriteAttributeString("id", asset.ID); rdata.writer.WriteAttributeString("name", asset.Name); rdata.writer.WriteAttributeString("desc", asset.Description); rdata.writer.WriteAttributeString("type", asset.Type.ToString()); rdata.writer.WriteAttributeString("local", asset.Local.ToString()); rdata.writer.WriteAttributeString("temporary", asset.Temporary.ToString()); rdata.writer.WriteBase64(asset.Data, 0, asset.Data.Length); rdata.writer.WriteFullEndElement(); } else { Rest.Log.DebugFormat("{0} Invalid parameters: <{1}>", MsgId, rdata.path); rdata.Fail(Rest.HttpStatusCodeNotFound, "invalid parameters"); } } rdata.Complete(); rdata.Respond(String.Format("Asset <{0}> : Normal completion", rdata.method)); }
/// <summary> /// CREATE new item, replace if it exists. URI identifies the context for the item in question. /// No parameters are required for POST, just thepayload. /// </summary> private void DoPost(AssetRequestData rdata) { bool modified = false; bool created = false; Rest.Log.DebugFormat("{0} REST Asset handler, Method = <{1}> ENTRY", MsgId, rdata.method); if (rdata.Parameters.Length != 0) { Rest.Log.WarnFormat("{0} Parameters ignored <{1}>", MsgId, rdata.path); Rest.Log.InfoFormat("{0} POST of an asset has no parameters", MsgId, rdata.path); } rdata.initXmlReader(); XmlReader xml = rdata.reader; if (!xml.ReadToFollowing("Asset")) { Rest.Log.DebugFormat("{0} Invalid request data: <{1}>", MsgId, rdata.path); rdata.Fail(Rest.HttpStatusCodeBadRequest,"invalid request data"); } UUID uuid = new UUID(xml.GetAttribute("id")); AssetBase asset = Rest.AssetServices.Get(uuid.ToString()); modified = (asset != null); created = !modified; asset = new AssetBase(uuid, xml.GetAttribute("name"), SByte.Parse(xml.GetAttribute("type"))); asset.Description = xml.GetAttribute("desc"); asset.Local = Int32.Parse(xml.GetAttribute("local")) != 0; asset.Temporary = Int32.Parse(xml.GetAttribute("temporary")) != 0; asset.Data = Convert.FromBase64String(xml.ReadElementContentAsString("Asset", "")); Rest.AssetServices.Store(asset); if (created) { rdata.appendStatus(String.Format("<p> Created asset {0}, UUID {1} <p>", asset.Name, asset.FullID)); rdata.Complete(Rest.HttpStatusCodeCreated); } else { if (modified) { rdata.appendStatus(String.Format("<p> Modified asset {0}, UUID {1} <p>", asset.Name, asset.FullID)); rdata.Complete(Rest.HttpStatusCodeOK); } else { rdata.Complete(Rest.HttpStatusCodeNoContent); } } rdata.Respond(String.Format("Asset {0} : Normal completion", rdata.method)); }
/// <summary> /// The only parameter we recognize is a UUID.If an asset with this identification is /// found, it's content, base-64 encoded, is returned to the client. /// </summary> private void DoGet(AssetRequestData rdata) { Rest.Log.DebugFormat("{0} REST Asset handler, Method = <{1}> ENTRY", MsgId, rdata.method); if (rdata.Parameters.Length == 1) { UUID uuid = new UUID(rdata.Parameters[0]); AssetBase asset = Rest.AssetServices.Get(uuid.ToString()); if (asset != null) { Rest.Log.DebugFormat("{0} Asset located <{1}>", MsgId, rdata.Parameters[0]); rdata.initXmlWriter(); rdata.writer.WriteStartElement(String.Empty,"Asset",String.Empty); rdata.writer.WriteAttributeString("id", asset.ID); rdata.writer.WriteAttributeString("name", asset.Name); rdata.writer.WriteAttributeString("desc", asset.Description); rdata.writer.WriteAttributeString("type", asset.Type.ToString()); rdata.writer.WriteAttributeString("local", asset.Local.ToString()); rdata.writer.WriteAttributeString("temporary", asset.Temporary.ToString()); rdata.writer.WriteBase64(asset.Data,0,asset.Data.Length); rdata.writer.WriteFullEndElement(); } else { Rest.Log.DebugFormat("{0} Invalid parameters: <{1}>", MsgId, rdata.path); rdata.Fail(Rest.HttpStatusCodeNotFound, "invalid parameters"); } } rdata.Complete(); rdata.Respond(String.Format("Asset <{0}> : Normal completion", rdata.method)); }
/// <summary> /// UPDATE existing item, if it exists. URI identifies the item in question. /// The only parameter we recognize is a UUID. The enclosed asset data (base-64 encoded) /// is decoded and stored in the database, identified by the supplied UUID. /// </summary> private void DoPut(AssetRequestData rdata) { bool modified = false; bool created = false; AssetBase asset = null; Rest.Log.DebugFormat("{0} REST Asset handler, Method = <{1}> ENTRY", MsgId, rdata.method); if (rdata.Parameters.Length == 1) { rdata.initXmlReader(); XmlReader xml = rdata.reader; if (!xml.ReadToFollowing("Asset")) { Rest.Log.DebugFormat("{0} Invalid request data: <{1}>", MsgId, rdata.path); rdata.Fail(Rest.HttpStatusCodeBadRequest, "invalid request data"); } UUID uuid = new UUID(rdata.Parameters[0]); asset = Rest.AssetServices.Get(uuid.ToString()); modified = (asset != null); created = !modified; asset = new AssetBase(uuid, xml.GetAttribute("name"), SByte.Parse(xml.GetAttribute("type")), UUID.Zero.ToString()); asset.Description = xml.GetAttribute("desc"); asset.Local = Int32.Parse(xml.GetAttribute("local")) != 0; asset.Temporary = Int32.Parse(xml.GetAttribute("temporary")) != 0; asset.Data = Convert.FromBase64String(xml.ReadElementContentAsString("Asset", "")); if (asset.ID != rdata.Parameters[0]) { Rest.Log.WarnFormat("{0} URI and payload disagree on UUID U:{1} vs P:{2}", MsgId, rdata.Parameters[0], asset.ID); } Rest.AssetServices.Store(asset); } else { Rest.Log.DebugFormat("{0} Invalid parameters: <{1}>", MsgId, rdata.path); rdata.Fail(Rest.HttpStatusCodeNotFound, "invalid parameters"); } if (created) { rdata.appendStatus(String.Format("<p> Created asset {0}, UUID {1} <p>", asset.Name, asset.FullID)); rdata.Complete(Rest.HttpStatusCodeCreated); } else { if (modified) { rdata.appendStatus(String.Format("<p> Modified asset {0}, UUID {1} <p>", asset.Name, asset.FullID)); rdata.Complete(Rest.HttpStatusCodeOK); } else { rdata.Complete(Rest.HttpStatusCodeNoContent); } } rdata.Respond(String.Format("Asset {0} : Normal completion", rdata.method)); }