9
9
import com .fasterxml .jackson .databind .introspect .BeanPropertyDefinition ;
10
10
import com .fasterxml .jackson .databind .util .NameTransformer ;
11
11
import com .fasterxml .jackson .dataformat .csv .impl .LRUMap ;
12
+ import com .fasterxml .jackson .databind .util .ViewMatcher ;
12
13
13
14
/**
14
15
* Specialized {@link ObjectMapper}, with extended functionality to
@@ -360,15 +361,27 @@ public CsvSchema schema() {
360
361
* just defined to be exposed as String tokens).
361
362
*/
362
363
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 );
364
369
}
365
370
366
371
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 );
368
377
}
369
378
370
379
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 );
372
385
}
373
386
374
387
/**
@@ -379,15 +392,27 @@ public final CsvSchema schemaFor(TypeReference<?> pojoTypeRef) {
379
392
* (especially for numeric types like java.lang.Integer).
380
393
*/
381
394
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 );
383
400
}
384
401
385
402
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 );
387
408
}
388
409
389
410
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 );
391
416
}
392
417
393
418
/*
@@ -397,7 +422,7 @@ public final CsvSchema typedSchemaFor(TypeReference<?> pojoTypeRef) {
397
422
*/
398
423
399
424
protected CsvSchema _schemaFor (JavaType pojoType , LRUMap <JavaType ,CsvSchema > schemas ,
400
- boolean typed )
425
+ boolean typed , Class <?> view )
401
426
{
402
427
synchronized (schemas ) {
403
428
CsvSchema s = schemas .get (pojoType );
@@ -407,14 +432,19 @@ protected CsvSchema _schemaFor(JavaType pojoType, LRUMap<JavaType,CsvSchema> sch
407
432
}
408
433
final AnnotationIntrospector intr = _deserializationConfig .getAnnotationIntrospector ();
409
434
CsvSchema .Builder builder = CsvSchema .builder ();
410
- _addSchemaProperties (builder , intr , typed , pojoType , null );
435
+ _addSchemaProperties (builder , intr , typed , pojoType , null , view );
411
436
CsvSchema result = builder .build ();
412
437
synchronized (schemas ) {
413
438
schemas .put (pojoType , result );
414
439
}
415
440
return result ;
416
441
}
417
442
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
+
418
448
protected boolean _nonPojoType (JavaType t )
419
449
{
420
450
if (t .isPrimitive () || t .isEnumType ()) {
@@ -444,8 +474,7 @@ protected boolean _nonPojoType(JavaType t)
444
474
}
445
475
446
476
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 )
449
478
{
450
479
// 09-Aug-2015, tatu: From [dataformat-csv#87], realized that one can not have
451
480
// real schemas for primitive/wrapper
@@ -455,6 +484,15 @@ protected void _addSchemaProperties(CsvSchema.Builder builder, AnnotationIntrosp
455
484
456
485
BeanDescription beanDesc = getSerializationConfig ().introspect (pojoType );
457
486
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
+ }
458
496
// ignore setter-only properties:
459
497
if (!prop .couldSerialize ()) {
460
498
continue ;
@@ -468,7 +506,7 @@ protected void _addSchemaProperties(CsvSchema.Builder builder, AnnotationIntrosp
468
506
nextUnwrapper = NameTransformer .chainedTransformer (unwrapper , nextUnwrapper );
469
507
}
470
508
JavaType nextType = m .getType ();
471
- _addSchemaProperties (builder , intr , typed , nextType , nextUnwrapper );
509
+ _addSchemaProperties (builder , intr , typed , nextType , nextUnwrapper , view );
472
510
continue ;
473
511
}
474
512
}
0 commit comments