001/*
002 * Licensed under the Apache License, Version 2.0 (the "License");
003 * you may not use this file except in compliance with the License.
004 * You may obtain a copy of the License at
005 *
006 *     http://www.apache.org/licenses/LICENSE-2.0
007 *
008 * Unless required by applicable law or agreed to in writing, software
009 * distributed under the License is distributed on an "AS IS" BASIS,
010 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
011 * See the License for the specific language governing permissions and
012 * limitations under the License.
013 */
014package org.gbif.api.util.validators.identifierschemes;
015
016import java.util.Objects;
017import java.util.regex.Matcher;
018import java.util.regex.Pattern;
019
020public class WikidataValidator implements IdentifierSchemeValidator {
021
022  private static final Pattern WIKIDATA_PATTERN =
023      Pattern.compile("^(?<scheme>(http(?:s)?://)?(www\\.))?(wikidata\\.org/\\w+/\\w+(?::\\w+)?)$");
024
025  @Override
026  public boolean isValid(String value) {
027    if (value == null || value.isEmpty()) {
028      return false;
029    }
030    Matcher matcher = WIKIDATA_PATTERN.matcher(value);
031    return matcher.matches();
032  }
033
034  @Override
035  public String normalize(String value) {
036    Objects.requireNonNull(value, "Identifier value can't be null");
037    String trimmedValue = value.trim();
038    Matcher matcher = WIKIDATA_PATTERN.matcher(trimmedValue);
039    if (matcher.matches()) {
040      return trimmedValue;
041    }
042    throw new IllegalArgumentException(value + " it not a valid Wikidata");
043  }
044}