|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectcom.evolveum.midpoint.model.controller.ModelController
@Component public class ModelController
This used to be an interface, but it was switched to class for simplicity. I don't expect that the implementation of the controller will be ever replaced. In extreme case the whole Model will be replaced by a different implementation, but not just the controller.
However, the common way to extend the functionality will be the use of hooks that are implemented here. Great deal of code is copied from the old ModelControllerImpl.
Field Summary | |
---|---|
static java.lang.String |
ADD_OBJECT_WITH_EXCLUSION
|
static java.lang.String |
CHANGE_ACCOUNT
|
static java.lang.String |
CLASS_NAME_WITH_DOT
|
static java.lang.String |
CREATE_ACCOUNT
|
static java.lang.String |
GET_SYSTEM_CONFIGURATION
|
static java.lang.String |
MODIFY_OBJECT_WITH_EXCLUSION
|
static java.lang.String |
PROCESS_USER_TEMPLATE
|
static java.lang.String |
RESOLVE_ACCOUNT_ATTRIBUTES
|
static java.lang.String |
RESOLVE_USER_ATTRIBUTES
|
static java.lang.String |
SEARCH_OBJECTS_IN_PROVISIONING
|
static java.lang.String |
SEARCH_OBJECTS_IN_REPOSITORY
|
static java.lang.String |
UPDATE_ACCOUNT
|
Fields inherited from interface com.evolveum.midpoint.model.api.ModelService |
---|
ADD_OBJECT, ADD_USER, DELETE_OBJECT, DISCOVER_CONNECTORS, GET_OBJECT, GET_PROPERTY_AVAILABLE_VALUES, IMPORT_ACCOUNTS_FROM_RESOURCE, IMPORT_OBJECTS_FROM_FILE, IMPORT_OBJECTS_FROM_STREAM, LIST_ACCOUNT_SHADOW_OWNER, LIST_OBJECTS, LIST_RESOURCE_OBJECT_SHADOWS, LIST_RESOURCE_OBJECTS, MODIFY_OBJECT, POST_INIT, TEST_RESOURCE |
Constructor Summary | |
---|---|
ModelController()
|
Method Summary | ||
---|---|---|
|
addObject(T object,
Task task,
OperationResult parentResult)
Add new object. |
|
|
deleteObject(java.lang.Class<T> clazz,
java.lang.String oid,
Task task,
OperationResult parentResult)
Deletes object with specified OID. |
|
java.util.Set<ConnectorType> |
discoverConnectors(ConnectorHostType hostType,
OperationResult parentResult)
Discovers local or remote connectors. |
|
|
getObject(java.lang.Class<T> clazz,
java.lang.String oid,
PropertyReferenceListType resolve,
OperationResult result)
Returns object for provided OID. |
|
PropertyAvailableValuesListType |
getPropertyAvailableValues(java.lang.String oid,
PropertyReferenceListType properties,
OperationResult result)
Returns list of available values for specified properties. |
|
void |
importAccountsFromResource(java.lang.String resourceOid,
javax.xml.namespace.QName objectClass,
Task task,
OperationResult parentResult)
Import accounts from resource. |
|
void |
importObjectsFromFile(java.io.File input,
ImportOptionsType options,
Task task,
OperationResult parentResult)
Import objects from file. |
|
void |
importObjectsFromStream(java.io.InputStream input,
ImportOptionsType options,
Task task,
OperationResult parentResult)
Import objects from stream. |
|
UserType |
listAccountShadowOwner(java.lang.String accountOid,
OperationResult result)
Returns the User object representing owner of specified account (account shadow). |
|
|
listObjects(java.lang.Class<T> objectType,
PagingType paging,
OperationResult result)
Returns all objects of specified type that are available to the implementation. |
|
ResultList<? extends ResourceObjectShadowType> |
listResourceObjects(java.lang.String resourceOid,
javax.xml.namespace.QName objectClass,
PagingType paging,
OperationResult result)
Returns all resource objects of specified type that are currently available to the system. |
|
|
listResourceObjectShadows(java.lang.String resourceOid,
java.lang.Class<T> resourceObjectShadowType,
OperationResult result)
Search for resource object shadows of a specified type that belong to the specified resource. |
|
|
modifyObject(java.lang.Class<T> type,
ObjectModificationType change,
Task task,
OperationResult parentResult)
Modifies object using relative change description. |
|
void |
postInit(OperationResult parentResult)
Finish initialization of the model and lower system components (provisioning, repository, etc). |
|
protected void |
resolveObjectAttributes(ObjectType object,
PropertyReferenceListType resolve,
OperationResult result)
|
|
|
searchObjects(java.lang.Class<T> type,
QueryType query,
PagingType paging,
OperationResult result)
Search for objects. |
|
OperationResult |
testResource(java.lang.String resourceOid)
Test the resource connection and basic resource connector functionality. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
public static final java.lang.String CLASS_NAME_WITH_DOT
public static final java.lang.String SEARCH_OBJECTS_IN_REPOSITORY
public static final java.lang.String SEARCH_OBJECTS_IN_PROVISIONING
public static final java.lang.String ADD_OBJECT_WITH_EXCLUSION
public static final java.lang.String MODIFY_OBJECT_WITH_EXCLUSION
public static final java.lang.String CHANGE_ACCOUNT
public static final java.lang.String GET_SYSTEM_CONFIGURATION
public static final java.lang.String RESOLVE_USER_ATTRIBUTES
public static final java.lang.String RESOLVE_ACCOUNT_ATTRIBUTES
public static final java.lang.String CREATE_ACCOUNT
public static final java.lang.String UPDATE_ACCOUNT
public static final java.lang.String PROCESS_USER_TEMPLATE
Constructor Detail |
---|
public ModelController()
Method Detail |
---|
public <T extends ObjectType> T getObject(java.lang.Class<T> clazz, java.lang.String oid, PropertyReferenceListType resolve, OperationResult result) throws ObjectNotFoundException, SchemaException
ModelService
Returns object for provided OID.
Must fail if object with the OID does not exists.
getObject
in interface ModelService
clazz
- (class) of an object to getoid
- OID of the object to getresolve
- list of properties to resolve in the fetched objectresult
- parent OperationResult (in/out)
ObjectNotFoundException
- requested object does not exist
SchemaException
- the object is not schema compliantprotected void resolveObjectAttributes(ObjectType object, PropertyReferenceListType resolve, OperationResult result)
public <T extends ObjectType> java.lang.String addObject(T object, Task task, OperationResult parentResult) throws ObjectAlreadyExistsException, ObjectNotFoundException, SchemaException, ExpressionEvaluationException, CommunicationException
ModelService
Add new object.
The OID provided in the input message may be empty. In that case the OID will be assigned by the implementation of this method and it will be provided as return value.
This operation should fail if such object already exists (if object with the provided OID already exists).
The operation may fail if provided OID is in an unusable format for the storage. Generating own OIDs and providing them to this method is not recommended for normal operation.
Should be atomic. Should not allow creation of two objects with the same OID (even if created in parallel).
The operation may fail if the object to be created does not conform to the underlying schema of the storage system or the schema enforced by the implementation.
addObject
in interface ModelService
object
- object to createparentResult
- parent OperationResult (in/out)
ObjectAlreadyExistsException
- object with specified identifiers already exists, cannot add
ObjectNotFoundException
- object required to complete the operation was not found (e.g.
appropriate connector or resource definition)
SchemaException
- error dealing with resource schema, e.g. created object does
not conform to schema
ExpressionEvaluationException
- evaluation of expression associated with the object has failed
CommunicationException
public <T extends ObjectType> ResultList<T> listObjects(java.lang.Class<T> objectType, PagingType paging, OperationResult result)
ModelService
Returns all objects of specified type that are available to the implementation.
This can be considered as a simplified search operation.
Returns empty list if object type is correct but there are no objects of that type.
Should fail if object type is wrong.
listObjects
in interface ModelService
paging
- paging specification to limit operation result (optional)
public <T extends ObjectType> ResultList<T> searchObjects(java.lang.Class<T> type, QueryType query, PagingType paging, OperationResult result) throws SchemaException, ObjectNotFoundException
ModelService
Search for objects.
Searches through all object types. Returns a list of objects that match search criteria.
Returns empty list if object type is correct but there are no objects of that type.
Should fail if object type is wrong. Should fail if unknown property is specified in the query.
searchObjects
in interface ModelService
query
- search querypaging
- paging specification to limit operation result (optional)result
- parent OperationResult (in/out)
SchemaException
- unknown property used in search query
ObjectNotFoundException
- object required for a search was not found (e.g. resource
definition)public <T extends ObjectType> void modifyObject(java.lang.Class<T> type, ObjectModificationType change, Task task, OperationResult parentResult) throws ObjectNotFoundException, SchemaException, ExpressionEvaluationException, CommunicationException
ModelService
Modifies object using relative change description.
Must fail if user with provided OID does not exists. Must fail if any of the described changes cannot be applied. Should be atomic.
If two or more modify operations are executed in parallel, the operations should be merged. In case that the operations are in conflict (e.g. one operation adding a value and the other removing the same value), the result is not deterministic.
The operation may fail if the modified object does not conform to the underlying schema of the storage system or the schema enforced by the implementation.
modifyObject
in interface ModelService
change
- specification of object changesparentResult
- parent OperationResult (in/out)
ObjectNotFoundException
- specified object does not exist
SchemaException
- resulting object would violate the schema
ExpressionEvaluationException
- evaluation of expression associated with the object has failed
CommunicationException
public <T extends ObjectType> void deleteObject(java.lang.Class<T> clazz, java.lang.String oid, Task task, OperationResult parentResult) throws ObjectNotFoundException, ConsistencyViolationException, CommunicationException, SchemaException
ModelService
Deletes object with specified OID.
Must fail if object with specified OID does not exists. Should be atomic.
deleteObject
in interface ModelService
oid
- OID of object to deleteparentResult
- parent OperationResult (in/out)
ObjectNotFoundException
- specified object does not exist
ConsistencyViolationException
- sub-operation failed, cannot delete objects as its deletion
would lead to inconsistent state
CommunicationException
SchemaException
public PropertyAvailableValuesListType getPropertyAvailableValues(java.lang.String oid, PropertyReferenceListType properties, OperationResult result)
ModelService
Returns list of available values for specified properties.
The returned values can be used as valid values for properties of the specific object. The provided values can be used e.g. for listing them in GUI list boxes, for early validation (pre-validation), displaying help messages, auto-complete, etc.
In case the list of available values is too big or it is not available, the empty list should be returned, setting the "closed" flag to false.
NOT YET IMPLEMETED
getPropertyAvailableValues
in interface ModelService
public UserType listAccountShadowOwner(java.lang.String accountOid, OperationResult result) throws ObjectNotFoundException
ModelService
Returns the User object representing owner of specified account (account shadow).
May return null if there is no owner specified for the account.
Implements the backward "owns" association between account shadow and user. Forward association is implemented by property "account" of user object.
listAccountShadowOwner
in interface ModelService
accountOid
- OID of the account to look for an ownerresult
- parent OperationResult (in/out)
ObjectNotFoundException
- specified account was not foundpublic <T extends ResourceObjectShadowType> ResultList<T> listResourceObjectShadows(java.lang.String resourceOid, java.lang.Class<T> resourceObjectShadowType, OperationResult result) throws ObjectNotFoundException
ModelService
Search for resource object shadows of a specified type that belong to the specified resource.
Returns a list of such object shadows or empty list if nothing was found.
Returned shadows are "attached", that means they have OID and at they are stored in the repository.
Implements the backward "has" association between resource and resource object shadows. Forward association is implemented by property "resource" of resource object shadow.
TODO: add objectClass to be really usable ?
listResourceObjectShadows
in interface ModelService
T
- specific shadow type (class) to returnresourceOid
- OID of the resource that the shadows resideresourceObjectShadowType
- specific shadow type (class) to returnresult
- parent OperationResult (in/out)
ObjectNotFoundException
public ResultList<? extends ResourceObjectShadowType> listResourceObjects(java.lang.String resourceOid, javax.xml.namespace.QName objectClass, PagingType paging, OperationResult result) throws SchemaException, ObjectNotFoundException, CommunicationException
ModelService
Returns all resource objects of specified type that are currently available to the system.
Returns empty list if object type is correct but there are no objects of that type. The operation should fail if object type is wrong (e.g. specified type is not part of resource schema).
This method does NOT use any repository shadow objects for reference or any other business objects in the local repository. It goes directly to the resource. The returned objects (indirectly) comply with the resource schema, but it is returned re-formated in a form of detached shadow object. Although the form is the same as shadow object, this is NOT really a shadow object because it is not stored in the repository (it is detached). It does NOT have OID.
The objects are identified by whatever identification properties/attributes are defined by the resource schema.
The purpose of this operation is diagnostics. It works directly with the resource without the potential problems of underlying implementation. E.g. it may be used to test resource connectivity or correctness of resource setup. It may also be used to reach object types that are not directly supported as "shadows" by the implementation. Therefore this method is not required to implement any form of caching, queuing, reference resolution or any other "smart" algorithm.
listResourceObjects
in interface ModelService
resourceOid
- OID of the resource to fetch objects fromobjectClass
- Object class of the objects to fetchpaging
- paging specification to limit operation result (optional)
SchemaException
- error handling resource schema
ObjectNotFoundException
- specified resource object does not exist
CommunicationException
- error communicating with the resourcepublic OperationResult testResource(java.lang.String resourceOid) throws ObjectNotFoundException
ModelService
Test the resource connection and basic resource connector functionality.
This operation will NOT throw exception in case the resource connection fails. It such case it will indicate the failure in the return message, but the operation itself succeeds. The operations fails only if the provided arguments are wrong, in case of system error, system misconfiguration, etc.
This returns OperationResult instead of taking it as in/out argument. This is different from the other methods. The testResource method is not using OperationResult to track its own execution but rather to track the execution of resource tests (that in fact happen in provisioning).
testResource
in interface ModelService
resourceOid
- OID of resource to test
ObjectNotFoundException
- specified object does not existpublic void importAccountsFromResource(java.lang.String resourceOid, javax.xml.namespace.QName objectClass, Task task, OperationResult parentResult) throws ObjectNotFoundException, SchemaException
ModelService
Import accounts from resource.
Invocation of this method may be switched to background.
TODO: OperationResult
importAccountsFromResource
in interface ModelService
SchemaException
ObjectNotFoundException
public void importObjectsFromFile(java.io.File input, ImportOptionsType options, Task task, OperationResult parentResult)
ModelService
importObjectsFromFile
in interface ModelService
public void importObjectsFromStream(java.io.InputStream input, ImportOptionsType options, Task task, OperationResult parentResult)
ModelService
importObjectsFromStream
in interface ModelService
public java.util.Set<ConnectorType> discoverConnectors(ConnectorHostType hostType, OperationResult parentResult) throws CommunicationException
ModelService
discoverConnectors
in interface ModelService
hostType
- definition of a connector host or nullparentResult
- parentResult parent OperationResult (in/out)
CommunicationException
- error communicating with the connector hostpublic void postInit(OperationResult parentResult)
ModelService
postInit
in interface ModelService
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |