package org.ovirt.engine.core.searchbackend;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.ovirt.engine.core.common.utils.CommonConstants;
public final class SearchObjects {
// objects
public static final String VDS_OBJ_NAME = "HOST";
public static final String VDS_PLU_OBJ_NAME = "HOSTS";
public static final String VM_OBJ_NAME = "VM";
public static final String VM_PLU_OBJ_NAME = "VMS";
public static final String AUDIT_OBJ_NAME = "EVENT";
public static final String AUDIT_PLU_OBJ_NAME = "EVENTS";
public static final String AD_USER_OBJ_NAME = "ADUSER";
public static final String AD_USER_PLU_OBJ_NAME = "ADUSERS";
public static final String AD_GROUP_OBJ_NAME = "ADGROUP";
public static final String AD_GROUP_PLU_OBJ_NAME = "ADGROUPS";
public static final String TEMPLATE_OBJ_NAME = "TEMPLATE";
public static final String TEMPLATE_PLU_OBJ_NAME = "TEMPLATES";
public static final String VDC_USER_OBJ_NAME = "USER";
public static final String VDC_USER_PLU_OBJ_NAME = "USERS";
public static final String VDC_GROUP_OBJ_NAME = "GROUP";
public static final String VDC_GROUP_PLU_OBJ_NAME = "GROUPS";
public static final String VDC_POOL_OBJ_NAME = "POOL";
public static final String VDC_POOL_PLU_OBJ_NAME = "POOLS";
public static final String VDC_CLUSTER_OBJ_NAME = "CLUSTER";
public static final String VDC_CLUSTER_PLU_OBJ_NAME = "CLUSTERS";
public static final String VDC_STORAGE_POOL_OBJ_NAME = "DATACENTER";
public static final String VDC_STORAGE_DOMAIN_OBJ_NAME = "STORAGE";
public static final String VDC_STORAGE_DOMAIN_PLU_OBJ_NAME = "STORAGES";
public static final String VDC_STORAGE_DOMAIN_IMAGE_OBJ_NAME = "VMIMAGE";
public static final String DISK_OBJ_NAME = "DISK";
public static final String DISK_PLU_OBJ_NAME = "DISKS";
public static final String GLUSTER_VOLUME_OBJ_NAME = "VOLUME";
public static final String GLUSTER_VOLUME_PLU_OBJ_NAME = "VOLUMES";
public static final String QUOTA_OBJ_NAME = "QUOTA";
public static final String QUOTA_PLU_OBJ_NAME = "QUOTAS";
public static final String NETWORK_OBJ_NAME = "NETWORK";
public static final String NETWORK_PLU_OBJ_NAME = "NETWORKS";
public static final String VDS_NETWORK_INTERFACE_OBJ_NAME = "NIC";
public static final String VM_NETWORK_INTERFACE_OBJ_NAME = "VNIC";
public static final String NETWORK_CLUSTER_OBJ_NAME = "CLUSTER_NETWORK";
public static final String NETWORK_HOST_OBJ_NAME = "HOST_NETWORK";
public static final String PROVIDER_OBJ_NAME = "PROVIDER";
public static final String PROVIDER_PLU_OBJ_NAME = "PROVIDERS";
public static final String INSTANCE_TYPE_OBJ_NAME = "INSTANCETYPE";
public static final String INSTANCE_TYPE_PLU_OBJ_NAME = "INSTANCETYPES";
public static final String IMAGE_TYPE_OBJ_NAME = "IMAGETYPE";
public static final String IMAGE_TYPE_PLU_OBJ_NAME = "IMAGETYPES";
public static final String SESSION_OBJ_NAME = "SESSION";
public static final String SESSION_PLU_OBJ_NAME = "SESSIONS";
// Special fields that require tag based search
public static final String VDC_USER_ROLE_SEARCH = SearchObjects.VDC_USER_OBJ_NAME + "-ROLE";
//special searches
private static final String ALERT = "EVENTS: severity=alert";
private static final String ERROR = "Events: severity=error";
private static final String HOST_BY_CPU = "Host: sortby cpu_usage desc";
private static final String DATACENTER_BY_NAME = "DataCenter: sortby name";
private static final String VM_BY_STATUS = "Vms: status=Up or status=PoweringUp or status=MigratingTo or status=WaitForLaunch or status=RebootInProgress or status=PoweringDown or status=Paused or status=Unknown sortby cpu_usage desc";
private static final Set<String> SAFE_SEARCH_EXPR = Collections.unmodifiableSet(createSafeExpressionsSet());
private static Set<String> createSafeExpressionsSet() {
List<String> names = Arrays.asList(
VDS_OBJ_NAME,
VDS_PLU_OBJ_NAME,
VM_OBJ_NAME,
VM_PLU_OBJ_NAME,
AUDIT_OBJ_NAME,
AUDIT_PLU_OBJ_NAME,
TEMPLATE_OBJ_NAME,
TEMPLATE_PLU_OBJ_NAME,
VDC_USER_OBJ_NAME,
VDC_USER_PLU_OBJ_NAME,
VDC_GROUP_OBJ_NAME,
VDC_GROUP_PLU_OBJ_NAME,
VDC_POOL_OBJ_NAME,
VDC_POOL_PLU_OBJ_NAME,
VDC_CLUSTER_OBJ_NAME,
VDC_CLUSTER_PLU_OBJ_NAME,
VDC_STORAGE_POOL_OBJ_NAME,
VDC_STORAGE_DOMAIN_OBJ_NAME,
VDC_STORAGE_DOMAIN_PLU_OBJ_NAME,
VDC_STORAGE_DOMAIN_IMAGE_OBJ_NAME,
DISK_OBJ_NAME,
DISK_PLU_OBJ_NAME,
GLUSTER_VOLUME_OBJ_NAME,
GLUSTER_VOLUME_PLU_OBJ_NAME,
QUOTA_OBJ_NAME,
QUOTA_PLU_OBJ_NAME,
NETWORK_OBJ_NAME,
NETWORK_PLU_OBJ_NAME,
PROVIDER_OBJ_NAME,
PROVIDER_PLU_OBJ_NAME,
ALERT,
ERROR,
HOST_BY_CPU,
DATACENTER_BY_NAME,
VM_BY_STATUS,
INSTANCE_TYPE_OBJ_NAME,
INSTANCE_TYPE_PLU_OBJ_NAME,
IMAGE_TYPE_OBJ_NAME,
IMAGE_TYPE_PLU_OBJ_NAME,
SESSION_OBJ_NAME,
SESSION_PLU_OBJ_NAME);
Set<String> result = new HashSet<>();
for (String name : names) {
result.add(getName(name));
}
return result;
}
private static String getName(String name) {
return name.toLowerCase() + CommonConstants.QUERY_RETURN_TYPE_SEPARATOR;
}
/**
* Determines if a search expression is safe.
* @param expr the expression to check.
* @return boolean
*/
public static boolean isSafeExpression(String expr) {
return SAFE_SEARCH_EXPR.contains(expr.toLowerCase());
}
}