-
- static {
- final Builder<Class<? extends DataObject>> acb = ImmutableSet.builder();
- acb.add(Aggregator.class);
- acb.add(BgpAggregator.class);
- acb.add(AsPath.class);
- acb.add(ClusterId.class);
- acb.add(Community.class);
- acb.add(Communities.class);
- acb.add(ExtendedCommunity.class);
- acb.add(ExtendedCommunities.class);
- acb.add(LocalPref.class);
- acb.add(MultiExitDisc.class);
- acb.add(Origin.class);
- acb.add(OriginatorId.class);
- acb.add(UnrecognizedAttributes.class);
- ATTRIBUTE_CACHEABLES = acb.build();
- }
-
- private final RIBSupport tableSupport;
- private final ImmutableSet<Class<? extends DataObject>> cacheableAttributes;
- private BindingNormalizedNodeCachingCodec<Attributes> attributesCodec;
- private BindingNormalizedNodeCachingCodec<MpReachNlri> reachNlriCodec;
- private BindingNormalizedNodeCachingCodec<MpUnreachNlri> unreachNlriCodec;
-
-
- public RIBSupportContextImpl(final RIBSupport ribSupport) {
- this.tableSupport = Preconditions.checkNotNull(ribSupport);
- final Builder<Class<? extends DataObject>> acb = ImmutableSet.builder();
- acb.addAll(ATTRIBUTE_CACHEABLES);
- acb.addAll(this.tableSupport.cacheableAttributeObjects());
- this.cacheableAttributes = acb.build();
-
- }
-
- @SuppressWarnings("unchecked")
- void onCodecTreeUpdated(final BindingCodecTree tree) {
-
- @SuppressWarnings("rawtypes")
- final BindingCodecTreeNode tableCodecContext = tree.getSubtreeCodec(TABLE_BASE_II);
- final BindingCodecTreeNode<? extends Route> routeListCodec = tableCodecContext
- .streamChild(Routes.class)
- .streamChild(this.tableSupport.routesCaseClass())
- .streamChild(this.tableSupport.routesContainerClass())
- .streamChild(this.tableSupport.routesListClass());
-
- this.attributesCodec = routeListCodec.streamChild(Attributes.class).createCachingCodec(this.cacheableAttributes);
- this.reachNlriCodec = tree.getSubtreeCodec(MP_REACH_NLRI_II).createCachingCodec(this.tableSupport.cacheableNlriObjects());
- this.unreachNlriCodec = tree.getSubtreeCodec(MP_UNREACH_NLRI_II).createCachingCodec(this.tableSupport.cacheableNlriObjects());