Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import com.fasterxml.jackson.annotation.JsonIgnore;
import gov.anl.aps.logr.common.mqtt.constants.CallSource;
import gov.anl.aps.logr.common.mqtt.constants.MqttTopic;
import gov.anl.aps.logr.common.mqtt.model.entities.SearchOptions;
import gov.anl.aps.logr.common.mqtt.model.entities.LogbookSearchOptions;

/**
* MQTT event for search operations.
Expand All @@ -17,10 +17,10 @@
public class SearchEvent extends MqttEvent {

private String searchText;
private SearchOptions searchOptions;
private LogbookSearchOptions searchOptions;
private CallSource source; // "API" or "Portal"

public SearchEvent(String searchText, SearchOptions searchOptions, CallSource searchSource) {
public SearchEvent(String searchText, LogbookSearchOptions searchOptions, CallSource searchSource) {
super();
this.searchText = searchText;
this.searchOptions = searchOptions;
Expand All @@ -38,7 +38,7 @@ public String getSearchText() {
return searchText;
}

public SearchOptions getSearchOptions() {
public LogbookSearchOptions getSearchOptions() {
return searchOptions;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
/*
* Copyright (c) UChicago Argonne, LLC. All rights reserved.
* See LICENSE file.
*/
package gov.anl.aps.logr.common.mqtt.model.entities;

import com.fasterxml.jackson.annotation.JsonFormat;
import gov.anl.aps.logr.portal.model.db.entities.EntityType;
import gov.anl.aps.logr.portal.model.db.entities.ItemType;
import gov.anl.aps.logr.portal.model.db.entities.UserInfo;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;

