GalleryLoaderSupport.java

  1. /*
  2.  * #%L
  3.  * *********************************************************************************************************************
  4.  *
  5.  * NorthernWind - lightweight CMS
  6.  * http://northernwind.tidalwave.it - git clone https://bitbucket.org/tidalwave/northernwind-src.git
  7.  * %%
  8.  * Copyright (C) 2011 - 2023 Tidalwave s.a.s. (http://tidalwave.it)
  9.  * %%
  10.  * *********************************************************************************************************************
  11.  *
  12.  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
  13.  * the License. You may obtain a copy of the License at
  14.  *
  15.  *     http://www.apache.org/licenses/LICENSE-2.0
  16.  *
  17.  * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
  18.  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
  19.  * specific language governing permissions and limitations under the License.
  20.  *
  21.  * *********************************************************************************************************************
  22.  *
  23.  *
  24.  * *********************************************************************************************************************
  25.  * #L%
  26.  */
  27. package it.tidalwave.northernwind.frontend.ui.component.gallery.spi.loader;

  28. import javax.annotation.Nonnull;
  29. import org.springframework.beans.factory.BeanFactory;
  30. import org.springframework.beans.factory.NoSuchBeanDefinitionException;
  31. import it.tidalwave.util.Id;
  32. import it.tidalwave.util.Key;
  33. import it.tidalwave.northernwind.core.model.ResourceProperties;
  34. import it.tidalwave.northernwind.frontend.ui.component.gallery.GalleryViewController.GalleryItem;
  35. import it.tidalwave.northernwind.frontend.ui.component.gallery.spi.GalleryLoader;
  36. import it.tidalwave.northernwind.frontend.ui.component.gallery.spi.MediaMetadataProvider;
  37. import lombok.extern.slf4j.Slf4j;

  38. /***********************************************************************************************************************
  39.  *
  40.  * A support implementation for {@link GalleryLoader}, provides a default factory method for creating gallery
  41.  * {@link GalleryItem}s which delegates to a {@link MediaMetadataProvider}.
  42.  *
  43.  * @author  Fabrizio Giudici
  44.  *
  45.  **********************************************************************************************************************/
  46. @Slf4j
  47. public abstract class GalleryLoaderSupport implements GalleryLoader
  48.   {
  49.     private static final Key<String> P_MEDIA_METADATA_PROVIDER = Key.of("mediaMetadataProvider", String.class);

  50.     @Nonnull
  51.     private final BeanFactory beanFactory;

  52.     @Nonnull
  53.     private final MediaMetadataProvider mediaMetadataProvider;

  54.     @Nonnull
  55.     private final ResourceProperties properties;

  56.     /*******************************************************************************************************************
  57.      *
  58.      *
  59.      ******************************************************************************************************************/
  60.     protected GalleryLoaderSupport (@Nonnull final BeanFactory beanFactory,
  61.                                     @Nonnull final ResourceProperties properties)
  62.       {
  63.         this.beanFactory = beanFactory;
  64.         this.properties = properties;
  65.         mediaMetadataProvider = findMediaMetadataProvider();
  66.       }

  67.     /*******************************************************************************************************************
  68.      *
  69.      * Creates a gallery {@link GalleryItem} for the given media id.
  70.      *
  71.      * @param  mediaId   the media id
  72.      * @return           the gallery {@code Item}
  73.      *
  74.      *
  75.      ******************************************************************************************************************/
  76.     @Nonnull
  77.     public GalleryItem createItem (@Nonnull final Id mediaId)
  78.       {
  79.         return new GalleryItem(mediaId, mediaMetadataProvider.getMetadataString(mediaId, "$XMP.dc.title$", properties));
  80.       }

  81.     /*******************************************************************************************************************
  82.      *
  83.      * Finds the {@link MediaMetadataProvider}.
  84.      *
  85.      ******************************************************************************************************************/
  86.     @Nonnull
  87.     private MediaMetadataProvider findMediaMetadataProvider()
  88.       {
  89.         final var metadataProviderName = properties.getProperty(P_MEDIA_METADATA_PROVIDER).orElse("");

  90.         try
  91.           {
  92.             return beanFactory.getBean(metadataProviderName, MediaMetadataProvider.class);
  93.           }
  94.         catch (NoSuchBeanDefinitionException e)
  95.           {
  96.             log.warn("Cannot find bean: {}", metadataProviderName);
  97.             return MediaMetadataProvider.VOID;
  98.           }
  99.       }
  100.   }