99import com .fasterxml .jackson .databind .introspect .BeanPropertyDefinition ;
1010import com .fasterxml .jackson .databind .util .NameTransformer ;
1111import com .fasterxml .jackson .dataformat .csv .impl .LRUMap ;
12+ import com .fasterxml .jackson .databind .util .ViewMatcher ;
1213
1314/**
1415 * Specialized {@link ObjectMapper}, with extended functionality to
@@ -360,15 +361,27 @@ public CsvSchema schema() {
360361 * just defined to be exposed as String tokens).
361362 */
362363 public CsvSchema schemaFor (JavaType pojoType ) {
363- return _schemaFor (pojoType , _untypedSchemas , false );
364+ return _schemaFor (pojoType , _untypedSchemas , false , null );
365+ }
366+
367+ public CsvSchema schemaForWithView (JavaType pojoType , Class <?> view ) {
368+ return _schemaFor (pojoType , _untypedSchemas , false , view );
364369 }
365370
366371 public final CsvSchema schemaFor (Class <?> pojoType ) {
367- return _schemaFor (constructType (pojoType ), _untypedSchemas , false );
372+ return _schemaFor (constructType (pojoType ), _untypedSchemas , false , null );
373+ }
374+
375+ public final CsvSchema schemaForWithView (Class <?> pojoType , Class <?> view ) {
376+ return _schemaFor (constructType (pojoType ), _untypedSchemas , false , view );
368377 }
369378
370379 public final CsvSchema schemaFor (TypeReference <?> pojoTypeRef ) {
371- return _schemaFor (constructType (pojoTypeRef .getType ()), _untypedSchemas , false );
380+ return _schemaFor (constructType (pojoTypeRef .getType ()), _untypedSchemas , false , null );
381+ }
382+
383+ public final CsvSchema schemaForWithView (TypeReference <?> pojoTypeRef , Class <?> view ) {
384+ return _schemaFor (constructType (pojoTypeRef .getType ()), _untypedSchemas , false , view );
372385 }
373386
374387 /**
@@ -379,15 +392,27 @@ public final CsvSchema schemaFor(TypeReference<?> pojoTypeRef) {
379392 * (especially for numeric types like java.lang.Integer).
380393 */
381394 public CsvSchema typedSchemaFor (JavaType pojoType ) {
382- return _schemaFor (pojoType , _typedSchemas , true );
395+ return _schemaFor (pojoType , _typedSchemas , true , null );
396+ }
397+
398+ public CsvSchema typedSchemaForWithView (JavaType pojoType , Class <?> view ) {
399+ return _schemaFor (pojoType , _typedSchemas , true , view );
383400 }
384401
385402 public final CsvSchema typedSchemaFor (Class <?> pojoType ) {
386- return _schemaFor (constructType (pojoType ), _typedSchemas , true );
403+ return _schemaFor (constructType (pojoType ), _typedSchemas , true , null );
404+ }
405+
406+ public final CsvSchema typedSchemaForWithView (Class <?> pojoType , Class <?> view ) {
407+ return _schemaFor (constructType (pojoType ), _typedSchemas , true , view );
387408 }
388409
389410 public final CsvSchema typedSchemaFor (TypeReference <?> pojoTypeRef ) {
390- return _schemaFor (constructType (pojoTypeRef .getType ()), _typedSchemas , true );
411+ return _schemaFor (constructType (pojoTypeRef .getType ()), _typedSchemas , true , null );
412+ }
413+
414+ public final CsvSchema typedSchemaForWithView (TypeReference <?> pojoTypeRef , Class <?> view ) {
415+ return _schemaFor (constructType (pojoTypeRef .getType ()), _typedSchemas , true , view );
391416 }
392417
393418 /*
@@ -397,7 +422,7 @@ public final CsvSchema typedSchemaFor(TypeReference<?> pojoTypeRef) {
397422 */
398423
399424 protected CsvSchema _schemaFor (JavaType pojoType , LRUMap <JavaType ,CsvSchema > schemas ,
400- boolean typed )
425+ boolean typed , Class <?> view )
401426 {
402427 synchronized (schemas ) {
403428 CsvSchema s = schemas .get (pojoType );
@@ -407,14 +432,19 @@ protected CsvSchema _schemaFor(JavaType pojoType, LRUMap<JavaType,CsvSchema> sch
407432 }
408433 final AnnotationIntrospector intr = _deserializationConfig .getAnnotationIntrospector ();
409434 CsvSchema .Builder builder = CsvSchema .builder ();
410- _addSchemaProperties (builder , intr , typed , pojoType , null );
435+ _addSchemaProperties (builder , intr , typed , pojoType , null , view );
411436 CsvSchema result = builder .build ();
412437 synchronized (schemas ) {
413438 schemas .put (pojoType , result );
414439 }
415440 return result ;
416441 }
417442
443+ @ Deprecated // since 2.11 (remove from 3.0 at latest)
444+ protected CsvSchema _schemaFor (JavaType pojoType , LRUMap <JavaType ,CsvSchema > schemas , boolean typed ) {
445+ return _schemaFor (pojoType , schemas , typed , null );
446+ }
447+
418448 protected boolean _nonPojoType (JavaType t )
419449 {
420450 if (t .isPrimitive () || t .isEnumType ()) {
@@ -444,8 +474,7 @@ protected boolean _nonPojoType(JavaType t)
444474 }
445475
446476 protected void _addSchemaProperties (CsvSchema .Builder builder , AnnotationIntrospector intr ,
447- boolean typed ,
448- JavaType pojoType , NameTransformer unwrapper )
477+ boolean typed , JavaType pojoType , NameTransformer unwrapper , Class <?> view )
449478 {
450479 // 09-Aug-2015, tatu: From [dataformat-csv#87], realized that one can not have
451480 // real schemas for primitive/wrapper
@@ -455,6 +484,15 @@ protected void _addSchemaProperties(CsvSchema.Builder builder, AnnotationIntrosp
455484
456485 BeanDescription beanDesc = getSerializationConfig ().introspect (pojoType );
457486 for (BeanPropertyDefinition prop : beanDesc .findProperties ()) {
487+ if (view != null ) {
488+ Class <?>[] views = prop .findViews ();
489+ if (views == null ) {
490+ views = beanDesc .findDefaultViews ();
491+ }
492+ if (!ViewMatcher .construct (views ).isVisibleForView (view )) {
493+ continue ;
494+ }
495+ }
458496 // ignore setter-only properties:
459497 if (!prop .couldSerialize ()) {
460498 continue ;
@@ -468,7 +506,7 @@ protected void _addSchemaProperties(CsvSchema.Builder builder, AnnotationIntrosp
468506 nextUnwrapper = NameTransformer .chainedTransformer (unwrapper , nextUnwrapper );
469507 }
470508 JavaType nextType = m .getType ();
471- _addSchemaProperties (builder , intr , typed , nextType , nextUnwrapper );
509+ _addSchemaProperties (builder , intr , typed , nextType , nextUnwrapper , view );
472510 continue ;
473511 }
474512 }
0 commit comments