/**
* Search options for logbook search MQTT events.
*
* @author djarosz
*/
public class LogbookSearchOptions {

private final List<FilterItem> logbookTypes;
private final List<FilterItem> systems;
private final List<FilterItem> users;
private final Date startModifiedDate;
private final Date endModifiedDate;
private final Date startCreatedDate;
private final Date endCreatedDate;
private final boolean caseInsensitive;

public LogbookSearchOptions(
List<EntityType> logbookTypes,
List<ItemType> systems,
List<UserInfo> users,
Date startModifiedDate,
Date endModifiedDate,
Date startCreatedDate,
Date endCreatedDate,
boolean caseInsensitive) {

this.logbookTypes = toFilterItems(logbookTypes, e -> new FilterItem(e.getId(), e.getName()));
this.systems = toFilterItems(systems, s -> new FilterItem(s.getId(), s.getName()));
this.users = toFilterItems(users, u -> new FilterItem(u.getId(), u.getUsername()));
this.startModifiedDate = startModifiedDate;
this.endModifiedDate = endModifiedDate;
this.startCreatedDate = startCreatedDate;
this.endCreatedDate = endCreatedDate;
this.caseInsensitive = caseInsensitive;
}

private <T> List<FilterItem> toFilterItems(List<T> list, java.util.function.Function<T, FilterItem> mapper) {
if (list == null) {
return null;
}
return list.stream().map(mapper).collect(Collectors.toList());
}

public List<FilterItem> getLogbookTypes() {
return logbookTypes;
}

public List<FilterItem> getSystems() {
return systems;
}

public List<FilterItem> getUsers() {
return users;
}

@JsonFormat(shape = JsonFormat.Shape.STRING)
public Date getStartModifiedDate() {
return startModifiedDate;
}

@JsonFormat(shape = JsonFormat.Shape.STRING)
public Date getEndModifiedDate() {
return endModifiedDate;
}

@JsonFormat(shape = JsonFormat.Shape.STRING)
public Date getStartCreatedDate() {
return startCreatedDate;
}

@JsonFormat(shape = JsonFormat.Shape.STRING)
public Date getEndCreatedDate() {
return endCreatedDate;
}

public boolean isCaseInsensitive() {
return caseInsensitive;
}

public static class FilterItem {

private int id;
private String name;

public FilterItem(int id, String name) {
this.id = id;
this.name = name;
}

public int getId() {
return id;
}

public String getName() {
return name;
}
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@

import gov.anl.aps.logr.common.exceptions.CdbException;
import gov.anl.aps.logr.common.exceptions.InvalidObjectState;
import gov.anl.aps.logr.common.mqtt.constants.CallSource;
import gov.anl.aps.logr.common.mqtt.model.entities.LogbookSearchOptions;
import gov.anl.aps.logr.common.utilities.CollectionUtility;
import gov.anl.aps.logr.portal.constants.EntityTypeName;
import gov.anl.aps.logr.portal.constants.LogDocumentSettings;
Expand All @@ -16,6 +18,7 @@
import gov.anl.aps.logr.portal.controllers.utilities.EntityInfoControllerUtility;
import gov.anl.aps.logr.portal.controllers.utilities.EntityTypeControllerUtility;
import gov.anl.aps.logr.portal.controllers.utilities.ItemDomainLogbookControllerUtility;
import gov.anl.aps.logr.portal.controllers.utilities.SearchControllerUtility;
import gov.anl.aps.logr.portal.controllers.utilities.LogReactionControllerUtility;
import gov.anl.aps.logr.portal.controllers.utilities.PropertyTypeControllerUtility;
import gov.anl.aps.logr.portal.controllers.utilities.SettingTypeControllerUtility;
Expand Down Expand Up @@ -52,13 +55,13 @@
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.Calendar;

import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.logging.Level;
import java.util.regex.Pattern;

import javax.ejb.EJB;
import javax.enterprise.context.SessionScoped;
import javax.faces.component.UIComponent;
Expand Down Expand Up @@ -1049,26 +1052,19 @@ public void performEntitySearch(String searchString, boolean caseInsensitive) {
SearchSettings searchSettings = searchCtrl.getSearchSettings();
Boolean advancedSearch = searchSettings.getAdvancedSearch();

String entityTypeIdList = null;
String itemTypeIdList = null;
String userIdList = null;
Date startModifiedTime = null;
Date endModifiedTime = null;
Date startCreatedTime = null;
Date endCreatedTime = null;

if (advancedSearch) {
entityTypeIdList = CollectionUtility.generateIdListString(searchLogbookTypeList);
itemTypeIdList = CollectionUtility.generateIdListString(searchSystemList);
userIdList = CollectionUtility.generateIdListString(searchUserList);

startModifiedTime = searchModifiedStartDate;
endModifiedTime = searchModifiedEndDate;
startCreatedTime = searchCreatedStartDate;
endCreatedTime = searchCreatedEndDate;

endModifiedTime = adjustEndTime(endModifiedTime);
endCreatedTime = adjustEndTime(endCreatedTime);
endModifiedTime = ItemDomainLogbookControllerUtility.adjustEndTimeForSearch(endModifiedTime);
endCreatedTime = ItemDomainLogbookControllerUtility.adjustEndTimeForSearch(endCreatedTime);
}

resetSearchVariables();
Expand All @@ -1079,67 +1075,15 @@ public void performEntitySearch(String searchString, boolean caseInsensitive) {

super.performEntitySearch(searchString, searchArgs, caseInsensitive);

// Search log entries.
List<Object[]> results = itemDomainLogbookFacade.searchEntityLogs(searchString, itemTypeIdList, entityTypeIdList, userIdList,
startModifiedTime, endModifiedTime, startCreatedTime, endCreatedTime);

ItemDomainLogbookControllerUtility controllerUtility1 = getControllerUtility();
String patternString = controllerUtility1.generatePatternString(searchString);
Pattern searchPattern = controllerUtility1.getSearchPattern(patternString, caseInsensitive);

logResults = new ArrayList<>();

for (Object[] result : results) {
ItemDomainLogbook logbook = (ItemDomainLogbook) result[0];
Log log = (Log) result[1];
Long logId = (Long) result[2];

SearchResult searchResult = new SearchResult(logbook, logbook.getId(), logbook.getName(), log);
searchResult.setAdditionalAttribute("" + logId);

String text = log.getText();
String[] logLines = text.split("\n");
String matching_lines = "";

for (int i = 0; i < logLines.length; i++) {
String lineText = logLines[i];

if (searchPattern.matcher(lineText).find()) {
matching_lines += lineText + "\n";
}
}
searchResult.addAttributeMatch("log entry", matching_lines);

controllerUtility1.addCommonLogEntryDocumentMatches(searchResult, searchLogbookTypeList, searchSystemList);

if (searchUserList != null && !searchUserList.isEmpty()) {
for (UserInfo ui : searchUserList) {
Integer searchUserId = ui.getId();
// Search log entries using shared utility method.
logResults = utility.searchLogEntries(searchString, caseInsensitive, searchArgs);

UserInfo enteredByUser = log.getEnteredByUser();
UserInfo lastModifiedByUser = log.getLastModifiedByUser();

if (Objects.equals(enteredByUser.getId(), searchUserId)) {
searchResult.addAttributeMatch("Create User", enteredByUser.toString());
}
if (Objects.equals(lastModifiedByUser.getId(), searchUserId)) {
searchResult.addAttributeMatch("Last Modify User", lastModifiedByUser.toString());
}
}
}

if (startCreatedTime != null || endCreatedTime != null) {
Date enteredOnDateTime = log.getEnteredOnDateTime();
searchResult.addAttributeMatch("Created on", enteredOnDateTime.toString());
}

if (startModifiedTime != null || endModifiedTime != null) {
Date modifiedOnDateTime = log.getLastModifiedOnDateTime();
searchResult.addAttributeMatch("Modified on", modifiedOnDateTime.toString());
}

logResults.add(searchResult);
}
// Publish MQTT search event with logbook-specific options
LogbookSearchOptions options = new LogbookSearchOptions(
searchLogbookTypeList, searchSystemList, searchUserList,
startModifiedTime, endModifiedTime,
startCreatedTime, endCreatedTime, caseInsensitive);
SearchControllerUtility.publishSearchMqttEvent(searchString, options, CallSource.Portal);
}

public String getSearchOpts() {
Expand Down Expand Up @@ -1250,20 +1194,6 @@ public void processSearchRequestParams() {
}
}

private Date adjustEndTime(Date endTime) {
if (endTime != null) {
// Add offset to the end of the selected date.
Calendar endDateCal = Calendar.getInstance();
endDateCal.setTime(endTime);
endDateCal.set(Calendar.HOUR, 23);
endDateCal.set(Calendar.MINUTE, 59);
endDateCal.set(Calendar.SECOND, 59);
endTime = endDateCal.getTime();
}

return endTime;
}

public List<SearchResult> getLogResults() {
return logResults;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,7 @@
package gov.anl.aps.logr.portal.controllers;

import gov.anl.aps.logr.common.constants.CdbProperty;
import gov.anl.aps.logr.common.mqtt.constants.CallSource;
import gov.anl.aps.logr.common.mqtt.model.entities.SearchOptions;
import gov.anl.aps.logr.portal.controllers.settings.SearchSettings;
import gov.anl.aps.logr.portal.controllers.utilities.SearchControllerUtility;
import gov.anl.aps.logr.portal.utilities.ConfigurationUtility;
import gov.anl.aps.logr.portal.utilities.SessionUtility;
import java.io.IOException;
Expand Down Expand Up @@ -117,19 +114,6 @@ public void prepareSearch() {

public void search() {
if (performSearch) {
// Publish anonymous MQTT event for search
SearchOptions searchOptions = new SearchOptions(
searchSettings.getDisplayItemElements(),
searchSettings.getDisplayItemTypes(),
searchSettings.getDisplayItemCategories(),
searchSettings.getDisplayPropertyTypes(),
searchSettings.getDisplayPropertyTypeCategories(),
searchSettings.getDisplaySources(),
searchSettings.getDisplayUsers(),
searchSettings.getDisplayUserGroups()
);
SearchControllerUtility.publishSearchMqttEvent(searchString, searchOptions, CallSource.Portal);

for (CdbEntityController controller : searchableControllers) {
// Check if controller needs to be skipped.
if (controller instanceof ItemTypeController) {
Expand Down
Loading