Package net.shibboleth.idp.admin.impl

# Class DoStorageOperation

java.lang.Object
net.shibboleth.shared.component.AbstractInitializableComponent
org.opensaml.profile.action.AbstractProfileAction
org.opensaml.profile.action.AbstractConditionalProfileAction
net.shibboleth.idp.profile.AbstractProfileAction
net.shibboleth.idp.admin.impl.DoStorageOperation

All Implemented Interfaces:
  `Component`, `DestructableComponent`, `InitializableComponent`, `ProfileAction`, `Aware`, `MessageSource`, `MessageSourceAware`, `Action`

public class DoStorageOperation extends AbstractProfileAction
Action that implements a JSON REST API for accessing `StorageService` records.

The API supports GET and DELETE at the moment, using jsonapi.org conventions.

Event:
  `EventIds.PROCEED_EVENT_ID`, `EventIds.INVALID_PROFILE_CTX`, `EventIds.IO_ERROR`

## Field Summary

Fields
Modifier and Type
Field
Description
`private String`
`context`
Storage context to operate on.
`static final String`
`CONTEXT`
Flow variable indicating ID of storage context.
`private String`
`key`
Storage key to operate on.
`static final String`
`KEY`
Flow variable indicating ID of storage key.
`private org.slf4j.Logger`
`log`
Class logger.
`private com.fasterxml.jackson.databind.ObjectMapper`
`objectMapper`
JSON object mapper.
`static final String`
`SERVICE_ID`
Flow variable indicating ID of storage service bean to reload.
`private StorageService`
`storageService`
`StorageService` to operate on.

## Constructor Summary

Constructors
Constructor
Description
`DoStorageOperation()`

## Method Summary

Modifier and Type
Method
Description
`private void`
`doCreate()`
Perform create operation.
`private void`
`doDelete()`
Perform delete operation.
`protected void`
`doExecute(ProfileRequestContext profileRequestContext)`
`protected void`
`doInitialize()`
`protected boolean`
`doPreExecute(ProfileRequestContext profileRequestContext)`
`private void`
`doRead()`
Perform read operation.
`private void`
`doUpdate()`
Perform update operation.
`private String`
`getContext()`
Null safe context getter.
`private String`
`getKey()`
Null safe key getter.
`private StorageService`
`getStorageService(RequestContext requestContext)`
Helper method to get the storage service bean to operate on.
`private void`
`sendError(int status, String title, String detail)`
Output an error object.
`void`
`setObjectMapper(com.fasterxml.jackson.databind.ObjectMapper mapper)`
Set the JSON `ObjectMapper` to use for serialization.
`void`
`setStorageService(StorageService storage)`
Sets the `StorageService` to use.

### Methods inherited from class net.shibboleth.idp.profile.AbstractProfileAction

`doExecute, execute, getBean, getBean, getMessage, getMessage, getMessage, getParameter, getParameter, getProfileContextLookupStrategy, getRequestContext, getResult, setMessageSource, setProfileContextLookupStrategy`

### Methods inherited from class org.opensaml.profile.action.AbstractConditionalProfileAction

`getActivationCondition, setActivationCondition`

### Methods inherited from class org.opensaml.profile.action.AbstractProfileAction

`doPostExecute, doPostExecute, ensureHttpServletRequest, ensureHttpServletResponse, execute, getHttpServletRequest, getHttpServletRequestSupplier, getHttpServletResponse, getHttpServletResponseSupplier, getLogPrefix, isPreExecuteCalled, setHttpServletRequestSupplier, setHttpServletResponseSupplier`

### Methods inherited from class net.shibboleth.shared.component.AbstractInitializableComponent

`checkComponentActive, checkSetterPreconditions, destroy, doDestroy, ifDestroyedThrowDestroyedComponentException, ifInitializedThrowUnmodifiabledComponentException, ifNotInitializedThrowUninitializedComponentException, initialize, isDestroyed, isInitialized`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Methods inherited from interface net.shibboleth.shared.component.InitializableComponent

`initialize, isInitialized`

## Field Details

### SERVICE_ID

@Nonnull @NotEmpty public static final String SERVICE_ID
Flow variable indicating ID of storage service bean to reload.

See Also:
  - Constant Field Values

### CONTEXT

@Nonnull @NotEmpty public static final String CONTEXT
Flow variable indicating ID of storage context.

See Also:
  - Constant Field Values

### KEY

@Nonnull @NotEmpty public static final String KEY
Flow variable indicating ID of storage key.

See Also:
  - Constant Field Values

### log

@Nonnull private org.slf4j.Logger log
Class logger.

### objectMapper

@NonnullAfterInit private com.fasterxml.jackson.databind.ObjectMapper objectMapper
JSON object mapper.

### storageService

@NonnullBeforeExec private StorageService storageService
`StorageService` to operate on.

### context

@NonnullBeforeExec @NotEmpty private String context
Storage context to operate on.

### key

@NonnullBeforeExec @NotEmpty private String key
Storage key to operate on.

## Constructor Details

### DoStorageOperation

public DoStorageOperation()

## Method Details

### setObjectMapper

public void setObjectMapper(@Nonnull com.fasterxml.jackson.databind.ObjectMapper mapper)
Set the JSON `ObjectMapper` to use for serialization.

Parameters:
  `mapper` - object mapper

### setStorageService

public void setStorageService(@Nullable StorageService storage)
Sets the `StorageService` to use.

Primarily for testing, to bypass use of Spring to obtain the service to use.

Parameters:
  `storage` - storage service

### doInitialize

protected void doInitialize() throws ComponentInitializationException

Overrides:
  `doInitialize` in class `AbstractInitializableComponent`
Throws:
  `ComponentInitializationException`

### getKey

@Nonnull private String getKey()
Null safe key getter.

Returns:
  Returns the key.

### getContext

@Nonnull private String getContext()
Null safe context getter.

Returns:
  Returns the context.

### doPreExecute

protected boolean doPreExecute(@Nonnull ProfileRequestContext profileRequestContext)

Overrides:
  `doPreExecute` in class `AbstractConditionalProfileAction`

### doExecute

protected void doExecute(@Nonnull ProfileRequestContext profileRequestContext)

Overrides:
  `doExecute` in class `AbstractProfileAction`

### getStorageService

@Nullable private StorageService getStorageService(@Nonnull RequestContext requestContext)
Helper method to get the storage service bean to operate on.

Parameters:
  `requestContext` - current SWF request context
Returns:
  storage service or null

### doRead

private void doRead() throws IOException
Perform read operation.

Throws:
  `IOException` - if an error is raised

### doCreate

private void doCreate() throws IOException
Perform create operation.

Throws:
  `IOException` - if an error is raised

### doUpdate

private void doUpdate() throws IOException
Perform update operation.

Throws:
  `IOException` - if an error is raised

### doDelete

private void doDelete() throws IOException
Perform delete operation.

Throws:
  `IOException` - if an error is raised

### sendError

private void sendError(int status, @Nonnull @NotEmpty String title, @Nonnull @NotEmpty String detail) throws IOException
Output an error object.

Parameters:
  `status` - HTTP status
  `title` - fixed error description
  `detail` - human-readable error description
Throws:
  `IOException` - if unable to output the error