001/* 002 * Copyright 2016 Anyware Services 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 017package org.ametys.plugins.userdirectory.page; 018 019import java.util.Date; 020import java.util.HashMap; 021import java.util.Map; 022 023import org.ametys.core.user.UserIdentity; 024import org.ametys.plugins.repository.AmetysRepositoryException; 025import org.ametys.plugins.repository.TraversableAmetysObject; 026import org.ametys.plugins.repository.metadata.BinaryMetadata; 027import org.ametys.plugins.repository.metadata.CompositeMetadata; 028import org.ametys.plugins.repository.metadata.ModifiableCompositeMetadata; 029import org.ametys.plugins.repository.metadata.RichText; 030import org.ametys.plugins.repository.metadata.UnknownMetadataException; 031 032/** 033 * Implementation of {@link CompositeMetadata} containing no metadata.<br> 034 * <ul> 035 * <li> getMetadataNames returns an empty array 036 * <li> getXXX(name) and getXXXArray(name) return null (or 0) 037 * <li> getXXX(name, defaultValue) and getXXXArray(name, defaultValues) return default values. 038 * </ul> 039 */ 040public class StaticCompositeMetadata implements CompositeMetadata 041{ 042 private Map<String, Object> _metadata; 043 044 /** 045 * Constructor 046 */ 047 public StaticCompositeMetadata() 048 { 049 _metadata = new HashMap<>(); 050 } 051 052 /** 053 * Constructor 054 * @param metadata the composite metadata 055 */ 056 public StaticCompositeMetadata(Map<String, Object> metadata) 057 { 058 _metadata = metadata; 059 } 060 061 @Override 062 public BinaryMetadata getBinaryMetadata(String metadataName) throws UnknownMetadataException, AmetysRepositoryException 063 { 064 if (_metadata.containsKey(metadataName)) 065 { 066 return (BinaryMetadata) _metadata.get(metadataName); 067 } 068 return null; 069 } 070 071 @Override 072 public boolean getBoolean(String metadataName) throws UnknownMetadataException, AmetysRepositoryException 073 { 074 if (_metadata.containsKey(metadataName)) 075 { 076 return (Boolean) _metadata.get(metadataName); 077 } 078 079 return false; 080 } 081 082 @Override 083 public boolean getBoolean(String metadataName, boolean defaultValue) throws AmetysRepositoryException 084 { 085 if (_metadata.containsKey(metadataName)) 086 { 087 return (Boolean) _metadata.get(metadataName); 088 } 089 090 return defaultValue; 091 } 092 093 @Override 094 public boolean[] getBooleanArray(String metadataName) throws UnknownMetadataException, AmetysRepositoryException 095 { 096 if (_metadata.containsKey(metadataName)) 097 { 098 return (boolean[]) _metadata.get(metadataName); 099 } 100 101 return null; 102 } 103 104 @Override 105 public boolean[] getBooleanArray(String metadataName, boolean[] defaultValues) throws AmetysRepositoryException 106 { 107 return defaultValues; 108 } 109 110 @Override 111 public CompositeMetadata getCompositeMetadata(String metadataName) throws UnknownMetadataException, AmetysRepositoryException 112 { 113 return null; 114 } 115 116 @Override 117 public Date getDate(String metadataName) throws UnknownMetadataException, AmetysRepositoryException 118 { 119 if (_metadata.containsKey(metadataName)) 120 { 121 return (Date) _metadata.get(metadataName); 122 } 123 124 return null; 125 } 126 127 @Override 128 public Date getDate(String metadataName, Date defaultValue) throws AmetysRepositoryException 129 { 130 if (_metadata.containsKey(metadataName)) 131 { 132 return (Date) _metadata.get(metadataName); 133 } 134 135 return defaultValue; 136 } 137 138 @Override 139 public Date[] getDateArray(String metadataName) throws UnknownMetadataException, AmetysRepositoryException 140 { 141 if (_metadata.containsKey(metadataName)) 142 { 143 return (Date[]) _metadata.get(metadataName); 144 } 145 146 return null; 147 } 148 149 @Override 150 public Date[] getDateArray(String metadataName, Date[] defaultValues) throws AmetysRepositoryException 151 { 152 if (_metadata.containsKey(metadataName)) 153 { 154 return (Date[]) _metadata.get(metadataName); 155 } 156 157 return defaultValues; 158 } 159 160 @Override 161 public double getDouble(String metadataName) throws UnknownMetadataException, AmetysRepositoryException 162 { 163 if (_metadata.containsKey(metadataName)) 164 { 165 return (Double) _metadata.get(metadataName); 166 } 167 168 return 0; 169 } 170 171 @Override 172 public double getDouble(String metadataName, double defaultValue) throws AmetysRepositoryException 173 { 174 if (_metadata.containsKey(metadataName)) 175 { 176 return (Double) _metadata.get(metadataName); 177 } 178 179 return defaultValue; 180 } 181 182 @Override 183 public double[] getDoubleArray(String metadataName) throws UnknownMetadataException, AmetysRepositoryException 184 { 185 return null; 186 } 187 188 @Override 189 public double[] getDoubleArray(String metadataName, double[] defaultValues) throws AmetysRepositoryException 190 { 191 return defaultValues; 192 } 193 194 @Override 195 public long getLong(String metadataName) throws UnknownMetadataException, AmetysRepositoryException 196 { 197 if (_metadata.containsKey(metadataName)) 198 { 199 return (Long) _metadata.get(metadataName); 200 } 201 202 return 0; 203 } 204 205 @Override 206 public long getLong(String metadataName, long defaultValue) throws AmetysRepositoryException 207 { 208 if (_metadata.containsKey(metadataName)) 209 { 210 return (Long) _metadata.get(metadataName); 211 } 212 213 return defaultValue; 214 } 215 216 @Override 217 public long[] getLongArray(String metadataName) throws UnknownMetadataException, AmetysRepositoryException 218 { 219 return null; 220 } 221 222 @Override 223 public long[] getLongArray(String metadataName, long[] defaultValues) throws AmetysRepositoryException 224 { 225 return defaultValues; 226 } 227 228 @Override 229 public String[] getMetadataNames() throws AmetysRepositoryException 230 { 231 return _metadata.keySet().toArray(new String[_metadata.size()]); 232 } 233 234 @Override 235 public RichText getRichText(String metadataName) throws UnknownMetadataException, AmetysRepositoryException 236 { 237 return null; 238 } 239 240 @Override 241 public String getString(String metadataName) throws UnknownMetadataException, AmetysRepositoryException 242 { 243 if (_metadata.containsKey(metadataName)) 244 { 245 return String.valueOf(_metadata.get(metadataName)); 246 } 247 return null; 248 } 249 250 @Override 251 public String getString(String metadataName, String defaultValue) throws AmetysRepositoryException 252 { 253 if (_metadata.containsKey(metadataName)) 254 { 255 return String.valueOf(_metadata.get(metadataName)); 256 } 257 return defaultValue; 258 } 259 260 @Override 261 public String[] getStringArray(String metadataName) throws UnknownMetadataException, AmetysRepositoryException 262 { 263 if (_metadata.containsKey(metadataName)) 264 { 265 if (isMultiple(metadataName)) 266 { 267 return (String[]) _metadata.get(metadataName); 268 } 269 else 270 { 271 return new String[] {String.valueOf(_metadata.get(metadataName))}; 272 } 273 } 274 return null; 275 } 276 277 @Override 278 public String[] getStringArray(String metadataName, String[] defaultValues) throws AmetysRepositoryException 279 { 280 if (_metadata.containsKey(metadataName)) 281 { 282 return (String[]) _metadata.get(metadataName); 283 } 284 return defaultValues; 285 } 286 287 @Override 288 public MetadataType getType(String metadataName) throws UnknownMetadataException, AmetysRepositoryException 289 { 290 if (!_metadata.containsKey(metadataName)) 291 { 292 return null; 293 } 294 295 Object value = _metadata.get(metadataName); 296 if (value instanceof String) 297 { 298 return MetadataType.STRING; 299 } 300 else if (value instanceof Long || value instanceof Integer) 301 { 302 return MetadataType.LONG; 303 } 304 else if (value instanceof Double) 305 { 306 return MetadataType.DOUBLE; 307 } 308 else if (value instanceof Date) 309 { 310 return MetadataType.DATE; 311 } 312 else if (value instanceof Boolean) 313 { 314 return MetadataType.BOOLEAN; 315 } 316 else if (value instanceof BinaryMetadata) 317 { 318 return MetadataType.BINARY; 319 } 320 321 return null; 322 } 323 324 @Override 325 public boolean hasMetadata(String metadataName) 326 { 327 return _metadata.containsKey(metadataName); 328 } 329 330 @Override 331 public boolean isMultiple(String metadataName) throws UnknownMetadataException, AmetysRepositoryException 332 { 333 return false; 334 } 335 336 @Override 337 public void copyTo(ModifiableCompositeMetadata metadata) throws AmetysRepositoryException 338 { 339 throw new UnsupportedOperationException("copyTo is not supported for a StaticCompositeMetadata"); 340 } 341 342 @Override 343 public UserIdentity getUser(String metadataName) throws AmetysRepositoryException 344 { 345 if (_metadata.containsKey(metadataName)) 346 { 347 return (UserIdentity) _metadata.get(metadataName); 348 } 349 350 return null; 351 } 352 353 @Override 354 public UserIdentity getUser(String metadataName, UserIdentity defaultValue) throws AmetysRepositoryException 355 { 356 if (_metadata.containsKey(metadataName)) 357 { 358 return (UserIdentity) _metadata.get(metadataName); 359 } 360 361 return defaultValue; 362 } 363 364 @Override 365 public UserIdentity[] getUserArray(String metadataName) throws AmetysRepositoryException 366 { 367 return null; 368 } 369 370 @Override 371 public UserIdentity[] getUserArray(String metadataName, UserIdentity[] defaultValues) throws AmetysRepositoryException 372 { 373 return defaultValues; 374 } 375 376 @Override 377 public TraversableAmetysObject getObjectCollection(String metadataName) throws AmetysRepositoryException 378 { 379 throw new UnsupportedOperationException("Object collection is not supported on a static composite metadata"); 380 } 381}