/* * Copyright 2012 Splunk, Inc. * * Licensed under the Apache License, Version 2.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://www.apache.org/licenses/LICENSE-2.0 * * 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. */ namespace Splunk { using System; using System.Collections.Generic; /// /// Represents the Entity Collection class. /// /// The Generic parameter that matches The Entity class, /// or any class derived from Entity. public class EntityCollection : ResourceCollection where T : Entity { /// /// Initializes a new instance of the /// class. /// /// The service /// The endpoint for this collection public EntityCollection(Service service, string path) : base(service, path, typeof(Entity)) { } /// /// Initializes a new instance of the /// class. /// /// The service /// The endpoint for this collection /// The variable argument list public EntityCollection(Service service, string path, Args args) : base(service, path, args, typeof(Entity)) { } /// /// Initializes a new instance of the /// class. /// /// The service /// The endpoint for this collection /// The type of this Entity public EntityCollection(Service service, string path, Type itemClass) : base(service, path, itemClass) { } /// /// Initializes a new instance of the /// class. /// /// The service /// The endpoint for this collection /// The variable argument list /// The type of this Entity public EntityCollection( Service service, string path, Args args, Type itemClass) : base(service, path, args, itemClass) { } /// /// Creates an Entity in this collection. /// /// The name of this Entity /// The Entity public virtual T Create(string name) { return this.Create(name, (Args)null); } /// /// Creates an Entity in this collection. /// /// The name of this Entity /// The variable argument list /// The Entity public virtual T Create(string name, Args args) { args = Args.Create(args); args.Add("name", name); this.Service.Post(this.Path, args); this.Invalidate(); return this.Get(name); } /// /// Removes an entity from this collection. Note that this method can /// throw the SplunkException "AMBIGUOUS" if the collection contains /// more than one entity with the specified key. Disambiguation is done /// through the similar method Remove(object key, Dictionary namespace) /// which uses the namespace to perform the disambiguation. /// /// The name of this Entity /// The removed Entity public virtual T Remove(string key) { this.Validate(); if (!this.ContainsKey(key)) { return default(T); } List entities = this.Items[key]; if (entities != null && entities.Count > 1) { throw new SplunkException( SplunkException.AMBIGUOUS, "Key has multiple values, specify a namespace"); } if (entities == null) { return default(T); } T entity = entities[0]; entity.Remove(); this.Invalidate(); return entity; } /// /// Removes an entity from this collection, with a namespace /// restriction. /// /// The name of this Entity /// The namespace /// The removed Entity public virtual T Remove(string key, Args splunkNamespace) { this.Validate(); if (!this.ContainsKey(key)) { return default(T); } List entities = Items[key]; string pathMatcher = Service.Fullpath(string.Empty, splunkNamespace); if (entities.Count == 0) { return default(T); } foreach (T entity in entities) { if (entity.Path.StartsWith(pathMatcher)) { entity.Remove(); this.Invalidate(); return entity; } } return default(T); } } }