package org.adroitlogic.ultraesb.terminal.commands;
import org.adroitlogic.ultraesb.jmx.JMXConstants;
import org.adroitlogic.ultraesb.jmx.core.EndpointManagementMXBean;
import org.adroitlogic.ultraesb.jmx.core.SequenceManagementMXBean;
import org.adroitlogic.ultraesb.jmx.view.EndpointView;
import org.adroitlogic.ultraesb.jmx.view.SequenceView;
import org.adroitlogic.ultraesb.terminal.TerminalException;
import org.adroitlogic.ultraesb.terminal.annotations.CommandOption;
import org.adroitlogic.ultraesb.terminal.annotations.TerminalCommand;
import java.util.ArrayList;
import java.util.List;
public class SearchCommand extends CommandsBase {
@TerminalCommand(
name = "search-endpoints",
alias = "sep",
description = "search the endpoints with id containing the given string")
public List<String> searchEndpoints(String contains,
@CommandOption(
shortForm = "s",
longForm = "case-sensitive",
description = "search the term case sensitively") boolean caseSensitive) throws TerminalException {
if (contains == null) {
throw new TerminalException("Search string cannot be null");
}
List<String> searchResults = new ArrayList<String>();
for (EndpointView endpoint : getMXBeanProxy(JMXConstants.MXBEAN_NAME_ENDPOINTS,
EndpointManagementMXBean.class).getEndpoints()) {
if (contains(endpoint.getId(), contains, caseSensitive)) {
searchResults.add(endpoint.getId());
}
}
return searchResults;
}
@TerminalCommand(
name = "search-sequences",
alias = "ssq",
description = "search the sequences with id containing the given string")
public List<String> searchSequences(String contains,
@CommandOption(
shortForm = "s",
longForm = "case-sensitive",
description = "search the term case sensitively") boolean caseSensitive) throws TerminalException {
if (contains == null) {
throw new TerminalException("Search string cannot be null");
}
List<String> searchResults = new ArrayList<String>();
for (SequenceView endpoint : getMXBeanProxy(JMXConstants.MXBEAN_NAME_ENDPOINTS,
SequenceManagementMXBean.class).getSequences()) {
if (contains(endpoint.getId(), contains, caseSensitive)) {
searchResults.add(endpoint.getId());
}
}
return searchResults;
}
private boolean contains(String id, String contains, boolean caseSensitive) {
if (!caseSensitive) {
id = id.toUpperCase();
contains = contains.toUpperCase();
}
return id.indexOf(contains) != -1;
}
}