TaggedObject.cs #1

  • //
  • guest/
  • perforce_software/
  • p4api.net/
  • p4api.net/
  • TaggedObject.cs
  • View
  • Commits
  • Open Download .zip Download (3 KB)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Perforce.P4
{
	/// <summary>
	/// The tagged output of a command.
	/// </summary>
	public class TaggedObject : Dictionary<String, String>
	{
		/// <summary>
		/// Basic constrictor
		/// </summary>
		public TaggedObject() : base() { }

		/// <summary>
		/// Copy constructor
		/// </summary>
		/// <param name="obj">Source object</param>
		public TaggedObject(TaggedObject obj) : base(obj) { }
	};

	/// <summary>
	/// A list of tagged objects.
	/// </summary>
	public class TaggedObjectList : List<TaggedObject> { };

	/// <summary>
	/// List of info messages.
	/// </summary>
	public class InfoList : List<InfoLine>
	{
		/// <summary>
		/// Cast to a String[].
		/// </summary>
		/// <param name="l"></param>
		/// <returns></returns>
		public static implicit operator String[](InfoList l)
		{
			String[] r = new String[l.Count];
			int idx = 0;
			foreach (InfoLine i in l)
				r[idx++] = i.ToString();
			return r;
		}

		/// <summary>
		/// Cast to a String. Messages are separated by \r\n
		/// </summary>
		/// <param name="l"></param>
		/// <returns></returns>
		public static implicit operator String(InfoList l)
		{
			StringBuilder r = new StringBuilder(l.Count * 80);
			foreach (InfoLine i in l)
			{
				r.Append(i.ToString());
				r.Append("/r/n");
			}
			return r.ToString();
		}
	}

	/// <summary>
	/// A single line of output from an 'info' message.
	/// </summary>
	public class InfoLine
	{
		/// <summary>
		/// The level of the message (0-9)
		/// </summary>
		public int Level;
		/// <summary>
		/// The level of the message (0-9)
		/// </summary>
		public uint CommandId;
		/// <summary>
		/// The message
		/// </summary>
		public String Info;

		/// <summary>
		/// Create a new InfoLine
		/// </summary>
		/// <param name="nLevel">Level of the message</param>
		/// <param name="nInfo">Message text.</param>
		public InfoLine(uint cmdId, int nLevel, String nInfo)
		{
			CommandId = cmdId;
			Level = nLevel;
			Info = nInfo;
		}

		/// <summary>
		/// Convert the info to text
		/// </summary>
		/// <returns>String representation</returns>
		public override string ToString()
		{
			String levelDots = String.Empty;
			for (int idx = 0; idx < Level; idx++)
				levelDots += ".";
			return String.Format("{0}{1}", levelDots, Info);
		}
	}

	/// <summary>
	/// Base class for objects returned by a command as 'tagged' data.
	/// </summary>
	/// <remarks>
	/// Contains a Hashtable of the field values for the object.
	/// Derived object can provide properties to directly access
	/// their standard attributes.
	/// </remarks>
	public class TaggedInfoItem : TaggedObject
	{
		private String name;
		/// <summary>
		/// String that that is the field that identifies this object
		/// </summary>
		public String Name
		{
			get { return name; }
		}
		/// <summary>
		/// The raw data returned from the server
		/// </summary>
		public TaggedObject ItemData
		{
			get { return (TaggedObject)this; }
		}

		/// <summary>
		/// Default constructer
		/// </summary>
		public TaggedInfoItem()
		{
			name = String.Empty;
		}
	}
}
# Change User Description Committed
#5 19042 Liz Lam Rename/move file(s) to proper main branch.
#4 12254 Bill Update Workshop version with 2015.1 GA of p4api.net
#3 10191 Matt Attaway Bring Workshop version of p4api.net up-to-date with the 14.2 release.
#2 8964 Bill fix line endings
#1 8873 Matt Attaway Initial add of the P4API.NET source code