/* * 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.stanbol.entityhub.yard.solr.model; import org.apache.stanbol.entityhub.servicesapi.defaults.NamespaceEnum; /** * This class is used to define index types. It is only used to provide an unique ID and an human readable * name for such types. * <p> * This type is necessary, because we assume that indices only support string values. Therefore any java type * needs to be converted to its string representation. This type is used to preserve the type information. * <p> * How types are encoded within the index depends on the actual full text index used. The functionality of * mapping of this index data types to the actual types as supported by the index is provided by the used * {@link FieldMapper} implementation. * <p> * It is suggested to use the XSD Datatypes as id's for instances where suitable. see <a * herf=http://www.w3.org/TR/xmlschema-2/#built-in-datatypes> XSD built in datatypes</a> for more information. * * @author Rupert Westenthaler * */ public final class IndexDataType { /** * The default index type is defined as xsd:string (http://www.w3.org/2001/XMLSchema/string) */ public static final IndexDataType DEFAULT = new IndexDataType(NamespaceEnum.xsd + "string"); /** * Prefix used by this type */ private final String id; /** * Suffix used by this type */ private final String name; public IndexDataType(String id) { this(id, null); } /** * Creates a new index data type, by defining it's id and name. The id MUST NOT be <code>null</code> nor * empty. If the name is <code>null</code>, than the name is generated based on the id by searching the * last index of '#', '/' or ':'. * * @param id * the unique id used for this data type. Values MUST NOT be <code>null</code> nor empty. * @param name * the name for this data type. * */ public IndexDataType(String id, String name) { this.id = id; if (name == null) { String defaultName; if (id.lastIndexOf('#') >= 0) { defaultName = id.substring(id.lastIndexOf('#') + 1); } else if (id.lastIndexOf('/') >= 0) { defaultName = id.substring(id.lastIndexOf('/') + 1); } else if (id.lastIndexOf(':') >= 0) { defaultName = id.substring(id.lastIndexOf(':') + 1); } else { defaultName = id; } // convert first char to lower case this.name = defaultName.substring(0, 1).toLowerCase() + defaultName.substring(1); } else { this.name = name; } } /** * Getter for the prefix * * @return the prefix used by this type or <code>null</code> if this type does not use a prefix. */ public final String getId() { return id; } /** * Getter for the name * * @return the name of this dataType */ public final String getName() { return name; } @Override public int hashCode() { return id.hashCode(); } @Override public boolean equals(Object obj) { return obj instanceof IndexDataType && ((IndexDataType) obj).id.equals(id); } /** * Returns the id of the dataType. Use {@link #getName()} if you need a short variant * * @return the id of the dataType */ @Override public String toString() { return name; } }