Skip to content
Draft
Show file tree
Hide file tree
Changes from 1 commit
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 @@ -1457,8 +1457,8 @@ public int getQueueCount() {

clearIO();
try {
Object[] queueControls = server.getManagementService().getResources(QueueControl.class);
return queueControls.length;
List<QueueControl> queueControls = server.getManagementService().getQueueControls(null);
return queueControls.size();
} finally {
blockOnIO();
}
Expand All @@ -1478,10 +1478,10 @@ public String[] getQueueNames(String routingType) {

clearIO();
try {
Object[] queueControls = server.getManagementService().getResources(QueueControl.class);
List<QueueControl> queueControls = server.getManagementService().getQueueControls(null);
List<String> names = new ArrayList<>();
for (int i = 0; i < queueControls.length; i++) {
QueueControl queueControl = (QueueControl) queueControls[i];
for (int i = 0; i < queueControls.size(); i++) {
QueueControl queueControl = (QueueControl) queueControls.get(i);
if (routingType != null && routingType.length() > 1 && queueControl.getRoutingType().equals(routingType.toUpperCase())) {
names.add(queueControl.getName());
} else if (routingType == null || routingType.isEmpty()) {
Expand Down Expand Up @@ -1571,8 +1571,8 @@ public int getAddressCount() {

clearIO();
try {
Object[] addresses = server.getManagementService().getResources(AddressControl.class);
return addresses.length;
List<AddressControl> addresses = server.getManagementService().getAddressControls(null);
return addresses.size();
} finally {
blockOnIO();
}
Expand All @@ -1587,10 +1587,10 @@ public String[] getAddressNames() {

clearIO();
try {
Object[] addresses = server.getManagementService().getResources(AddressControl.class);
String[] names = new String[addresses.length];
for (int i = 0; i < addresses.length; i++) {
AddressControl address = (AddressControl) addresses[i];
List<AddressControl> addresses = server.getManagementService().getAddressControls(null);
String[] names = new String[addresses.size()];
for (int i = 0; i < addresses.size(); i++) {
AddressControl address = (AddressControl) addresses.get(i);
names[i] = address.getAddress();
}
return names;
Expand Down Expand Up @@ -2608,14 +2608,9 @@ public String listAddresses(String options, int page, int pageSize) throws Excep
checkStarted();
clearIO();
try {
List<AddressControl> addresses = new ArrayList<>();
Object[] qs = server.getManagementService().getResources(AddressControl.class);
for (int i = 0; i < qs.length; i++) {
addresses.add((AddressControl) qs[i]);
}
AddressView view = new AddressView(server);
view.setCollection(addresses);
view.setOptions(options);
view.setCollection(server.getManagementService().getAddressControls(view.getPredicate()));
return view.getResultsAsJson(page, pageSize);
} finally {
blockOnIO();
Expand All @@ -2631,15 +2626,10 @@ public String listQueues(String options, int page, int pageSize) throws Exceptio

clearIO();
try {
List<QueueControl> queues = new ArrayList<>();
Object[] qs = server.getManagementService().getResources(QueueControl.class);
for (int i = 0; i < qs.length; i++) {
queues.add((QueueControl) qs[i]);
}
QueueView view = new QueueView(server);
view.setCollection(queues);
view.setOptions(options);
return view.getResultsAsJson(page, pageSize);
view.setCollection(server.getManagementService().getQueueControls(view.getPredicate()));
return view.AsJson(page, pageSize);
} finally {
blockOnIO();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,8 @@
*/
package org.apache.activemq.artemis.core.management.impl.view;

import org.apache.activemq.artemis.json.JsonArrayBuilder;
import org.apache.activemq.artemis.json.JsonObject;
import org.apache.activemq.artemis.json.JsonObjectBuilder;
import org.apache.activemq.artemis.core.management.impl.view.predicate.PredicateFilterPart;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
Expand All @@ -30,13 +29,20 @@

import org.apache.activemq.artemis.api.core.JsonUtil;
import org.apache.activemq.artemis.core.management.impl.view.predicate.ActiveMQFilterPredicate;
import org.apache.activemq.artemis.json.JsonArray;
import org.apache.activemq.artemis.json.JsonArrayBuilder;
import org.apache.activemq.artemis.json.JsonObject;
import org.apache.activemq.artemis.json.JsonObjectBuilder;
import org.apache.activemq.artemis.json.JsonValue;
import org.apache.activemq.artemis.utils.JsonLoader;

public abstract class ActiveMQAbstractView<T> {
public abstract class ActiveMQAbstractView<T, V extends PredicateFilterPart<T>> {

// use this for values which couldn't be retrieved (e.g. an exception was thrown)
protected static final String N_A = "n/a";

private static final String FILTER_ARRAY_FIELD = "searchFilters";

private static final String FILTER_FIELD = "field";

private static final String FILTER_OPERATION = "operation";
Expand All @@ -58,7 +64,7 @@ public abstract class ActiveMQAbstractView<T> {

protected Collection<T> collection;

protected ActiveMQFilterPredicate<T> predicate;
protected ActiveMQFilterPredicate<T, V> predicate;

protected String sortField;

Expand All @@ -73,6 +79,11 @@ public void setCollection(Collection<T> collection) {
this.collection = collection;
}

public List<T> filter() {
List<T> collect = collection.stream().filter(getPredicate()).collect(Collectors.toList());
return collect;
}

public String getResultsAsJson(int page, int pageSize) {
JsonObjectBuilder obj = JsonLoader.createObjectBuilder();
JsonArrayBuilder array = JsonLoader.createArrayBuilder();
Expand All @@ -89,6 +100,21 @@ public String getResultsAsJson(int page, int pageSize) {
return obj.build().toString();
}

public String AsJson(int page, int pageSize) {
JsonObjectBuilder obj = JsonLoader.createObjectBuilder();
JsonArrayBuilder array = JsonLoader.createArrayBuilder();
for (T element : getPagedResult(page, pageSize)) {
JsonObjectBuilder jsonObjectBuilder = toJson(element);
//toJson() may return a null
if (jsonObjectBuilder != null) {
array.add(jsonObjectBuilder);
}
}
obj.add("data", array);
obj.add("count", collection.size());
return obj.build().toString();
}

public List<T> getPagedResult(int page, int pageSize) {
List<T> builder = new ArrayList<>();
final int start;
Expand Down Expand Up @@ -144,9 +170,7 @@ public void setOptions(String options) {
json = JsonUtil.readJsonObject(options);
}
if (predicate != null) {
predicate.setField(json.getString(FILTER_FIELD));
predicate.setOperation(json.getString(FILTER_OPERATION));
predicate.setValue(json.getString(FILTER_VALUE));
predicate.addFilterParts(createFilterPredicates(json));
if ((json.containsKey(SORT_COLUMN) || json.containsKey(SORT_FIELD)) && json.containsKey(SORT_ORDER)) {
if (json.containsKey(SORT_COLUMN)) {
this.sortField = json.getString(SORT_COLUMN);
Expand All @@ -158,6 +182,19 @@ public void setOptions(String options) {
}
}

private List<V> createFilterPredicates(JsonObject json) {
ArrayList<V> predicates = new ArrayList<>();
JsonArray jsonArray = json.getJsonArray(FILTER_ARRAY_FIELD);
if (jsonArray == null) {
predicates.add(predicate.createFilterPart(json.getString(FILTER_FIELD), json.getString(FILTER_OPERATION), json.getString(FILTER_VALUE)));
} else {
for (JsonValue jsonValue : jsonArray) {
predicates.add(predicate.createFilterPart(((JsonObject)jsonValue).getString(FILTER_FIELD), ((JsonObject)jsonValue).getString(FILTER_OPERATION), ((JsonObject)jsonValue).getString(FILTER_VALUE)));
}
}
return predicates;
}

public abstract Class getClassT();

public abstract JsonObjectBuilder toJson(T obj);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,13 @@
package org.apache.activemq.artemis.core.management.impl.view;

import org.apache.activemq.artemis.api.core.management.AddressControl;
import org.apache.activemq.artemis.core.management.impl.view.predicate.AddressPredicateFilterPart;
import org.apache.activemq.artemis.json.JsonObjectBuilder;
import org.apache.activemq.artemis.core.management.impl.view.predicate.AddressFilterPredicate;
import org.apache.activemq.artemis.core.server.ActiveMQServer;
import org.apache.activemq.artemis.utils.JsonLoader;

public class AddressView extends ActiveMQAbstractView<AddressControl> {
public class AddressView extends ActiveMQAbstractView<AddressControl, AddressPredicateFilterPart> {

private static final String defaultSortField = AddressField.ID.getName();

Expand All @@ -31,7 +32,7 @@ public class AddressView extends ActiveMQAbstractView<AddressControl> {
public AddressView(ActiveMQServer server) {
super();
this.server = server;
this.predicate = new AddressFilterPredicate(server);
this.predicate = new AddressFilterPredicate();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import java.util.Set;
import java.util.TreeSet;

import org.apache.activemq.artemis.core.management.impl.view.predicate.ConnectionPredicateFilterPart;
import org.apache.activemq.artemis.core.management.impl.view.predicate.ConnectionFilterPredicate;
import org.apache.activemq.artemis.core.remoting.impl.netty.NettyServerConnection;
import org.apache.activemq.artemis.core.server.ActiveMQServer;
Expand All @@ -31,7 +32,7 @@
import org.apache.activemq.artemis.utils.JsonLoader;
import org.apache.activemq.artemis.utils.StringUtil;

public class ConnectionView extends ActiveMQAbstractView<RemotingConnection> {
public class ConnectionView extends ActiveMQAbstractView<RemotingConnection, ConnectionPredicateFilterPart> {

private static final String defaultSortField = ConnectionField.CONNECTION_ID.getName();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,15 @@
import java.util.Date;

import org.apache.activemq.artemis.core.management.impl.ActiveMQServerControlImpl;
import org.apache.activemq.artemis.core.management.impl.view.predicate.ConsumerPredicateFilterPart;
import org.apache.activemq.artemis.core.management.impl.view.predicate.ConsumerFilterPredicate;
import org.apache.activemq.artemis.core.server.ActiveMQServer;
import org.apache.activemq.artemis.core.server.ServerConsumer;
import org.apache.activemq.artemis.core.server.ServerSession;
import org.apache.activemq.artemis.json.JsonObjectBuilder;
import org.apache.activemq.artemis.utils.JsonLoader;

public class ConsumerView extends ActiveMQAbstractView<ServerConsumer> {
public class ConsumerView extends ActiveMQAbstractView<ServerConsumer, ConsumerPredicateFilterPart> {

public static final String CONSUMER_STATUS_OK = "OK";
public static final String CONSUMER_STATUS_ORPHANED = "Orphaned";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,15 @@

import java.util.Objects;

import org.apache.activemq.artemis.core.management.impl.view.predicate.ProducerPredicateFilterPart;
import org.apache.activemq.artemis.core.management.impl.view.predicate.ProducerFilterPredicate;
import org.apache.activemq.artemis.core.server.ActiveMQServer;
import org.apache.activemq.artemis.core.server.ServerProducer;
import org.apache.activemq.artemis.core.server.ServerSession;
import org.apache.activemq.artemis.json.JsonObjectBuilder;
import org.apache.activemq.artemis.utils.JsonLoader;

public class ProducerView extends ActiveMQAbstractView<ServerProducer> {
public class ProducerView extends ActiveMQAbstractView<ServerProducer, ProducerPredicateFilterPart> {

private static final String defaultSortField = ProducerField.CREATION_TIME.getName();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
*/
package org.apache.activemq.artemis.core.management.impl.view;

import org.apache.activemq.artemis.core.management.impl.view.predicate.QueuePredicateFilterPart;
import org.apache.activemq.artemis.json.JsonObjectBuilder;
import org.apache.activemq.artemis.api.core.SimpleString;
import org.apache.activemq.artemis.api.core.management.QueueControl;
Expand All @@ -24,7 +25,7 @@
import org.apache.activemq.artemis.core.server.Queue;
import org.apache.activemq.artemis.utils.JsonLoader;

public class QueueView extends ActiveMQAbstractView<QueueControl> {
public class QueueView extends ActiveMQAbstractView<QueueControl, QueuePredicateFilterPart> {

private static final String defaultSortField = QueueField.NAME.getName();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
*/
package org.apache.activemq.artemis.core.management.impl.view;

import org.apache.activemq.artemis.core.management.impl.view.predicate.SessionPredicateFilterPart;
import org.apache.activemq.artemis.json.JsonObjectBuilder;
import java.util.Date;
import java.util.Objects;
Expand All @@ -24,7 +25,7 @@
import org.apache.activemq.artemis.core.server.ServerSession;
import org.apache.activemq.artemis.utils.JsonLoader;

public class SessionView extends ActiveMQAbstractView<ServerSession> {
public class SessionView extends ActiveMQAbstractView<ServerSession, SessionPredicateFilterPart> {

private static final String defaultSortField = SessionField.ID.getName();

Expand Down
Loading