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.Locale; 022import java.util.Map; 023 024import org.ametys.core.user.UserIdentity; 025import org.ametys.plugins.repository.AmetysRepositoryException; 026import org.ametys.plugins.repository.TraversableAmetysObject; 027import org.ametys.plugins.repository.metadata.BinaryMetadata; 028import org.ametys.plugins.repository.metadata.CompositeMetadata; 029import org.ametys.plugins.repository.metadata.ModifiableCompositeMetadata; 030import org.ametys.plugins.repository.metadata.MultilingualString; 031import org.ametys.plugins.repository.metadata.RichText; 032import org.ametys.plugins.repository.metadata.UnknownMetadataException; 033 034/** 035 * Implementation of {@link CompositeMetadata} containing no metadata.<br> 036 * <ul> 037 * <li> getMetadataNames returns an empty array 038 * <li> getXXX(name) and getXXXArray(name) return null (or 0) 039 * <li> getXXX(name, defaultValue) and getXXXArray(name, defaultValues) return default values. 040 * </ul> 041 */ 042public class StaticCompositeMetadata implements CompositeMetadata 043{ 044 private Map<String, Object> _metadata; 045 046 /** 047 * Constructor 048 */ 049 public StaticCompositeMetadata() 050 { 051 _metadata = new HashMap<>(); 052 } 053 054 /** 055 * Constructor 056 * @param metadata the composite metadata 057 */ 058 public StaticCompositeMetadata(Map<String, Object> metadata) 059 { 060 _metadata = metadata; 061 } 062 063 @Override 064 public BinaryMetadata getBinaryMetadata(String metadataName) throws UnknownMetadataException, AmetysRepositoryException 065 { 066 if (_metadata.containsKey(metadataName)) 067 { 068 return (BinaryMetadata) _metadata.get(metadataName); 069 } 070 return null; 071 } 072 073 @Override 074 public boolean getBoolean(String metadataName) throws UnknownMetadataException, AmetysRepositoryException 075 { 076 if (_metadata.containsKey(metadataName)) 077 { 078 return (Boolean) _metadata.get(metadataName); 079 } 080 081 return false; 082 } 083 084 @Override 085 public boolean getBoolean(String metadataName, boolean defaultValue) throws AmetysRepositoryException 086 { 087 if (_metadata.containsKey(metadataName)) 088 { 089 return (Boolean) _metadata.get(metadataName); 090 } 091 092 return defaultValue; 093 } 094 095 @Override 096 public boolean[] getBooleanArray(String metadataName) throws UnknownMetadataException, AmetysRepositoryException 097 { 098 if (_metadata.containsKey(metadataName)) 099 { 100 return (boolean[]) _metadata.get(metadataName); 101 } 102 103 return null; 104 } 105 106 @Override 107 public boolean[] getBooleanArray(String metadataName, boolean[] defaultValues) throws AmetysRepositoryException 108 { 109 return defaultValues; 110 } 111 112 @Override 113 public CompositeMetadata getCompositeMetadata(String metadataName) throws UnknownMetadataException, AmetysRepositoryException 114 { 115 return null; 116 } 117 118 @Override 119 public Date getDate(String metadataName) throws UnknownMetadataException, AmetysRepositoryException 120 { 121 if (_metadata.containsKey(metadataName)) 122 { 123 return (Date) _metadata.get(metadataName); 124 } 125 126 return null; 127 } 128 129 @Override 130 public Date getDate(String metadataName, Date defaultValue) throws AmetysRepositoryException 131 { 132 if (_metadata.containsKey(metadataName)) 133 { 134 return (Date) _metadata.get(metadataName); 135 } 136 137 return defaultValue; 138 } 139 140 @Override 141 public Date[] getDateArray(String metadataName) throws UnknownMetadataException, AmetysRepositoryException 142 { 143 if (_metadata.containsKey(metadataName)) 144 { 145 return (Date[]) _metadata.get(metadataName); 146 } 147 148 return null; 149 } 150 151 @Override 152 public Date[] getDateArray(String metadataName, Date[] defaultValues) throws AmetysRepositoryException 153 { 154 if (_metadata.containsKey(metadataName)) 155 { 156 return (Date[]) _metadata.get(metadataName); 157 } 158 159 return defaultValues; 160 } 161 162 @Override 163 public double getDouble(String metadataName) throws UnknownMetadataException, AmetysRepositoryException 164 { 165 if (_metadata.containsKey(metadataName)) 166 { 167 return (Double) _metadata.get(metadataName); 168 } 169 170 return 0; 171 } 172 173 @Override 174 public double getDouble(String metadataName, double defaultValue) throws AmetysRepositoryException 175 { 176 if (_metadata.containsKey(metadataName)) 177 { 178 return (Double) _metadata.get(metadataName); 179 } 180 181 return defaultValue; 182 } 183 184 @Override 185 public double[] getDoubleArray(String metadataName) throws UnknownMetadataException, AmetysRepositoryException 186 { 187 return null; 188 } 189 190 @Override 191 public double[] getDoubleArray(String metadataName, double[] defaultValues) throws AmetysRepositoryException 192 { 193 return defaultValues; 194 } 195 196 @Override 197 public long getLong(String metadataName) throws UnknownMetadataException, AmetysRepositoryException 198 { 199 if (_metadata.containsKey(metadataName)) 200 { 201 return (Long) _metadata.get(metadataName); 202 } 203 204 return 0; 205 } 206 207 @Override 208 public long getLong(String metadataName, long defaultValue) throws AmetysRepositoryException 209 { 210 if (_metadata.containsKey(metadataName)) 211 { 212 return (Long) _metadata.get(metadataName); 213 } 214 215 return defaultValue; 216 } 217 218 @Override 219 public long[] getLongArray(String metadataName) throws UnknownMetadataException, AmetysRepositoryException 220 { 221 return null; 222 } 223 224 @Override 225 public long[] getLongArray(String metadataName, long[] defaultValues) throws AmetysRepositoryException 226 { 227 return defaultValues; 228 } 229 230 @Override 231 public String[] getMetadataNames() throws AmetysRepositoryException 232 { 233 return _metadata.keySet().toArray(new String[_metadata.size()]); 234 } 235 236 @Override 237 public RichText getRichText(String metadataName) throws UnknownMetadataException, AmetysRepositoryException 238 { 239 return null; 240 } 241 242 @Override 243 public String getString(String metadataName) throws UnknownMetadataException, AmetysRepositoryException 244 { 245 if (_metadata.containsKey(metadataName)) 246 { 247 return String.valueOf(_metadata.get(metadataName)); 248 } 249 return null; 250 } 251 252 @Override 253 public String getString(String metadataName, String defaultValue) throws AmetysRepositoryException 254 { 255 if (_metadata.containsKey(metadataName)) 256 { 257 return String.valueOf(_metadata.get(metadataName)); 258 } 259 return defaultValue; 260 } 261 262 @Override 263 public String[] getStringArray(String metadataName) throws UnknownMetadataException, AmetysRepositoryException 264 { 265 if (_metadata.containsKey(metadataName)) 266 { 267 if (isMultiple(metadataName)) 268 { 269 return (String[]) _metadata.get(metadataName); 270 } 271 else 272 { 273 return new String[] {String.valueOf(_metadata.get(metadataName))}; 274 } 275 } 276 return null; 277 } 278 279 @Override 280 public String[] getStringArray(String metadataName, String[] defaultValues) throws AmetysRepositoryException 281 { 282 if (_metadata.containsKey(metadataName)) 283 { 284 return (String[]) _metadata.get(metadataName); 285 } 286 return defaultValues; 287 } 288 289 @Override 290 public String getLocalizedString(String metadataName, Locale locale) throws UnknownMetadataException, AmetysRepositoryException 291 { 292 return getLocalizedString(metadataName, locale, null); 293 } 294 295 @Override 296 public String getLocalizedString(String metadataName, Locale locale, String defaultValue) throws AmetysRepositoryException 297 { 298 if (_metadata.containsKey(metadataName)) 299 { 300 MultilingualString multilingualString = (MultilingualString) _metadata.get(metadataName); 301 if (multilingualString.hasLocale(locale)) 302 { 303 return multilingualString.getValue(locale); 304 } 305 } 306 return defaultValue; 307 } 308 309 public MultilingualString getMultilingualString(String metadataName) throws AmetysRepositoryException 310 { 311 if (_metadata.containsKey(metadataName)) 312 { 313 return (MultilingualString) _metadata.get(metadataName); 314 } 315 return null; 316 } 317 318 @Override 319 public MetadataType getType(String metadataName) throws UnknownMetadataException, AmetysRepositoryException 320 { 321 if (!_metadata.containsKey(metadataName)) 322 { 323 return null; 324 } 325 326 Object value = _metadata.get(metadataName); 327 if (value instanceof String) 328 { 329 return MetadataType.STRING; 330 } 331 else if (value instanceof Long || value instanceof Integer) 332 { 333 return MetadataType.LONG; 334 } 335 else if (value instanceof Double) 336 { 337 return MetadataType.DOUBLE; 338 } 339 else if (value instanceof Date) 340 { 341 return MetadataType.DATE; 342 } 343 else if (value instanceof Boolean) 344 { 345 return MetadataType.BOOLEAN; 346 } 347 else if (value instanceof BinaryMetadata) 348 { 349 return MetadataType.BINARY; 350 } 351 else if (value instanceof MultilingualString) 352 { 353 return MetadataType.MULTILINGUAL_STRING; 354 } 355 356 return null; 357 } 358 359 @Override 360 public boolean hasMetadata(String metadataName) 361 { 362 return _metadata.containsKey(metadataName); 363 } 364 365 @Override 366 public boolean isMultiple(String metadataName) throws UnknownMetadataException, AmetysRepositoryException 367 { 368 return false; 369 } 370 371 @Override 372 public void copyTo(ModifiableCompositeMetadata metadata) throws AmetysRepositoryException 373 { 374 throw new UnsupportedOperationException("copyTo is not supported for a StaticCompositeMetadata"); 375 } 376 377 @Override 378 public UserIdentity getUser(String metadataName) throws AmetysRepositoryException 379 { 380 if (_metadata.containsKey(metadataName)) 381 { 382 return (UserIdentity) _metadata.get(metadataName); 383 } 384 385 return null; 386 } 387 388 @Override 389 public UserIdentity getUser(String metadataName, UserIdentity defaultValue) throws AmetysRepositoryException 390 { 391 if (_metadata.containsKey(metadataName)) 392 { 393 return (UserIdentity) _metadata.get(metadataName); 394 } 395 396 return defaultValue; 397 } 398 399 @Override 400 public UserIdentity[] getUserArray(String metadataName) throws AmetysRepositoryException 401 { 402 return null; 403 } 404 405 @Override 406 public UserIdentity[] getUserArray(String metadataName, UserIdentity[] defaultValues) throws AmetysRepositoryException 407 { 408 return defaultValues; 409 } 410 411 @Override 412 public TraversableAmetysObject getObjectCollection(String metadataName) throws AmetysRepositoryException 413 { 414 throw new UnsupportedOperationException("Object collection is not supported on a static composite metadata"); 415 } 416}