blob: d23b8bbf93d5cdd3da3d68c135e0d8233f1571dd [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.solr.client.solrj.util;
import java.util.Locale;
import java.util.regex.Pattern;
import org.apache.solr.common.SolrException;
/**
* Ensures that provided identifiers align with Solr's recommendations/requirements for choosing
* collection, core, etc identifiers.
*
* Identifiers are allowed to contain underscores, periods, hyphens, and alphanumeric characters.
*/
public class SolrIdentifierValidator {
final static Pattern identifierPattern = Pattern.compile("^(?!\\-)[\\._A-Za-z0-9\\-]+$");
public enum IdentifierType {
SHARD, COLLECTION, CORE, ALIAS
}
public static String validateName(IdentifierType type, String name) {
if (!validateIdentifier(name))
throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, getIdentifierMessage(type, name));
return name;
}
public static String validateShardName(String shardName) {
return validateName(IdentifierType.SHARD, shardName);
}
public static String validateCollectionName(String collectionName) {
return validateName(IdentifierType.COLLECTION, collectionName);
}
public static String validateAliasName(String alias) {
return validateName(IdentifierType.ALIAS, alias);
}
public static String validateCoreName(String coreName) {
return validateName(IdentifierType.CORE, coreName);
}
private static boolean validateIdentifier(String identifier) {
if (identifier == null || ! identifierPattern.matcher(identifier).matches()) {
return false;
}
return true;
}
public static String getIdentifierMessage(IdentifierType identifierType, String name) {
String typeStr = identifierType.toString().toLowerCase(Locale.ROOT);
return "Invalid " + typeStr + ": [" + name + "]. " + typeStr + " names must consist entirely of periods, "
+ "underscores, hyphens, and alphanumerics as well not start with a hyphen";
}
}