/** * Copyright (c) 2014 by the original author or authors. * * This code is free software; you can redistribute it and/or modify it under the terms of the * GNU Lesser General Public License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * The above copyright notice and this permission notice shall be included in all copies or * substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ package ch.sdi.core.impl.data; import java.util.ArrayList; import java.util.List; import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.util.StringUtils; /** * Enumeration of the internally used normalized field names of a person associated with the string * used in key/value pairs. * <p> * The property names are according to http://schema.org/Person. See also comments in * template person.properties * * * @version 1.0 (13.11.2014) * @author Heri */ public enum PersonKey { /** * Description: An additional name for a Person, can be used for a middle name.<p> * Type : Text<p> */ PERSON_ADDITIONALNAME ( "person.additionalName" ), /** * Description: Physical address of the item.<p> * Type : PostalAddress<p> */ PERSON_ADDRESS ( "person.address" ), /** * Description: An organization that this person is affiliated with. For example, a school/university, * a club, or a team.<p> * Type : Organization<p> */ PERSON_AFFILIATION ( "person.affiliation" ), /** * Description: An educational organizations that the person is an alumni of. * Inverse property: alumni.<p> * Type : EducationalOrganization<p> */ PERSON_ALUMNIOF ( "person.alumniOf" ), /** * Description: An award won by this person or for this creative work. Supersedes awards.<p> * Type : Text<p> */ PERSON_AWARD ( "person.award" ), /** * Description: Date of birth.<p> * Type : Date<p> */ PERSON_BIRTHDATE ( "person.birthDate" ), /** * Description: The brand(s) associated with a product or service, or the brand(s) maintained by an * organization or business person.<p> * Type : Organization,Brand<p> */ PERSON_BRAND ( "person.brand" ), /** * Description: A child of the person.<p> * Type : Person<p> */ PERSON_CHILDREN ( "person.children" ), /** * Description: A colleague of the person. Supersedes colleagues.<p> * Type : Person<p> */ PERSON_COLLEAGUE ( "person.colleague" ), /** * Description: A contact point for a person or organization. Supersedes contactPoints.<p> * Type : ContactPoint<p> */ PERSON_CONTACTPOINT ( "person.contactPoint" ), /** * Description: Date of death.<p> * Type : Date<p> */ PERSON_DEATHDATE ( "person.deathDate" ), /** * Description: The Dun & Bradstreet DUNS number for identifying an organization or business person.<p> * Type : Text<p> */ PERSON_DUNS ( "person.duns" ), /** * Description: Email address.<p> * Type : Text<p> */ PERSON_EMAIL ( "person.email" ), /** * Description: Family name. In the U.S., the last name of an Person. This can be used along with * givenName instead of the Name property.<p> * Type : Text<p> */ PERSON_FAMILYNAME ( "person.familyName" ), /** * Description: The fax number.<p> * Type : Text<p> */ PERSON_FAXNUMBER ( "person.faxNumber" ), /** * Description: The most generic uni-directional social relation.<p> * Type : Person<p> */ PERSON_FOLLOWS ( "person.follows" ), /** * Description: Gender of the person.<p> * Type : Text<p> */ PERSON_GENDER ( "person.gender" ), /** * Description: Given name. In the U.S., the first name of a Person. This can be used along with * familyName instead of the Name property.<p> * Type : Text<p> */ PERSON_GIVENNAME ( "person.givenName" ), /** * Description: The Global Location Number (GLN, sometimes also referred to as International Location * Number or ILN) of the respective organization, person, or place. The GLN is a 13-digit * number used to identify parties and physical locations.<p> * Type : Text<p> */ PERSON_GLOBALLOCATIONNUMBER ( "person.globalLocationNumber" ), /** * Description: Points-of-Sales operated by the organization or person.<p> * Type : Place<p> */ PERSON_HASPOS ( "person.hasPOS" ), /** * Description: A contact location for a person's residence.<p> * Type : ContactPoint,Place<p> */ PERSON_HOMELOCATION ( "person.homeLocation" ), /** * Description: An honorific prefix preceding a Person's name such as Dr/Mrs/Mr.<p> * Type : Text<p> */ PERSON_HONORIFICPREFIX ( "person.honorificPrefix" ), /** * Description: An honorific suffix preceding a Person's name such as M.D. /PhD/MSCSW.<p> * Type : Text<p> */ PERSON_HONORIFICSUFFIX ( "person.honorificSuffix" ), /** * Description: A count of a specific user interactions with this item, for example, 20 UserLikes, * 5 UserComments, or 300 UserDownloads. The user interaction type should be one of the * sub types of UserInteraction.<p> * Type : Text<p> */ PERSON_INTERACTIONCOUNT ( "person.interactionCount" ), /** * Description: The International Standard of Industrial Classification of All Economic Activities * (ISIC), Revision 4 code for a particular organization, business person, or place.<p> * Type : Text<p> */ PERSON_ISICV4 ( "person.isicV4" ), /** * Description: The job title of the person (for example, Financial Manager).<p> * Type : Text<p> */ PERSON_JOBTITLE ( "person.jobTitle" ), /** * Description: The most generic bi-directional social/work relation.<p> * Type : Person<p> */ PERSON_KNOWS ( "person.knows" ), /** * Description: A pointer to products or services offered by the organization or person.<p> * Type : Offer<p> */ PERSON_MAKESOFFER ( "person.makesOffer" ), /** * Description: An Organization (or ProgramMembership) to which this Person or Organization belongs. * Inverse property: member.<p> * Type : ProgramMembership,Organization<p> */ PERSON_MEMBEROF ( "person.memberOf" ), /** * Description: The North American Industry Classification System (NAICS) code for a particular * organization or business person.<p> * Type : Text<p> */ PERSON_NAICS ( "person.naics" ), /** * Description: Nationality of the person.<p> * Type : Country<p> */ PERSON_NATIONALITY ( "person.nationality" ), /** * Description: Products owned by the organization or person.<p> * Type : OwnershipInfo,Product<p> */ PERSON_OWNS ( "person.owns" ), /** * Description: A parent of this person. Supersedes parents.<p> * Type : Person<p> */ PERSON_PARENT ( "person.parent" ), /** * Description: Event that this person is a performer or participant in.<p> * Type : Event<p> */ PERSON_PERFORMERIN ( "person.performerIn" ), /** * Description: The most generic familial relation.<p> * Type : Person<p> */ PERSON_RELATEDTO ( "person.relatedTo" ), /** * Description: A pointer to products or services sought by the organization or person (demand).<p> * Type : Demand<p> */ PERSON_SEEKS ( "person.seeks" ), /** * Description: A sibling of the person. Supersedes siblings.<p> * Type : Person<p> */ PERSON_SIBLING ( "person.sibling" ), /** * Description: The person's spouse.<p> * Type : Person<p> */ PERSON_SPOUSE ( "person.spouse" ), /** * Description: The Tax / Fiscal ID of the organization or person, e.g. the TIN in the US or the * CIF/NIF in Spain.<p> * Type : Text<p> */ PERSON_TAXID ( "person.taxID" ), /** * Description: The telephone number.<p> * Type : Text<p> */ PERSON_TELEPHONE ( "person.telephone" ), /** * Description: The Value-added Tax ID of the organization or person.<p> * Type : Text<p> */ PERSON_VATID ( "person.vatID" ), /** * Description: A contact location for a person's place of work.<p> * Type : ContactPoint,Place<p> */ PERSON_WORKLOCATION ( "person.workLocation" ), /** * Description: Organizations that the person works for.<p> * Type : Organization<p> */ PERSON_WORKSFOR ( "person.worksFor" ), ////////////////////////////////////////////////////////////////// // inherited Properties from Thing ////////////////////////////////////////////////////////////////// /** * Description: An additional type for the item, typically used for adding more specific types from * external vocabularies in microdata syntax. This is a relationship between something * and a class that the thing is in. In RDFa syntax, it is better to use the native RDFa * syntax - the 'typeof' attribute - for multiple types. Schema.org tools may have only * weaker understanding of extra types, in particular those defined externally.<p> * Type : URL<p> */ THING_ADDITIONALTYPE ( "thing.additionalType" ), /** * Description: An alias for the item. Here used for username or loginname<p> * Type : Text<p> */ THING_ALTERNATENAME ( "thing.alternateName" ), /** * Description: A short description of the item.<p> * Type : Text<p> */ THING_DESCRIPTION ( "thing.description" ), /** * Description: An image of the item. This can be a URL or a fully described ImageObject.<p> * Type : URL,ImageObject<p> */ THING_IMAGE ( "thing.image" ), /** * Description: The name of the item.<p> * Type : Text<p> */ THING_NAME ( "thing.name" ), /** * Description: Indicates a potential Action, which describes an idealized action in which this thing * would play an 'object' role.<p> * Type : Action<p> */ THING_POTENTIALACTION ( "thing.potentialAction" ), /** * Description: URL of a reference Web page that unambiguously indicates the item's identity. E.g. * the URL of the item's Wikipedia page, Freebase page, or official website.<p> * Type : URL<p> */ THING_SAMEAS ( "thing.sameAs" ), /** * Description: URL of the item.<p> * Type : URL<p> */ THING_URL ( "thing.url" ) ; private String myKeyName; /** * Constructor * * @param aKeyName */ private PersonKey( String aKeyName ) { myKeyName = aKeyName; } /** * @return keyName */ public String getKeyName() { return myKeyName; } public static final String KEY_CUSTOM_KEYS = "sdi.person.customkeys"; private static List<String> myCustomKeys = new ArrayList<String>(); /** * @param aEnv */ public static void initCustomKeys( ConfigurableEnvironment aEnv ) { myCustomKeys = new ArrayList<String>(); String configured = aEnv.getProperty( KEY_CUSTOM_KEYS ); if ( !StringUtils.hasText( configured ) ) { return; } // if !StringUtils.hasText( configured ) String[] keys = configured.trim().split( "," ); for ( String key : keys ) { myCustomKeys.add( key ); } } public static List<String> getKeyNames() { List<String> result = new ArrayList<String>(); for ( PersonKey key : PersonKey.values() ) { result.add( key.getKeyName() ); } result.addAll( myCustomKeys ); return result; } }