Skip to content

Commit 648e2bf

Browse files
committed
[geoserver#219] Add support for AdminRules to Rest Batch services
1 parent 9c44b00 commit 648e2bf

File tree

6 files changed

+182
-4
lines changed

6 files changed

+182
-4
lines changed

src/services/modules/rest/api/src/main/java/org/geoserver/geofence/services/rest/model/RESTBatchOperation.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ public enum ServiceName {
2323
users,
2424
groups,
2525
instances,
26-
rules
26+
rules,
27+
adminrules
2728
}
2829

2930
public enum TypeName {
@@ -99,7 +100,8 @@ public void setCascade(Boolean cascade) {
99100
@XmlElement(name="user", type=RESTInputUser.class),
100101
@XmlElement(name="userGroup", type=RESTInputGroup.class),
101102
@XmlElement(name="instance", type=RESTInputInstance.class),
102-
@XmlElement(name="rule", type=RESTInputRule.class)
103+
@XmlElement(name="rule", type=RESTInputRule.class),
104+
@XmlElement(name="adminrule", type=RESTInputAdminRule.class),
103105
})
104106
public AbstractRESTPayload getPayload() {
105107
return payload;

src/services/modules/rest/api/src/main/java/org/geoserver/geofence/services/rest/model/RESTInputAdminRule.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
* @author Etj (etj at geo-solutions.it)
1919
*/
2020
@XmlRootElement(name = "adminrule")
21-
@XmlType(name="Rule", propOrder={"position","grant","username","rolename","instance","workspace"})
21+
@XmlType(name="AminRule", propOrder={"position","grant","username","rolename","instance","workspace"})
2222
public class RESTInputAdminRule extends AbstractRESTPayload
2323
{
2424
private RESTRulePosition position;

src/services/modules/rest/impl/src/main/java/org/geoserver/geofence/services/rest/impl/RESTBatchServiceImpl.java

+37
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
package org.geoserver.geofence.services.rest.impl;
77

8+
import org.geoserver.geofence.services.rest.RESTAdminRuleService;
89
import org.geoserver.geofence.services.rest.RESTBatchService;
910
import org.geoserver.geofence.services.rest.RESTGSInstanceService;
1011
import org.geoserver.geofence.services.rest.RESTRuleService;
@@ -17,6 +18,7 @@
1718
import org.geoserver.geofence.services.rest.exception.NotFoundRestEx;
1819
import org.geoserver.geofence.services.rest.model.RESTBatch;
1920
import org.geoserver.geofence.services.rest.model.RESTBatchOperation;
21+
import org.geoserver.geofence.services.rest.model.RESTInputAdminRule;
2022
import org.geoserver.geofence.services.rest.model.RESTInputGroup;
2123
import org.geoserver.geofence.services.rest.model.RESTInputInstance;
2224
import org.geoserver.geofence.services.rest.model.RESTInputRule;
@@ -53,6 +55,7 @@ public class RESTBatchServiceImpl
5355
private RESTUserGroupService restUserGroupService;
5456
private RESTGSInstanceService restInstanceService;
5557
private RESTRuleService restRuleService;
58+
private RESTAdminRuleService restAdminRuleService;
5659

5760
@Transactional(value="geofenceTransactionManager")
5861
@Override
@@ -90,6 +93,10 @@ public void runBatch(RESTBatch batch) throws BadRequestRestEx, NotFoundRestEx, I
9093
dispatchRuleOp(op);
9194
break;
9295

96+
case adminrules:
97+
dispatchAdminRuleOp(op);
98+
break;
99+
93100
default:
94101
throw new BadRequestRestEx("Unhandled service for operation " + op);
95102
}
@@ -237,6 +244,33 @@ else if(op.getId() != null)
237244
}
238245
}
239246

247+
protected void dispatchAdminRuleOp(RESTBatchOperation op) throws NotFoundRestEx, BadRequestRestEx {
248+
switch (op.getType()) {
249+
case insert:
250+
ensurePayload(op);
251+
restAdminRuleService.insert((RESTInputAdminRule) op.getPayload());
252+
break;
253+
254+
case update:
255+
ensurePayload(op);
256+
if (op.getId() != null)
257+
restAdminRuleService.update(op.getId(), (RESTInputAdminRule) op.getPayload());
258+
else
259+
throw new BadRequestRestEx("Missing identifier for op " + op);
260+
break;
261+
262+
case delete:
263+
if (op.getId() != null)
264+
restAdminRuleService.delete(op.getId());
265+
else
266+
throw new BadRequestRestEx("Missing identifier for op " + op);
267+
break;
268+
269+
default:
270+
throw new BadRequestRestEx("Operation not bound " + op);
271+
}
272+
}
273+
240274
// ==========================================================================
241275

242276
private void ensurePayload(RESTBatchOperation op) throws BadRequestRestEx {
@@ -273,4 +307,7 @@ public void setRestUserService(RESTUserService restUserService) {
273307
this.restUserService = restUserService;
274308
}
275309

310+
public void setRestAdminRuleService(RESTAdminRuleService restAdminRuleService) {
311+
this.restAdminRuleService = restAdminRuleService;
312+
}
276313
}

