-/*-\r
- * ================================================================================\r
- * ECOMP Portal\r
- * ================================================================================\r
- * Copyright (C) 2017 AT&T Intellectual Property\r
- * ================================================================================\r
- * Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- * \r
- * http://www.apache.org/licenses/LICENSE-2.0\r
- * \r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- * ================================================================================\r
- */\r
-package org.openecomp.portalapp.portal.service;\r
-\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-\r
-import org.springframework.beans.factory.annotation.Autowired;\r
-import org.springframework.context.annotation.EnableAspectJAutoProxy;\r
-import org.springframework.stereotype.Service;\r
-import org.springframework.transaction.annotation.Transactional;\r
-\r
-import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;\r
-import org.openecomp.portalapp.portal.domain.EPUser;\r
-import org.openecomp.portalapp.portal.logging.aop.EPMetricsLog;\r
-import org.openecomp.portalapp.portal.transport.UserWithNameSurnameTitle;\r
-import org.openecomp.portalapp.portal.utils.EcompPortalUtils;\r
-import com.fasterxml.jackson.core.JsonProcessingException;\r
-import com.fasterxml.jackson.databind.ObjectMapper;\r
-\r
-@Service("searchService")\r
-@Transactional\r
-@org.springframework.context.annotation.Configuration\r
-@EnableAspectJAutoProxy\r
-@EPMetricsLog\r
-public class SearchServiceImpl implements SearchService {\r
- EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(SearchServiceImpl.class);\r
- \r
- // TODO: the values below should be defined in other place\r
- private static final int maxSizeOfSearchResult = 100;\r
-\r
-\r
- @Autowired\r
- EPLdapService ldapService;\r
-\r
- @Override\r
- public String searchUsersInPhoneBook(String searchString) {\r
- String orgUserId = null;\r
- List<String> tokens = EcompPortalUtils.parsingByRegularExpression(searchString, " ");\r
- for (int i = 0; i < tokens.size(); i++) { // find orgUserId if possible and remove it from tokens\r
- if (tokens.get(i).matches(".*\\d+.*")) {\r
- orgUserId = tokens.get(i);\r
- tokens.remove(i);\r
- }\r
- }\r
- while (tokens.size() > 2) { // we use no more then first 2 tokens (orgUserId is removed, see above)\r
- tokens.remove(tokens.size() - 1);\r
- }\r
- EPUser attrUser = new EPUser();\r
- attrUser.setOrgUserId(orgUserId);\r
- List<UserWithNameSurnameTitle> resultOfSearch = new ArrayList<UserWithNameSurnameTitle>(), resultOfAdditionalSearch = null;\r
- if (tokens.size() == 2) {\r
- attrUser.setFirstName(tokens.get(0));\r
- attrUser.setLastName(tokens.get(1));\r
- resultOfSearch = this.searchUsersByAttrs(attrUser);\r
- resultOfSearch = this.removeWrongFirstNames(resultOfSearch, tokens.get(0));\r
- resultOfSearch = this.removeWrongLastNames(resultOfSearch, tokens.get(1));\r
- if (resultOfSearch.size() < maxSizeOfSearchResult) {\r
- attrUser.setFirstName(tokens.get(1));\r
- attrUser.setLastName(tokens.get(0));\r
- resultOfAdditionalSearch = this.searchUsersByAttrs(attrUser);\r
- resultOfAdditionalSearch = this.removeWrongFirstNames(resultOfAdditionalSearch, tokens.get(1));\r
- resultOfAdditionalSearch = this.removeWrongLastNames(resultOfAdditionalSearch, tokens.get(0));\r
- }\r
- } else if (tokens.size() == 1) {\r
- attrUser.setFirstName(tokens.get(0));\r
- resultOfSearch = this.searchUsersByAttrs(attrUser);\r
- resultOfSearch = this.removeWrongFirstNames(resultOfSearch, tokens.get(0));\r
- if (resultOfSearch.size() < maxSizeOfSearchResult) {\r
- attrUser.setFirstName(null);\r
- attrUser.setLastName(tokens.get(0));\r
- resultOfAdditionalSearch = this.searchUsersByAttrs(attrUser);\r
- resultOfAdditionalSearch = this.removeWrongLastNames(resultOfAdditionalSearch, tokens.get(0));\r
- }\r
- } else if (orgUserId != null) {\r
- resultOfSearch = this.searchUsersByAttrs(attrUser);\r
- }\r
- if (resultOfAdditionalSearch != null) {\r
- resultOfSearch.addAll(resultOfAdditionalSearch);\r
- }\r
- resultOfSearch = this.cutSearchResultToMaximumSize(resultOfSearch);\r
- ObjectMapper mapper = new ObjectMapper();\r
- String result = "[]";\r
- try {\r
- result = mapper.writeValueAsString(resultOfSearch);\r
- } catch (JsonProcessingException e) {\r
- logger.error(EELFLoggerDelegate.errorLogger, "searchUsersInPhoneBook Exception = " + EcompPortalUtils.getStackTrace(e));\r
- }\r
- return result;\r
- }\r
-\r
- private List<UserWithNameSurnameTitle> searchUsersByAttrs(EPUser attrUser) {\r
- List<UserWithNameSurnameTitle> foundUsers = new ArrayList<UserWithNameSurnameTitle>();\r
- try {\r
- org.openecomp.portalsdk.core.command.support.SearchResult searchResult = this.ldapService.searchPost(attrUser, null, null, null, 0, 0, -1);\r
- for (Object obj : searchResult) {\r
- EPUser user = (EPUser) obj;\r
- UserWithNameSurnameTitle foundUser = new UserWithNameSurnameTitle(user.getOrgUserId(), user.getFirstName(), user.getLastName(), user.getJobTitle());\r
- foundUsers.add(foundUser);\r
- }\r
- } catch (Exception e) {\r
- logger.error(EELFLoggerDelegate.errorLogger, "searchInPhoneBookWithToken Exception = " + EcompPortalUtils.getStackTrace(e));\r
- }\r
- return foundUsers;\r
- }\r
-\r
- private List<UserWithNameSurnameTitle> removeWrongFirstNames(List<UserWithNameSurnameTitle> resultOfSearch, String firstName) {\r
- firstName = firstName.toUpperCase();\r
- for (int i = resultOfSearch.size() - 1; i >= 0; i--) {\r
- UserWithNameSurnameTitle user = resultOfSearch.get(i);\r
- if ((user.firstName == null) || !user.firstName.toUpperCase().startsWith(firstName)) {\r
- resultOfSearch.remove(i);\r
- }\r
- }\r
- return resultOfSearch;\r
- }\r
-\r
- private List<UserWithNameSurnameTitle> removeWrongLastNames(List<UserWithNameSurnameTitle> resultOfSearch, String lastName) {\r
- lastName = lastName.toUpperCase();\r
- for (int i = resultOfSearch.size() - 1; i >= 0; i--) {\r
- UserWithNameSurnameTitle user = resultOfSearch.get(i);\r
- if ((user.lastName == null) || !user.lastName.toUpperCase().startsWith(lastName)) {\r
- resultOfSearch.remove(i);\r
- }\r
- }\r
- return resultOfSearch;\r
- }\r
-\r
- private List<UserWithNameSurnameTitle> cutSearchResultToMaximumSize(List<UserWithNameSurnameTitle> resultOfSearch) {\r
- for (int i = resultOfSearch.size() - 1; i >= maxSizeOfSearchResult; i--) {\r
- resultOfSearch.remove(i);\r
- }\r
- return resultOfSearch;\r
- }\r
-\r
- @Override\r
- @SuppressWarnings("unchecked")\r
- public EPUser searchUserByUserId(String orgUserId) {\r
- EPUser user = null;\r
- EPUser searchedUser = new EPUser();\r
- searchedUser.setOrgUserId(orgUserId);\r
- try {\r
- List<Object> searchResult = ldapService.searchPost(searchedUser, "", null, null, 0, -1, 1);\r
- for (Object obj : searchResult) {\r
- if (obj instanceof EPUser) {\r
- user = (EPUser) obj;\r
- // This assignment should be checked later!\r
- user.setLoginId(orgUserId);\r
- break;\r
- }\r
- }\r
- } catch (Exception e) {\r
- logger.error(EELFLoggerDelegate.errorLogger, "searchUserBy orgUserId exception = " + EcompPortalUtils.getStackTrace(e));\r
- }\r
- return user;\r
- }\r
-\r
-}\r
+/*-
+ * ================================================================================
+ * ECOMP Portal
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * 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 org.openecomp.portalapp.portal.service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.openecomp.portalapp.portal.domain.EPUser;
+import org.openecomp.portalapp.portal.logging.aop.EPMetricsLog;
+import org.openecomp.portalapp.portal.transport.UserWithNameSurnameTitle;
+import org.openecomp.portalapp.portal.utils.EcompPortalUtils;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+@Service("searchService")
+@Transactional
+@org.springframework.context.annotation.Configuration
+@EnableAspectJAutoProxy
+@EPMetricsLog
+public class SearchServiceImpl implements SearchService {
+ EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(SearchServiceImpl.class);
+
+ // TODO: the values below should be defined in other place
+ private static final int maxSizeOfSearchResult = 100;
+
+
+ @Autowired
+ EPLdapService ldapService;
+
+ @Override
+ public String searchUsersInPhoneBook(String searchString) {
+ String orgUserId = null;
+ List<String> tokens = EcompPortalUtils.parsingByRegularExpression(searchString, " ");
+ for (int i = 0; i < tokens.size(); i++) { // find orgUserId if possible and remove it from tokens
+ if (tokens.get(i).matches(".*\\d+.*")) {
+ orgUserId = tokens.get(i);
+ tokens.remove(i);
+ }
+ }
+ while (tokens.size() > 2) { // we use no more then first 2 tokens (orgUserId is removed, see above)
+ tokens.remove(tokens.size() - 1);
+ }
+ EPUser attrUser = new EPUser();
+ attrUser.setOrgUserId(orgUserId);
+ List<UserWithNameSurnameTitle> resultOfSearch = new ArrayList<UserWithNameSurnameTitle>(), resultOfAdditionalSearch = null;
+ if (tokens.size() == 2) {
+ attrUser.setFirstName(tokens.get(0));
+ attrUser.setLastName(tokens.get(1));
+ resultOfSearch = this.searchUsersByAttrs(attrUser);
+ resultOfSearch = this.removeWrongFirstNames(resultOfSearch, tokens.get(0));
+ resultOfSearch = this.removeWrongLastNames(resultOfSearch, tokens.get(1));
+ if (resultOfSearch.size() < maxSizeOfSearchResult) {
+ attrUser.setFirstName(tokens.get(1));
+ attrUser.setLastName(tokens.get(0));
+ resultOfAdditionalSearch = this.searchUsersByAttrs(attrUser);
+ resultOfAdditionalSearch = this.removeWrongFirstNames(resultOfAdditionalSearch, tokens.get(1));
+ resultOfAdditionalSearch = this.removeWrongLastNames(resultOfAdditionalSearch, tokens.get(0));
+ }
+ } else if (tokens.size() == 1) {
+ attrUser.setFirstName(tokens.get(0));
+ resultOfSearch = this.searchUsersByAttrs(attrUser);
+ resultOfSearch = this.removeWrongFirstNames(resultOfSearch, tokens.get(0));
+ if (resultOfSearch.size() < maxSizeOfSearchResult) {
+ attrUser.setFirstName(null);
+ attrUser.setLastName(tokens.get(0));
+ resultOfAdditionalSearch = this.searchUsersByAttrs(attrUser);
+ resultOfAdditionalSearch = this.removeWrongLastNames(resultOfAdditionalSearch, tokens.get(0));
+ }
+ } else if (orgUserId != null) {
+ resultOfSearch = this.searchUsersByAttrs(attrUser);
+ }
+ if (resultOfAdditionalSearch != null) {
+ resultOfSearch.addAll(resultOfAdditionalSearch);
+ }
+ resultOfSearch = this.cutSearchResultToMaximumSize(resultOfSearch);
+ ObjectMapper mapper = new ObjectMapper();
+ String result = "[]";
+ try {
+ result = mapper.writeValueAsString(resultOfSearch);
+ } catch (JsonProcessingException e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "searchUsersInPhoneBook Exception = " + EcompPortalUtils.getStackTrace(e));
+ }
+ return result;
+ }
+
+ private List<UserWithNameSurnameTitle> searchUsersByAttrs(EPUser attrUser) {
+ List<UserWithNameSurnameTitle> foundUsers = new ArrayList<UserWithNameSurnameTitle>();
+ try {
+ org.openecomp.portalsdk.core.command.support.SearchResult searchResult = this.ldapService.searchPost(attrUser, null, null, null, 0, 0, -1);
+ for (Object obj : searchResult) {
+ EPUser user = (EPUser) obj;
+ UserWithNameSurnameTitle foundUser = new UserWithNameSurnameTitle(user.getOrgUserId(), user.getFirstName(), user.getLastName(), user.getJobTitle());
+ foundUsers.add(foundUser);
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "searchInPhoneBookWithToken Exception = " + EcompPortalUtils.getStackTrace(e));
+ }
+ return foundUsers;
+ }
+
+ private List<UserWithNameSurnameTitle> removeWrongFirstNames(List<UserWithNameSurnameTitle> resultOfSearch, String firstName) {
+ firstName = firstName.toUpperCase();
+ for (int i = resultOfSearch.size() - 1; i >= 0; i--) {
+ UserWithNameSurnameTitle user = resultOfSearch.get(i);
+ if ((user.firstName == null) || !user.firstName.toUpperCase().startsWith(firstName)) {
+ resultOfSearch.remove(i);
+ }
+ }
+ return resultOfSearch;
+ }
+
+ private List<UserWithNameSurnameTitle> removeWrongLastNames(List<UserWithNameSurnameTitle> resultOfSearch, String lastName) {
+ lastName = lastName.toUpperCase();
+ for (int i = resultOfSearch.size() - 1; i >= 0; i--) {
+ UserWithNameSurnameTitle user = resultOfSearch.get(i);
+ if ((user.lastName == null) || !user.lastName.toUpperCase().startsWith(lastName)) {
+ resultOfSearch.remove(i);
+ }
+ }
+ return resultOfSearch;
+ }
+
+ private List<UserWithNameSurnameTitle> cutSearchResultToMaximumSize(List<UserWithNameSurnameTitle> resultOfSearch) {
+ for (int i = resultOfSearch.size() - 1; i >= maxSizeOfSearchResult; i--) {
+ resultOfSearch.remove(i);
+ }
+ return resultOfSearch;
+ }
+
+ @Override
+ @SuppressWarnings("unchecked")
+ public EPUser searchUserByUserId(String orgUserId) {
+ EPUser user = null;
+ EPUser searchedUser = new EPUser();
+ searchedUser.setOrgUserId(orgUserId);
+ try {
+ List<Object> searchResult = ldapService.searchPost(searchedUser, "", null, null, 0, -1, 1);
+ for (Object obj : searchResult) {
+ if (obj instanceof EPUser) {
+ user = (EPUser) obj;
+ // This assignment should be checked later!
+ user.setLoginId(orgUserId);
+ break;
+ }
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "searchUserBy orgUserId exception = " + EcompPortalUtils.getStackTrace(e));
+ }
+ return user;
+ }
+
+}