Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
Copyright (C) 2006-2014 phloc systems http://www.phloc.com office[at]phloc[dot]com 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.
 
 package com.phloc.json.impl;
 
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
 
 
 
Represents a JSON object having a map of named JSON properties

Author(s):
Boris Gregorcic, philip
 
 @SuppressWarnings ("deprecation")
 public class JSONObject extends AbstractJSONPropertyValue <IJSONObjectimplements IJSONObject
 {
 
   private static final long serialVersionUID = 6726669796398394782L;
 
   private static final Logger LOG = LoggerFactory.getLogger (JSONObject.class);
 
   private final Map <StringIJSONProperty <?>> m_aProperties = new LinkedHashMap <StringIJSONProperty <?>> ();

  
Default Ctor. Handle with care as it by default sets a null value which is most probable be crashing somewhere inside this class, if no data is provided afterwards!
 
   public JSONObject ()
   {
     super ();
   }
 
   public JSONObject (@Nonnull final Iterable <? extends IJSONProperty <?>> aProperties)
   {
     super ();
     if (aProperties == null)
     {
       throw new NullPointerException ("properties"); //$NON-NLS-1$
     }
     for (final IJSONProperty <?> aProperty : aProperties)
      setProperty (aProperty);
  }

  
Override since otherwise JSONObjects might return null for certain constructors

Returns:
this
  public IJSONObject getData ()
  {
    return this;
  }
  public JSONObject setProperty (@Nonnull final IJSONProperty <?> aProperty)
  {
    if (aProperty == null)
    {
      throw new NullPointerException ("property"); //$NON-NLS-1$
    }
    this..put (aProperty.getName (), aProperty.getClone ());
    return this;
  }
  public IJSONProperty <?> getProperty (@Nullable final String sName)
  {
    return this..get (sName);
  }
  public Object getPropertyValueData (@Nullable final String sName)
  {
    final IJSONPropertyValue <?> aValue = getPropertyValueInternal (sName);
    return aValue == null ? null : aValue.getData ();
  }
  public Object getNumericProperty (@Nullable final String sName)
  {
    final IJSONPropertyValue <?> aValue = getPropertyValueInternal (sName);
    if (aValue instanceof AbstractJSONPropertyValueNumeric)
    {
      return aValue.getData ();
    }
    return null;
  }
  public Set <StringgetAllPropertyNames ()
  {
    return ContainerHelper.newOrderedSet (this..keySet ());
  }
  private IJSONPropertyValue <?> getPropertyValueInternal (@Nullable final String sName)
  {
    final IJSONProperty <?> aProperty = this..get (sName);
    return aProperty == null ? null : aProperty.getValue ();
  }
  // we need to differentiate here the case of set boolean values from the case
  // the property is not found or of wrong type (null). Un-boxing is prevented
  // by PMD anyway and the method is annotated as @Nullable
  @SuppressFBWarnings ("NP_BOOLEAN_RETURN_NULL")
  public Boolean getBooleanProperty (@Nullable final String sName)
  {
    final IJSONPropertyValue <?> aValue = getPropertyValueInternal (sName);
    if (aValue instanceof JSONPropertyValueBoolean)
    {
      return ((JSONPropertyValueBooleanaValue).getData ();
    }
    return null;
  }
  public JSONObject setBooleanProperty (@Nonnull final String sNamefinal boolean bDataValue)
  {
    return setProperty (JSONProperty.create (sNamenew JSONPropertyValueBoolean (bDataValue)));
  }
  public JSONObject setBooleanProperty (@Nonnull final String sName, @Nonnull final Boolean aDataValue)
  {
    return setProperty (JSONProperty.create (sNamenew JSONPropertyValueBoolean (aDataValue)));
  }
  public Double getDoubleProperty (@Nullable final String sName)
  {
    final IJSONPropertyValue <?> aValue = getPropertyValueInternal (sName);
    if (aValue instanceof AbstractJSONPropertyValueNumeric)
    {
      return Double.valueOf (((AbstractJSONPropertyValueNumeric <?>) aValue).getData ().doubleValue ());
    }
    return null;
  }
  public JSONObject setDoubleProperty (@Nonnull final String sNamefinal double nDataValue)
  {
    return setProperty (JSONProperty.create (sNamenew JSONPropertyValueDouble (nDataValue)));
  }
  public JSONObject setDoubleProperty (@Nonnull final String sName, @Nonnull final Double aDataValue)
  {
    return setProperty (JSONProperty.create (sNamenew JSONPropertyValueDouble (aDataValue)));
  }
  public Integer getIntegerProperty (@Nullable final String sName)
  {
    final IJSONPropertyValue <?> aValue = getPropertyValueInternal (sName);
    if (aValue instanceof AbstractJSONPropertyValueNumeric)
    {
      return Integer.valueOf (((AbstractJSONPropertyValueNumeric <?>) aValue).getData ().intValue ());
    }
    return null;
  }
  public Integer getIntegerPropertyNonNull (@Nullable final String sName)
  {
    final Integer aValue = getIntegerProperty (sName);
    if (aValue == null)
    {
      throw new NullPointerException ("No Integer value available for property '" + sName + "'!"); //$NON-NLS-1$ //$NON-NLS-2$
    }
    return aValue;
  }
  public JSONObject setIntegerProperty (@Nonnull final String sNamefinal int nDataValue)
  {
    return setProperty (JSONProperty.create (sNamenew JSONPropertyValueInteger (nDataValue)));
  }
  public JSONObject setIntegerProperty (@Nonnull final String sName, @Nonnull final Integer aDataValue)
  {
    return setProperty (JSONProperty.create (sNamenew JSONPropertyValueInteger (aDataValue)));
  }
  public Long getLongProperty (@Nullable final String sName)
  {
    final IJSONPropertyValue <?> aValue = getPropertyValueInternal (sName);
    if (aValue instanceof AbstractJSONPropertyValueNumeric)
    {
      return Long.valueOf (((AbstractJSONPropertyValueNumeric <?>) aValue).getData ().longValue ());
    }
    return null;
  }
  public JSONObject setLongProperty (@Nonnull final String sNamefinal long nDataValue)
  {
    return setProperty (JSONProperty.create (sNamenew JSONPropertyValueLong (nDataValue)));
  }
  public JSONObject setLongProperty (@Nonnull final String sName, @Nonnull final Long aDataValue)
  {
    return setProperty (JSONProperty.create (sNamenew JSONPropertyValueLong (aDataValue)));
  }
  public String getKeywordProperty (@Nullable final String sName)
  {
    final IJSONPropertyValue <?> aValue = getPropertyValueInternal (sName);
    if (aValue instanceof JSONPropertyValueKeyword)
    {
      return ((JSONPropertyValueKeywordaValue).getData ();
    }
    return null;
  }
  public JSONObject setKeywordProperty (@Nonnull final String sName, @Nonnull final String sDataValue)
  {
    return setProperty (JSONProperty.create (sNamenew JSONPropertyValueKeyword (sDataValue)));
  }
  public JSONObject setFunctionProperty (@Nonnull final String sName,
                                         @Nonnull final String sBody,
                                         @Nullable final String... aParams)
  {
    return setProperty (JSONProperty.create (sNamenew JSONPropertyValueFunction (sBodyaParams)));
  }
  public JSONObject setFunctionPrebuildProperty (@Nonnull final String sName, @Nonnull final String sFunctionCode)
  {
    return setProperty (JSONProperty.create (sNamenew JSONPropertyValueFunctionPrebuild (sFunctionCode)));
  }
  @SuppressWarnings ("unchecked")
  public <I> List <I> getListProperty (@Nullable final String sName)
  {
    final IJSONPropertyValue <?> aValue = getPropertyValueInternal (sName);
    if (aValue instanceof IJSONPropertyValueList <?>)
    {
      return (List <I>) ((IJSONPropertyValueList <?>) aValue).getDataValues ();
    }
    return null;
  }
  public JSONObject setListProperty (@Nonnull final String sName, @Nonnull final IJSONPropertyValueList <?> aList)
  {
    return setProperty (JSONProperty.create (sNameaList));
  }
  public IJSONObject getObjectProperty (@Nullable final String sName)
  {
    final IJSONPropertyValue <?> aValue = getPropertyValueInternal (sName);
    if (aValue instanceof IJSONObject)
    {
      return (IJSONObjectaValue;
    }
    if (aValue instanceof JSONPropertyValueJSONObject)
    {
      return ((JSONPropertyValueJSONObjectaValue).getData ();
    }
    return null;
  }
  public JSONObject setObjectProperty (@Nonnull final String sName, @Nonnull final IJSONObject aObject)
  {
    return setProperty (JSONProperty.create (sNameaObject));
  }
  public String getStringProperty (@Nullable final String sName)
  {
    final IJSONPropertyValue <?> aValue = getPropertyValueInternal (sName);
    if (aValue instanceof JSONPropertyValueString)
    {
      return ((JSONPropertyValueStringaValue).getData ();
    }
    return null;
  }
  public String getStringPropertyNonEmpty (@Nonnull @Nonempty final String sName)
  {
    if (StringHelper.hasNoText (sName))
    {
      throw new IllegalArgumentException ("sName must not be null or empty!"); //$NON-NLS-1$
    }
    final String sValue = getStringProperty (sName);
    if (StringHelper.hasNoText (sValue))
    {
      throw new IllegalArgumentException ("Value for property '" + sName + "' must not be empty or null!"); //$NON-NLS-1$ //$NON-NLS-2$
    }
    return sValue;
  }
  public JSONObject setStringProperty (@Nonnull final String sName, @Nonnull final String sDataValue)
  {
    return setProperty (JSONProperty.create (sNamenew JSONPropertyValueString (sDataValue)));
  }
  public IJSONObject setStringProperties (@Nonnull final Map <StringStringaMap)
  {
    for (final Map.Entry <StringStringaEntry : aMap.entrySet ())
    {
      setStringProperty (aEntry.getKey (), aEntry.getValue ());
    }
    return this;
  }
  public BigInteger getBigIntegerProperty (@Nullable final String sName)
  {
    final IJSONPropertyValue <?> aValue = getPropertyValueInternal (sName);
    if (aValue instanceof AbstractJSONPropertyValueNumeric)
    {
      return BigInteger.valueOf (((AbstractJSONPropertyValueNumeric <?>) aValue).getData ().longValue ());
    }
    return null;
  }
  public JSONObject setBigIntegerProperty (@Nonnull final String sName, @Nonnull final BigInteger aDataValue)
  {
    return setProperty (JSONProperty.create (sNamenew JSONPropertyValueBigInteger (aDataValue)));
  }
  public BigDecimal getBigDecimalProperty (@Nullable final String sName)
  {
    final IJSONPropertyValue <?> aValue = getPropertyValueInternal (sName);
    if (aValue instanceof AbstractJSONPropertyValueNumeric)
    {
      return BigDecimal.valueOf (((AbstractJSONPropertyValueNumeric <?>) aValue).getData ().doubleValue ());
    }
    return null;
  }
  public JSONObject setBigDecimalProperty (@Nonnull final String sName, @Nonnull final BigDecimal aDataValue)
  {
    return setProperty (JSONProperty.create (sNamenew JSONPropertyValueBigDecimal (aDataValue)));
  }
  public JSONObject setProperty (@Nonnull final String sName, @Nullable final Object aValue)
  {
    // Default: no type converter
    return setProperty (sNameaValuefalse);
  }
  public JSONObject setProperty (@Nonnull final String sName,
                                 @Nullable final Object aValue,
                                 final boolean bUseTypeConverter)
  {
    if (aValue == null)
    {
      removeProperty (sName);
      return this;
    }
    if (aValue instanceof IJSONObject)
    {
      return setObjectProperty (sName, (IJSONObjectaValue);
    }
    if (aValue instanceof IJSONPropertyValue <?>)
    {
      return setProperty (JSONProperty.create (sName, (IJSONPropertyValue <?>) aValue));
    }
    if (aValue instanceof Boolean)
    {
      return setBooleanProperty (sName, (BooleanaValue);
    }
    if (aValue instanceof BigInteger)
    {
      return setBigIntegerProperty (sName, (BigIntegeraValue);
    }
    if (aValue instanceof BigDecimal)
    {
      return setBigDecimalProperty (sName, (BigDecimalaValue);
    }
    if (aValue instanceof Double)
    {
      return setDoubleProperty (sName, (DoubleaValue);
    }
    if (aValue instanceof Integer)
    {
      return setIntegerProperty (sName, (IntegeraValue);
    }
    if (aValue instanceof Long)
    {
      return setLongProperty (sName, (LongaValue);
    }
    if (aValue instanceof String)
    {
      return setStringProperty (sName, (StringaValue);
    }
    // Unknown type -> use type converter?
    String sValue;
    if (bUseTypeConverter)
    {
      sValue = TypeConverter.convertIfNecessary (aValueString.class);
    }
    else
    {
      .warn ("Setting property of type " + //$NON-NLS-1$
                aValue.getClass ().getName () +
                " as String without TypeConverter!"); //$NON-NLS-1$
      sValue = String.valueOf (aValue);
    }
    return setStringProperty (sNamesValue);
  }
  public List <? extends IJSONPropertyValue <?>> getListValues (@Nullable final String sName)
  {
    final IJSONPropertyValue <?> aValue = getPropertyValueInternal (sName);
    if (aValue instanceof IJSONPropertyValueList <?>)
    {
      return ((IJSONPropertyValueList <?>) aValue).getValues ();
    }
    return null;
  }
  public JSONObject setObjectListProperty (@Nonnull final String sName,
                                           @Nonnull final Iterable <? extends IJSONObjectaObjectList)
  {
    for (final IJSONObject aObject : aObjectList)
    {
      aList.addValue (aObject);
    }
    return setProperty (JSONProperty.create (sNameaList));
  }
  public List <IJSONObjectgetObjectListProperty (@Nullable final String sName)
  {
    final List <IJSONObjectaReturn = new ArrayList <IJSONObject> ();
    final List <?> aList = getListProperty (sName);
    if (aList != null)
    {
      for (final Object aValue : aList)
      {
        if (aValue instanceof IJSONObject)
        {
          aReturn.add ((IJSONObjectaValue);
        }
      }
    }
    return aReturn;
  }
  public JSONObject setStringListProperty (@Nonnull final String sName, @Nonnull final Iterable <StringaStringList)
  {
    for (final String sValue : aStringList)
    {
      aList.addValue (new JSONPropertyValueString (sValue));
    }
    return setProperty (JSONProperty.create (sNameaList));
  }
  public JSONObject setMixedListProperty (@Nonnull final String sName, @Nonnull final Iterable <?> aValues)
  {
    final IJSONPropertyValueList <IJSONPropertyValue <?>> aList = new JSONPropertyValueList <IJSONPropertyValue <?>> ();
    for (final Object aValue : aValues)
    {
      aList.addValue (JSONUtil.getJSONValue (aValue));
    }
    return setProperty (JSONProperty.create (sNameaList));
  }
  public JSONObject setIntegerListProperty (@Nonnull final String sName, @Nonnull final int [] aIntList)
  {
    for (final int nValue : aIntList)
    {
      aList.addValue (new JSONPropertyValueInteger (nValue));
    }
    return setProperty (JSONProperty.create (sNameaList));
  }
  public JSONObject setIntegerListProperty (@Nonnull final String sName, @Nonnull final List <IntegeraIntegerList)
  {
    for (final Integer nValue : aIntegerList)
    {
      aList.addValue (new JSONPropertyValueInteger (nValue));
    }
    return setProperty (JSONProperty.create (sNameaList));
  }
  public JSONObject setListOfListProperty (@Nonnull final String sName,
                                           @Nonnull final Iterable <? extends Iterable <String>> aListOfList)
  {
    return setListOfStringListProperty (sNameaListOfList);
  }
                                                 @Nonnull final Iterable <? extends Iterable <String>> aListOfList)
  {
    for (final Iterable <StringaRow : aListOfList)
    {
      for (final String aCell : aRow)
      {
        aRowList.addValue (new JSONPropertyValueString (aCell));
      }
      aList.addValue (aRowList);
    }
    return setProperty (JSONProperty.create (sNameaList));
  }
  public void appendJSONString (@Nonnull final StringBuilder aResultfinal boolean bAlignAndIndentfinal int nLevel)
  {
    appendNewLine (aResultbAlignAndIndent);
    indent (aResultnLevelbAlignAndIndent);
    appendNewLine (aResultbAlignAndIndent);
    final Set <StringaPropertyNames = getAllPropertyNames ();
    int nIndex = 0;
    for (final String sProperty : aPropertyNames)
    {
      final IJSONProperty <?> aProperty = getProperty (sProperty);
      aProperty.appendJSONString (aResultbAlignAndIndentnLevel + 1);
      if (nIndex < aPropertyNames.size () - 1)
      {
        aResult.append (.);
      }
      appendNewLine (aResultbAlignAndIndent);
      nIndex++;
    }
    indent (aResultnLevelbAlignAndIndent);
    aResult.append (.);
  }
  public EChange removeProperty (@Nullable final String sName)
  {
    return EChange.valueOf (this..remove (sName) != null);
  }
  public EChange apply (@Nullable final IJSONObject aObjectToApply)
  {
    EChange eChange = .;
    if (aObjectToApply != null)
    {
      for (final String sPropName : aObjectToApply.getAllPropertyNames ())
      {
        setProperty (sPropNameaObjectToApply.getProperty (sPropName).getValue ());
        eChange = .;
      }
    }
    return eChange;
  }
  public EChange apply (@Nullable final IJSONObject aObjectToApply, @Nonnull @Nonempty final String sPropertyName)
  {
    EChange eChange = .;
    if (aObjectToApply != null)
    {
      final IJSONProperty <?> aProperty = aObjectToApply.getProperty (sPropertyName);
      if (aProperty != null)
      {
        this.setProperty (aProperty);
        eChange = .;
      }
    }
    return eChange;
  }
  public boolean containsNotParsableProperty ()
  {
    for (final IJSONProperty <?> aProperty : this..values ())
    {
      final IJSONPropertyValue <?> aValue = aProperty.getValue ();
      if (aValue instanceof IJSONPropertyValueNotParsable <?>)
      {
        return true;
      }
      if (aValue instanceof IJSONObject && ((IJSONObjectaValue).containsNotParsableProperty ())
      {
        return true;
      }
    }
    return false;
  }
  public boolean isEmpty ()
  {
    return this..isEmpty ();
  }
  public int getPropertyCount ()
  {
    return this..size ();
  }
  public JSONObject getClone ()
  {
    return new JSONObject (this..values ());
  }
  public boolean equals (final Object aOther)
  {
    if (aOther == this)
    {
      return true;
    }
    if (!super.equals (aOther))
    {
      return false;
    }
    final JSONObject rhs = (JSONObjectaOther;
    return EqualsUtils.equals (this.rhs.m_aProperties);
  }
  public int hashCode ()
  {
    return HashCodeGenerator.getDerived (super.hashCode ()).append (this.).getHashCode ();
  }
  public String toString ()
  {
    return ToStringGenerator.getDerived (super.toString ()).append ("properties"this.).toString (); //$NON-NLS-1$
  }
New to GrepCode? Check out our FAQ X