11package com .fasterxml .jackson .dataformat .csv ;
22
3- import java .util .Collection ;
4-
53import com .fasterxml .jackson .core .type .TypeReference ;
6-
7- import com .fasterxml .jackson .databind .*;
4+ import com .fasterxml .jackson .databind .AnnotationIntrospector ;
5+ import com .fasterxml .jackson .databind .BeanDescription ;
6+ import com .fasterxml .jackson .databind .JavaType ;
7+ import com .fasterxml .jackson .databind .ObjectMapper ;
8+ import com .fasterxml .jackson .databind .ObjectReader ;
9+ import com .fasterxml .jackson .databind .ObjectWriter ;
10+ import com .fasterxml .jackson .databind .SerializerProvider ;
811import com .fasterxml .jackson .databind .cfg .MapperBuilder ;
912import com .fasterxml .jackson .databind .cfg .MapperBuilderState ;
1013import com .fasterxml .jackson .databind .introspect .AnnotatedMember ;
1114import com .fasterxml .jackson .databind .introspect .BeanPropertyDefinition ;
1215import com .fasterxml .jackson .databind .util .NameTransformer ;
1316import com .fasterxml .jackson .databind .util .SimpleLookupCache ;
17+ import com .fasterxml .jackson .databind .util .ViewMatcher ;
18+ import java .util .Collection ;
1419
1520/**
1621 * Specialized {@link ObjectMapper}, with extended functionality to
@@ -364,15 +369,27 @@ public CsvSchema schema() {
364369 * just defined to be exposed as String tokens).
365370 */
366371 public CsvSchema schemaFor (JavaType pojoType ) {
367- return _schemaFor (pojoType , _untypedSchemas , false );
372+ return _schemaFor (pojoType , _untypedSchemas , false , null );
373+ }
374+
375+ public CsvSchema schemaForWithView (JavaType pojoType , Class <?> view ) {
376+ return _schemaFor (pojoType , _untypedSchemas , false , view );
368377 }
369378
370379 public final CsvSchema schemaFor (Class <?> pojoType ) {
371- return _schemaFor (constructType (pojoType ), _untypedSchemas , false );
380+ return _schemaFor (constructType (pojoType ), _untypedSchemas , false , null );
381+ }
382+
383+ public final CsvSchema schemaForWithView (Class <?> pojoType , Class <?> view ) {
384+ return _schemaFor (constructType (pojoType ), _untypedSchemas , false , view );
372385 }
373386
374387 public final CsvSchema schemaFor (TypeReference <?> pojoTypeRef ) {
375- return _schemaFor (constructType (pojoTypeRef .getType ()), _untypedSchemas , false );
388+ return _schemaFor (constructType (pojoTypeRef .getType ()), _untypedSchemas , false , null );
389+ }
390+
391+ public final CsvSchema schemaForWithView (TypeReference <?> pojoTypeRef , Class <?> view ) {
392+ return _schemaFor (constructType (pojoTypeRef .getType ()), _untypedSchemas , false , view );
376393 }
377394
378395 /**
@@ -383,15 +400,27 @@ public final CsvSchema schemaFor(TypeReference<?> pojoTypeRef) {
383400 * (especially for numeric types like java.lang.Integer).
384401 */
385402 public CsvSchema typedSchemaFor (JavaType pojoType ) {
386- return _schemaFor (pojoType , _typedSchemas , true );
403+ return _schemaFor (pojoType , _typedSchemas , true , null );
404+ }
405+
406+ public CsvSchema typedSchemaForWithView (JavaType pojoType , Class <?> view ) {
407+ return _schemaFor (pojoType , _typedSchemas , true , view );
387408 }
388409
389410 public final CsvSchema typedSchemaFor (Class <?> pojoType ) {
390- return _schemaFor (constructType (pojoType ), _typedSchemas , true );
411+ return _schemaFor (constructType (pojoType ), _typedSchemas , true , null );
412+ }
413+
414+ public final CsvSchema typedSchemaForWithView (Class <?> pojoType , Class <?> view ) {
415+ return _schemaFor (constructType (pojoType ), _typedSchemas , true , view );
391416 }
392417
393418 public final CsvSchema typedSchemaFor (TypeReference <?> pojoTypeRef ) {
394- return _schemaFor (constructType (pojoTypeRef .getType ()), _typedSchemas , true );
419+ return _schemaFor (constructType (pojoTypeRef .getType ()), _typedSchemas , true , null );
420+ }
421+
422+ public final CsvSchema typedSchemaForWithView (TypeReference <?> pojoTypeRef , Class <?> view ) {
423+ return _schemaFor (constructType (pojoTypeRef .getType ()), _typedSchemas , true , view );
395424 }
396425
397426 /*
@@ -401,7 +430,7 @@ public final CsvSchema typedSchemaFor(TypeReference<?> pojoTypeRef) {
401430 */
402431
403432 protected CsvSchema _schemaFor (JavaType pojoType , SimpleLookupCache <JavaType ,CsvSchema > schemas ,
404- boolean typed )
433+ boolean typed , Class <?> view )
405434 {
406435 synchronized (schemas ) {
407436 CsvSchema s = schemas .get (pojoType );
@@ -412,7 +441,7 @@ protected CsvSchema _schemaFor(JavaType pojoType, SimpleLookupCache<JavaType,Csv
412441 // 15-Oct-2019, tatu: Since 3.0, need context for introspection
413442 final SerializerProvider ctxt = _serializerProvider ();
414443 CsvSchema .Builder builder = CsvSchema .builder ();
415- _addSchemaProperties (ctxt , builder , typed , pojoType , null );
444+ _addSchemaProperties (ctxt , builder , typed , pojoType , null , view );
416445 CsvSchema result = builder .build ();
417446 synchronized (schemas ) {
418447 schemas .put (pojoType , result );
@@ -449,8 +478,7 @@ protected boolean _nonPojoType(JavaType t)
449478 }
450479
451480 protected void _addSchemaProperties (SerializerProvider ctxt , CsvSchema .Builder builder ,
452- boolean typed ,
453- JavaType pojoType , NameTransformer unwrapper )
481+ boolean typed , JavaType pojoType , NameTransformer unwrapper , Class <?> view )
454482 {
455483 // 09-Aug-2015, tatu: From [dataformat-csv#87], realized that one can not have
456484 // real schemas for primitive/wrapper
@@ -460,6 +488,15 @@ protected void _addSchemaProperties(SerializerProvider ctxt, CsvSchema.Builder b
460488 BeanDescription beanDesc = ctxt .introspectBeanDescription (pojoType );
461489 final AnnotationIntrospector intr = ctxt .getAnnotationIntrospector ();
462490 for (BeanPropertyDefinition prop : beanDesc .findProperties ()) {
491+ if (view != null ) {
492+ Class <?>[] views = prop .findViews ();
493+ if (views == null ) {
494+ views = beanDesc .findDefaultViews ();
495+ }
496+ if (!ViewMatcher .construct (views ).isVisibleForView (view )) {
497+ continue ;
498+ }
499+ }
463500 // ignore setter-only properties:
464501 if (!prop .couldSerialize ()) {
465502 continue ;
@@ -474,7 +511,7 @@ protected void _addSchemaProperties(SerializerProvider ctxt, CsvSchema.Builder b
474511 nextUnwrapper = NameTransformer .chainedTransformer (unwrapper , nextUnwrapper );
475512 }
476513 JavaType nextType = m .getType ();
477- _addSchemaProperties (ctxt , builder , typed , nextType , nextUnwrapper );
514+ _addSchemaProperties (ctxt , builder , typed , nextType , nextUnwrapper , view );
478515 continue ;
479516 }
480517 }
0 commit comments