From 1537f39761e11669335f6499474f23b11cf2cf38 Mon Sep 17 00:00:00 2001 From: Andrew Branson Date: Wed, 17 Sep 2014 12:15:26 +0200 Subject: Server item predefined steps to manage roles. Fixes #200 --- .../instance/predefined/server/CreateNewRole.java | 41 ++++++++++++++ .../instance/predefined/server/RemoveRole.java | 66 ++++++++++++++++++++++ .../server/ServerPredefinedStepContainer.java | 2 + 3 files changed, 109 insertions(+) create mode 100644 src/main/java/com/c2kernel/lifecycle/instance/predefined/server/CreateNewRole.java create mode 100644 src/main/java/com/c2kernel/lifecycle/instance/predefined/server/RemoveRole.java (limited to 'src/main/java') diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/CreateNewRole.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/CreateNewRole.java new file mode 100644 index 0000000..4f4745b --- /dev/null +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/CreateNewRole.java @@ -0,0 +1,41 @@ +/************************************************************************** + * CreateNewAgent.java + * + * Copyright (C) 2001 CERN - European Organization for Nuclear Research + * All rights reserved. + **************************************************************************/ + +package com.c2kernel.lifecycle.instance.predefined.server; + +import com.c2kernel.common.InvalidDataException; +import com.c2kernel.entity.imports.ImportRole; +import com.c2kernel.lifecycle.instance.predefined.PredefinedStep; +import com.c2kernel.lookup.AgentPath; +import com.c2kernel.lookup.ItemPath; +import com.c2kernel.process.Gateway; +import com.c2kernel.utils.Logger; + +public class CreateNewRole extends PredefinedStep +{ + public CreateNewRole() + { + super(); + getProperties().put("SchemaType", "Role"); + } + + //requestdata is xmlstring + @Override + protected String runActivityLogic(AgentPath agent, ItemPath item, + int transitionID, String requestData) throws InvalidDataException { + + try { + ImportRole newRole = (ImportRole)Gateway.getMarshaller().unmarshall(requestData); + newRole.create(agent, true); + return requestData; + } catch (Exception ex) { + Logger.error(ex); + throw new InvalidDataException("Error creating role", ""); + } + + } +} diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/RemoveRole.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/RemoveRole.java new file mode 100644 index 0000000..44000c6 --- /dev/null +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/RemoveRole.java @@ -0,0 +1,66 @@ +/************************************************************************** + * CreateNewAgent.java + * + * Copyright (C) 2001 CERN - European Organization for Nuclear Research + * All rights reserved. + **************************************************************************/ + +package com.c2kernel.lifecycle.instance.predefined.server; + +import java.util.Arrays; + +import com.c2kernel.common.CannotManageException; +import com.c2kernel.common.InvalidDataException; +import com.c2kernel.common.ObjectCannotBeUpdated; +import com.c2kernel.common.ObjectNotFoundException; +import com.c2kernel.lifecycle.instance.predefined.PredefinedStep; +import com.c2kernel.lookup.AgentPath; +import com.c2kernel.lookup.ItemPath; +import com.c2kernel.lookup.LookupManager; +import com.c2kernel.lookup.RolePath; +import com.c2kernel.process.Gateway; +import com.c2kernel.utils.Logger; + +public class RemoveRole extends PredefinedStep +{ + public RemoveRole() + { + super(); + } + + //requestdata is xmlstring + @Override + protected String runActivityLogic(AgentPath agent, ItemPath item, + int transitionID, String requestData) throws InvalidDataException { + + String[] params = getDataList(requestData); + if (Logger.doLog(3)) Logger.msg(3, "AddC2KObject: called by "+agent+" on "+item+" with parameters "+Arrays.toString(params)); + LookupManager lookup; + try { + lookup = Gateway.getLookupManager(); + } catch (CannotManageException e) { + throw new InvalidDataException(e.getMessage(), ""); + } + + RolePath thisRole; + try { + thisRole = lookup.getRolePath(params[0]); + } catch (ObjectNotFoundException e) { + throw new InvalidDataException("Role "+params[0]+" not found.", ""); + } + AgentPath[] agents = thisRole.getAgentsWithRole(); + if (agents.length > 0) + throw new InvalidDataException("Cannot remove role. "+agents.length+" agents still hold it.", ""); + try { + lookup.removeRole(agent, thisRole); + } catch (ObjectCannotBeUpdated e) { + Logger.error(e); + throw new InvalidDataException("Role "+params[0]+" could not be removed.", ""); + } catch (ObjectNotFoundException e) { + throw new InvalidDataException("Role "+params[0]+" not found.", ""); + } + + return requestData; + + } +} diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/ServerPredefinedStepContainer.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/ServerPredefinedStepContainer.java index 412c468..e3de85f 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/ServerPredefinedStepContainer.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/ServerPredefinedStepContainer.java @@ -23,6 +23,8 @@ public class ServerPredefinedStepContainer extends PredefinedStepContainer { super.createChildren(); serverPredInit("CreateNewItem", "Creates a new Item in this Server without description.", new CreateNewItem()); serverPredInit("CreateNewAgent", "Creates a new Agent in this Server without description.", new CreateNewAgent()); + serverPredInit("CreateNewRole", "Creates a new Role in this Server.", new CreateNewRole()); + serverPredInit("RemoveRole", "Removes a Role from this Server.", new RemoveRole()); serverPredInit("RemoveDomainContext", "Deletes an existing context in the domain tree, but only if empty", new RemoveDomainContext()); serverPredInit("AddDomainContext", "Creates an empty domain context in the tree", new AddDomainContext()); } -- cgit v1.2.3