blob: 71a2ef7151965b750358b104c640d75bfba1516e [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.syncope.common.lib.attr;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.syncope.common.lib.AbstractJDBCConf;
public class JDBCAttrRepoConf extends AbstractJDBCConf implements AttrRepoConf {
private static final long serialVersionUID = -4474060002361453868L;
public enum CaseCanonicalizationMode {
LOWER,
UPPER,
NONE;
}
public enum QueryType {
AND,
OR
}
/**
* Designed to work against a table where there is a mapping of one row to one user.
*/
private boolean singleRow = true;
/**
* If the SQL should only be run if all attributes listed in the mappings exist in the query.
*/
private boolean requireAllAttributes = true;
/**
* When constructing the final person object from the attribute repository,
* indicate how the username should be canonicalized.
*/
private CaseCanonicalizationMode caseCanonicalization = CaseCanonicalizationMode.NONE;
/**
* Indicates how multiple attributes in a query should be concatenated together.
*/
private QueryType queryType = QueryType.AND;
/**
* Used only when there is a mapping of many rows to one user.
* This is done using a key-value structure where the key is the
* name of the "attribute name" column the value is the name of the "attribute value" column.
*/
private final Map<String, String> columnMappings = new HashMap<>(0);
/**
* Username attribute(s) to use when running the SQL query.
*/
private final List<String> username = new ArrayList<>(0);
/**
* Map of attributes to fetch from the database.
* Attributes are defined using a key-value structure
* where CAS allows the attribute name/key to be renamed virtually
* to a different attribute. The key is the attribute fetched
* from the data source and the value is the attribute name CAS should
* use for virtual renames.
*/
private final Map<String, String> attributes = new HashMap<>(0);
/**
* Collection of attributes, used to build the SQL query, that should go through
* a case canonicalization process defined as {@code key->value}.
*/
private final List<String> caseInsensitiveQueryAttributes = new ArrayList<>(0);
/**
* Define a {@code Map} of query attribute names to data-layer attribute names to use when building the query.
* The key is always the name of the query attribute that is defined by CAS and passed internally,
* and the value is the database column that should map.
*/
private final Map<String, String> queryAttributes = new HashMap<>(0);
public boolean isSingleRow() {
return singleRow;
}
public void setSingleRow(final boolean singleRow) {
this.singleRow = singleRow;
}
public boolean isRequireAllAttributes() {
return requireAllAttributes;
}
public void setRequireAllAttributes(final boolean requireAllAttributes) {
this.requireAllAttributes = requireAllAttributes;
}
public CaseCanonicalizationMode getCaseCanonicalization() {
return caseCanonicalization;
}
public void setCaseCanonicalization(final CaseCanonicalizationMode caseCanonicalization) {
this.caseCanonicalization = caseCanonicalization;
}
public QueryType getQueryType() {
return queryType;
}
public void setQueryType(final QueryType queryType) {
this.queryType = queryType;
}
public Map<String, String> getColumnMappings() {
return columnMappings;
}
public List<String> getUsername() {
return username;
}
public Map<String, String> getAttributes() {
return attributes;
}
public List<String> getCaseInsensitiveQueryAttributes() {
return caseInsensitiveQueryAttributes;
}
public Map<String, String> getQueryAttributes() {
return queryAttributes;
}
@Override
public Map<String, Object> map(final Mapper mapper) {
return mapper.map(this);
}
}