/** * Constructor. * * @param classMeta The class type of the map being wrapped. * @param innerMap The map being wrapped. Must not be <jk>null</jk>. * @param keys The keys in the new map. Must not be <jk>null</jk>. */ public FilteredMap(ClassMeta<Map<K,V>> classMeta, Map<K,V> innerMap, K[] keys) { assertFieldNotNull(innerMap, "innerMap"); assertFieldNotNull(keys, "keys"); this.classMeta = classMeta; this.innerMap = innerMap; List<Map.Entry<K,V>> l = new ArrayList<>(keys.length); for (K k : keys) if (innerMap.containsKey(k)) l.add(createEntry(k)); entries = new ListSet<>(l); }
@Test public void testBasic() throws Exception { ObjectMap m = new ObjectMap("{a:'1',b:'2'}"); ClassMeta<Map<String,Object>> cm = BeanContext.DEFAULT.getClassMeta(Map.class, String.class, Object.class); ClassMeta<Map<String,String>> cm2 = BeanContext.DEFAULT.getClassMeta(Map.class, String.class, String.class); FilteredMap<String,Object> m2 = new FilteredMap<>(cm, m, new String[]{"a"}); assertObjectEquals("{a:'1'}", m2); m2.entrySet().iterator().next().setValue("3"); assertObjectEquals("{a:'3'}", m2); try { m3 = new FilteredMap<>(cm2, null, new String[0]); fail(); } catch (IllegalArgumentException e) {} try { m3 = new FilteredMap<>(cm, m, null); fail(); } catch (IllegalArgumentException e) {} } }
private Object applyChildPropertiesFilter(BeanSession session, ClassMeta cm, Object o) { if (o == null) return null; if (cm.isBean()) return new BeanMap(session, o, new BeanMetaFiltered(cm.getBeanMeta(), properties)); if (cm.isMap()) return new FilteredMap(cm, (Map)o, properties); if (cm.isObject()) { if (o instanceof Map) return new FilteredMap(cm, (Map)o, properties); BeanMeta bm = beanContext.getBeanMeta(o.getClass()); if (bm != null) return new BeanMap(session, o, new BeanMetaFiltered(cm.getBeanMeta(), properties)); } return o; }
private Object applyChildPropertiesFilter(BeanSession session, ClassMeta cm, Object o) { if (o == null) return null; if (cm.isBean()) return new BeanMap(session, o, new BeanMetaFiltered(cm.getBeanMeta(), properties)); if (cm.isMap()) return new FilteredMap(cm, (Map)o, properties); if (cm.isObject()) { if (o instanceof Map) return new FilteredMap(cm, (Map)o, properties); BeanMeta bm = beanContext.getBeanMeta(o.getClass()); if (bm != null) return new BeanMap(session, o, new BeanMetaFiltered(cm.getBeanMeta(), properties)); } return o; }
private Object applyChildPropertiesFilter(BeanSession session, ClassMeta cm, Object o) { if (o == null) return null; if (cm.isBean()) return new BeanMap(session, o, new BeanMetaFiltered(cm.getBeanMeta(), properties)); if (cm.isMap()) return new FilteredMap(cm, (Map)o, properties); if (cm.isObject()) { if (o instanceof Map) return new FilteredMap(cm, (Map)o, properties); BeanMeta bm = beanContext.getBeanMeta(o.getClass()); if (bm != null) return new BeanMap(session, o, new BeanMetaFiltered(cm.getBeanMeta(), properties)); } return o; }
/** * Constructor. * * @param classMeta The class type of the map being wrapped. * @param innerMap The map being wrapped. Must not be <jk>null</jk>. * @param keys The keys in the new map. Must not be <jk>null</jk>. */ public FilteredMap(ClassMeta<Map<K,V>> classMeta, Map<K,V> innerMap, K[] keys) { assertFieldNotNull(innerMap, "innerMap"); assertFieldNotNull(keys, "keys"); this.classMeta = classMeta; this.innerMap = innerMap; List<Map.Entry<K,V>> l = new ArrayList<>(keys.length); for (K k : keys) if (innerMap.containsKey(k)) l.add(createEntry(k)); entries = new ListSet<>(l); }
/** * Constructor. * * @param classMeta The class type of the map being wrapped. * @param innerMap The map being wrapped. Must not be <jk>null</jk>. * @param keys The keys in the new map. Must not be <jk>null</jk>. */ public FilteredMap(ClassMeta<Map<K,V>> classMeta, Map<K,V> innerMap, K[] keys) { assertFieldNotNull(innerMap, "innerMap"); assertFieldNotNull(keys, "keys"); this.classMeta = classMeta; this.innerMap = innerMap; List<Map.Entry<K,V>> l = new ArrayList<>(keys.length); for (K k : keys) if (innerMap.containsKey(k)) l.add(createEntry(k)); entries = new ListSet<>(l); }