src/services/modules/rest/impl/src/test/java/org/geoserver/geofence/services/rest/impl/RESTBaseTest.java

+8
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77

88
import org.geoserver.geofence.services.RuleAdminService;
99
import org.geoserver.geofence.services.dto.ShortGroup;
10+
import org.geoserver.geofence.services.rest.RESTAdminRuleService;
11+
import org.geoserver.geofence.services.rest.RESTBatchService;
1012
import org.geoserver.geofence.services.rest.RESTRuleService;
1113
import org.geoserver.geofence.services.rest.RESTUserGroupService;
1214
import org.geoserver.geofence.services.rest.RESTUserService;
@@ -39,6 +41,8 @@ public abstract class RESTBaseTest {
3941
protected static RESTUserService restUserService;
4042
protected static RESTUserGroupService restUserGroupService;
4143
protected static RESTRuleService restRuleService;
44+
protected static RESTAdminRuleService restAdminRuleService;
45+
protected static RESTBatchService restBatchService;
4246

4347
public RESTBaseTest() {
4448

@@ -59,11 +63,15 @@ public RESTBaseTest() {
5963
restUserService = (RESTUserService)ctx.getBean("restUserService");
6064
restUserGroupService = (RESTUserGroupService)ctx.getBean("restUserGroupService");
6165
restRuleService = (RESTRuleService)ctx.getBean("restRuleService");
66+
restAdminRuleService = (RESTAdminRuleService)ctx.getBean("restAdminRuleService");
67+
restBatchService = (RESTBatchService) ctx.getBean("restBatchService");
6268
}
6369

6470
assertNotNull(restUserService);
6571
assertNotNull(restUserGroupService);
6672
assertNotNull(restRuleService);
73+
assertNotNull(restAdminRuleService);
74+
assertNotNull(restBatchService);
6775
}
6876
}
6977

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
package org.geoserver.geofence.services.rest.impl;
2+
3+
import org.geoserver.geofence.core.model.enums.AdminGrantType;
4+
import org.geoserver.geofence.core.model.enums.GrantType;
5+
import org.geoserver.geofence.services.rest.exception.BadRequestRestEx;
6+
import org.geoserver.geofence.services.rest.model.RESTBatch;
7+
import org.geoserver.geofence.services.rest.model.RESTBatchOperation;
8+
import org.geoserver.geofence.services.rest.model.RESTInputAdminRule;
9+
import org.geoserver.geofence.services.rest.model.RESTInputGroup;
10+
import org.geoserver.geofence.services.rest.model.RESTInputRule;
11+
import org.geoserver.geofence.services.rest.model.RESTInputUser;
12+
import org.geoserver.geofence.services.rest.model.RESTOutputRule;
13+
import org.geoserver.geofence.services.rest.model.RESTRulePosition;
14+
import org.geoserver.geofence.services.rest.model.util.IdName;
15+
import org.geoserver.geofence.services.rest.model.util.RESTBatchOperationFactory;
16+
import org.junit.Test;
17+
18+
import javax.ws.rs.core.Response;
19+
import java.util.ArrayList;
20+
21+
import static org.junit.Assert.assertEquals;
22+
import static org.junit.Assert.assertNotNull;
23+
import static org.junit.Assert.assertNull;
24+
import static org.junit.Assert.fail;
25+
26+
public class RESTBatchServiceImplTest extends RESTBaseTest {
27+
28+
29+
@Test
30+
public void testBatchInsertAdminRule() {
31+
RESTInputAdminRule adminRule=new RESTInputAdminRule();
32+
adminRule.setPosition(new RESTRulePosition(RESTRulePosition.RulePosition.offsetFromTop,0));
33+
adminRule.setWorkspace("ws99");
34+
adminRule.setRolename("roleName00");
35+
adminRule.setGrant(AdminGrantType.ADMIN);
36+
RESTBatchOperation restBatchOperation=new RESTBatchOperation();
37+
restBatchOperation.setService(RESTBatchOperation.ServiceName.adminrules);
38+
restBatchOperation.setType(RESTBatchOperation.TypeName.insert);
39+
restBatchOperation.setPayload(adminRule);
40+
RESTInputAdminRule adminRule2=new RESTInputAdminRule();
41+
adminRule2.setPosition(new RESTRulePosition(RESTRulePosition.RulePosition.offsetFromTop,0));
42+
adminRule2.setWorkspace("ws999");
43+
adminRule2.setRolename("roleName00");
44+
adminRule2.setGrant(AdminGrantType.USER);
45+
RESTBatchOperation restBatchOperation2=new RESTBatchOperation();
46+
restBatchOperation2.setService(RESTBatchOperation.ServiceName.adminrules);
47+
restBatchOperation2.setType(RESTBatchOperation.TypeName.insert);
48+
restBatchOperation2.setPayload(adminRule2);
49+
RESTBatch restBatch=new RESTBatch();
50+
restBatch.add(restBatchOperation);
51+
restBatch.add(restBatchOperation2);
52+
assertEquals(200,restBatchService.exec(restBatch).getStatus());
53+
54+
long result=restAdminRuleService.count(null,true,"roleName00",false,null,null,false,null,false);
55+
assertEquals(2,result);
56+
}
57+
58+
@Test
59+
public void testBatchUpdateAdminRule() {
60+
RESTInputAdminRule adminRule=new RESTInputAdminRule();
61+
adminRule.setPosition(new RESTRulePosition(RESTRulePosition.RulePosition.offsetFromTop,0));
62+
adminRule.setWorkspace("ws99");
63+
adminRule.setRolename("roleName11");
64+
adminRule.setGrant(AdminGrantType.ADMIN);
65+
RESTInputAdminRule adminRule2=new RESTInputAdminRule();
66+
adminRule2.setPosition(new RESTRulePosition(RESTRulePosition.RulePosition.offsetFromTop,0));
67+
adminRule2.setWorkspace("ws999");
68+
adminRule2.setRolename("roleName11");
69+
adminRule2.setGrant(AdminGrantType.USER);
70+
Long id=(Long)restAdminRuleService.insert(adminRule).getEntity();
71+
Long id2=(Long)restAdminRuleService.insert(adminRule2).getEntity();
72+
RESTBatchOperation restBatchOperation=new RESTBatchOperation();
73+
restBatchOperation.setService(RESTBatchOperation.ServiceName.adminrules);
74+
restBatchOperation.setType(RESTBatchOperation.TypeName.update);
75+
restBatchOperation.setId(id);
76+
adminRule.setWorkspace("ws00");
77+
adminRule.setPosition(null);
78+
restBatchOperation.setPayload(adminRule);
79+
80+
RESTBatchOperation restBatchOperation2=new RESTBatchOperation();
81+
restBatchOperation2.setService(RESTBatchOperation.ServiceName.adminrules);
82+
restBatchOperation2.setType(RESTBatchOperation.TypeName.update);
83+
restBatchOperation2.setId(id2);
84+
adminRule2.setWorkspace("ws000");
85+
adminRule2.setPosition(null);
86+
restBatchOperation2.setPayload(adminRule2);
87+
88+
RESTBatch batch=new RESTBatch();
89+
batch.add(restBatchOperation);
90+
batch.add(restBatchOperation2);
91+
restBatchService.exec(batch);
92+
93+
assertEquals("ws00",restAdminRuleService.get(id).getWorkspace());
94+
assertEquals("ws000",restAdminRuleService.get(id2).getWorkspace());
95+
96+
}
97+
98+
99+
@Test
100+
public void testBatchDeleteAdminRule() {
101+
RESTInputAdminRule adminRule=new RESTInputAdminRule();
102+
adminRule.setPosition(new RESTRulePosition(RESTRulePosition.RulePosition.offsetFromTop,0));
103+
adminRule.setWorkspace("ws99");
104+
adminRule.setRolename("roleName22");
105+
adminRule.setGrant(AdminGrantType.ADMIN);
106+
RESTInputAdminRule adminRule2=new RESTInputAdminRule();
107+
adminRule2.setPosition(new RESTRulePosition(RESTRulePosition.RulePosition.offsetFromTop,0));
108+
adminRule2.setWorkspace("ws999");
109+
adminRule2.setRolename("roleName22");
110+
adminRule2.setGrant(AdminGrantType.USER);
111+
Long id=(Long)restAdminRuleService.insert(adminRule).getEntity();
112+
Long id2=(Long)restAdminRuleService.insert(adminRule2).getEntity();
113+
RESTBatchOperation restBatchOperation=new RESTBatchOperation();
114+
restBatchOperation.setService(RESTBatchOperation.ServiceName.adminrules);
115+
restBatchOperation.setType(RESTBatchOperation.TypeName.delete);
116+
restBatchOperation.setId(id);
117+
118+
RESTBatchOperation restBatchOperation2=new RESTBatchOperation();
119+
restBatchOperation2.setService(RESTBatchOperation.ServiceName.adminrules);
120+
restBatchOperation2.setType(RESTBatchOperation.TypeName.delete);
121+
restBatchOperation2.setId(id2);
122+
123+
RESTBatch batch=new RESTBatch();
124+
batch.add(restBatchOperation);
125+
batch.add(restBatchOperation2);
126+
restBatchService.exec(batch);
127+
long result=restAdminRuleService.count(null,true,"roleName22",false,null,null,false,null,false);
128+
assertEquals(0,result);
129+
130+
}
131+
}

src/services/modules/rest/impl/src/test/java/org/geoserver/geofence/services/rest/impl/RESTRuleServiceImplTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -336,7 +336,7 @@ public void testAllowedAreaSRID() {
336336

337337

338338
}
339-
339+
340340
@Test
341341
public void testLimits() {
342342

0 commit comments

Comments
 (0)