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}