001package com.nimbusds.oauth2.sdk.util; 002 003 004import java.util.LinkedHashMap; 005import java.util.Map; 006import java.util.Set; 007 008import net.jcip.annotations.NotThreadSafe; 009import net.minidev.json.JSONObject; 010 011 012/** 013 * Ordered JSON object. 014 */ 015@NotThreadSafe 016public class OrderedJSONObject extends JSONObject { 017 018 019 /** 020 * Keeps an ordered copy of the JSON object members. 021 */ 022 private final Map<String,Object> orderedMap = new LinkedHashMap<>(); 023 024 025 @Override 026 public Object put(final String s, final Object o) { 027 orderedMap.put(s, o); 028 return super.put(s, o); 029 } 030 031 032 @Override 033 public void putAll(Map<? extends String, ?> map) { 034 orderedMap.putAll(map); 035 super.putAll(map); 036 } 037 038 039 @Override 040 public Set<String> keySet() { 041 return orderedMap.keySet(); 042 } 043 044 045 @Override 046 public Set<Entry<String, Object>> entrySet() { 047 return orderedMap.entrySet(); 048 } 049 050 051 @Override 052 public Object remove(Object o) { 053 orderedMap.remove(o); 054 return super.remove(o); 055 } 056 057 058 @Override 059 public void clear() { 060 orderedMap.clear(); 061 super.clear(); 062 } 063 064 065 @Override 066 public String toJSONString() { 067 return JSONObject.toJSONString(orderedMap); 068 } 069}