#region copyright
//<copyright>
// Copyright(C) 2012 TrackerRealm Corporation
// This file is part of the open source project - Jazz. http://jazz.codeplex.com
//
// Jazz is open software: you can redistribute it and/or modify it
// under the terms of the GNU Affero General Public License (AGPL) as published by
// the Free Software Foundation, version 3 of the License.
//
// Jazz is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU Affero General Public License (AGPL) for more details.
//
// You should have received a copy of the GNU General Public
// License along with Jazz. If not, see <http://www.gnu.org/licenses/>.
//
// REMOVAL OF THIS NOTICE IS VIOLATION OF THE COPYRIGHT.
//</copyright>
#endregion
using System;
using System.Linq;
using System.Collections.Generic;
using System.Text;
using TrackerRealm.Jazz.Common;
namespace TrackerRealm.Jazz.Client
{
/// <summary>
///
/// </summary>
public class CacheByType<U>: IEnumerable<U> where U : jClass
{
private Dictionary<Type, U> dict = new Dictionary<Type, U>();
#region Add
/// <summary>
///
/// </summary>
/// <param name="unit"></param>
internal void Add(U unit)
{
this.AddUnit(unit);
}
internal void AddPlaceHolder(Type t, U unit)
{
this.dict.Add(t, unit);
}
/// <summary>
///
/// </summary>
/// <param name="unit"></param>
private void AddUnit(U unit)
{
if (this.dict.ContainsKey(unit.JazzObjectType))
{
this.dict[unit.JazzObjectType] = unit;
}
else
this.dict.Add(unit.JazzObjectType, unit);
}
#endregion
#region Contains
/// <summary>
/// Returns true if the dictionary contains the type 't'.
/// </summary>
/// <param name="t"></param>
/// <returns></returns>
public bool Contains(Type t)
{
return this.dict.ContainsKey(t);
}
#endregion
#region Remove
/// <summary>
///
/// </summary>
/// <param name="unit"></param>
internal void Remove(U unit)
{
this.dict.Remove(unit.JazzObjectType);
}
/// <summary>
///
/// </summary>
/// <param name="unit"></param>
internal bool TryRemove(U unit)
{
if (!this.dict.ContainsKey(unit.JazzObjectType))
return false;
return dict.Remove(unit.JazzObjectType);
}
#endregion
/// <summary>
///
/// </summary>
/// <param name="jworkflowType"></param>
/// <param name="jclass"></param>
/// <returns></returns>
public bool TryGet(Type jworkflowType, out U jclass)
{
return this.dict.TryGetValue(jworkflowType, out jclass);
}
/// <summary>
///
/// </summary>
/// <param name="jworkflowType"></param>
/// <returns></returns>
public U Get(Type jworkflowType)
{
return this.dict[jworkflowType];
}
#region Clear
/// <summary>
///
/// </summary>
internal void Clear()
{
dict.Clear();
}
#endregion
#region IEnumerable<U> Members
IEnumerator<U> IEnumerable<U>.GetEnumerator()
{
return this.dict.Values.GetEnumerator();
}
#endregion
#region IEnumerable Members
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return this.dict.Values.GetEnumerator();
}
#endregion
#region
/// <summary>
///
/// </summary>
public int Count
{
get { return this.dict.Count; }
}
#endregion
}
}