package org.ovirt.engine.core.searchbackend;
public class VdcUserConditionFieldAutoCompleter extends BaseConditionFieldAutoCompleter {
public static final String FIRST_NAME = "NAME";
public static final String LAST_NAME = "LASTNAME";
public static final String USER_NAME = "USRNAME";
public static final String DIRECTORY = "DIRECTORY";
public static final String LOGIN = "LOGIN";
public static final String DEPARTMENT = "DEPARTMENT";
public static final String TAG = "TAG";
public static final String POOL = "POOL";
public static final String TYPE = "TYPE";
public enum UserOrGroup {
User,
Group
}
public VdcUserConditionFieldAutoCompleter() {
super();
// Building the basic verbs dictionary.
verbs.add(FIRST_NAME);
verbs.add(LAST_NAME);
verbs.add(USER_NAME);
verbs.add(LOGIN);
verbs.add(DIRECTORY);
verbs.add(DEPARTMENT);
verbs.add(TAG);
verbs.add(POOL);
verbs.add(TYPE);
// Building the auto completion dictionary.
buildCompletions();
// Building the types dictionary.
getTypeDictionary().put(FIRST_NAME, String.class);
getTypeDictionary().put(LAST_NAME, String.class);
getTypeDictionary().put(USER_NAME, String.class);
getTypeDictionary().put(LOGIN, String.class);
getTypeDictionary().put(DIRECTORY, String.class);
getTypeDictionary().put(DEPARTMENT, String.class);
getTypeDictionary().put(TAG, String.class);
getTypeDictionary().put(POOL, String.class);
getTypeDictionary().put(TYPE, UserOrGroup.class);
// building the ColumnName Dict
columnNameDict.put(FIRST_NAME, "name");
columnNameDict.put(LAST_NAME, "surname");
columnNameDict.put(USER_NAME, "username");
columnNameDict.put(LOGIN, "username");
columnNameDict.put(DIRECTORY, "domain");
columnNameDict.put(DEPARTMENT, "department");
columnNameDict.put(TAG, "tag_name");
columnNameDict.put(POOL, "vm_pool_name");
columnNameDict.put(TYPE, "user_group");
// Building the validation dict
buildBasicValidationTable();
}
@Override
public IAutoCompleter getFieldRelationshipAutoCompleter(String fieldName) {
return StringConditionRelationAutoCompleter.INSTANCE;
}
@Override
public String buildConditionSql(
String objName,
String fieldName,
String customizedValue,
String customizedRelation,
String tableName,
boolean caseSensitive) {
customizedValue = SyntaxChecker.escapeUnderScore(customizedValue, customizedRelation);
if (USER_NAME.equals(fieldName) && customizedValue.contains("@")) {
// When the given user name contains the at sign, we need to split it and compare it to two columns in the
// database: the column containing the login name of the user and the column containg the name of the
// directory.
int index = customizedValue.lastIndexOf("@");
String loginValue = customizedValue.substring(0, index) + "'";
String directoryValue = "'" + customizedValue.substring(index + 1);
String loginSql = buildConditionSql(
objName,
LOGIN,
loginValue,
customizedRelation,
tableName,
caseSensitive
);
String directorySql = buildConditionSql(
objName,
DIRECTORY,
directoryValue,
customizedRelation,
tableName,
caseSensitive
);
return "(" + loginSql + " AND " + directorySql + ")";
}
else {
return super.buildConditionSql(
objName,
fieldName,
customizedValue,
customizedRelation,
tableName,
caseSensitive
);
}
}
}