Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * #%L
   * *********************************************************************************************************************
   *
   * NorthernWind - lightweight CMS
   * http://northernwind.tidalwave.it - hg clone https://bitbucket.org/tidalwave/northernwind-src
   * %%
   * Copyright (C) 2011 - 2014 Tidalwave s.a.s. (http://tidalwave.it)
   * %%
  * *********************************************************************************************************************
  *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
  * the License. You may obtain a copy of the License at
  *
  *     http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
  * specific language governing permissions and limitations under the License.
  *
  * *********************************************************************************************************************
  *
  * $Id: DefaultResourceProperties.java,v e0a9405f5a40 2014/01/18 15:12:45 fabrizio $
  *
  * *********************************************************************************************************************
  * #L%
  */
 package it.tidalwave.northernwind.core.impl.model;
 
 import  javax.annotation.Nonnull;
 import java.util.Map;
 import  it.tidalwave.util.Id;
 import  it.tidalwave.util.Key;
 import  it.tidalwave.util.NotFoundException;
 import  it.tidalwave.util.spi.AsSupport;
 import lombok.Getter;
The default implementation of ResourceProperties.

Author(s):
Fabrizio Giudici
Version:
$Id: DefaultResourceProperties.java,v e0a9405f5a40 2014/01/18 15:12:45 fabrizio $ /
 
 // FIXME: this is a patched copy, needs public constructor for builder - see NW-180
 @Slf4j @ToString(exclude={"propertyResolver""asSupport"})
 public class DefaultResourceProperties implements ResourceProperties
   {
     @Nonnull @Getter
     private final Id id;
 
     private final Map<Key<?>, ObjectpropertyMap = new HashMap<>();
 
     private final Map<Id, DefaultResourcePropertiesgroupMap = new HashMap<>();
 
     @Nonnull
     private final PropertyResolver propertyResolver;
 
     @Delegate
     private final AsSupport asSupport = new AsSupport(this);

    
/
 
     public DefaultResourceProperties (final @Nonnull ResourceProperties.Builder builder)
       {
         this. = builder.getId();
         this. = builder.getPropertyResolver();
         this..putAll(builder.getValues());
 //        for (final Entry<Key<?>, Object> entry : builder.getValues().entrySet())
 //          {
 //            final String s = entry.getKey().stringValue();
 //            final Object value = entry.getValue();
 //            propertyMap.put(new Key<>(s), value);
 //          }
       }

    
Deep clone constructor. /
 
     public DefaultResourceProperties (final @Nonnull DefaultResourceProperties otherProperties)
       {
         this. = otherProperties.id;
        this. = otherProperties.propertyResolver;
        for (final Entry<Key<?>, Objectentry : otherProperties.propertyMap.entrySet())
          {
            .put(entry.getKey(), entry.getValue()); // FIXME: clone the property
          }
        for (final Entry<Id, DefaultResourcePropertiesentry : otherProperties.groupMap.entrySet())
          {
            final Id groupId = entry.getKey();
            final DefaultResourceProperties propertyGroup = new DefaultResourceProperties(entry.getValue());
            .put(groupIdpropertyGroup);
          }
      }

    
Legacy code for converting from flat-style properties. This is different than passing from() in the Builder, since that approach doesn't support nested groups. /
    public DefaultResourceProperties (final @Nonnull Id id,
                                      final @Nonnull Map<Key<?>, Objectmap,
                                      final @Nonnull PropertyResolver propertyResolver)
      {
        this. = id;
        this. = propertyResolver;
        final Map<Id, Map<Key<?>, Object>> othersMap = new HashMap<>();
        for (final Entry<Key<?>, Objectentry : map.entrySet())
          {
            final String s = entry.getKey().stringValue();
            final Object value = entry.getValue();
            if (!s.contains("."))
              {
                .put(new Key<>(s), value);
              }
            else
              {
                final String[] x = s.split("\\.");
                final Id groupId = new Id(x[0]);
                Map<Key<?>, ObjectotherMap = othersMap.get(groupId);
                if (otherMap == null)
                  {
                    otherMap = new HashMap<>();
                    othersMap.put(groupIdotherMap);
                  }
                otherMap.put(new Key<>(x[1]), value);
              }
          }
        for (final Entry<Id, Map<Key<?>, Object>> entry : othersMap.entrySet())
          {
            .put(entry.getKey(), new DefaultResourceProperties(entry.getKey(), entry.getValue(), propertyResolver));
          }
      }

    
/
    @Override @Nonnull @SuppressWarnings("unchecked")
    public <Type> Type getProperty (@Nonnull Key<Type> key)
      throws NotFoundException, IOException
      {
        final Type value = (Type).get(key);
        return (value != null) ? value : .resolveProperty(key);
      }

    
/
    @Override @Nonnull
    public <Type> Type getProperty (final @Nonnull Key<Type> keyfinal @Nonnull Type defaultValue)
      throws IOException
      {
        try
          {
            return getProperty(key);
          }
        catch (NotFoundException e)
          {
            return defaultValue;
          }
      }

    
/
    @Override @Nonnull
    public int getIntProperty (final @Nonnull Key<Stringkeyfinal int defaultValue)
      throws IOException
      {
        return Integer.parseInt(getProperty(key"" + defaultValue));
      }

    
/
    @Override @Nonnull
    public boolean getBooleanProperty (final @Nonnull Key<Stringkeyfinal boolean defaultValue)
      throws IOException
      {
        return Boolean.parseBoolean(getProperty(key"" + defaultValue));
      }

    
/
    @Override @Nonnull
    public DateTime getDateTimeProperty (final @Nonnull Collection<Key<String>> keys,
                                         final @Nonnull DateTime defaultValue)
      {
        final DateTimeFormatter isoFormatter = ISODateTimeFormat.dateTime();
        for (final Key<Stringkey : keys)
          {
            try
              {
                return isoFormatter.parseDateTime(getProperty(key));
              }
            catch (NotFoundException e)
              {
              }
            catch (IOException e)
              {
                log.warn(""e);
              }
          }
        return defaultValue;
      }

    
/
    @Override @Nonnull
    public ResourceProperties getGroup (final @Nonnull Id id)
      {
        final DefaultResourceProperties properties = .get(id);
        return properties != null ? properties : new DefaultResourceProperties(this);
//                                  : new DefaultResourceProperties(new Builder().withId(id).withPropertyResolver(propertyResolver));
      }

    
/
    @Override @Nonnull
    public Collection<Key<?>> getKeys()
      {
        return new CopyOnWriteArrayList<>(.keySet());
      }

    
/
    @Override @Nonnull
    public Collection<Id> getGroupIds()
      {
        return new CopyOnWriteArrayList<>(.keySet());
      }

    
/
    @Override @Nonnull
    public <T> DefaultResourceProperties withProperty (final @Nonnull Key<T> keyfinal @Nonnull T value)
      {
        final DefaultResourceProperties result = new DefaultResourceProperties(this);
        result.propertyMap.put(keyvalue); // FIXME: clone property
        return result;
      }

    
/
    @Override @Nonnull
    public DefaultResourceProperties withoutProperty (final @Nonnull Key<?> key)
      {
        final DefaultResourceProperties result = new DefaultResourceProperties(this);
        result.propertyMap.remove(key);
        return result;
      }

    
/
    @Override @Nonnull
    public DefaultResourceProperties withProperties (final @Nonnull ResourceProperties properties)
      {
        final DefaultResourceProperties result = new DefaultResourceProperties(this);
        result.groupMap.put(properties.getId(), new DefaultResourceProperties((DefaultResourceProperties)properties));
        return result;
      }

    
/
    @Override @Nonnull
    public ResourceProperties merged (@Nonnull ResourceProperties properties)
      {
        final DefaultResourceProperties otherProperties = (DefaultResourceProperties)properties;
        if (!.equals(otherProperties.id))
          {
            throw new IllegalArgumentException("Id mismatch " +  + " vs " + otherProperties.id);
          }
        ResourceProperties result = new DefaultResourceProperties(this);
        for (final Entry<Key<?>, Objectentry : otherProperties.propertyMap.entrySet())
          {
            result = result.withProperty((Key<Object>)entry.getKey(), entry.getValue());
          }
        for (final Entry<Id, DefaultResourcePropertiesentry : otherProperties.groupMap.entrySet())
          {
            final Id groupId = entry.getKey();
            final ResourceProperties propertyGroup = entry.getValue();
            result = (!.containsKey(groupId)) ? result.withProperties(propertyGroup)
                                                      : result.withProperties(.get(groupId).merged(propertyGroup));
          }
        return result;
      }

    
/
    @Override @Nonnull
    public ResourceProperties withId (final @Nonnull Id id)
      {
        return new DefaultResourceProperties(this);
//        return new DefaultResourceProperties(new Builder().withId(id).withPropertyResolver(propertyResolver));
      }
  }
New to GrepCode? Check out our FAQ X