This repository was archived by the owner on Jul 20, 2024. It is now read-only.
forked from splunk/splunk-sdk-java
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathEntityCollection.java
More file actions
152 lines (140 loc) · 4.82 KB
/
EntityCollection.java
File metadata and controls
152 lines (140 loc) · 4.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
/*
* 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.
*/
package com.splunk;
import java.util.LinkedList;
import java.util.Map;
/**
* The {@code EntityCollection} class represents a collection of Splunk
* entities.
*
* @param <T> The type of members in the collection.
*/
public class EntityCollection<T extends Entity> extends ResourceCollection<T> {
/**
* Class constructor.
*
* @param service The connected {@code Service} instance.
* @param path The entity's endpoint.
*/
EntityCollection(Service service, String path) {
super(service, path, Entity.class);
}
/**
* Class constructor.
*
* @param service The connected {@code Service} instance.
* @param path The entity's endpoint.
* @param args Collection arguments that specify the number of entities to
* return and how to sort them (see {@link CollectionArgs}).
*/
EntityCollection(Service service, String path, Args args) {
super(service, path, Entity.class, args);
}
/**
* Class constructor.
*
* @param service The connected {@code Service} instance.
* @param path The entity's endpoint.
* @param itemClass The entity's class.
*/
EntityCollection(Service service, String path, Class itemClass) {
super(service, path, itemClass);
}
/**
* Class constructor.
*
* @param service The connected {@code Service} instance.
* @param path The entity's endpoint.
* @param itemClass The entity's class.
* @param args Collection arguments that specify the number of entities to
* return and how to sort them (see {@link CollectionArgs}).
*/
public EntityCollection(Service service, String path, Class itemClass, Args args) {
super(service, path, itemClass, args);
}
/**
* Creates an entity in this collection.
*
* @param name The name of the entity.
* @return The entity.
*/
public T create(String name) {
return create(name, (Map)null);
}
/**
* Creates an entity in this collection.
*
* @param name The name of the entity.
* @param args Arguments for creating the entity.
* @return The entity.
*/
public T create(String name, Map args) {
args = Args.create(args).add("name", name);
service.post(path, args);
invalidate();
return get(name);
}
/**
* Removes an entity from this collection.
*
* @param key The name of the entity to remove.
* @return The collection.
* @throws SplunkException The exception "AMBIGUOUS" if the collection
* contains more than one entity with the specified key. Disambiguation is
* done through a similar method,
* {@code remove(Object key, HashMap<String,String>namespace}, which uses
* the namespace to perform the disambiguation.
*/
public T remove(String key) {
validate();
if (!containsKey(key)) return null;
LinkedList<T> entities = items.get(key);
if (entities != null && entities.size() > 1) {
throw new SplunkException(SplunkException.AMBIGUOUS,
"Key has multiple values, specify a namespace");
}
if (entities == null) return null;
T entity = entities.get(0);
entity.remove();
// by invalidating any access to items will get refreshed
invalidate();
return entity;
}
/**
* Removes an entity from this collection, with a namespace restriction.
*
* @param key The name of the entity to remove.
* @param namespace The namespace restriction within the collection.
* @return This collection.
*/
public T remove(String key, Args namespace) {
Util.ensureNamespaceIsExact(namespace);
validate();
if (!containsKey(key)) return null;
LinkedList<T> entities = items.get(key);
String pathMatcher = service.fullpath("", namespace);
if (entities == null || entities.size() == 0) return null;
for (T entity: entities) {
if (entity.path.startsWith(pathMatcher)) {
entity.remove();
// By invalidating, any access to items will get refreshed
invalidate();
return entity;
}
}
return null;
}
}