diff --git a/repo/repo-api/src/main/java/com/evolveum/midpoint/repo/api/LookupTableSearchType.java b/repo/repo-api/src/main/java/com/evolveum/midpoint/repo/api/LookupTableSearchType.java new file mode 100644 index 00000000000..01c146a0f36 --- /dev/null +++ b/repo/repo-api/src/main/java/com/evolveum/midpoint/repo/api/LookupTableSearchType.java @@ -0,0 +1,24 @@ +/** + * Copyright (c) 2015 Evolveum + * + * 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.evolveum.midpoint.repo.api; + +/** + * @author semancik + * + */ +public enum LookupTableSearchType { + EXACT, STARTS_WITH, SUBSTRING; +} diff --git a/repo/repo-api/src/main/java/com/evolveum/midpoint/repo/api/RepositoryService.java b/repo/repo-api/src/main/java/com/evolveum/midpoint/repo/api/RepositoryService.java index d59fcc1604f..5d75b12afb9 100644 --- a/repo/repo-api/src/main/java/com/evolveum/midpoint/repo/api/RepositoryService.java +++ b/repo/repo-api/src/main/java/com/evolveum/midpoint/repo/api/RepositoryService.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010-2014 Evolveum + * Copyright (c) 2010-2015 Evolveum * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,9 +19,11 @@ import java.util.List; import javax.xml.datatype.Duration; +import javax.xml.namespace.QName; import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.prism.delta.ItemDelta; +import com.evolveum.midpoint.prism.query.ObjectPaging; import com.evolveum.midpoint.prism.query.ObjectQuery; import com.evolveum.midpoint.schema.GetOperationOptions; import com.evolveum.midpoint.schema.RepositoryDiag; @@ -36,6 +38,8 @@ import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.xml.ns._public.common.common_3.CleanupPolicyType; import com.evolveum.midpoint.xml.ns._public.common.common_3.FocusType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.LookupTableRowType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.LookupTableType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowType; @@ -48,7 +52,7 @@ *
  • Status: public
  • *
  • Stability: stable
  • * - * @version 3.0 + * @version 3.1.1 * @author Radovan Semancik *

    * This service provides repository for objects that are commonly found @@ -163,7 +167,7 @@ public interface RepositoryService { * @throws IllegalArgumentException * wrong OID format, etc. */ - public PrismObject getObject(Class type,String oid, Collection> options, + PrismObject getObject(Class type,String oid, Collection> options, OperationResult parentResult) throws ObjectNotFoundException, SchemaException; @@ -188,7 +192,7 @@ public PrismObject getObject(Class type,String oid, * @throws IllegalArgumentException * wrong OID format, etc. */ - public String getVersion(Class type,String oid, OperationResult parentResult) + String getVersion(Class type,String oid, OperationResult parentResult) throws ObjectNotFoundException, SchemaException; /** @@ -228,7 +232,7 @@ public String getVersion(Class type,String oid, Operat * @throws IllegalArgumentException * wrong OID format, etc. */ - public String addObject(PrismObject object, RepoAddOptions options, OperationResult parentResult) + String addObject(PrismObject object, RepoAddOptions options, OperationResult parentResult) throws ObjectAlreadyExistsException, SchemaException; @@ -262,7 +266,7 @@ public String addObject(PrismObject object, RepoAddOpt * unknown property used in search query */ - public SearchResultList> searchObjects(Class type, ObjectQuery query, + SearchResultList> searchObjects(Class type, ObjectQuery query, Collection> options, OperationResult parentResult) throws SchemaException; @@ -297,7 +301,7 @@ public SearchResultList> searchObjects(Cl * unknown property used in search query */ - public SearchResultMetadata searchObjectsIterative(Class type, ObjectQuery query, + SearchResultMetadata searchObjectsIterative(Class type, ObjectQuery query, ResultHandler handler, Collection> options, OperationResult parentResult) throws SchemaException; @@ -323,7 +327,7 @@ public SearchResultMetadata searchObjectsIterative(Class< * @throws SchemaException * unknown property used in search query */ - public int countObjects(Class type, ObjectQuery query, OperationResult parentResult) + int countObjects(Class type, ObjectQuery query, OperationResult parentResult) throws SchemaException; boolean isAnySubordinate(String upperOrgOid, Collection lowerObjectOids) throws SchemaException; @@ -358,7 +362,7 @@ public int countObjects(Class type, ObjectQuery query, * @throws IllegalArgumentException * wrong OID format, described change is not applicable */ - public void modifyObject(Class type, String oid, Collection modifications, OperationResult parentResult) + void modifyObject(Class type, String oid, Collection modifications, OperationResult parentResult) throws ObjectNotFoundException, SchemaException, ObjectAlreadyExistsException; /** @@ -377,7 +381,7 @@ public void modifyObject(Class type, String oid, Colle * @throws IllegalArgumentException * wrong OID format, described change is not applicable */ - public void deleteObject(Class type, String oid, OperationResult parentResult) throws ObjectNotFoundException; + void deleteObject(Class type, String oid, OperationResult parentResult) throws ObjectNotFoundException; /** *

    Returns the User object representing owner of specified account (account @@ -409,7 +413,7 @@ public void modifyObject(Class type, String oid, Colle * wrong OID format */ @Deprecated - public PrismObject listAccountShadowOwner(String accountOid, OperationResult parentResult) + PrismObject listAccountShadowOwner(String accountOid, OperationResult parentResult) throws ObjectNotFoundException; /** @@ -440,7 +444,7 @@ public PrismObject listAccountShadowOwner(String accountOid, Operation * @throws IllegalArgumentException * wrong OID format */ - public PrismObject searchShadowOwner(String shadowOid, Collection> options, OperationResult parentResult) + PrismObject searchShadowOwner(String shadowOid, Collection> options, OperationResult parentResult) throws ObjectNotFoundException; /** @@ -471,14 +475,37 @@ public PrismObject searchShadowOwner(String shadowOid, * @throws IllegalArgumentException * wrong OID format */ - public List> listResourceObjectShadows(String resourceOid, + List> listResourceObjectShadows(String resourceOid, Class resourceObjectShadowType, OperationResult parentResult) throws ObjectNotFoundException, SchemaException; + /** + *

    Select specified rows from the lookup table.

    + *

    + * This operation works only on lookup tables. If OID of any other object + * is specified as a parameter it results in an error. + *

    + * + * @param lookupTableOid OID of the lookup table + * @param column name of the column to search + * @param searchValue value to search for + * @param searchType type of search (exact, substring, ...) + * @param paging paging parameters (page offset and size) + * @return selected table rows + * + * @throws ObjectNotFoundException + * specified object does not exist + * @throws SchemaException + * object is not of type {@link LookupTableType} + */ + List searchLookupTable(String lookupTableOid, QName column, String searchValue, + LookupTableSearchType searchType, ObjectPaging paging) throws ObjectNotFoundException, + SchemaException; + /** * Provide repository run-time configuration and diagnostic information. */ - public RepositoryDiag getRepositoryDiag(); + RepositoryDiag getRepositoryDiag(); /** * Runs a short, non-descructive repository self test. @@ -492,7 +519,7 @@ public List> listResourceObjectShadows(Str * If the repository has no self-tests then the method should return immediately * without changing the result structure. It must not throw an exception in this case. */ - public void repositorySelfTest(OperationResult parentResult); + void repositorySelfTest(OperationResult parentResult); /** * Checks a closure for consistency, repairing any problems found. diff --git a/repo/repo-cache/src/main/java/com/evolveum/midpoint/repo/cache/RepositoryCache.java b/repo/repo-cache/src/main/java/com/evolveum/midpoint/repo/cache/RepositoryCache.java index 643ef227edd..b3bed118010 100644 --- a/repo/repo-cache/src/main/java/com/evolveum/midpoint/repo/cache/RepositoryCache.java +++ b/repo/repo-cache/src/main/java/com/evolveum/midpoint/repo/cache/RepositoryCache.java @@ -18,7 +18,9 @@ import com.evolveum.midpoint.prism.PrismContext; import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.prism.delta.ItemDelta; +import com.evolveum.midpoint.prism.query.ObjectPaging; import com.evolveum.midpoint.prism.query.ObjectQuery; +import com.evolveum.midpoint.repo.api.LookupTableSearchType; import com.evolveum.midpoint.repo.api.RepoAddOptions; import com.evolveum.midpoint.repo.api.RepositoryService; import com.evolveum.midpoint.schema.GetOperationOptions; @@ -34,15 +36,19 @@ import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; import com.evolveum.midpoint.xml.ns._public.common.common_3.FocusType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.LookupTableRowType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowType; import com.evolveum.midpoint.xml.ns._public.common.common_3.TaskType; import com.evolveum.midpoint.xml.ns._public.common.common_3.UserType; + import org.apache.commons.lang.Validate; import java.util.Collection; import java.util.List; +import javax.xml.namespace.QName; + /** * Read-through write-through per-session repository cache. * @@ -347,4 +353,11 @@ private void log(String message, Object... params) { PERFORMANCE_ADVISOR.trace(message, params); } } + + @Override + public List searchLookupTable(String lookupTableOid, QName column, + String searchValue, LookupTableSearchType searchType, ObjectPaging paging) + throws ObjectNotFoundException, SchemaException { + return repository.searchLookupTable(lookupTableOid, column, searchValue, searchType, paging); + } } diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/SqlRepositoryServiceImpl.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/SqlRepositoryServiceImpl.java index 6a67a27c016..7ee92cc06f3 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/SqlRepositoryServiceImpl.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/SqlRepositoryServiceImpl.java @@ -26,6 +26,7 @@ import com.evolveum.midpoint.prism.path.ItemPath; import com.evolveum.midpoint.prism.polystring.PolyString; import com.evolveum.midpoint.prism.query.*; +import com.evolveum.midpoint.repo.api.LookupTableSearchType; import com.evolveum.midpoint.repo.api.RepoAddOptions; import com.evolveum.midpoint.repo.api.RepositoryService; import com.evolveum.midpoint.repo.sql.data.common.*; @@ -1653,4 +1654,12 @@ private boolean isAnySubordinateAttempt(String upperOrgOid, Collection l throw new SystemException("isAnySubordinateAttempt failed somehow, this really should not happen."); } + + @Override + public List searchLookupTable(String lookupTableOid, QName column, + String searchValue, LookupTableSearchType searchType, ObjectPaging paging) + throws ObjectNotFoundException, SchemaException { + // TODO implement + throw new UnsupportedOperationException(); + } }