001// *************************************************************************************************************************** 002// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file * 003// * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file * 004// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance * 005// * with the License. You may obtain a copy of the License at * 006// * * 007// * http://www.apache.org/licenses/LICENSE-2.0 * 008// * * 009// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an * 010// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the * 011// * specific language governing permissions and limitations under the License. * 012// *************************************************************************************************************************** 013package org.apache.juneau; 014 015import static org.apache.juneau.PropertyConverter.*; 016 017import java.util.*; 018 019/** 020 * Represents possible property types of properties in a {@link PropertyStore}. 021 */ 022@SuppressWarnings({"unchecked","rawtypes"}) 023public enum PropertyType { 024 025 /** String */ 026 STRING("String", "s", STRING_CONVERTER), 027 028 /** Boolean */ 029 BOOLEAN("Boolean", "b", BOOLEAN_CONVERTER), 030 031 /** Integer */ 032 INTEGER("Integer", "i", INTEGER_CONVERTER), 033 034 /** Class */ 035 CLASS("Class", "c", CLASS_CONVERTER), 036 037 /** Object */ 038 OBJECT("Object", "o", OBJECT_CONVERTER), 039 040 /** Set<String> */ 041 SET_STRING("Set<String>", "ss", STRING_CONVERTER), 042 043 /** Set<Integer> */ 044 SET_INTEGER("Set<Integer>", "si", INTEGER_CONVERTER), 045 046 /** Set<Class> */ 047 SET_CLASS("Set<Class>", "sc", CLASS_CONVERTER), 048 049 /** List<String> */ 050 LIST_STRING("List<String>", "ls", STRING_CONVERTER), 051 052 /** List<Integer> */ 053 LIST_INTEGER("List<Integer>", "li", INTEGER_CONVERTER), 054 055 /** List<Class> */ 056 LIST_CLASS("List<Class>", "lc", CLASS_CONVERTER), 057 058 /** List<Object> */ 059 LIST_OBJECT("List<Object>", "lo", OBJECT_CONVERTER), 060 061 /** TreeMap<String,String> */ 062 SORTED_MAP_STRING("Map<String,String>", "sms", STRING_CONVERTER), 063 064 /** TreeMap<String,Integer> */ 065 SORTED_MAP_INTEGER("Map<String,Integer>", "smi", INTEGER_CONVERTER), 066 067 /** TreeMap<String,Class> */ 068 SORTED_MAP_CLASS("Map<String,Class>", "smc", CLASS_CONVERTER), 069 070 /** TreeMap<String,Object> */ 071 SORTED_MAP_OBJECT("Map<String,Object>", "smo", OBJECT_CONVERTER), 072 073 /** LinkedHashMap<String,String> */ 074 ORDERED_MAP_STRING("Map<String,String>", "oms", STRING_CONVERTER), 075 076 /** LinkedHashMap<String,Integer> */ 077 ORDERED_MAP_INTEGER("Map<String,Integer>", "omi", INTEGER_CONVERTER), 078 079 /** LinkedHashMap<String,Class> */ 080 ORDERED_MAP_CLASS("Map<String,Class>", "omc", CLASS_CONVERTER), 081 082 /** LinkedHashMap<String,Object> */ 083 ORDERED_MAP_OBJECT("Map<String,Object>", "omo", OBJECT_CONVERTER); 084 085 private final String type, suffix; 086 final PropertyConverter<?> converter; 087 088 private PropertyType(String type, String suffix, PropertyConverter<?> converter) { 089 this.type = type; 090 this.suffix = suffix; 091 this.converter = converter; 092 } 093 094 @Override /* Override */ 095 public String toString() { 096 return type; 097 } 098 099 String getSuffix() { 100 return suffix; 101 } 102 103 /** 104 * Returns the comparator to use for entries in this property. 105 * 106 * @return The comparator to use for entries in this property, or <jk>null</jk> to use the default comparator. 107 */ 108 Comparator<? super Object> comparator() { 109 switch(this) { 110 case SET_CLASS: return CLASS_COMPARATOR; 111 default: return null; 112 } 113 } 114 115 private static final Comparator CLASS_COMPARATOR = new Comparator<Class<?>>() { 116 @Override /* Comparator */ 117 public int compare(Class<?> object1, Class<?> object2) { 118 return object1.getName().compareTo(object2.getName()); 119 } 120 }; 121}