mirror of
https://github.com/ctripcorp/zeus.git
synced 2024-09-20 15:46:01 +08:00
add query command components
This commit is contained in:
parent
fe465042a5
commit
7997f1d8fe
|
@ -13,6 +13,12 @@ public class IdVersion implements Comparable<IdVersion> {
|
|||
this.version = version;
|
||||
}
|
||||
|
||||
public IdVersion(String stringValue) {
|
||||
int split = stringValue.indexOf('_');
|
||||
this.id = Long.parseLong(stringValue.substring(0, split));
|
||||
this.version = Integer.parseInt(stringValue.substring(split + 1, stringValue.length()));
|
||||
}
|
||||
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
@ -45,7 +51,8 @@ public class IdVersion implements Comparable<IdVersion> {
|
|||
@Override
|
||||
public int compareTo(IdVersion o) {
|
||||
if (this.id < o.id) return -1;
|
||||
if (this.id.longValue() == o.id.longValue()) return (this.version - o.version) < 0 ? -1 : ((this.version.intValue() == o.version.intValue()) ? 0 : 1);
|
||||
if (this.id.longValue() == o.id.longValue())
|
||||
return (this.version - o.version) < 0 ? -1 : ((this.version.intValue() == o.version.intValue()) ? 0 : 1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
|
@ -10,6 +10,8 @@ import java.util.Set;
|
|||
*/
|
||||
public interface GroupCriteriaQuery {
|
||||
|
||||
IdVersion[] queryByCommand(QueryCommand query, SelectionMode mode) throws Exception;
|
||||
|
||||
Long queryByName(String name) throws Exception;
|
||||
|
||||
Set<Long> queryByAppId(String appId) throws Exception;
|
||||
|
|
|
@ -0,0 +1,72 @@
|
|||
package com.ctrip.zeus.service.query;
|
||||
|
||||
import com.ctrip.zeus.exceptions.ValidationException;
|
||||
|
||||
/**
|
||||
* Created by zhoumy on 2016/7/15.
|
||||
*/
|
||||
public class GroupQueryCommand implements QueryCommand {
|
||||
public final int id = 0;
|
||||
public final int name = 1;
|
||||
public final int app_id = 2;
|
||||
public final int member_ip = 3;
|
||||
public final int vs_id = 4;
|
||||
|
||||
private final String type;
|
||||
private final String[] values = new String[5];
|
||||
|
||||
public GroupQueryCommand() {
|
||||
this.type = "group";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean add(String queryName, String queryValue) throws ValidationException {
|
||||
int idx;
|
||||
switch (queryName) {
|
||||
case "id":
|
||||
case "groupId":
|
||||
idx = id;
|
||||
break;
|
||||
case "name":
|
||||
case "groupName":
|
||||
idx = name;
|
||||
break;
|
||||
case "appId":
|
||||
idx = app_id;
|
||||
break;
|
||||
case "ip":
|
||||
case "member":
|
||||
idx = member_ip;
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
return addAtIndex(idx, queryValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean addAtIndex(int idx, String queryValue) throws ValidationException {
|
||||
if (idx < values.length) {
|
||||
values[idx] = queryValue;
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasValue(int idx) {
|
||||
return values[idx] != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getValue(int idx) {
|
||||
String value = values[idx];
|
||||
return value == null ? null : value.split(",");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
}
|
19
src/main/java/com/ctrip/zeus/service/query/QueryCommand.java
Normal file
19
src/main/java/com/ctrip/zeus/service/query/QueryCommand.java
Normal file
|
@ -0,0 +1,19 @@
|
|||
package com.ctrip.zeus.service.query;
|
||||
|
||||
import com.ctrip.zeus.exceptions.ValidationException;
|
||||
|
||||
/**
|
||||
* Created by zhoumy on 2016/7/15.
|
||||
*/
|
||||
public interface QueryCommand {
|
||||
|
||||
boolean add(String queryName, String queryValue) throws ValidationException;
|
||||
|
||||
boolean addAtIndex(int idx, String queryValue) throws ValidationException;
|
||||
|
||||
boolean hasValue(int idx);
|
||||
|
||||
String[] getValue(int idx);
|
||||
|
||||
String getType();
|
||||
}
|
|
@ -10,6 +10,8 @@ import java.util.Set;
|
|||
*/
|
||||
public interface SlbCriteriaQuery {
|
||||
|
||||
IdVersion[] queryByCommand(QueryCommand query, SelectionMode mode) throws Exception;
|
||||
|
||||
Set<Long> queryAll() throws Exception;
|
||||
|
||||
Set<IdVersion> queryAll(SelectionMode mode) throws Exception;
|
||||
|
|
|
@ -0,0 +1,70 @@
|
|||
package com.ctrip.zeus.service.query;
|
||||
|
||||
import com.ctrip.zeus.exceptions.ValidationException;
|
||||
|
||||
/**
|
||||
* Created by zhoumy on 2016/7/15.
|
||||
*/
|
||||
public class SlbQueryCommand implements QueryCommand {
|
||||
public final int id = 0;
|
||||
public final int name = 1;
|
||||
public final int ip = 2;
|
||||
public final int vip = 3;
|
||||
public final int vs_search_key = 4;
|
||||
|
||||
private final String type;
|
||||
private String[] values = new String[5];
|
||||
|
||||
public SlbQueryCommand() {
|
||||
type = "slb";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean add(String queryName, String queryValue) throws ValidationException {
|
||||
int idx;
|
||||
switch (queryName) {
|
||||
case "id":
|
||||
case "slbId":
|
||||
idx = id;
|
||||
break;
|
||||
case "name":
|
||||
case "slbName":
|
||||
idx = name;
|
||||
break;
|
||||
case "ip":
|
||||
idx = ip;
|
||||
break;
|
||||
case "vip":
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
return addAtIndex(idx, queryValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean addAtIndex(int idx, String queryValue) throws ValidationException {
|
||||
if (idx < values.length) {
|
||||
values[idx] = queryValue;
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasValue(int idx) {
|
||||
return values[idx] != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getValue(int idx) {
|
||||
String value = values[idx];
|
||||
return value == null ? null : value.split(",");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
}
|
|
@ -10,6 +10,8 @@ import java.util.Set;
|
|||
*/
|
||||
public interface VirtualServerCriteriaQuery {
|
||||
|
||||
IdVersion[] queryByCommand(QueryCommand query, SelectionMode mode) throws Exception;
|
||||
|
||||
Set<Long> queryAll() throws Exception;
|
||||
|
||||
Set<IdVersion> queryAll(SelectionMode mode) throws Exception;
|
||||
|
@ -18,6 +20,8 @@ public interface VirtualServerCriteriaQuery {
|
|||
|
||||
IdVersion[] queryByIdAndMode(Long vsId, SelectionMode mode) throws Exception;
|
||||
|
||||
Set<Long> queryByGroup(IdVersion[] searchKeys) throws Exception;
|
||||
|
||||
Set<IdVersion> queryBySlbId(Long slbId) throws Exception;
|
||||
|
||||
Set<IdVersion> queryBySlbIds(Long[] slbIds) throws Exception;
|
||||
|
|
|
@ -0,0 +1,76 @@
|
|||
package com.ctrip.zeus.service.query;
|
||||
|
||||
import com.ctrip.zeus.exceptions.ValidationException;
|
||||
|
||||
/**
|
||||
* Created by zhoumy on 2016/7/15.
|
||||
*/
|
||||
public class VsQueryCommand implements QueryCommand {
|
||||
public int id = 0;
|
||||
public int name = 1;
|
||||
public int domain = 2;
|
||||
public int ssl = 3;
|
||||
public int slb_id = 4;
|
||||
public int group_search_key = 5;
|
||||
|
||||
private String[] values = new String[6];
|
||||
private final String type;
|
||||
|
||||
public VsQueryCommand() {
|
||||
type = "vs";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean add(String queryName, String queryValue) throws ValidationException {
|
||||
int idx;
|
||||
switch (queryName) {
|
||||
case "id":
|
||||
case "vsId":
|
||||
idx = id;
|
||||
break;
|
||||
case "name":
|
||||
case "vsName":
|
||||
idx = name;
|
||||
break;
|
||||
case "domain":
|
||||
idx = domain;
|
||||
break;
|
||||
case "ssl":
|
||||
idx = ssl;
|
||||
break;
|
||||
// preserved query name
|
||||
case "ip":
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
values[idx] = queryValue;
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean addAtIndex(int idx, String queryValue) throws ValidationException {
|
||||
if (idx < values.length) {
|
||||
values[idx] = queryValue;
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasValue(int idx) {
|
||||
return values[idx] != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getValue(int idx) {
|
||||
String value = values[idx];
|
||||
return value == null ? null : value.split(",");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
}
|
|
@ -1,10 +1,14 @@
|
|||
package com.ctrip.zeus.service.query.impl;
|
||||
|
||||
import com.ctrip.zeus.dal.core.*;
|
||||
import com.ctrip.zeus.restful.filter.FilterSet;
|
||||
import com.ctrip.zeus.restful.filter.QueryExecuter;
|
||||
import com.ctrip.zeus.service.model.SelectionMode;
|
||||
import com.ctrip.zeus.service.model.VersionUtils;
|
||||
import com.ctrip.zeus.service.query.GroupCriteriaQuery;
|
||||
import com.ctrip.zeus.service.model.IdVersion;
|
||||
import com.ctrip.zeus.service.query.GroupQueryCommand;
|
||||
import com.ctrip.zeus.service.query.QueryCommand;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
@ -26,6 +30,107 @@ public class DefaultGroupCriteriaQuery implements GroupCriteriaQuery {
|
|||
@Resource
|
||||
private RGroupStatusDao rGroupStatusDao;
|
||||
|
||||
@Override
|
||||
public IdVersion[] queryByCommand(QueryCommand query, final SelectionMode mode) throws Exception {
|
||||
final GroupQueryCommand groupQuery = (GroupQueryCommand) query;
|
||||
final Long[] filteredGroupIds = new QueryExecuter.Builder<Long>()
|
||||
.addFilter(new FilterSet<Long>() {
|
||||
@Override
|
||||
public boolean shouldFilter() throws Exception {
|
||||
return groupQuery.hasValue(groupQuery.id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<Long> filter() throws Exception {
|
||||
Set<Long> result = new HashSet<Long>();
|
||||
for (String s : groupQuery.getValue(groupQuery.id)) {
|
||||
result.add(Long.parseLong(s));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
})
|
||||
.addFilter(new FilterSet<Long>() {
|
||||
@Override
|
||||
public boolean shouldFilter() throws Exception {
|
||||
return groupQuery.hasValue(groupQuery.name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<Long> filter() throws Exception {
|
||||
Set<Long> result = new HashSet<Long>();
|
||||
for (String s : groupQuery.getValue(groupQuery.name)) {
|
||||
result.add(queryByName(s));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
})
|
||||
.addFilter(new FilterSet<Long>() {
|
||||
@Override
|
||||
public boolean shouldFilter() throws Exception {
|
||||
return groupQuery.hasValue(groupQuery.app_id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<Long> filter() throws Exception {
|
||||
Set<Long> result = new HashSet<Long>();
|
||||
for (String s : groupQuery.getValue(groupQuery.app_id)) {
|
||||
result.addAll(queryByAppId(s));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}).build(Long.class).run();
|
||||
|
||||
IdVersion[] filteredGroupKeys = new QueryExecuter.Builder<IdVersion>()
|
||||
.addFilter(new FilterSet<IdVersion>() {
|
||||
@Override
|
||||
public boolean shouldFilter() throws Exception {
|
||||
return filteredGroupIds != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<IdVersion> filter() throws Exception {
|
||||
Set<Long> groupIds = new HashSet<Long>();
|
||||
for (Long i : filteredGroupIds) {
|
||||
groupIds.add(i);
|
||||
}
|
||||
return queryByIdsAndMode(groupIds.toArray(new Long[groupIds.size()]), mode);
|
||||
}
|
||||
})
|
||||
.addFilter(new FilterSet<IdVersion>() {
|
||||
@Override
|
||||
public boolean shouldFilter() throws Exception {
|
||||
return groupQuery.hasValue(groupQuery.member_ip);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<IdVersion> filter() throws Exception {
|
||||
Set<IdVersion> result = new HashSet<IdVersion>();
|
||||
for (String s : groupQuery.getValue(groupQuery.member_ip)) {
|
||||
result.addAll(queryByGroupServer(s));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
})
|
||||
.addFilter(new FilterSet<IdVersion>() {
|
||||
@Override
|
||||
public boolean shouldFilter() throws Exception {
|
||||
return groupQuery.hasValue(groupQuery.vs_id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<IdVersion> filter() throws Exception {
|
||||
Set<IdVersion> result = new HashSet<IdVersion>();
|
||||
List<Long> vsIds = new ArrayList<Long>();
|
||||
for (String s : groupQuery.getValue(groupQuery.vs_id)) {
|
||||
vsIds.add(Long.parseLong(s));
|
||||
}
|
||||
return queryByVsIds(vsIds.toArray(new Long[vsIds.size()]));
|
||||
}
|
||||
}).build(IdVersion.class).run();
|
||||
|
||||
return (filteredGroupKeys != null) ? filteredGroupKeys : queryAll(mode).toArray(new IdVersion[0]);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long queryByName(String name) throws Exception {
|
||||
GroupDo g = groupDao.findByName(name, GroupEntity.READSET_IDONLY);
|
||||
|
|
|
@ -1,9 +1,13 @@
|
|||
package com.ctrip.zeus.service.query.impl;
|
||||
|
||||
import com.ctrip.zeus.dal.core.*;
|
||||
import com.ctrip.zeus.restful.filter.FilterSet;
|
||||
import com.ctrip.zeus.restful.filter.QueryExecuter;
|
||||
import com.ctrip.zeus.service.model.SelectionMode;
|
||||
import com.ctrip.zeus.service.model.IdVersion;
|
||||
import com.ctrip.zeus.service.model.VersionUtils;
|
||||
import com.ctrip.zeus.service.query.QueryCommand;
|
||||
import com.ctrip.zeus.service.query.SlbQueryCommand;
|
||||
import com.ctrip.zeus.service.query.SlbCriteriaQuery;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
|
@ -24,6 +28,98 @@ public class DefaultSlbCriteriaQuery implements SlbCriteriaQuery {
|
|||
@Resource
|
||||
private RSlbStatusDao rSlbStatusDao;
|
||||
|
||||
@Override
|
||||
public IdVersion[] queryByCommand(QueryCommand query, final SelectionMode mode) throws Exception {
|
||||
final SlbQueryCommand slbQuery = (SlbQueryCommand) query;
|
||||
final Long[] filteredSlbIds = new QueryExecuter.Builder<Long>()
|
||||
.addFilter(new FilterSet<Long>() {
|
||||
@Override
|
||||
public boolean shouldFilter() throws Exception {
|
||||
return slbQuery.hasValue(slbQuery.id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<Long> filter() throws Exception {
|
||||
Set<Long> result = new HashSet<Long>();
|
||||
for (String s : slbQuery.getValue(slbQuery.id)) {
|
||||
result.add(Long.parseLong(s));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
})
|
||||
.addFilter(new FilterSet<Long>() {
|
||||
@Override
|
||||
public boolean shouldFilter() throws Exception {
|
||||
return slbQuery.hasValue(slbQuery.name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<Long> filter() throws Exception {
|
||||
Set<Long> result = new HashSet<>();
|
||||
for (String s : slbQuery.getValue(slbQuery.name)) {
|
||||
result.add(queryByName(s));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
})
|
||||
.addFilter(new FilterSet<Long>() {
|
||||
@Override
|
||||
public boolean shouldFilter() throws Exception {
|
||||
return slbQuery.hasValue(slbQuery.vs_search_key);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<Long> filter() throws Exception {
|
||||
List<IdVersion> searchKey = new ArrayList<>();
|
||||
for (String s : slbQuery.getValue(slbQuery.vs_search_key)) {
|
||||
searchKey.add(new IdVersion(s));
|
||||
}
|
||||
return queryByVses(searchKey.toArray(new IdVersion[searchKey.size()]));
|
||||
}
|
||||
}).build(Long.class).run();
|
||||
|
||||
IdVersion[] filteredSlbKeys = new QueryExecuter.Builder<IdVersion>()
|
||||
.addFilter(new FilterSet<IdVersion>() {
|
||||
@Override
|
||||
public boolean shouldFilter() throws Exception {
|
||||
return filteredSlbIds != null || slbQuery.hasValue(slbQuery.id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<IdVersion> filter() throws Exception {
|
||||
List<Long> slbIds = new ArrayList<>();
|
||||
if (slbQuery.hasValue(slbQuery.id)) {
|
||||
for (String s : slbQuery.getValue(slbQuery.id)) {
|
||||
slbIds.add(Long.parseLong(s));
|
||||
}
|
||||
}
|
||||
if (filteredSlbIds != null) {
|
||||
for (Long i : filteredSlbIds) {
|
||||
slbIds.add(i);
|
||||
}
|
||||
}
|
||||
return queryByIdsAndMode(slbIds.toArray(new Long[slbIds.size()]), mode);
|
||||
}
|
||||
})
|
||||
.addFilter(new FilterSet<IdVersion>() {
|
||||
@Override
|
||||
public boolean shouldFilter() throws Exception {
|
||||
return slbQuery.hasValue(slbQuery.ip);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<IdVersion> filter() throws Exception {
|
||||
Set<IdVersion> result = new HashSet<>();
|
||||
for (String s : slbQuery.getValue(slbQuery.ip)) {
|
||||
result.addAll(queryBySlbServerIp(s));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}).build(IdVersion.class).run();
|
||||
|
||||
return (filteredSlbKeys != null) ? filteredSlbKeys : queryAll(mode).toArray(new IdVersion[0]);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long queryByName(String name) throws Exception {
|
||||
SlbDo s = slbDao.findByName(name, SlbEntity.READSET_IDONLY);
|
||||
|
@ -47,7 +143,7 @@ public class DefaultSlbCriteriaQuery implements SlbCriteriaQuery {
|
|||
if (d == null) return new IdVersion[0];
|
||||
|
||||
int[] v = VersionUtils.getVersionByMode(mode, d.getOfflineVersion(), d.getOnlineVersion());
|
||||
|
||||
|
||||
IdVersion[] result = new IdVersion[v.length];
|
||||
for (int i = 0; i < result.length && i < v.length; i++) {
|
||||
result[i] = new IdVersion(slbId, v[i]);
|
||||
|
|
|
@ -1,15 +1,18 @@
|
|||
package com.ctrip.zeus.service.query.impl;
|
||||
|
||||
import com.ctrip.zeus.dal.core.*;
|
||||
import com.ctrip.zeus.restful.filter.FilterSet;
|
||||
import com.ctrip.zeus.restful.filter.QueryExecuter;
|
||||
import com.ctrip.zeus.service.model.SelectionMode;
|
||||
import com.ctrip.zeus.service.model.IdVersion;
|
||||
import com.ctrip.zeus.service.model.VersionUtils;
|
||||
import com.ctrip.zeus.service.query.QueryCommand;
|
||||
import com.ctrip.zeus.service.query.VirtualServerCriteriaQuery;
|
||||
import com.ctrip.zeus.service.query.VsQueryCommand;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* Created by zhoumy on 2015/9/11.
|
||||
|
@ -27,6 +30,91 @@ public class DefaultVirtualServerCriteriaQuery implements VirtualServerCriteriaQ
|
|||
@Resource
|
||||
private RVsStatusDao rVsStatusDao;
|
||||
|
||||
@Override
|
||||
public IdVersion[] queryByCommand(QueryCommand query, final SelectionMode mode) throws Exception {
|
||||
final VsQueryCommand vsQuery = (VsQueryCommand) query;
|
||||
final Long[] filteredVsIds = new QueryExecuter.Builder<Long>()
|
||||
.addFilter(new FilterSet<Long>() {
|
||||
@Override
|
||||
public boolean shouldFilter() throws Exception {
|
||||
return vsQuery.hasValue(vsQuery.id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<Long> filter() throws Exception {
|
||||
Set<Long> result = new HashSet<Long>();
|
||||
for (String s : vsQuery.getValue(vsQuery.id)) {
|
||||
result.add(Long.parseLong(s));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
})
|
||||
.addFilter(new FilterSet<Long>() {
|
||||
@Override
|
||||
public boolean shouldFilter() throws Exception {
|
||||
return vsQuery.hasValue(vsQuery.group_search_key);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<Long> filter() throws Exception {
|
||||
List<IdVersion> searchKeys = new ArrayList<>();
|
||||
for (String s : vsQuery.getValue(vsQuery.group_search_key)) {
|
||||
searchKeys.add(new IdVersion(s));
|
||||
}
|
||||
return queryByGroup(searchKeys.toArray(new IdVersion[searchKeys.size()]));
|
||||
}
|
||||
}).build(Long.class).run();
|
||||
|
||||
IdVersion[] filteredVsKeys = new QueryExecuter.Builder<IdVersion>()
|
||||
.addFilter(new FilterSet<IdVersion>() {
|
||||
@Override
|
||||
public boolean shouldFilter() throws Exception {
|
||||
return filteredVsIds != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<IdVersion> filter() throws Exception {
|
||||
Set<Long> vsIds = new HashSet<>();
|
||||
for (Long i : filteredVsIds) {
|
||||
vsIds.add(i);
|
||||
}
|
||||
return queryByIdsAndMode(vsIds.toArray(new Long[vsIds.size()]), mode);
|
||||
}
|
||||
})
|
||||
.addFilter(new FilterSet<IdVersion>() {
|
||||
@Override
|
||||
public boolean shouldFilter() throws Exception {
|
||||
return vsQuery.hasValue(vsQuery.domain);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<IdVersion> filter() throws Exception {
|
||||
Set<IdVersion> result = new HashSet<>();
|
||||
for (String s : vsQuery.getValue(vsQuery.domain)) {
|
||||
result.addAll(queryByDomain(s));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
})
|
||||
.addFilter(new FilterSet<IdVersion>() {
|
||||
@Override
|
||||
public boolean shouldFilter() throws Exception {
|
||||
return vsQuery.hasValue(vsQuery.slb_id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<IdVersion> filter() throws Exception {
|
||||
List<Long> slbIds = new ArrayList();
|
||||
for (String s : vsQuery.getValue(vsQuery.slb_id)) {
|
||||
slbIds.add(Long.parseLong(s));
|
||||
}
|
||||
return queryBySlbIds(slbIds.toArray(new Long[slbIds.size()]));
|
||||
}
|
||||
}).build(IdVersion.class).run();
|
||||
|
||||
return (filteredVsKeys != null) ? filteredVsKeys : queryAll(mode).toArray(new IdVersion[0]);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<Long> queryAll() throws Exception {
|
||||
Set<Long> result = new HashSet<>();
|
||||
|
@ -73,6 +161,22 @@ public class DefaultVirtualServerCriteriaQuery implements VirtualServerCriteriaQ
|
|||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<Long> queryByGroup(IdVersion[] searchKeys) throws Exception {
|
||||
Set<Long> result = new HashSet<>();
|
||||
Map<IdVersion, Long> map = new HashMap();
|
||||
for (IdVersion sk : searchKeys) {
|
||||
map.put(sk, sk.getId());
|
||||
}
|
||||
for (RelGroupVsDo e : rGroupVsDao.findAllByGroups(map.values().toArray(new Long[map.size()]), RGroupVsEntity.READSET_FULL)) {
|
||||
if (result.contains(e.getVsId()))
|
||||
continue;
|
||||
if (map.keySet().contains(new IdVersion(e.getVsId(), e.getGroupVersion())))
|
||||
result.add(e.getVsId());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<IdVersion> queryBySlbId(Long slbId) throws Exception {
|
||||
Set<IdVersion> result = new HashSet<>();
|
||||
|
|
Loading…
Reference in a new issue