├── .circleci
└── config.yml
├── .github
└── ISSUE_TEMPLATE
│ ├── bug_report.md
│ └── feature_request.md
├── .idea
├── .gitignore
├── codeStyles
│ └── codeStyleConfig.xml
├── compiler.xml
├── deployment.xml
├── encodings.xml
├── inspectionProfiles
│ └── Project_Default.xml
├── jarRepositories.xml
├── jfilter.iml
├── jsonignore.iml
├── misc.xml
└── vcs.xml
├── .travis.yml
├── LICENSE
├── README.md
├── codecov.yml
├── jsonignore.iml
├── pom.xml
├── sonar-project.properties
└── src
├── main
└── java
│ └── com
│ └── jfilter
│ ├── EnableJsonFilter.java
│ ├── FileWatcherEvent.java
│ ├── FilterConstantsHelper.java
│ ├── FilterException.java
│ ├── components
│ ├── DynamicFilterProvider.java
│ ├── DynamicSessionFilter.java
│ ├── FileWatcher.java
│ ├── FilterAdvice.java
│ ├── FilterConfiguration.java
│ ├── FilterConverter.java
│ ├── FilterObjectMapperBuilder.java
│ ├── FilterProvider.java
│ ├── FilterRegister.java
│ ├── ObjectMapperCache.java
│ └── package-info.java
│ ├── converter
│ ├── FilterClassWrapper.java
│ ├── MethodParameterDetails.java
│ ├── MixinFilter.java
│ ├── SerializationConfig.java
│ └── package-info.java
│ ├── filter
│ ├── BaseFilter.java
│ ├── DynamicFilter.java
│ ├── DynamicFilterComponent.java
│ ├── DynamicFilterEvent.java
│ ├── FieldFilter.java
│ ├── FieldFilterSetting.java
│ ├── FieldFilterSettings.java
│ ├── FileConfig.java
│ ├── FileFilter.java
│ ├── FileFilterSetting.java
│ ├── FilterBehaviour.java
│ ├── FilterEvent.java
│ ├── FilterFactory.java
│ ├── FilterFields.java
│ ├── SessionStrategies.java
│ ├── SessionStrategy.java
│ ├── StrategyFilter.java
│ └── package-info.java
│ ├── mapper
│ ├── FilterObjectMapper.java
│ ├── FilterObjectWriter.java
│ └── FilterXmlMapper.java
│ ├── package-info.java
│ ├── request
│ ├── RequestMethodParameter.java
│ ├── RequestSession.java
│ └── package-info.java
│ └── util
│ ├── FilterUtil.java
│ └── package-info.java
└── test
├── java
└── com
│ └── jfilter
│ ├── FilterConstantsHelperTest.java
│ ├── FilterExceptionTest.java
│ ├── TestUtils.java
│ ├── components
│ ├── DynamicClassFilterWSTest.java
│ ├── DynamicFilterProviderITest.java
│ ├── DynamicFilterWSTest.java
│ ├── DynamicSessionFilterITest.java
│ ├── FileRecordTest.java
│ ├── FileWatcherITest.java
│ ├── FileWatcherModifyITest.java
│ ├── FileWatcherOverflowITest.java
│ ├── FilterAdviceITest.java
│ ├── FilterAdviceWSTest.java
│ ├── FilterConfigurationCustomConvertersITest.java
│ ├── FilterConfigurationITest.java
│ ├── FilterConverterITest.java
│ ├── FilterObjectMapperBuilderTest.java
│ ├── FilterProviderITest.java
│ ├── FilterProviderTest.java
│ ├── FilterRegisterDefaultConvertersITest.java
│ ├── FilterRegisterITest.java
│ ├── ObjectMapperCacheITest.java
│ ├── ServiceDisabledWSTest.java
│ └── ServiceEnabledWSTest.java
│ ├── converter
│ ├── ConverterMapperITest.java
│ ├── ConverterMapperWSTest.java
│ └── MethodParameterDetailsTest.java
│ ├── filter
│ ├── BaseFilterTest.java
│ ├── DynamicSessionFilterITest.java
│ ├── FileConfigurationTest.java
│ ├── FileFilterTest.java
│ ├── FilterFactoryTest.java
│ ├── FilterFieldsTest.java
│ └── StrategyFilterTest.java
│ ├── mapper
│ ├── FilterObjectMapperITest.java
│ ├── FilterObjectWriterITest.java
│ ├── FilterObjectWriterTest.java
│ └── FilterXmlMapperITest.java
│ ├── mock
│ ├── MockClassesHelper.java
│ ├── MockFile.java
│ ├── MockHttpRequestHelper.java
│ ├── MockMethods.java
│ ├── MockUser.java
│ ├── MockUtils.java
│ ├── config
│ │ ├── MockDynamicFilter.java
│ │ ├── MockDynamicNullFilter.java
│ │ ├── WSConfigurationCustomConverter.java
│ │ ├── WSConfigurationDisabled.java
│ │ ├── WSConfigurationDisabledFiltered.java
│ │ ├── WSConfigurationEnabled.java
│ │ ├── WSConfigurationHelper.java
│ │ └── WSUseDefaultConvertersEnabled.java
│ └── webservice
│ │ ├── WSClassDynamicFilter.java
│ │ ├── WSClassFieldMultiple.java
│ │ ├── WSClassFieldSingle.java
│ │ ├── WSClassFile.java
│ │ ├── WSClassStrategies.java
│ │ ├── WSClassStrategyMultiple.java
│ │ ├── WSClassStrategySingle.java
│ │ ├── WSDynamicFilter.java
│ │ └── WSMethod.java
│ ├── request
│ ├── RequestMethodParameterTest.java
│ └── RequestSessionTest.java
│ └── util
│ └── FilterUtilTest.java
└── resources
├── bad_config.xml
├── config.xml
├── config.yaml
├── configMockWebService.xml
├── config_class_duplicated.xml
├── config_class_not_found.xml
├── config_default_strategy.xml
├── config_dynamic.xml
├── config_io_exception.xml
├── config_no_controllers.xml
├── config_no_strategies.xml
└── config_with_behaviour.xml
/.circleci/config.yml:
--------------------------------------------------------------------------------
1 | # Java Maven CircleCI 2.0 configuration file
2 | #
3 | # Check https://circleci.com/docs/2.0/language-java/ for more details
4 | #
5 | version: 2
6 | jobs:
7 | build:
8 | docker:
9 | # specify the version you desire here
10 | - image: circleci/openjdk:9-jdk
11 |
12 | # Specify service dependencies here if necessary
13 | # CircleCI maintains a library of pre-built images
14 | # documented at https://circleci.com/docs/2.0/circleci-images/
15 | # - image: circleci/postgres:9.4
16 |
17 | working_directory: ~/repo
18 |
19 | environment:
20 | # Customize the JVM maximum heap limit
21 | MAVEN_OPTS: -Xmx3200m
22 |
23 | steps:
24 | - checkout
25 |
26 | # Download and cache dependencies
27 | - restore_cache:
28 | keys:
29 | - v1-dependencies-{{ checksum "pom.xml" }}
30 | # fallback to using the latest cache if no exact match is found
31 | - v1-dependencies-
32 |
33 | - run: mvn dependency:go-offline
34 |
35 | - save_cache:
36 | paths:
37 | - ~/.m2
38 | key: v1-dependencies-{{ checksum "pom.xml" }}
39 |
40 | # run tests!
41 | - run: mvn integration-test
42 |
43 |
44 | test:
45 | docker:
46 | # specify the version you desire here
47 | - image: circleci/openjdk:9-jdk
48 |
49 | # Specify service dependencies here if necessary
50 | # CircleCI maintains a library of pre-built images
51 | # documented at https://circleci.com/docs/2.0/circleci-images/
52 | # - image: circleci/postgres:9.4
53 |
54 | working_directory: ~/repo
55 |
56 | environment:
57 | # Customize the JVM maximum heap limit
58 | MAVEN_OPTS: -Xmx3200m
59 |
60 | steps:
61 | - checkout
62 |
63 | # Download and cache dependencies
64 | - restore_cache:
65 | keys:
66 | - v1-dependencies-{{ checksum "pom.xml" }}
67 | # fallback to using the latest cache if no exact match is found
68 | - v1-dependencies-
69 |
70 | - run: mvn dependency:go-offline
71 |
72 | - save_cache:
73 | paths:
74 | - ~/.m2
75 | key: v1-dependencies-{{ checksum "pom.xml" }}
76 |
77 | # run tests!
78 | - run: mvn integration-test
79 |
80 | workflows:
81 | version: 2
82 | build_and_test:
83 | jobs:
84 | - test
85 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug_report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug report
3 | about: Create a report to help us improve
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Describe the bug**
11 | A clear and concise description of what the bug is.
12 |
13 | **To Reproduce**
14 | Steps to reproduce the behavior:
15 | 1. Go to '...'
16 | 2. Click on '....'
17 | 3. Scroll down to '....'
18 | 4. See error
19 |
20 | **Expected behavior**
21 | A clear and concise description of what you expected to happen.
22 |
23 | **Spring/Spring-boot:**
24 | - Version [e.g. 22]
25 |
26 | **Additional context**
27 | Add any other context about the problem here.
28 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature request
3 | about: Suggest an idea for this project
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Is your feature request related to a problem? Please describe.**
11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
12 |
13 | **Describe the solution you'd like**
14 | A clear and concise description of what you want to happen.
15 |
16 | **Describe alternatives you've considered**
17 | A clear and concise description of any alternative solutions or features you've considered.
18 |
19 | **Additional context**
20 | Add any other context or screenshots about the feature request here.
21 |
--------------------------------------------------------------------------------
/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /workspace.xml
--------------------------------------------------------------------------------
/.idea/codeStyles/codeStyleConfig.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/.idea/compiler.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/.idea/deployment.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/.idea/encodings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/.idea/inspectionProfiles/Project_Default.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/.idea/jarRepositories.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/.idea/jfilter.iml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/.idea/jsonignore.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: java
2 |
3 | jdk:
4 | - oraclejdk8
5 | dist: trusty
6 | after_success:
7 | - bash <(curl -s https://codecov.io/bash)
8 |
9 |
10 | addons:
11 | sonarcloud:
12 | organization: "rkonovalov-github" # the key of the org you chose at step #3
13 |
14 |
15 |
16 | script:
17 | - "mvn test"
18 | - "mvn jacoco:report"
19 | - sonar-scanner
--------------------------------------------------------------------------------
/codecov.yml:
--------------------------------------------------------------------------------
1 | ignore:
2 | - "/src/main/java/com/jfilter/filter/FilterFactory.java"
3 |
--------------------------------------------------------------------------------
/jsonignore.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/sonar-project.properties:
--------------------------------------------------------------------------------
1 | # suppress inspection "UnusedProperty" for whole file
2 | sonar.language=java
3 | sonar.java.source=1.8
4 | sonar.sourceEncoding=UTF-8
5 | sonar.host.url=https://sonarcloud.io
6 | sonar.projectKey=jfilter
7 | sonar.login=0511fe52d3e05be75412f7adca1e4916f53bd6e9
8 | sonar.projectName=JFilter module
9 | sonar.projectVersion=1.5
10 | sonar.sources=/home/travis/build/rkonovalov/jfilter/src/main/java
11 | sonar.tests=/home/travis/build/rkonovalov/jfilter/src/test/java
12 | sonar.java.binaries=/home/travis/build/rkonovalov/jfilter/target/classes
13 | sonar.junit.reportsPath=/home/travis/build/rkonovalov/jfilter/target/surefire-reports
--------------------------------------------------------------------------------
/src/main/java/com/jfilter/EnableJsonFilter.java:
--------------------------------------------------------------------------------
1 | package com.jfilter;
2 |
3 | import org.springframework.context.annotation.ComponentScan;
4 | import org.springframework.context.annotation.ComponentScans;
5 | import org.springframework.scheduling.annotation.EnableScheduling;
6 |
7 | import java.lang.annotation.Documented;
8 | import java.lang.annotation.ElementType;
9 | import java.lang.annotation.Retention;
10 | import java.lang.annotation.RetentionPolicy;
11 | import java.lang.annotation.Target;
12 |
13 |
14 | /**
15 | * Enables json filter
16 | *
17 | *
For enabling FilterProvider, FilterAdvice and all filter mechanisms this annotation should be specified on one of application beans,
18 | * as example on application configuration bean.
19 | */
20 | @Retention(RetentionPolicy.RUNTIME)
21 | @Target({ElementType.TYPE})
22 | @Documented
23 | @EnableScheduling
24 | @ComponentScans(value = @ComponentScan({"com.jfilter", "com.jfilter.components"}))
25 | public @interface EnableJsonFilter {
26 | }
--------------------------------------------------------------------------------
/src/main/java/com/jfilter/FileWatcherEvent.java:
--------------------------------------------------------------------------------
1 | package com.jfilter;
2 |
3 | import java.io.File;
4 |
5 | /**
6 | * The event that occurs when file is modified
7 | */
8 | public interface FileWatcherEvent {
9 |
10 | /**
11 | * Event occurs if file modified
12 | *
13 | * @param file modified file
14 | */
15 | void onEvent(File file);
16 | }
17 |
--------------------------------------------------------------------------------
/src/main/java/com/jfilter/FilterConstantsHelper.java:
--------------------------------------------------------------------------------
1 | package com.jfilter;
2 |
3 | /**
4 | * Filter constants class
5 | */
6 | public class FilterConstantsHelper {
7 |
8 | public static final String MEDIA_TYPE_APPLICATION = "application";
9 | public static final String MEDIA_SUB_TYPE_JSON = "json";
10 | public static final String MEDIA_SUB_TYPE_JSON2 = "*+json";
11 | public static final String MEDIA_SUB_TYPE_XML = "xml";
12 | public static final String MEDIA_SUB_TYPE_XML2 = "*+xml";
13 |
14 | private FilterConstantsHelper() {
15 | throw new IllegalStateException("FilterConstants class");
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/src/main/java/com/jfilter/FilterException.java:
--------------------------------------------------------------------------------
1 | package com.jfilter;
2 |
3 | /**
4 | * Exception will throw on {@link IllegalAccessException}
5 | */
6 | public class FilterException extends RuntimeException {
7 |
8 | private static final long serialVersionUID = -1580361832535921569L;
9 |
10 | public FilterException(Throwable cause) {
11 | super(cause);
12 | }
13 |
14 | }
15 |
--------------------------------------------------------------------------------
/src/main/java/com/jfilter/components/DynamicFilterProvider.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.components;
2 |
3 | import com.comparator.Comparator;
4 | import com.jfilter.filter.DynamicFilter;
5 | import com.jfilter.filter.DynamicFilterComponent;
6 | import com.jfilter.filter.DynamicFilterEvent;
7 | import com.jfilter.filter.FilterFields;
8 | import com.jfilter.request.RequestSession;
9 | import com.jfilter.util.FilterUtil;
10 | import org.springframework.beans.factory.annotation.Autowired;
11 | import org.springframework.context.ApplicationContext;
12 | import org.springframework.core.MethodParameter;
13 | import org.springframework.stereotype.Component;
14 |
15 | import java.util.HashMap;
16 | import java.util.Map;
17 |
18 | /**
19 | * Dynamic filter provider
20 | *
21 | *
This component finds and provides Dynamic filters which annotated by {@link DynamicFilterComponent} annotation.
22 | * Could be used for retrieving {@link FilterFields} from {@link MethodParameter} which annotated by {@link DynamicFilter}
23 | */
24 | @SuppressWarnings("CanBeFinal")
25 | @Component
26 | public final class DynamicFilterProvider {
27 | private ApplicationContext applicationContext;
28 | private Map, DynamicFilterEvent> dynamicFilterMap;
29 |
30 | /**
31 | * Creates a new instance of the {@link DynamicFilterProvider} class.
32 | *
33 | * @param applicationContext {@link ApplicationContext} bean
34 | */
35 | @Autowired
36 | public DynamicFilterProvider(ApplicationContext applicationContext) {
37 | this.applicationContext = applicationContext;
38 | this.dynamicFilterMap = new HashMap<>();
39 | findDynamicFilters();
40 | }
41 |
42 | /**
43 | * Find dynamic filter beans
44 | *
45 | * Attempts to find all components which annotated by {@link DynamicFilterComponent}
46 | * and inherited from {@link DynamicFilterEvent}
47 | * For example of component please see {@link DynamicSessionFilter}
48 | */
49 | private void findDynamicFilters() {
50 | Map beans = applicationContext.getBeansWithAnnotation(DynamicFilterComponent.class);
51 |
52 | beans.forEach((k, v) -> {
53 | if (v instanceof DynamicFilterEvent)
54 | dynamicFilterMap.put(((DynamicFilterEvent) v).getClass(), (DynamicFilterEvent) v);
55 | });
56 | }
57 |
58 | /**
59 | * Check if method has {@link DynamicFilter} annotation
60 | *
61 | * @param methodParameter method parameter
62 | * @return true if annotation is found, otherwise false
63 | */
64 | public static boolean isAccept(MethodParameter methodParameter) {
65 | return FilterUtil.getDeclaredAnnotations(methodParameter, DynamicFilter.class).size() > 0;
66 | }
67 |
68 | /**
69 | * Returns {@link FilterFields} from annotated method
70 | *
71 | * Attempts to find and return dynamic filter from dynamicFilterMap
72 | *
73 | * @param methodParameter method parameter
74 | * @param request service request
75 | * @return if found dynamic filter returns {@link FilterFields}, otherwise empty FilterFields
76 | */
77 | public FilterFields getFields(MethodParameter methodParameter, RequestSession request) {
78 | FilterFields filterFields = FilterFields.EMPTY_FIELDS.get();
79 |
80 | //Retrieve filterable fields from dynamic filters from whole class and method
81 | FilterUtil.getDeclaredAnnotations(methodParameter, DynamicFilter.class)
82 | .forEach(annotation -> filterFields.appendToMap(getFilterFields((DynamicFilter) annotation, request)));
83 |
84 | return filterFields;
85 | }
86 |
87 | public FilterFields getFilterFields(DynamicFilter dynamicFilter, RequestSession request) {
88 | if (dynamicFilter != null && dynamicFilterMap.containsKey(dynamicFilter.value())) {
89 | DynamicFilterEvent filter = dynamicFilterMap.get(dynamicFilter.value());
90 |
91 | Comparator comparator = Comparator.of(request, FilterFields.class);
92 | filter.onRequest(comparator);
93 |
94 | //Get FilterFields from comparator or EMPTY_FIELDS if comparator not modified or conditions in compare method returned false
95 | return comparator.orElse(FilterFields.EMPTY_FIELDS.get());
96 | } else
97 | return FilterFields.EMPTY_FIELDS.get();
98 | }
99 | }
100 |
--------------------------------------------------------------------------------
/src/main/java/com/jfilter/components/DynamicSessionFilter.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.components;
2 |
3 | import com.comparator.Comparator;
4 | import com.jfilter.filter.DynamicFilterComponent;
5 | import com.jfilter.filter.DynamicFilterEvent;
6 | import com.jfilter.filter.FilterFields;
7 | import com.jfilter.request.RequestSession;
8 |
9 | /**
10 | * Dynamic session filter
11 | *
12 | *
13 | * This filter get FilterFields from session's or request's attributes if it exist
14 | */
15 | @SuppressWarnings("WeakerAccess")
16 | @DynamicFilterComponent
17 | public class DynamicSessionFilter implements DynamicFilterEvent {
18 | public static final String ATTRIBUTE_FILTER_FIELDS = FilterFields.class.getName();
19 |
20 | /**
21 | * Request event handler
22 | *
23 | *
Retrieve FilterFields object from session attributes by name ATTRIBUTE_FILTER_FIELDS if it instance of FilterFields
24 | *
25 | * @param comparator {@link Comparator} comparator object which will be used by {@link DynamicFilterProvider} for retrieve {@link FilterFields}
26 | */
27 | @Override
28 | public void onRequest(Comparator comparator) {
29 |
30 | comparator
31 | //Check and use if FilterFields exists in request
32 | .compare((request -> FilterFields.class.isInstance(request.getRequest().getAttribute(ATTRIBUTE_FILTER_FIELDS))),
33 | (result -> (FilterFields) result.getRequest().getAttribute(ATTRIBUTE_FILTER_FIELDS)))
34 |
35 | //Check and use if FilterFields exists in session
36 | .compare((request -> FilterFields.class.isInstance(request.getSession().getAttribute(ATTRIBUTE_FILTER_FIELDS))),
37 | (result -> (FilterFields) result.getSession().getAttribute(ATTRIBUTE_FILTER_FIELDS)))
38 | ;
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/src/main/java/com/jfilter/components/FilterAdvice.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.components;
2 |
3 | import com.jfilter.converter.MethodParameterDetails;
4 | import com.jfilter.converter.FilterClassWrapper;
5 | import com.jfilter.filter.FilterFields;
6 | import com.jfilter.request.RequestSession;
7 | import org.springframework.beans.factory.annotation.Autowired;
8 | import org.springframework.core.MethodParameter;
9 | import org.springframework.http.MediaType;
10 | import org.springframework.http.converter.HttpMessageConverter;
11 | import org.springframework.http.server.ServerHttpRequest;
12 | import org.springframework.http.server.ServerHttpResponse;
13 | import org.springframework.http.server.ServletServerHttpRequest;
14 | import org.springframework.web.bind.annotation.ControllerAdvice;
15 | import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
16 |
17 | import javax.servlet.http.HttpServletRequest;
18 | import java.io.Serializable;
19 |
20 | import static com.jfilter.filter.FilterFields.EMPTY_FIELDS;
21 |
22 | /**
23 | * Class which handle all responses from web service and tries to filter it
24 | *
25 | * This class will be detected and instantiated automatically by Spring Framework
26 | * The main task of this class is checking if response method has filter annotation and try to apply filters
27 | */
28 |
29 | @ControllerAdvice
30 | public final class FilterAdvice implements ResponseBodyAdvice {
31 | private FilterProvider filterProvider;
32 | private DynamicFilterProvider dynamicFilterProvider;
33 | private FilterConfiguration filterConfiguration;
34 |
35 | @Autowired
36 | public void setFilterProvider(FilterProvider filterProvider) {
37 | this.filterProvider = filterProvider;
38 | }
39 |
40 | @Autowired
41 | public FilterAdvice setDynamicFilterProvider(DynamicFilterProvider dynamicFilterProvider) {
42 | this.dynamicFilterProvider = dynamicFilterProvider;
43 | return this;
44 | }
45 |
46 | @Autowired
47 | public FilterAdvice setFilterConfiguration(FilterConfiguration filterConfiguration) {
48 | this.filterConfiguration = filterConfiguration;
49 | return this;
50 | }
51 |
52 | /**
53 | * Attempt to find annotations in method and associated filter
54 | *
55 | * @param methodParameter {@link MethodParameter}
56 | * @param aClass {@link HttpMessageConverter}
57 | * @return true if found, else false
58 | */
59 | @Override
60 | public boolean supports(MethodParameter methodParameter, Class extends HttpMessageConverter>> aClass) {
61 | return filterConfiguration.isEnabled() &&
62 | (filterProvider.isAccept(methodParameter) || DynamicFilterProvider.isAccept(methodParameter));
63 | }
64 |
65 | /**
66 | * Attempt to find filter and extract ignorable fields from methodParameter
67 | *
68 | * @param obj {@link Object} object sent from response of Spring Web Service
69 | * @param methodParameter {@link MethodParameter}
70 | * @param mediaType {@link MediaType}
71 | * @param aClass {@link HttpMessageConverter}
72 | * @param serverHttpRequest {@link ServerHttpRequest}
73 | * @param serverHttpResponse {@link ServerHttpResponse}
74 | * @return {@link FilterClassWrapper} if BaseFilter is found FilterClassWrapper contains list of ignorable fields,
75 | * else returns FilterClassWrapper with HashMap zero length
76 | */
77 | @Override
78 | public Serializable beforeBodyWrite(Object obj, MethodParameter methodParameter, MediaType mediaType,
79 | Class extends HttpMessageConverter>> aClass, ServerHttpRequest serverHttpRequest,
80 | ServerHttpResponse serverHttpResponse) {
81 |
82 | FilterFields filterFields = EMPTY_FIELDS.get();
83 |
84 | //Getting HttpServletRequest from serverHttpRequest
85 | HttpServletRequest servletServerHttpRequest = ((ServletServerHttpRequest) serverHttpRequest).getServletRequest();
86 | RequestSession requestSession = new RequestSession(servletServerHttpRequest);
87 |
88 | //Retrieve filterable fields from static filters
89 | filterProvider.getOptionalFilter(methodParameter)
90 | .ifPresent(filter -> filterFields.appendToMap(filter.getFields(obj, requestSession)));
91 |
92 | //Retrieve filterable fields from dynamic filters
93 | filterFields.appendToMap(dynamicFilterProvider.getFields(methodParameter, requestSession));
94 |
95 | MethodParameterDetails methodParameterDetails = new MethodParameterDetails(methodParameter, mediaType, filterFields);
96 |
97 | return new FilterClassWrapper(obj, methodParameterDetails);
98 | }
99 | }
100 |
--------------------------------------------------------------------------------
/src/main/java/com/jfilter/components/FilterConverter.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.components;
2 |
3 | import com.fasterxml.jackson.databind.ObjectMapper;
4 | import com.jfilter.converter.FilterClassWrapper;
5 | import org.springframework.http.HttpInputMessage;
6 | import org.springframework.http.HttpOutputMessage;
7 | import org.springframework.http.MediaType;
8 | import org.springframework.http.converter.AbstractHttpMessageConverter;
9 | import org.springframework.http.converter.HttpMessageNotReadableException;
10 | import org.springframework.http.converter.HttpMessageNotWritableException;
11 |
12 | import java.io.IOException;
13 | import java.util.List;
14 | import java.util.Objects;
15 |
16 | public class FilterConverter extends AbstractHttpMessageConverter {
17 | private FilterConfiguration filterConfiguration;
18 |
19 | public FilterConverter(FilterConfiguration filterConfiguration) {
20 | this.filterConfiguration = filterConfiguration;
21 | }
22 |
23 | @Override
24 | protected boolean supports(Class> clazz) {
25 | return true;
26 | }
27 |
28 | @Override
29 | public List getSupportedMediaTypes() {
30 | return filterConfiguration.supportedMediaTypes();
31 | }
32 |
33 | @Override
34 | public boolean canRead(Class> clazz, MediaType mediaType) {
35 | return false;
36 | }
37 |
38 | @Override
39 | public boolean canWrite(Class> clazz, MediaType mediaType) {
40 | return filterConfiguration.isEnabled() &&
41 | (filterConfiguration.supportedMediaTypes().contains(mediaType) || Objects.isNull(mediaType));
42 | }
43 |
44 | @Override
45 | protected Object readInternal(Class> clazz, HttpInputMessage inputMessage) throws HttpMessageNotReadableException {
46 | return null;
47 | }
48 |
49 | @Override
50 | protected void writeInternal(Object object, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {
51 | MediaType contentType = outputMessage.getHeaders().getContentType();
52 |
53 |
54 | //If object is FilterClassWrapper try to serialize object using filters(if configured)
55 | if (object instanceof FilterClassWrapper) {
56 | FilterClassWrapper wrapper = (FilterClassWrapper) object;
57 |
58 | //Retrieving ObjectMapper from ObjectMapperCache
59 | ObjectMapper objectMapper = filterConfiguration.getObjectMapperCache()
60 | .findObjectMapper(wrapper.getMethodParameterDetails());
61 |
62 | //Serialize object with ObjectMapper
63 | objectMapper.writeValue(outputMessage.getBody(), wrapper.getObject());
64 | } else {
65 | //Otherwise try to serialize object without filters by default ObjectMapper from filterConfiguration
66 | ObjectMapper objectMapper = filterConfiguration.getMapper(contentType);
67 | objectMapper.writeValue(outputMessage.getBody(), object);
68 | }
69 | }
70 | }
71 |
--------------------------------------------------------------------------------
/src/main/java/com/jfilter/components/FilterObjectMapperBuilder.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.components;
2 |
3 | import com.fasterxml.jackson.databind.ObjectMapper;
4 | import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;
5 | import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
6 | import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
7 | import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
8 | import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
9 | import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer;
10 | import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
11 | import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
12 | import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;
13 | import com.jfilter.converter.MixinFilter;
14 | import com.jfilter.converter.SerializationConfig;
15 | import com.jfilter.filter.FilterFields;
16 |
17 | import java.time.LocalDate;
18 | import java.time.LocalDateTime;
19 | import java.time.LocalTime;
20 |
21 | /**
22 | * This class allows to add SerializerModifier to ObjectMapper
23 | */
24 | public class FilterObjectMapperBuilder {
25 | private ObjectMapper objectMapper;
26 | private FilterFields filterFields;
27 | private SerializationConfig serializationConfig;
28 |
29 | public FilterObjectMapperBuilder(ObjectMapper objectMapper) {
30 | this.objectMapper = objectMapper;
31 | }
32 |
33 | public FilterObjectMapperBuilder withFilterFields(FilterFields filterFields) {
34 | this.filterFields = filterFields;
35 | return this;
36 | }
37 |
38 | public FilterObjectMapperBuilder withSetSerializationConfig(SerializationConfig serializationConfig) {
39 | this.serializationConfig = serializationConfig;
40 | return this;
41 | }
42 |
43 | /**
44 | * Build configured ObjectMapper
45 | *
46 | * @return {@link ObjectMapper}
47 | */
48 | public ObjectMapper build() {
49 |
50 | //Add mixin filter if filterFields isn't null and has filterable fields
51 | if(filterFields != null && filterFields.getFieldsMap().size() > 0) {
52 | objectMapper.addMixIn(Object.class, MixinFilter.class);
53 | objectMapper.setFilterProvider(new SimpleFilterProvider()
54 | .addFilter("com.jfilter.converter.MixinFilter", new MixinFilter(filterFields)));
55 | }
56 |
57 | //Set dateTimeModule if option is enabled
58 | if (serializationConfig.isDateTimeModuleEnabled()) {
59 | //Add JavaTimeModule to fix issue with LocalDate/LocalDateTime serialization
60 | JavaTimeModule javaTimeModule = new JavaTimeModule();
61 | javaTimeModule.addSerializer(LocalTime.class, LocalTimeSerializer.INSTANCE);
62 | javaTimeModule.addSerializer(LocalDate.class, LocalDateSerializer.INSTANCE);
63 | javaTimeModule.addSerializer(LocalDateTime.class, LocalDateTimeSerializer.INSTANCE);
64 | javaTimeModule.addDeserializer(LocalTime.class, LocalTimeDeserializer.INSTANCE);
65 | javaTimeModule.addDeserializer(LocalDate.class, LocalDateDeserializer.INSTANCE);
66 | javaTimeModule.addDeserializer(LocalDateTime.class, LocalDateTimeDeserializer.INSTANCE);
67 | objectMapper.registerModule(javaTimeModule);
68 | objectMapper.registerModule(new Jdk8Module());
69 | objectMapper.findAndRegisterModules();
70 | }
71 |
72 | return objectMapper;
73 | }
74 | }
75 |
--------------------------------------------------------------------------------
/src/main/java/com/jfilter/components/FilterProvider.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.components;
2 |
3 | import com.jfilter.EnableJsonFilter;
4 | import com.jfilter.filter.BaseFilter;
5 | import com.jfilter.filter.FilterFactory;
6 | import com.jfilter.filter.FileFilter;
7 | import org.springframework.beans.factory.annotation.Autowired;
8 | import org.springframework.core.MethodParameter;
9 | import org.springframework.stereotype.Component;
10 | import org.springframework.web.context.WebApplicationContext;
11 |
12 | import java.lang.annotation.Annotation;
13 | import java.util.Map;
14 | import java.util.Optional;
15 | import java.util.concurrent.ConcurrentHashMap;
16 |
17 | /**
18 | * Object filter provider bean
19 | *
20 | * This class will be detected and instantiated automatically by Spring Framework
21 | *
22 | *
The main task of this class is: getting from http request session information, getting annotations from methodParam and
23 | * trying to find filter associated with annotation.
24 | *
25 | *
This class also has cache for caching already found filter for better productivity
26 | */
27 | @Component
28 | public final class FilterProvider {
29 | private final Map filters;
30 | private boolean enabled;
31 | private FileWatcher fileWatcher;
32 |
33 | /**
34 | * Creates a new instance of the {@link FilterProvider} class.
35 | */
36 | public FilterProvider() {
37 | this.filters = new ConcurrentHashMap<>();
38 | }
39 |
40 | @Autowired
41 | public void setWebApplicationContext(WebApplicationContext webApplicationContext) {
42 | /*
43 | * Important! For enabling filtration, should be specified one of application bean with EnableJsonFilter annotation
44 | */
45 | enabled = isFilterEnabled(webApplicationContext);
46 | }
47 |
48 | @Autowired
49 | public FilterProvider setFileWatcher(FileWatcher fileWatcher) {
50 | this.fileWatcher = fileWatcher;
51 | return this;
52 | }
53 |
54 | /**
55 | * Returns true if found EnableJsonFilter annotation in one of Spring beans
56 | *
57 | * @param webApplicationContext {@link WebApplicationContext}
58 | * @return true if found, else false
59 | */
60 | public static boolean isFilterEnabled(WebApplicationContext webApplicationContext) {
61 | return webApplicationContext.getBeansWithAnnotation(EnableJsonFilter.class).size() > 0;
62 | }
63 |
64 | /**
65 | * Returns one of filters which supports annotation specified in MethodParameter or in Spring Web Service where MethodParameter is declared
66 | *
67 | * @param methodParameter {@link MethodParameter}
68 | * @return {@link BaseFilter}
69 | */
70 | private BaseFilter getBaseFilter(MethodParameter methodParameter) {
71 | Annotation key = FilterFactory.getFilterAnnotation(methodParameter);
72 |
73 | if (key != null) {
74 | if (filters.containsKey(key)) {
75 | //Retrieve filter from cache
76 | return filters.get(key);
77 | } else {
78 | //Create and put filter in cache
79 | BaseFilter filter = FilterFactory.getFromFactory(methodParameter);
80 |
81 | if (filter instanceof FileFilter) {
82 | ((FileFilter) filter).setFileWatcher(fileWatcher);
83 | }
84 | filters.put(key, filter);
85 | return filter;
86 | }
87 | }
88 | return null;
89 | }
90 |
91 | /**
92 | * Check if provider supports processing method
93 | *
94 | * Condition checks if provider is enabled and FilterFactory accepts method, else returns false
95 | *
96 | * @param methodParameter the method parameter
97 | * @return the boolean
98 | */
99 | public boolean isAccept(MethodParameter methodParameter) {
100 | return enabled && FilterFactory.isAccept(methodParameter);
101 | }
102 |
103 | /**
104 | * Returns one of filters which supports annotation specified in MethodParameter or in Spring Web Service where MethodParameter is declared
105 | *
106 | * @param methodParameter {@link MethodParameter}
107 | * @return {@link BaseFilter}
108 | */
109 | public BaseFilter getFilter(MethodParameter methodParameter) {
110 | return getBaseFilter(methodParameter);
111 | }
112 |
113 | /**
114 | * Returns Optional of filters which supports annotation specified in MethodParameter or in Spring Web Service where MethodParameter is declared
115 | *
116 | * @param methodParameter {@link MethodParameter}
117 | * @return {@link BaseFilter}
118 | */
119 | public Optional getOptionalFilter(MethodParameter methodParameter) {
120 | return Optional.ofNullable(getFilter(methodParameter));
121 | }
122 |
123 | /**
124 | * Clear cache of filter list
125 | */
126 | public void clearCache() {
127 | filters.clear();
128 | }
129 |
130 | /**
131 | * Cache size int
132 | *
133 | * @return the int
134 | */
135 | public int cacheSize() {
136 | return filters.size();
137 | }
138 |
139 | }
140 |
--------------------------------------------------------------------------------
/src/main/java/com/jfilter/components/ObjectMapperCache.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.components;
2 |
3 | import com.fasterxml.jackson.databind.ObjectMapper;
4 | import com.jfilter.converter.MethodParameterDetails;
5 | import org.springframework.beans.factory.annotation.Autowired;
6 | import org.springframework.http.HttpOutputMessage;
7 | import org.springframework.http.MediaType;
8 | import org.springframework.stereotype.Component;
9 | import java.util.concurrent.ConcurrentHashMap;
10 | import java.util.concurrent.ConcurrentMap;
11 |
12 | /**
13 | * ObjectMapper cache
14 | *
15 | * This class contains cached list of ObjectMappers which used in {@link FilterConverter#write(Object, MediaType, HttpOutputMessage)}
16 | */
17 | @Component
18 | public class ObjectMapperCache {
19 | private ConcurrentMap items;
20 | private FilterConfiguration filterConfiguration;
21 |
22 | public ObjectMapperCache() {
23 | items = new ConcurrentHashMap<>();
24 | }
25 |
26 | /**
27 | * Set of FilterConfiguration
28 | *
29 | * @param filterConfiguration {@link FilterConfiguration}
30 | * @return {@link ObjectMapperCache}
31 | */
32 | @Autowired
33 | public ObjectMapperCache setFilterConfiguration(FilterConfiguration filterConfiguration) {
34 | this.filterConfiguration = filterConfiguration;
35 | return this;
36 | }
37 |
38 | /**
39 | * Find ObjectMapper by MethodParameterDetails
40 | *
41 | * @param item {@link MethodParameterDetails}
42 | * @return {@link ObjectMapper}
43 | */
44 | public ObjectMapper findObjectMapper(MethodParameterDetails item) {
45 |
46 | ObjectMapper objectMapper = items.get(item);
47 | if (objectMapper == null)
48 | objectMapper = addNewMapper(item);
49 | return objectMapper;
50 | }
51 |
52 |
53 | /**
54 | * Add new ObjectMapper in cache
55 | *
56 | * Method creates copy of ObjectMapper by media type which listed in filterConfiguration
57 | * Also if MethodParameterDetails has filter fields method tries to set ignore modifier to ObjectMapper
58 | *
59 | * @param item {@link MethodParameterDetails}
60 | * @return {@link ObjectMapper}
61 | */
62 | private ObjectMapper addNewMapper(MethodParameterDetails item) {
63 |
64 | //Make copy of configured ObjectMapper
65 | ObjectMapper configuredObjectMapper = filterConfiguration.getMapper(item.getMediaType()).copy();
66 |
67 | //Build modified objectMapper
68 | ObjectMapper objectMapper = new FilterObjectMapperBuilder(configuredObjectMapper)
69 | .withFilterFields(item.getFilterFields())
70 | .withSetSerializationConfig(filterConfiguration.getSerializationConfig())
71 | .build();
72 |
73 | items.put(item, objectMapper);
74 | return objectMapper;
75 | }
76 | }
77 |
--------------------------------------------------------------------------------
/src/main/java/com/jfilter/components/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Internal filtering classes
3 | *
4 | *
Classes used for extending od filtration features of standard Spring Web Service.
5 | */
6 |
7 | package com.jfilter.components;
--------------------------------------------------------------------------------
/src/main/java/com/jfilter/converter/FilterClassWrapper.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.converter;
2 |
3 | import com.jfilter.components.FilterAdvice;
4 | import com.jfilter.components.FilterConverter;
5 | import org.springframework.core.MethodParameter;
6 | import org.springframework.http.MediaType;
7 | import org.springframework.http.server.ServerHttpRequest;
8 | import org.springframework.http.server.ServerHttpResponse;
9 |
10 | import java.io.Serializable;
11 |
12 | /**
13 | * Class contains Serializable object and list of fields which should be kept or hidden
14 | *
15 | *
Class used to send additional information from {@link FilterAdvice} to {@link FilterConverter}
16 | */
17 | public class FilterClassWrapper implements Serializable {
18 | private static final long serialVersionUID = -6250969684778521840L;
19 | private final transient Object object;
20 | private MethodParameterDetails methodParameterDetails;
21 |
22 | /**
23 | * Creates a new instance of the {@link FilterClassWrapper} class.
24 | *
25 | * @param object Serializable object
26 | * @param methodParameterDetails objectMapper item
27 | */
28 | public FilterClassWrapper(Object object, MethodParameterDetails methodParameterDetails) {
29 | this.object = object;
30 | this.methodParameterDetails = methodParameterDetails;
31 | }
32 |
33 | /**
34 | * Serializable object retrieved from {@link FilterAdvice#beforeBodyWrite(Object, MethodParameter, MediaType, Class, ServerHttpRequest, ServerHttpResponse)}
35 | *
36 | * @return {@link Serializable}
37 | */
38 | public Object getObject() {
39 | return object;
40 | }
41 |
42 | /**
43 | * MethodParameter details retrieved from {@link FilterAdvice#beforeBodyWrite(Object, MethodParameter, MediaType, Class, ServerHttpRequest, ServerHttpResponse)}
44 | *
45 | * @return {@link MethodParameterDetails}
46 | */
47 | public MethodParameterDetails getMethodParameterDetails() {
48 | return methodParameterDetails;
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/src/main/java/com/jfilter/converter/MethodParameterDetails.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.converter;
2 |
3 | import com.jfilter.filter.FilterFields;
4 | import org.springframework.core.MethodParameter;
5 | import org.springframework.http.MediaType;
6 |
7 | import java.io.Serializable;
8 | import java.util.Objects;
9 |
10 | /**
11 | * This class contains details retrieved from {@link com.jfilter.components.FilterAdvice#beforeBodyWrite}
12 | */
13 | public class MethodParameterDetails implements Serializable {
14 | private static final long serialVersionUID = 2481023447068160651L;
15 |
16 | private MethodParameter methodParameter;
17 | private int methodHashCode;
18 | private MediaType mediaType;
19 | private FilterFields filterFields;
20 |
21 | /**
22 | * Constructor
23 | *
24 | * @param methodParameter method of Spring controller
25 | * @param mediaType {@link MediaType} media type of http message
26 | * @param filterFields {@link FilterFields} fields whish should be kept or hidden
27 | */
28 | public MethodParameterDetails(MethodParameter methodParameter, MediaType mediaType, FilterFields filterFields) {
29 | this.methodParameter = methodParameter;
30 | this.methodHashCode = methodParameter.getMethod().hashCode();
31 | this.mediaType = mediaType;
32 | this.filterFields = filterFields;
33 | }
34 |
35 | public MethodParameter getMethodParameter() {
36 | return methodParameter;
37 | }
38 |
39 | public int getMethodHashCode() {
40 | return methodHashCode;
41 | }
42 |
43 | public MediaType getMediaType() {
44 | return mediaType;
45 | }
46 |
47 | public FilterFields getFilterFields() {
48 | return filterFields;
49 | }
50 |
51 | @Override
52 | public boolean equals(Object o) {
53 | if (this == o) return true;
54 | if (!(o instanceof MethodParameterDetails)) return false;
55 | MethodParameterDetails that = (MethodParameterDetails) o;
56 | return methodHashCode == that.methodHashCode &&
57 | Objects.equals(methodParameter, that.methodParameter) &&
58 | Objects.equals(mediaType, that.mediaType) &&
59 | Objects.equals(filterFields, that.filterFields);
60 | }
61 |
62 | @Override
63 | public int hashCode() {
64 | return Objects.hash(methodParameter, methodHashCode, mediaType, filterFields);
65 | }
66 | }
67 |
--------------------------------------------------------------------------------
/src/main/java/com/jfilter/converter/MixinFilter.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.converter;
2 |
3 | import com.fasterxml.jackson.annotation.JsonFilter;
4 | import com.fasterxml.jackson.databind.ser.BeanPropertyWriter;
5 | import com.fasterxml.jackson.databind.ser.PropertyWriter;
6 | import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;
7 | import com.jfilter.filter.FilterFields;
8 |
9 | import java.io.Serializable;
10 | import java.util.Arrays;
11 | import java.util.List;
12 |
13 | import static com.jfilter.filter.FilterBehaviour.KEEP_FIELDS;
14 |
15 | /**
16 | * Filter used for filtering fields from object
17 | */
18 | @JsonFilter("com.jfilter.converter.MixinFilter")
19 | public class MixinFilter extends SimpleBeanPropertyFilter implements Serializable {
20 | private static final long serialVersionUID = 1780940093765526265L;
21 |
22 | private final FilterFields filterFields;
23 |
24 | public MixinFilter(FilterFields filterFields) {
25 | this.filterFields = filterFields;
26 | }
27 |
28 | @Override
29 | protected boolean include(BeanPropertyWriter writer) {
30 | return !isFilterable(writer.getMember().getDeclaringClass(), writer.getName());
31 | }
32 |
33 | @Override
34 | protected boolean include(PropertyWriter writer) {
35 | return !isFilterable(writer.getMember().getDeclaringClass(), writer.getName());
36 | }
37 |
38 | private boolean fieldSpecified(List> classes, String fieldName) {
39 | return classes.stream()
40 | .anyMatch(clazz -> fieldSpecified(clazz, fieldName));
41 | }
42 |
43 | private boolean fieldSpecified(Class> clazz, String fieldName) {
44 | List classFields = filterFields.getFieldsMap().get(clazz);
45 |
46 | if (classFields != null) {
47 | return classFields.stream()
48 | .anyMatch(field -> field.equals(fieldName));
49 | } else
50 | return false;
51 | }
52 |
53 | private boolean isFilterable(Class> clazz, String fieldName) {
54 | boolean fieldFound = fieldSpecified(Arrays.asList(void.class, clazz), fieldName);
55 | return (filterFields.getFilterBehaviour() == KEEP_FIELDS) != fieldFound;
56 | }
57 | }
58 |
--------------------------------------------------------------------------------
/src/main/java/com/jfilter/converter/SerializationConfig.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.converter;
2 |
3 | import com.jfilter.components.FilterConfiguration;
4 | import com.jfilter.components.FilterObjectMapperBuilder;
5 |
6 | public class SerializationConfig {
7 | private boolean dateTimeModule;
8 |
9 | public SerializationConfig() {
10 | this.dateTimeModule = true;
11 | }
12 |
13 | /**
14 | * Get using of JavaDateTimeModule state
15 | *
16 | * @return true if using is enabled, otherwise false
17 | */
18 | public boolean isDateTimeModuleEnabled() {
19 | return dateTimeModule;
20 | }
21 |
22 | /**
23 | * Enabling/disabling using of JavaDateTimeModule in ObjectMappers
24 | *
25 | * @param dateTimeModule if true {@link FilterObjectMapperBuilder} will add JavaTimeModule to ObjectMappers, otherwise not
26 | * @return instance of {@link FilterConfiguration}
27 | */
28 | public SerializationConfig enableDateTimeModule(boolean dateTimeModule) {
29 | this.dateTimeModule = dateTimeModule;
30 | return this;
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/src/main/java/com/jfilter/converter/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Converter classes
3 | *
4 | * Classes used for
5 | *
6 | * Filter ignorable fields
7 | * Serialization to JSON format
8 | * Serialization to XML format
9 | *
10 | */
11 |
12 | package com.jfilter.converter;
--------------------------------------------------------------------------------
/src/main/java/com/jfilter/filter/BaseFilter.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.filter;
2 |
3 | import com.jfilter.request.RequestMethodParameter;
4 | import com.jfilter.request.RequestSession;
5 | import org.springframework.core.MethodParameter;
6 |
7 | /**
8 | * This class is base class of filtration mechanism
9 | */
10 | public abstract class BaseFilter {
11 | private final RequestMethodParameter requestMethodParameter;
12 |
13 | /**
14 | * Creates a new instance of the {@link BaseFilter} class.
15 | *
16 | * @param methodParameter {@link MethodParameter}
17 | */
18 | protected BaseFilter(MethodParameter methodParameter) {
19 | this.requestMethodParameter = new RequestMethodParameter(methodParameter);
20 | }
21 |
22 | /**
23 | * Returns RequestMethodParameter
24 | * @return {@link RequestMethodParameter}
25 | */
26 | protected RequestMethodParameter getRequestMethodParameter() {
27 | return requestMethodParameter;
28 | }
29 |
30 | protected abstract void setConfig(MethodParameter methodParameter);
31 |
32 | /**
33 | * Returns list of ignorable fields of object
34 | * @param object {@link Object}
35 | * @param request {@link RequestSession}
36 | * @return {@link FilterFields}
37 | */
38 | public abstract FilterFields getFields(Object object, RequestSession request);
39 | }
40 |
--------------------------------------------------------------------------------
/src/main/java/com/jfilter/filter/DynamicFilter.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.filter;
2 |
3 | import com.jfilter.components.DynamicFilterProvider;
4 |
5 | import java.lang.annotation.Documented;
6 | import java.lang.annotation.ElementType;
7 | import java.lang.annotation.Retention;
8 | import java.lang.annotation.RetentionPolicy;
9 | import java.lang.annotation.Target;
10 |
11 | /**
12 | * This annotation used for configuring of dynamic filter
13 | *
14 | * It is typically used in combination with annotation {@link DynamicFilterComponent} annotation.
15 | * {@link DynamicFilterProvider} attempts to get FilterFields from value;
16 | * Value should be class which implements {@link DynamicFilterEvent}
17 | */
18 | @Retention(RetentionPolicy.RUNTIME)
19 | @Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD, ElementType.TYPE})
20 | @Documented
21 | public @interface DynamicFilter {
22 | Class extends DynamicFilterEvent> value();
23 | }
--------------------------------------------------------------------------------
/src/main/java/com/jfilter/filter/DynamicFilterComponent.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.filter;
2 |
3 | import org.springframework.stereotype.Component;
4 |
5 | import java.lang.annotation.Documented;
6 | import java.lang.annotation.ElementType;
7 | import java.lang.annotation.Retention;
8 | import java.lang.annotation.RetentionPolicy;
9 | import java.lang.annotation.Target;
10 |
11 | /**
12 | * Indicates that an annotated class is a "DynamicFilterComponent" (e.g. a dynamic filter component).
13 | *
14 | *
This annotation serves as a specialization of {@link Component @Component},
15 | * allowing for implementation classes to be autodetected through classpath scanning.
16 | * It is typically used in combination with annotated handler methods based on the
17 | * {@link DynamicFilter} annotation.
18 | */
19 | @Retention(RetentionPolicy.RUNTIME)
20 | @Target({ElementType.TYPE})
21 | @Documented
22 | @Component
23 | public @interface DynamicFilterComponent {
24 | }
--------------------------------------------------------------------------------
/src/main/java/com/jfilter/filter/DynamicFilterEvent.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.filter;
2 |
3 | import com.comparator.Comparator;
4 | import com.jfilter.components.DynamicFilterProvider;
5 | import com.jfilter.request.RequestSession;
6 |
7 | /**
8 | * Dynamic filter event
9 | *
10 | *
This event calls when {@link DynamicFilterProvider} attempts to
11 | * get {@link FilterFields} from inherited class
12 | */
13 | public interface DynamicFilterEvent {
14 |
15 | /**
16 | * Request event handler
17 | *
18 | * @param comparator {@link Comparator} comparator object which will be used by {@link DynamicFilterProvider} for retrieve {@link FilterFields}
19 | */
20 | void onRequest(Comparator comparator);
21 | }
22 |
--------------------------------------------------------------------------------
/src/main/java/com/jfilter/filter/FieldFilter.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.filter;
2 |
3 | import com.jfilter.request.RequestSession;
4 | import org.springframework.core.MethodParameter;
5 | import java.util.Arrays;
6 |
7 | /**
8 | * This class used for simple filtration of object's fields based on FieldFilterSetting configuration
9 | */
10 | public class FieldFilter extends BaseFilter {
11 |
12 | /**
13 | * Array of {@link FieldFilterSetting} configuration annotations
14 | */
15 | private FieldFilterSetting[] config;
16 |
17 | /**
18 | * Creates a new instance of the {@link FieldFilter} class.
19 | *
20 | * @param methodParameter {@link MethodParameter} Rest method of Rest controller
21 | */
22 | public FieldFilter(MethodParameter methodParameter) {
23 | super(methodParameter);
24 | setConfig(methodParameter);
25 | }
26 |
27 | /**
28 | * Attempt to retrieve all FieldFilterSetting annotations from method
29 | *
30 | * @param methodParameter {@link MethodParameter} method parameter
31 | */
32 | @Override
33 | protected void setConfig(MethodParameter methodParameter) {
34 | config = getRequestMethodParameter().getSettingAnnotations();
35 | }
36 |
37 | @Override
38 | public FilterFields getFields(Object object, RequestSession request) {
39 | FilterFields result = new FilterFields();
40 |
41 | for (FieldFilterSetting setting : config) {
42 | result.appendToMap(setting.className(), Arrays.asList(setting.fields()));
43 | result.setFilterBehaviour(setting.behaviour());
44 | }
45 |
46 | return result;
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/src/main/java/com/jfilter/filter/FieldFilterSetting.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.filter;
2 |
3 |
4 | import java.lang.annotation.ElementType;
5 | import java.lang.annotation.Repeatable;
6 | import java.lang.annotation.Retention;
7 | import java.lang.annotation.RetentionPolicy;
8 | import java.lang.annotation.Target;
9 |
10 | /**
11 | * This annotation used for configuring of field ignoring
12 | */
13 | @Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD, ElementType.TYPE})
14 | @Retention(RetentionPolicy.RUNTIME)
15 | @Repeatable(value = FieldFilterSettings.class )
16 | public @interface FieldFilterSetting {
17 | /**
18 | * Class name of filtering object
19 | *
20 | * @return {@link Class} class name of filterable class
21 | * May be null
22 | */
23 | Class> className() default void.class;
24 |
25 | /**
26 | *
27 | * @return array of filterable items
28 | */
29 | String[] fields() default {};
30 |
31 | /**
32 | *
33 | * @return behaviour of filter {@link FilterBehaviour}
34 | */
35 | FilterBehaviour behaviour() default FilterBehaviour.HIDE_FIELDS;
36 | }
--------------------------------------------------------------------------------
/src/main/java/com/jfilter/filter/FieldFilterSettings.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.filter;
2 |
3 | import java.lang.annotation.ElementType;
4 | import java.lang.annotation.Retention;
5 | import java.lang.annotation.RetentionPolicy;
6 | import java.lang.annotation.Target;
7 |
8 | /**
9 | * Repeatable annotation of {@link FieldFilterSetting} interface
10 | */
11 | @Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD, ElementType.TYPE})
12 | @Retention(RetentionPolicy.RUNTIME)
13 | public @interface FieldFilterSettings {
14 |
15 | /**
16 | * Array of {@link FieldFilterSetting}
17 | *
18 | * @return array of {@link FieldFilterSetting}
19 | */
20 | FieldFilterSetting[] value();
21 | }
--------------------------------------------------------------------------------
/src/main/java/com/jfilter/filter/FileFilterSetting.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.filter;
2 |
3 | import java.lang.annotation.ElementType;
4 | import java.lang.annotation.Retention;
5 | import java.lang.annotation.RetentionPolicy;
6 | import java.lang.annotation.Target;
7 |
8 | /**
9 | * This annotation used for loading and parsing xml file annotated configurations
10 | */
11 | @Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD, ElementType.TYPE})
12 | @Retention(RetentionPolicy.RUNTIME)
13 | public @interface FileFilterSetting {
14 |
15 | /**
16 | * File name
17 | *
18 | * @return {@link String} file name
19 | * Default location id /resources/
20 | */
21 | String fileName() default "";
22 | }
23 |
--------------------------------------------------------------------------------
/src/main/java/com/jfilter/filter/FilterBehaviour.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.filter;
2 |
3 | public enum FilterBehaviour {
4 | /**
5 | * If this option selected, JFilter will hide selected fields.
6 | */
7 | HIDE_FIELDS,
8 |
9 |
10 | /**
11 | * If this option selected, JFilter will hide all other fields but not selected ones.
12 | */
13 | KEEP_FIELDS
14 | }
15 |
--------------------------------------------------------------------------------
/src/main/java/com/jfilter/filter/FilterEvent.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.filter;
2 |
3 | import org.springframework.core.MethodParameter;
4 |
5 | /**
6 | * Interface used in FilterFactory for configuring list of filters
7 | */
8 | @FunctionalInterface
9 | public interface FilterEvent {
10 | /**
11 | * Build base {@link BaseFilter}
12 | *
13 | * @param methodParameter {@link MethodParameter} method parameter
14 | * @return object instance of inherited class from {@link BaseFilter}
15 | */
16 | BaseFilter build(MethodParameter methodParameter);
17 | }
--------------------------------------------------------------------------------
/src/main/java/com/jfilter/filter/FilterFactory.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.filter;
2 |
3 | import org.springframework.core.MethodParameter;
4 | import java.lang.annotation.Annotation;
5 | import java.util.HashMap;
6 | import java.util.Map;
7 |
8 | /**
9 | * Filters factory
10 | */
11 | public abstract class FilterFactory {
12 | /**
13 | * List of available filters
14 | */
15 | private static final Map, FilterEvent> filterList = initFilterList();
16 |
17 | /**
18 | * Creates a new instance of the {@link FilterFactory} class.
19 | *
20 | * Method is private to prevent of inheritance
21 | *
22 | */
23 | private FilterFactory() {
24 | }
25 |
26 | /**
27 | * Filter list initialization
28 | *
29 | * @return {@link HashMap} map of filters which can process specified annotations
30 | */
31 | private static Map, FilterEvent> initFilterList() {
32 | Map, FilterEvent> items = new HashMap<>();
33 | items.put(FieldFilterSetting.class, FieldFilter::new);
34 | items.put(FieldFilterSettings.class, FieldFilter::new);
35 | items.put(SessionStrategy.class, StrategyFilter::new);
36 | items.put(SessionStrategies.class, StrategyFilter::new);
37 | items.put(FileFilterSetting.class, FileFilter::new);
38 | return items;
39 | }
40 |
41 | /**
42 | * Attempt to find equal annotation in method and in initialized filter list
43 | *
44 | * @param methodParameter {@link MethodParameter} method
45 | * @return {@link Annotation} supported annotation, else null
46 | */
47 | public static Annotation getFilterAnnotation(MethodParameter methodParameter) {
48 | //Search annotation in method
49 | for (Annotation annotation : methodParameter.getMethod().getDeclaredAnnotations()) {
50 | if (FilterFactory.filterList.containsKey(annotation.annotationType()))
51 | return annotation;
52 | }
53 |
54 | //Search annotation in containing class
55 | for (Annotation annotation : methodParameter.getContainingClass().getDeclaredAnnotations()) {
56 | if (FilterFactory.filterList.containsKey(annotation.annotationType()))
57 | return annotation;
58 | }
59 | return null;
60 | }
61 |
62 |
63 | /**
64 | * Retrieve filter from filter list by annotation defined in method
65 | *
66 | * @param methodParameter {@link MethodParameter} method
67 | * @return object instance of inherited class from {@link BaseFilter}
68 | */
69 | public static BaseFilter getFromFactory(MethodParameter methodParameter) {
70 | Annotation annotation = getFilterAnnotation(methodParameter);
71 |
72 | if (annotation != null) {
73 | return FilterFactory.filterList
74 | .get(annotation.annotationType())
75 | .build(methodParameter);
76 | } else
77 | return null;
78 | }
79 |
80 | /**
81 | * Check if specified annotations, which accepted in FieldFilter or StrategyFilter classes is annotated in method
82 | *
83 | * @param methodParameter {@link MethodParameter} Rest method of Rest controller
84 | * @return true if specified annotations is found
85 | */
86 | public static boolean isAccept(MethodParameter methodParameter) {
87 | //search annotations on method
88 | for (Annotation annotation : methodParameter.getMethod().getDeclaredAnnotations()) {
89 | if (FilterFactory.filterList.containsKey(annotation.annotationType())) {
90 | return true;
91 | }
92 | }
93 |
94 | //search annotations on containing class
95 | for (Annotation annotation : methodParameter.getContainingClass().getDeclaredAnnotations()) {
96 | if (FilterFactory.filterList.containsKey(annotation.annotationType())) {
97 | return true;
98 | }
99 | }
100 | return false;
101 | }
102 |
103 | }
104 |
--------------------------------------------------------------------------------
/src/main/java/com/jfilter/filter/SessionStrategies.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.filter;
2 |
3 | import java.lang.annotation.ElementType;
4 | import java.lang.annotation.Retention;
5 | import java.lang.annotation.RetentionPolicy;
6 | import java.lang.annotation.Target;
7 |
8 | /**
9 | * Repeatable annotation of {@link SessionStrategy} interface
10 | */
11 | @Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD, ElementType.TYPE})
12 | @Retention(RetentionPolicy.RUNTIME)
13 | public @interface SessionStrategies {
14 | /**
15 | * Array of {@link SessionStrategy}
16 | *
17 | * @return array of {@link SessionStrategy}
18 | */
19 | SessionStrategy[] value();
20 | }
--------------------------------------------------------------------------------
/src/main/java/com/jfilter/filter/SessionStrategy.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.filter;
2 |
3 |
4 | import java.lang.annotation.ElementType;
5 | import java.lang.annotation.Repeatable;
6 | import java.lang.annotation.Retention;
7 | import java.lang.annotation.RetentionPolicy;
8 | import java.lang.annotation.Target;
9 |
10 | /**
11 | * This annotation used for configuring of strategy of filtering
12 | */
13 | @Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD, ElementType.TYPE})
14 | @Retention(RetentionPolicy.RUNTIME)
15 | @Repeatable(SessionStrategies.class)
16 | public @interface SessionStrategy {
17 | /**
18 | * Session parameter attribute name
19 | *
20 | * @return {@link String} attribute name which will be find in HTTPSession attributes
21 | * May be null
22 | */
23 | String attributeName() default "";
24 |
25 | /**
26 | * Session parameter attribute value
27 | *
28 | * @return {@link String} attribute value
29 | * May be null
30 | */
31 | String attributeValue() default "";
32 |
33 | /**
34 | * Array of {@link FieldFilterSetting}
35 | * @return array of {@link FieldFilterSetting} which configures of field filtering
36 | */
37 | FieldFilterSetting[] ignoreFields() default {};
38 | }
--------------------------------------------------------------------------------
/src/main/java/com/jfilter/filter/StrategyFilter.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.filter;
2 |
3 | import com.jfilter.request.RequestSession;
4 | import org.springframework.core.MethodParameter;
5 |
6 | import java.util.Arrays;
7 |
8 | /**
9 | * This class used for strategy filtration of object's fields based on SessionStrategy configuration
10 | */
11 | public class StrategyFilter extends BaseFilter {
12 | /**
13 | * Array of {@link SessionStrategy} configuration annotations
14 | */
15 | private SessionStrategy[] config;
16 |
17 | /**
18 | * Creates a new instance of the {@link StrategyFilter} class.
19 | *
20 | * @param methodParameter {@link MethodParameter} Rest method of Rest controller
21 | */
22 | public StrategyFilter(MethodParameter methodParameter) {
23 | super(methodParameter);
24 | setConfig(methodParameter);
25 | }
26 |
27 | /**
28 | * Attempt to retrieve all FieldFilterSetting annotations from method
29 | *
30 | * @param methodParameter {@link MethodParameter} method parameter
31 | */
32 | @Override
33 | protected void setConfig(MethodParameter methodParameter) {
34 | config = getRequestMethodParameter().getStrategyAnnotations(methodParameter);
35 | }
36 |
37 | @Override
38 | public FilterFields getFields(Object object, RequestSession request) {
39 | FilterFields result = new FilterFields();
40 |
41 | for (SessionStrategy strategy : config) {
42 | if (request.isSessionPropertyExists(strategy.attributeName(),
43 | strategy.attributeValue())) {
44 |
45 | for (FieldFilterSetting setting : strategy.ignoreFields()) {
46 | result.appendToMap(setting.className(), Arrays.asList(setting.fields()));
47 | result.setFilterBehaviour(setting.behaviour());
48 | }
49 | }
50 | }
51 |
52 | return result;
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/src/main/java/com/jfilter/filter/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Filter classes and annotations
3 | *
4 | * Classes used for specify and process
5 | *
6 | * Field filter annotations
7 | * Session strategy filter annotations
8 | * File configuration filter annotations
9 | * Dynamic filter annotations
10 | *
11 | */
12 |
13 | package com.jfilter.filter;
--------------------------------------------------------------------------------
/src/main/java/com/jfilter/mapper/FilterObjectMapper.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.mapper;
2 |
3 | import com.fasterxml.jackson.databind.ObjectMapper;
4 | import com.fasterxml.jackson.databind.ObjectWriter;
5 | import com.fasterxml.jackson.databind.ser.FilterProvider;
6 | import com.jfilter.components.FilterConfiguration;
7 |
8 | /**
9 | * FilterObjectMapper class extends standard ObjectMapper
10 | *
11 | * This class uses FilterObjectWriter insstead of standard ObjectWriter
12 | */
13 | @SuppressWarnings("Duplicates")
14 | public class FilterObjectMapper extends ObjectMapper {
15 | private static final long serialVersionUID = -7353120387497261652L;
16 | private FilterConfiguration filterConfiguration;
17 |
18 | public FilterObjectMapper(FilterConfiguration filterConfiguration) {
19 | this.filterConfiguration = filterConfiguration;
20 | }
21 |
22 | @Override
23 | public ObjectWriter writer() {
24 | return FilterObjectWriter.congfiguredWriter(this, filterConfiguration);
25 | }
26 |
27 | @Override
28 | public ObjectWriter writerWithView(Class> serializationView) {
29 | return FilterObjectWriter.congfiguredWriter(this, serializationView, filterConfiguration);
30 | }
31 |
32 | @Override
33 | public ObjectWriter writer(FilterProvider filterProvider) {
34 | return FilterObjectWriter.congfiguredWriter(this, filterProvider, filterConfiguration);
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/src/main/java/com/jfilter/mapper/FilterObjectWriter.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.mapper;
2 |
3 | import com.fasterxml.jackson.core.JsonGenerator;
4 | import com.fasterxml.jackson.core.PrettyPrinter;
5 | import com.fasterxml.jackson.databind.JavaType;
6 | import com.fasterxml.jackson.databind.ObjectMapper;
7 | import com.fasterxml.jackson.databind.ObjectWriter;
8 | import com.fasterxml.jackson.databind.SerializationConfig;
9 | import com.fasterxml.jackson.databind.ser.FilterProvider;
10 | import com.jfilter.components.FilterConfiguration;
11 | import com.jfilter.converter.FilterClassWrapper;
12 |
13 | import java.io.IOException;
14 |
15 | /**
16 | * FilterObjectWriter class extends ObjectWriter
17 | *
18 | *
This class allows using of field filtration features
19 | */
20 | public class FilterObjectWriter extends ObjectWriter {
21 | private static final long serialVersionUID = -5795887415761168717L;
22 | private FilterConfiguration filterConfiguration;
23 |
24 | public static FilterObjectWriter congfiguredWriter(ObjectMapper mapper, FilterConfiguration filterConfiguration) {
25 | return new FilterObjectWriter(mapper, mapper.getSerializationConfig())
26 | .setFilterConfiguration(filterConfiguration);
27 | }
28 |
29 | public static FilterObjectWriter congfiguredWriter(ObjectMapper mapper, SerializationConfig config, FilterConfiguration filterConfiguration) {
30 | return new FilterObjectWriter(mapper, config)
31 | .setFilterConfiguration(filterConfiguration);
32 | }
33 |
34 | public static FilterObjectWriter congfiguredWriter(ObjectMapper mapper, Class> serializationView, FilterConfiguration filterConfiguration) {
35 | return congfiguredWriter(mapper, mapper.getSerializationConfig().withView(serializationView), filterConfiguration);
36 | }
37 |
38 | public static FilterObjectWriter congfiguredWriter(ObjectMapper mapper, FilterProvider filterProvider, FilterConfiguration filterConfiguration) {
39 | return congfiguredWriter(mapper, mapper.getSerializationConfig().withFilters(filterProvider), filterConfiguration);
40 | }
41 |
42 |
43 | protected FilterObjectWriter(ObjectMapper mapper, SerializationConfig config) {
44 | super(mapper, config);
45 | }
46 |
47 | protected FilterObjectWriter(ObjectWriter base, SerializationConfig config,
48 | GeneratorSettings genSettings, Prefetch prefetch) {
49 | super(base, config, genSettings, prefetch);
50 | }
51 |
52 | @Override
53 | public ObjectWriter forType(JavaType rootType) {
54 | return new FilterObjectWriter(this, _config, _generatorSettings, _prefetch.forRootType(this, rootType));
55 | }
56 |
57 | public ObjectWriter with(PrettyPrinter pp) {
58 | return new FilterObjectWriter(this, _config, _generatorSettings.with(pp), _prefetch);
59 | }
60 |
61 | public FilterConfiguration getFilterConfiguration() {
62 | return filterConfiguration;
63 | }
64 |
65 | public FilterObjectWriter setFilterConfiguration(FilterConfiguration filterConfiguration) {
66 | this.filterConfiguration = filterConfiguration;
67 | return this;
68 | }
69 |
70 | /**
71 | * Method that can be used to serialize any Java value as
72 | * JSON output, using provided {@link JsonGenerator}
73 | *
74 | * @param gen {@link JsonGenerator}
75 | * @param value serializable object
76 | * @throws IOException exception
77 | */
78 | @Override
79 | public void writeValue(JsonGenerator gen, Object value) throws IOException {
80 | if (value instanceof FilterClassWrapper) {
81 | FilterClassWrapper wrapper = (FilterClassWrapper) value;
82 |
83 | ObjectMapper objectMapper = filterConfiguration.getObjectMapperCache()
84 | .findObjectMapper(wrapper.getMethodParameterDetails());
85 |
86 | objectMapper.writeValue(gen, wrapper.getObject());
87 | } else
88 | super.writeValue(gen, value);
89 | }
90 |
91 | }
92 |
--------------------------------------------------------------------------------
/src/main/java/com/jfilter/mapper/FilterXmlMapper.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.mapper;
2 |
3 | import com.fasterxml.jackson.databind.ObjectWriter;
4 | import com.fasterxml.jackson.databind.ser.FilterProvider;
5 | import com.fasterxml.jackson.dataformat.xml.XmlMapper;
6 | import com.jfilter.components.FilterConfiguration;
7 |
8 | /**
9 | * FilterObjectMapper class extends standard XmlMapper
10 | *
11 | *
This class uses FilterObjectWriter insstead of standard ObjectWriter
12 | */
13 | @SuppressWarnings("Duplicates")
14 | public class FilterXmlMapper extends XmlMapper {
15 | private static final long serialVersionUID = 3983476365887537283L;
16 | private FilterConfiguration filterConfiguration;
17 |
18 | public FilterXmlMapper(FilterConfiguration filterConfiguration) {
19 | this.filterConfiguration = filterConfiguration;
20 | }
21 |
22 | @Override
23 | public ObjectWriter writer() {
24 | return FilterObjectWriter.congfiguredWriter(this, filterConfiguration);
25 | }
26 |
27 | @Override
28 | public ObjectWriter writerWithView(Class> serializationView) {
29 | return FilterObjectWriter.congfiguredWriter(this, serializationView, filterConfiguration);
30 | }
31 |
32 | @Override
33 | public ObjectWriter writer(FilterProvider filterProvider) {
34 | return FilterObjectWriter.congfiguredWriter(this, getSerializationConfig().withFilters(filterProvider), filterConfiguration);
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/src/main/java/com/jfilter/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Contains main EnableJsonFilter annotation and exceptions
3 | *
4 | */
5 |
6 | package com.jfilter;
--------------------------------------------------------------------------------
/src/main/java/com/jfilter/request/RequestMethodParameter.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.request;
2 |
3 | import com.jfilter.filter.FieldFilterSetting;
4 | import com.jfilter.filter.FieldFilterSettings;
5 | import com.jfilter.filter.SessionStrategies;
6 | import com.jfilter.filter.SessionStrategy;
7 | import org.springframework.core.MethodParameter;
8 | import java.lang.annotation.Annotation;
9 |
10 |
11 | /**
12 | * Annotation request class
13 | *
14 | * This is request class used to help find annotations in class or method
15 | */
16 | public class RequestMethodParameter extends MethodParameter {
17 |
18 | /**
19 | * Creates a new instance of the {@link RequestMethodParameter} class.
20 | *
21 | * @param methodParameter {@link MethodParameter}
22 | */
23 | public RequestMethodParameter(MethodParameter methodParameter) {
24 | super(methodParameter);
25 | }
26 |
27 | /**
28 | * Search for specified type list of annotation
29 | *
30 | * @param annotationClass {@link Annotation} name of annotation to search
31 | * @param {@link Annotation} generic class
32 | * @return {@link Annotation} list of found annotations if found, else an array of length zero
33 | */
34 | private T[] getDeclaredAnnotations(Class annotationClass) {
35 | T[] annotations = getMethod().getDeclaredAnnotationsByType(annotationClass);
36 | Class> containingClass = getContainingClass();
37 | annotations = annotations.length != 0 ? annotations : containingClass.getDeclaredAnnotationsByType(annotationClass);
38 | return annotations;
39 | }
40 |
41 | /**
42 | * Get declared annotation
43 | *
44 | * Attempts to find filter annotations in {@link MethodParameter} or in containing class
45 | *
46 | * @param annotationClass {@link Annotation} name of annotation to search
47 | * @param {@link Annotation} generic class
48 | * @return {@link Annotation} annotation if found, else null
49 | */
50 | public T getDeclaredAnnotation(Class annotationClass) {
51 | //Get annotation from method
52 | T annotation = getMethod().getDeclaredAnnotation(annotationClass);
53 | //If annotation is null try to get annotation from containing class
54 | annotation = annotation != null ? annotation : getContainingClass().getDeclaredAnnotation(annotationClass);
55 |
56 | return annotation;
57 | }
58 |
59 | /**
60 | * Search for {@link FieldFilterSetting} in method
61 | *
62 | * @return list of {@link FieldFilterSetting} if this type of annotation declared in method
63 | */
64 | public FieldFilterSetting[] getSettingAnnotations() {
65 | FieldFilterSettings settings = getDeclaredAnnotation(FieldFilterSettings.class);
66 | if (settings != null) {
67 | return settings.value();
68 | } else
69 | return getDeclaredAnnotations(FieldFilterSetting.class);
70 | }
71 |
72 | /**
73 | * Search for {@link SessionStrategy} in method
74 | *
75 | * @param methodParameter {@link MethodParameter} object's method which may have annotation
76 | * @return list of {@link SessionStrategy} if this type of annotation declared in method
77 | */
78 | public SessionStrategy[] getStrategyAnnotations(MethodParameter methodParameter) {
79 | SessionStrategies strategies = getDeclaredAnnotation(SessionStrategies.class);
80 | if (strategies != null) {
81 | return strategies.value();
82 | } else
83 | return getDeclaredAnnotations(SessionStrategy.class);
84 | }
85 | }
86 |
--------------------------------------------------------------------------------
/src/main/java/com/jfilter/request/RequestSession.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.request;
2 |
3 | import org.springframework.http.server.ServerHttpRequest;
4 | import org.springframework.util.StringUtils;
5 | import javax.servlet.http.HttpServletRequest;
6 | import javax.servlet.http.HttpSession;
7 | import java.util.Enumeration;
8 | import java.util.Objects;
9 |
10 | /**
11 | * Session request class
12 | *
13 | * This is request class used to help working with Http Session
14 | */
15 | public class RequestSession {
16 | private final HttpSession session;
17 | private final HttpServletRequest request;
18 |
19 |
20 | /**
21 | * Creates a new instance of the {@link RequestSession} class.
22 | *
23 | * @param request {@link HttpServletRequest}
24 | * @throws IllegalArgumentException if request is null.
25 | */
26 | public RequestSession(HttpServletRequest request) {
27 | if (request == null)
28 | throw new IllegalArgumentException();
29 | this.request = request;
30 | this.session = request.getSession();
31 | }
32 |
33 | /**
34 | * Return session extracted from {@link ServerHttpRequest}
35 | *
36 | * @return {@link HttpSession}
37 | */
38 | public HttpSession getSession() {
39 | return session;
40 | }
41 |
42 | /**
43 | * Return initial request {@link HttpServletRequest}
44 | *
45 | * @return {@link HttpServletRequest}
46 | */
47 | public HttpServletRequest getRequest() {
48 | return request;
49 | }
50 |
51 | private boolean hasSessionProperty(String propertyName) {
52 | Enumeration e = session.getAttributeNames();
53 |
54 | while (e.hasMoreElements()) {
55 | String attribute = e.nextElement();
56 | if (attribute.equals(propertyName))
57 | return true;
58 | }
59 | return false;
60 | }
61 |
62 | /**
63 | * Get attribute value from session attributes
64 | *
65 | * @param attributeName {@link String} attribute name
66 | * @return {@link Object} attribute value if exists, else null
67 | */
68 | public Object getSessionProperty(String attributeName) {
69 | return attributeName != null ? session.getAttribute(attributeName) : null;
70 | }
71 |
72 | /**
73 | * Check if session properties has property
74 | *
75 | * Find property with name and value specified in method params
76 | *
77 | * @param attributeName {@link String} attribute name
78 | * @param attributeValue {@link String} expected attribute value
79 | * @return {@link Boolean} true if property with name and value is exist, else false
80 | */
81 | public boolean isSessionPropertyExists(String attributeName, String attributeValue) {
82 | if (attributeName == null && attributeValue == null) {
83 | return false;
84 | } else if (StringUtils.isEmpty(attributeName) && StringUtils.isEmpty(attributeValue)) {
85 | return true;
86 | } else if (hasSessionProperty(attributeName)) {
87 | Object sessionObject = getSessionProperty(attributeName);
88 | return Objects.equals(sessionObject, attributeValue);
89 | } else
90 | return false;
91 | }
92 | }
93 |
--------------------------------------------------------------------------------
/src/main/java/com/jfilter/request/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Request method parameter classes
3 | *
4 | *
Classes used for extending standard
5 | *
6 | * {@link org.springframework.core.MethodParameter} which can contains additional filter annotations
7 | * {@link javax.servlet.http.HttpSession} which contains session parameters which could be used in Session Strategy filtration
8 | *
9 | */
10 |
11 | package com.jfilter.request;
12 |
13 |
14 |
--------------------------------------------------------------------------------
/src/main/java/com/jfilter/util/FilterUtil.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.util;
2 |
3 | import com.jfilter.components.DynamicSessionFilter;
4 | import com.jfilter.filter.DynamicFilter;
5 | import com.jfilter.filter.FilterFields;
6 | import org.springframework.core.MethodParameter;
7 | import org.springframework.web.bind.annotation.RestController;
8 |
9 | import javax.servlet.http.HttpServletRequest;
10 | import javax.servlet.http.HttpSession;
11 | import java.util.ArrayList;
12 | import java.util.List;
13 |
14 | /**
15 | * Filter utils class
16 | */
17 | public class FilterUtil {
18 |
19 | private FilterUtil() {
20 | throw new IllegalStateException("FilterUtil class");
21 | }
22 |
23 | /**
24 | * Sets filterFields object into http request ATTRIBUTE_FILTER_FIELDS attribute
25 | *
26 | * @param request {@link HttpServletRequest} http request
27 | * @param filterFields {@link FilterFields} instance of FilterFields
28 | */
29 | public static void useFilter(HttpServletRequest request, FilterFields filterFields) {
30 | request.setAttribute(DynamicSessionFilter.ATTRIBUTE_FILTER_FIELDS, filterFields);
31 | }
32 |
33 | /**
34 | * Sets filterFields object into http session ATTRIBUTE_FILTER_FIELDS attribute
35 | *
36 | * @param session {@link HttpSession} http session
37 | * @param filterFields {@link FilterFields} instance of FilterFields
38 | */
39 | public static void useFilter(HttpSession session, FilterFields filterFields) {
40 | session.setAttribute(DynamicSessionFilter.ATTRIBUTE_FILTER_FIELDS, filterFields);
41 | }
42 |
43 | /**
44 | * Extract DynamicFilter from class annotated with DynamicFilter annotation and containing current method
45 | *
46 | * @param methodParameter method which contains in class annotated with {@link RestController}
47 | * @param annotationClass class inherited from {@link DynamicFilter}
48 | * @param generic of {@link DynamicFilter}
49 | * @return object inherited from {@link DynamicFilter}
50 | */
51 | @SuppressWarnings("unchecked")
52 | public static T getClassDeclaredAnnotation(MethodParameter methodParameter, Class extends DynamicFilter> annotationClass) {
53 | return (T) methodParameter.getContainingClass().getDeclaredAnnotation(annotationClass);
54 | }
55 |
56 | /**
57 | * Extract DynamicFilter from method annotated with DynamicFilter annotation
58 | *
59 | * @param methodParameter method which contains in class annotated with {@link RestController}
60 | * @param annotationClass class inherited from {@link DynamicFilter}
61 | * @param generic of {@link DynamicFilter}
62 | * @return object inherited from {@link DynamicFilter}
63 | */
64 | @SuppressWarnings("unchecked")
65 | public static T getMethodDeclaredAnnotation(MethodParameter methodParameter, Class extends DynamicFilter> annotationClass) {
66 | return (T) methodParameter.getMethod().getDeclaredAnnotation(annotationClass);
67 | }
68 |
69 | public static List getDeclaredAnnotations(MethodParameter methodParameter, Class extends DynamicFilter> annotationClass) {
70 | List annotations = new ArrayList<>();
71 | T classAnnotation = getClassDeclaredAnnotation(methodParameter, annotationClass);
72 | T methodAnnotation = getMethodDeclaredAnnotation(methodParameter, annotationClass);
73 |
74 | if (classAnnotation != null)
75 | annotations.add(classAnnotation);
76 | if (methodAnnotation != null)
77 | annotations.add(methodAnnotation);
78 |
79 | return annotations;
80 | }
81 | }
82 |
--------------------------------------------------------------------------------
/src/main/java/com/jfilter/util/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Contains utility classes
3 | *
4 | */
5 |
6 | package com.jfilter.util;
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/FilterConstantsHelperTest.java:
--------------------------------------------------------------------------------
1 | package com.jfilter;
2 |
3 | import org.junit.Test;
4 | import java.lang.reflect.InvocationTargetException;
5 |
6 | public class FilterConstantsHelperTest {
7 |
8 | @Test(expected = InvocationTargetException.class)
9 | public void constructorTest() throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
10 | TestUtils.instantiateObject(FilterConstantsHelper.class);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/FilterExceptionTest.java:
--------------------------------------------------------------------------------
1 | package com.jfilter;
2 |
3 | import org.junit.Test;
4 | import static org.junit.Assert.assertNotNull;
5 |
6 | public class FilterExceptionTest {
7 |
8 | @Test(expected = FilterException.class)
9 | public void testException() {
10 | FilterException exception =new FilterException(new IllegalAccessException());
11 | assertNotNull(exception);
12 |
13 | throw exception;
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/TestUtils.java:
--------------------------------------------------------------------------------
1 | package com.jfilter;
2 |
3 | import java.lang.reflect.Constructor;
4 | import java.lang.reflect.InvocationTargetException;
5 |
6 | public class TestUtils {
7 |
8 | @SuppressWarnings("unchecked")
9 | public static Object instantiateObject(Class clazz) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
10 | Constructor constructor = clazz.getDeclaredConstructor();
11 | constructor.setAccessible(true);
12 | return constructor.newInstance();
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/components/DynamicClassFilterWSTest.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.components;
2 |
3 | import com.jfilter.filter.FilterFields;
4 | import com.jfilter.mock.MockClassesHelper;
5 | import com.jfilter.mock.MockHttpRequestHelper;
6 | import com.jfilter.mock.MockUser;
7 | import com.jfilter.mock.config.WSConfigurationHelper;
8 | import org.junit.Test;
9 | import org.springframework.beans.factory.annotation.Autowired;
10 | import org.springframework.stereotype.Component;
11 | import org.springframework.test.web.servlet.MockMvc;
12 | import org.springframework.test.web.servlet.setup.MockMvcBuilders;
13 | import org.springframework.web.context.WebApplicationContext;
14 |
15 | import java.util.Arrays;
16 |
17 | import static com.jfilter.components.DynamicSessionFilter.ATTRIBUTE_FILTER_FIELDS;
18 | import static com.jfilter.mock.webservice.WSClassDynamicFilter.MAPPING_NOT_NULL_DYNAMIC_CLASS_FILTER;
19 | import static junit.framework.TestCase.assertEquals;
20 |
21 | @Component
22 | public class DynamicClassFilterWSTest {
23 | private MockMvc mockMvc;
24 | private FilterConfiguration filterConfiguration;
25 |
26 | @Autowired
27 | public DynamicClassFilterWSTest setFilterConfiguration(FilterConfiguration filterConfiguration) {
28 | this.filterConfiguration = filterConfiguration;
29 | return this;
30 | }
31 |
32 | @Autowired
33 | public void setWebApplicationContext(WebApplicationContext webApplicationContext) {
34 | this.mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
35 | }
36 |
37 | @Test
38 | public void testWSDynamicNotNullFilter() throws Exception {
39 | WSConfigurationHelper.instance(WSConfigurationHelper.Instance.FILTER_ENABLED, this);
40 |
41 | filterConfiguration.setEnabled(true);
42 | MockUser user = MockClassesHelper.getUserMock();
43 | user.setId(null);
44 | user.setPassword(null);
45 | String result = MockHttpRequestHelper.doRequest(mockMvc, MAPPING_NOT_NULL_DYNAMIC_CLASS_FILTER, ATTRIBUTE_FILTER_FIELDS,
46 | new FilterFields(MockUser.class, Arrays.asList("id", "password")));
47 | assertEquals(user.toString(), result);
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/components/DynamicFilterProviderITest.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.components;
2 |
3 | import com.jfilter.filter.DynamicFilterEvent;
4 | import com.jfilter.mock.MockHttpRequestHelper;
5 | import com.jfilter.mock.MockMethods;
6 | import com.jfilter.mock.MockUser;
7 | import com.jfilter.mock.config.WSConfigurationEnabled;
8 | import com.jfilter.request.RequestSession;
9 | import com.jfilter.filter.FilterFields;
10 | import org.junit.After;
11 | import org.junit.Before;
12 | import org.junit.Test;
13 | import org.junit.runner.RunWith;
14 | import org.springframework.beans.factory.annotation.Autowired;
15 | import org.springframework.core.MethodParameter;
16 | import org.springframework.test.context.ContextConfiguration;
17 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
18 | import org.springframework.test.context.web.WebAppConfiguration;
19 |
20 | import java.lang.reflect.Field;
21 | import java.lang.reflect.InvocationTargetException;
22 | import java.lang.reflect.Method;
23 | import java.util.Arrays;
24 | import java.util.Map;
25 |
26 | import static org.junit.Assert.assertEquals;
27 | import static org.junit.Assert.assertNotEquals;
28 | import static org.junit.Assert.assertNotNull;
29 |
30 | @ContextConfiguration(classes = WSConfigurationEnabled.class)
31 | @RunWith(SpringJUnit4ClassRunner.class)
32 | @WebAppConfiguration
33 | public class DynamicFilterProviderITest {
34 | private DynamicFilterProvider dynamicFilterProvider;
35 | private FilterFields filterFields;
36 |
37 | @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
38 | @Autowired
39 | public DynamicFilterProviderITest setDynamicFilterProvider(DynamicFilterProvider dynamicFilterProvider) {
40 | this.dynamicFilterProvider = dynamicFilterProvider;
41 | return this;
42 | }
43 |
44 | @Before
45 | public void init() {
46 | filterFields = new FilterFields(MockUser.class, Arrays.asList("id", "password"));
47 | }
48 |
49 | @After
50 | public void deInit() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
51 | Method method = dynamicFilterProvider.getClass().getDeclaredMethod("findDynamicFilters");
52 | method.setAccessible(true);
53 | method.invoke(dynamicFilterProvider);
54 | }
55 |
56 | @Test
57 | public void testWithAnnotation() {
58 | MethodParameter methodParameter = MockMethods.dynamicSessionFilter();
59 |
60 | RequestSession requestSession = new RequestSession(MockHttpRequestHelper.getMockDynamicFilterRequest(filterFields));
61 | FilterFields found = dynamicFilterProvider.getFields(methodParameter, requestSession);
62 |
63 | assertEquals(filterFields, found);
64 | }
65 |
66 | @Test
67 | public void testWithoutAnnotation() {
68 | MethodParameter methodParameter = MockMethods.methodWithoutAnnotations();
69 |
70 | RequestSession requestSession = new RequestSession(MockHttpRequestHelper.getMockDynamicFilterRequest(filterFields));
71 | FilterFields found = dynamicFilterProvider.getFields(methodParameter, requestSession);
72 |
73 | assertNotEquals(filterFields, found);
74 | }
75 |
76 | @Test
77 | public void testWithAnnotationWithEmptySession() {
78 | MethodParameter methodParameter = MockMethods.dynamicSessionFilter();
79 |
80 | RequestSession requestSession = new RequestSession(MockHttpRequestHelper.getMockDynamicFilterRequest(null));
81 |
82 | FilterFields found = dynamicFilterProvider.getFields(methodParameter, requestSession);
83 |
84 | assertNotNull(found);
85 | }
86 |
87 | @Test
88 | @SuppressWarnings({"unchecked", "rawtypes"})
89 | public void testWithAnnotationAndEmptyMap() throws NoSuchFieldException, IllegalAccessException {
90 | MethodParameter methodParameter = MockMethods.dynamicSessionFilter();
91 |
92 | Field field = dynamicFilterProvider.getClass().getDeclaredField("dynamicFilterMap");
93 | field.setAccessible(true);
94 |
95 | Map dynamicFilterMap = (Map)field.get(dynamicFilterProvider);
96 | dynamicFilterMap.clear();
97 |
98 |
99 | RequestSession requestSession = new RequestSession(MockHttpRequestHelper.getMockDynamicFilterRequest(filterFields));
100 | FilterFields found = dynamicFilterProvider.getFields(methodParameter, requestSession);
101 |
102 | assertEquals(new FilterFields(), found);
103 | }
104 |
105 | @Test
106 | public void testGetFilterFieldsDynamicFilterNull() {
107 | RequestSession requestSession = new RequestSession(MockHttpRequestHelper.getMockDynamicFilterRequest(filterFields));
108 | FilterFields filterFields = dynamicFilterProvider.getFilterFields(null, requestSession);
109 | assertEquals(filterFields, FilterFields.EMPTY_FIELDS.get());
110 | }
111 | }
112 |
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/components/DynamicFilterWSTest.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.components;
2 |
3 | import com.jfilter.filter.FilterFields;
4 | import com.jfilter.mock.MockClassesHelper;
5 | import com.jfilter.mock.MockHttpRequestHelper;
6 | import com.jfilter.mock.MockUser;
7 | import com.jfilter.mock.config.WSConfigurationHelper;
8 | import org.junit.Test;
9 | import org.springframework.beans.factory.annotation.Autowired;
10 | import org.springframework.stereotype.Component;
11 | import org.springframework.test.web.servlet.MockMvc;
12 | import org.springframework.test.web.servlet.setup.MockMvcBuilders;
13 | import org.springframework.web.context.WebApplicationContext;
14 | import java.util.Arrays;
15 | import static com.jfilter.components.DynamicSessionFilter.ATTRIBUTE_FILTER_FIELDS;
16 | import static com.jfilter.mock.webservice.WSDynamicFilter.MAPPING_NOT_NULL_DYNAMIC_FILTER;
17 | import static com.jfilter.mock.webservice.WSDynamicFilter.MAPPING_NULL_DYNAMIC_FILTER;
18 | import static junit.framework.TestCase.assertEquals;
19 |
20 | @Component
21 | public class DynamicFilterWSTest {
22 | private MockMvc mockMvc;
23 | private FilterConfiguration filterConfiguration;
24 |
25 | @Autowired
26 | public DynamicFilterWSTest setFilterConfiguration(FilterConfiguration filterConfiguration) {
27 | this.filterConfiguration = filterConfiguration;
28 | return this;
29 | }
30 |
31 | @Autowired
32 | public void setWebApplicationContext(WebApplicationContext webApplicationContext) {
33 | this.mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
34 | }
35 |
36 | @Test
37 | public void testWSDynamicNotNullFilter() throws Exception {
38 | WSConfigurationHelper.instance(WSConfigurationHelper.Instance.FILTER_ENABLED, this);
39 | filterConfiguration.setEnabled(true);
40 | MockUser user = MockClassesHelper.getUserMock();
41 | user.setId(null);
42 | user.setPassword(null);
43 | String result = MockHttpRequestHelper.doRequest(mockMvc, MAPPING_NOT_NULL_DYNAMIC_FILTER, ATTRIBUTE_FILTER_FIELDS,
44 | new FilterFields(MockUser.class, Arrays.asList("id", "password")));
45 | assertEquals(user.toString(), result);
46 | }
47 |
48 | @Test
49 | public void testWSDynamicNullFilter() throws Exception {
50 | WSConfigurationHelper.instance(WSConfigurationHelper.Instance.FILTER_ENABLED, this);
51 | MockUser user = MockClassesHelper.getUserMock();
52 | String result = MockHttpRequestHelper.doRequest(mockMvc, MAPPING_NULL_DYNAMIC_FILTER, ATTRIBUTE_FILTER_FIELDS,
53 | new FilterFields(MockUser.class, Arrays.asList("id", "password")));
54 | assertEquals(user.toString(), result);
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/components/DynamicSessionFilterITest.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.components;
2 |
3 | import com.jfilter.mock.MockClassesHelper;
4 | import com.jfilter.mock.MockHttpRequestHelper;
5 | import com.jfilter.mock.MockUser;
6 | import com.jfilter.mock.config.WSConfigurationHelper;
7 | import com.jfilter.mock.config.WSConfigurationEnabled;
8 | import org.junit.Test;
9 | import org.junit.runner.RunWith;
10 | import org.springframework.beans.factory.annotation.Autowired;
11 | import org.springframework.test.context.ContextConfiguration;
12 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
13 | import org.springframework.test.context.web.WebAppConfiguration;
14 | import org.springframework.test.web.servlet.MockMvc;
15 | import org.springframework.test.web.servlet.setup.MockMvcBuilders;
16 | import org.springframework.web.context.WebApplicationContext;
17 |
18 | import static com.jfilter.mock.webservice.WSDynamicFilter.MAPPING_DYNAMIC_REQUEST_ATTRIBUTE_FIELDS;
19 | import static com.jfilter.mock.webservice.WSDynamicFilter.MAPPING_DYNAMIC_SESSION_ATTRIBUTE_FIELDS;
20 | import static junit.framework.TestCase.assertEquals;
21 |
22 | @ContextConfiguration(classes = WSConfigurationEnabled.class)
23 | @RunWith(SpringJUnit4ClassRunner.class)
24 | @WebAppConfiguration
25 | public class DynamicSessionFilterITest {
26 | private MockMvc mockMvc;
27 |
28 | @Autowired
29 | public void setWebApplicationContext(WebApplicationContext webApplicationContext) {
30 | this.mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
31 | }
32 |
33 | @Test
34 | public void testDynamicSessionAttributeFields() throws Exception {
35 | WSConfigurationHelper.instance(WSConfigurationHelper.Instance.FILTER_ENABLED, this);
36 | MockUser user = MockClassesHelper.getUserMock();
37 | user.setId(null)
38 | .setEmail(null)
39 | .setPassword(null);
40 | String result = MockHttpRequestHelper.doRequest(mockMvc, MAPPING_DYNAMIC_SESSION_ATTRIBUTE_FIELDS);
41 | assertEquals(user.toString(), result);
42 | }
43 |
44 | @Test
45 | public void testDynamicRequestAttributeFields() throws Exception {
46 | WSConfigurationHelper.instance(WSConfigurationHelper.Instance.FILTER_ENABLED, this);
47 | MockUser user = MockClassesHelper.getUserMock();
48 | user.setId(null)
49 | .setEmail(null)
50 | .setPassword(null);
51 | String result = MockHttpRequestHelper.doRequest(mockMvc, MAPPING_DYNAMIC_REQUEST_ATTRIBUTE_FIELDS);
52 | assertEquals(user.toString(), result);
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/components/FileRecordTest.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.components;
2 |
3 | import com.jfilter.filter.FileFilter;
4 | import org.junit.Before;
5 | import org.junit.Test;
6 |
7 | import java.io.File;
8 |
9 | import static org.junit.Assert.assertNotNull;
10 | import static org.junit.Assert.assertEquals;
11 | import static org.junit.Assert.assertTrue;
12 | import static org.junit.Assert.assertFalse;
13 |
14 | public class FileRecordTest {
15 | private FileWatcher.FileRecord fileRecord;
16 | private File file;
17 | private String eventResult;
18 |
19 | @Before
20 | public void init() {
21 | file = FileFilter.resourceFile("config.xml");
22 | assertNotNull(file);
23 |
24 | fileRecord = new FileWatcher.FileRecord(file, f -> eventResult = f.getAbsoluteFile().toString());
25 | }
26 |
27 | @Test
28 | public void testGetLastModified() {
29 | assertEquals(file.lastModified(), fileRecord.getLastModified().longValue());
30 | }
31 |
32 | @Test
33 | public void testSetLastModified() {
34 | fileRecord.setLastModified(0L);
35 | assertEquals(0, fileRecord.getLastModified().longValue());
36 | }
37 |
38 | @Test
39 | public void testOnEvent() {
40 | fileRecord.onEvent();
41 | assertEquals(file.getAbsoluteFile().toString(), eventResult);
42 | }
43 |
44 | @Test
45 | public void testOnEventTrue() {
46 | boolean result = fileRecord.onEvent();
47 | assertTrue(result);
48 | }
49 |
50 | @Test
51 | public void testOnEventFalse() {
52 | FileWatcher.FileRecord fileRecord2 = new FileWatcher.FileRecord(file, null);
53 | boolean result = fileRecord2.onEvent();
54 |
55 | assertFalse(result);
56 | }
57 |
58 | }
59 |
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/components/FileWatcherITest.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.components;
2 |
3 | import com.jfilter.filter.FileFilter;
4 | import com.jfilter.mock.MockFile;
5 | import com.jfilter.mock.config.WSConfigurationEnabled;
6 | import org.junit.Before;
7 | import org.junit.Test;
8 | import org.junit.runner.RunWith;
9 | import org.springframework.beans.factory.annotation.Autowired;
10 | import org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor;
11 | import org.springframework.test.context.ContextConfiguration;
12 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
13 | import org.springframework.test.context.web.WebAppConfiguration;
14 | import java.io.File;
15 | import java.io.IOException;
16 | import java.util.concurrent.atomic.AtomicBoolean;
17 | import static java.util.concurrent.TimeUnit.SECONDS;
18 | import static org.awaitility.Awaitility.await;
19 | import static org.junit.Assert.assertFalse;
20 | import static org.junit.Assert.assertNotNull;
21 | import static org.junit.Assert.assertTrue;
22 |
23 | @ContextConfiguration(classes = WSConfigurationEnabled.class)
24 | @RunWith(SpringJUnit4ClassRunner.class)
25 | @WebAppConfiguration
26 | public class FileWatcherITest {
27 | private File file;
28 | private AtomicBoolean modified;
29 | private FileWatcher fileWatcher;
30 | private ScheduledAnnotationBeanPostProcessor taskScheduler;
31 |
32 | @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
33 | @Autowired
34 | public void setTaskScheduler(ScheduledAnnotationBeanPostProcessor taskScheduler) {
35 | this.taskScheduler = taskScheduler;
36 | }
37 |
38 | @Autowired
39 | public FileWatcherITest setFileWatcher(FileWatcher fileWatcher) {
40 | this.fileWatcher = fileWatcher;
41 | return this;
42 | }
43 |
44 | @Before
45 | public void init() {
46 | modified = new AtomicBoolean(false);
47 | assertNotNull(fileWatcher);
48 |
49 | file = FileFilter.resourceFile("config.xml");
50 | assertNotNull(file);
51 |
52 | fileWatcher.add(file, (f) -> modified.set(true));
53 | }
54 |
55 | @Test
56 | public void testAdd() {
57 | boolean result = fileWatcher.add(file, (f) -> modified.set(true));
58 | assertTrue(result);
59 | }
60 |
61 | @Test
62 | public void testAddTwice() {
63 | boolean addedOne = fileWatcher.add(file, (f) -> modified.set(true));
64 | boolean addedTwo = fileWatcher.add(file, (f) -> modified.set(true));
65 | assertTrue(addedOne && addedTwo);
66 | }
67 |
68 | @Test
69 | public void testUnExistResourceFile() {
70 | boolean result = fileWatcher.add(FileFilter.resourceFile("un_exist_config.xml"), (f) -> modified.set(true));
71 | assertFalse(result);
72 | }
73 |
74 | @Test
75 | public void testUnExistFile() {
76 | boolean result = fileWatcher.add(new File("un_exist_config.xml"), (f) -> modified.set(true));
77 | assertFalse(result);
78 | }
79 |
80 | @Test
81 | public void testFileIsModifiedFalseInternally() {
82 | boolean result = fileWatcher.fileIsModified(file);
83 | assertFalse(result);
84 | }
85 |
86 | @Test
87 | public void testAfterIOException() {
88 | boolean add = fileWatcher.add(new MockFile("unknown_path"), (f) -> modified.set(true));
89 | assertFalse(add);
90 | }
91 |
92 | @Test
93 | public void testFileIsModified() {
94 | boolean result = fileWatcher.fileIsModified(new File(""));
95 | assertFalse(result);
96 | }
97 |
98 | @Test
99 | public void testClose() throws IOException {
100 | fileWatcher.destroy();
101 | assertTrue(fileWatcher.isClosed());
102 | }
103 |
104 | @Test
105 | public void testWatchSchedulerInterruptedException() {
106 | taskScheduler.destroy();
107 | await().atMost(10, SECONDS).until(() -> fileWatcher.isClosed());
108 | try {
109 | fileWatcher.scheduleModifiedFiles();
110 | } catch (Exception e) {
111 | e.printStackTrace();
112 | fileWatcher.scheduleModifiedFiles();
113 | }
114 | assertTrue(fileWatcher.isClosed());
115 | }
116 |
117 | @Test
118 | public void testWatchSchedulerClosedException() throws IOException {
119 | fileWatcher.getWatcher().close();
120 | await().atMost(5, SECONDS).until(() -> fileWatcher.isClosed());
121 | fileWatcher.scheduleModifiedFiles();
122 | assertTrue(fileWatcher.isClosed());
123 |
124 | fileWatcher.setClosed(false);
125 | fileWatcher.scheduleModifiedFiles();
126 | assertTrue(fileWatcher.isClosed());
127 | }
128 |
129 |
130 | }
131 |
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/components/FileWatcherOverflowITest.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.components;
2 |
3 | import com.jfilter.mock.config.WSConfigurationHelper;
4 | import org.junit.Before;
5 | import org.junit.Test;
6 | import org.springframework.beans.factory.annotation.Autowired;
7 | import org.springframework.stereotype.Component;
8 | import java.io.File;
9 | import java.io.IOException;
10 | import java.nio.file.Files;
11 | import java.nio.file.Path;
12 | import java.nio.file.Paths;
13 | import java.nio.file.StandardWatchEventKinds;
14 | import java.util.Date;
15 |
16 | import static java.util.concurrent.TimeUnit.SECONDS;
17 | import static org.awaitility.Awaitility.await;
18 | import static org.junit.Assert.assertTrue;
19 |
20 | @Component
21 | public class FileWatcherOverflowITest {
22 | private FileWatcher fileWatcher;
23 |
24 | @Autowired
25 | public void setFileWatcher(FileWatcher fileWatcher) {
26 | this.fileWatcher = fileWatcher;
27 | }
28 |
29 | @Before
30 | public void init() throws Exception {
31 | WSConfigurationHelper.instance(WSConfigurationHelper.Instance.FILTER_ENABLED, this);
32 | }
33 |
34 | @SuppressWarnings("ResultOfMethodCallIgnored")
35 | @Test
36 | public void testOverflowKey() throws IOException {
37 | int fileCount = 200;
38 | Path directory = Files.createTempDirectory("watch-service-overflow");
39 |
40 | directory.register(
41 | fileWatcher.getWatcher(),
42 | StandardWatchEventKinds.ENTRY_CREATE,
43 | StandardWatchEventKinds.ENTRY_DELETE,
44 | StandardWatchEventKinds.ENTRY_MODIFY);
45 | final Path p = directory.resolve(Paths.get("TEMPORARY_FILE"));
46 | for (int i = 0; i < fileCount; i++) {
47 | File createdFile = Files.createFile(p).toFile();
48 | createdFile.setLastModified(new Date().getTime() + 60);
49 | Files.delete(p);
50 | }
51 | Files.delete(directory);
52 |
53 | await().atMost(60, SECONDS).until(() -> fileWatcher.isOverflowed());
54 | assertTrue(fileWatcher.isOverflowed());
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/components/FilterAdviceITest.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.components;
2 |
3 | import com.jfilter.mock.MockMethods;
4 | import com.jfilter.mock.config.WSConfigurationHelper;
5 | import org.junit.Before;
6 | import org.junit.Test;
7 | import org.springframework.beans.factory.annotation.Autowired;
8 | import org.springframework.stereotype.Component;
9 |
10 | import static org.junit.Assert.assertFalse;
11 | import static org.junit.Assert.assertNotNull;
12 | import static org.junit.Assert.assertTrue;
13 |
14 | @Component
15 | public class FilterAdviceITest {
16 | private FilterAdvice filterAdvice;
17 | private FilterConfiguration filterConfiguration;
18 |
19 | @Autowired
20 | public FilterAdviceITest setFilterAdvice(FilterAdvice filterAdvice) {
21 | this.filterAdvice = filterAdvice;
22 | return this;
23 | }
24 |
25 | @Autowired
26 | public FilterAdviceITest setFilterConfiguration(FilterConfiguration filterConfiguration) {
27 | this.filterConfiguration = filterConfiguration;
28 | return this;
29 | }
30 |
31 | @Before
32 | public void init() throws Exception {
33 | WSConfigurationHelper.instance(WSConfigurationHelper.Instance.FILTER_ENABLED2, this);
34 | filterConfiguration.setEnabled(true);
35 | }
36 |
37 | @Test
38 | public void testNotNull() {
39 | assertNotNull(filterAdvice);
40 | }
41 |
42 | @Test
43 | public void testSupports() {
44 | boolean supports = filterAdvice.supports(MockMethods.singleAnnotation(), null);
45 | assertTrue(supports);
46 | }
47 |
48 | @Test
49 | public void testNotSupports() {
50 | filterConfiguration.setEnabled(false);
51 | boolean supports = filterAdvice.supports(MockMethods.singleAnnotation(), null);
52 | assertFalse(supports);
53 | }
54 |
55 | }
56 |
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/components/FilterConfigurationCustomConvertersITest.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.components;
2 |
3 |
4 | import com.jfilter.mock.config.WSConfigurationHelper;
5 | import org.junit.Before;
6 | import org.junit.Test;
7 | import org.springframework.beans.factory.annotation.Autowired;
8 | import org.springframework.stereotype.Component;
9 | import static junit.framework.TestCase.assertEquals;
10 |
11 | @Component
12 | public class FilterConfigurationCustomConvertersITest {
13 | private FilterConfiguration filterConfiguration;
14 |
15 | @Autowired(required = false)
16 | public FilterConfigurationCustomConvertersITest setFilterProvider(FilterConfiguration filterConfiguration) {
17 | this.filterConfiguration = filterConfiguration;
18 | return this;
19 | }
20 |
21 | @Before
22 | public void init() throws Exception {
23 | WSConfigurationHelper.instance(WSConfigurationHelper.Instance.FILTER_USE_CUSTOM_CONVERTERS, this);
24 | }
25 |
26 | @Test
27 | public void testCustomControllersSize() {
28 | assertEquals(2, filterConfiguration.getCustomConverters().size());
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/components/FilterConverterITest.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.components;
2 |
3 | import com.jfilter.converter.FilterClassWrapper;
4 | import com.jfilter.filter.FilterFields;
5 | import com.jfilter.mock.config.WSConfigurationHelper;
6 | import org.junit.Before;
7 | import org.junit.Test;
8 | import org.springframework.beans.factory.annotation.Autowired;
9 | import org.springframework.http.MediaType;
10 | import org.springframework.mock.http.MockHttpInputMessage;
11 | import org.springframework.stereotype.Component;
12 |
13 | import java.io.IOException;
14 |
15 | import static org.junit.Assert.assertFalse;
16 | import static org.junit.Assert.assertNull;
17 | import static org.junit.Assert.assertTrue;
18 |
19 | @Component
20 | public class FilterConverterITest {
21 | private FilterConfiguration filterConfiguration;
22 | private FilterConverter filterConverter;
23 |
24 | @Autowired
25 | public FilterConverterITest setFilterConfiguration(FilterConfiguration filterConfiguration) {
26 | this.filterConfiguration = filterConfiguration;
27 | return this;
28 | }
29 |
30 | @Before
31 | public void init() throws Exception {
32 | WSConfigurationHelper.instance(WSConfigurationHelper.Instance.FILTER_ENABLED2, this);
33 | filterConfiguration.setEnabled(true);
34 |
35 | filterConverter = new FilterConverter(filterConfiguration);
36 | }
37 |
38 | @Test
39 | public void testCanRead() {
40 | boolean canRead = filterConverter.canRead(null, MediaType.APPLICATION_JSON);
41 | assertFalse(canRead);
42 | }
43 |
44 | @Test
45 | public void testRead() throws IOException {
46 | FilterClassWrapper wrapper = (FilterClassWrapper) filterConverter.read(null, new MockHttpInputMessage("test".getBytes()));
47 | assertNull(wrapper);
48 | }
49 |
50 | @Test
51 | public void testCanWrite() {
52 | boolean canWrite = filterConverter.canWrite(null, MediaType.APPLICATION_JSON);
53 | assertTrue(canWrite);
54 | }
55 |
56 | @Test
57 | public void testCanWriteFalse() {
58 | boolean canWrite = filterConverter.canWrite(null, new MediaType("application", "test2"));
59 | assertFalse(canWrite);
60 | }
61 |
62 | @Test
63 | public void testCanWriteDisabled() {
64 | filterConfiguration.setEnabled(false);
65 | boolean canWrite = filterConverter.canWrite(null, MediaType.APPLICATION_JSON);
66 | assertFalse(canWrite);
67 | }
68 |
69 | @Test
70 | public void testSupportsTrue() {
71 | filterConfiguration.setEnabled(true);
72 | boolean supports = filterConverter.supports(FilterFields.class);
73 | assertTrue(supports);
74 | }
75 | }
76 |
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/components/FilterObjectMapperBuilderTest.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.components;
2 |
3 | import com.fasterxml.jackson.databind.ObjectMapper;
4 | import com.fasterxml.jackson.databind.cfg.SerializerFactoryConfig;
5 | import com.fasterxml.jackson.databind.module.SimpleSerializers;
6 | import com.fasterxml.jackson.databind.ser.BasicSerializerFactory;
7 | import com.fasterxml.jackson.databind.ser.Serializers;
8 | import com.fasterxml.jackson.datatype.jdk8.Jdk8Serializers;
9 | import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
10 | import com.jfilter.converter.SerializationConfig;
11 | import com.jfilter.filter.FilterFields;
12 | import org.junit.Before;
13 | import org.junit.Test;
14 |
15 | import static org.junit.Assert.assertFalse;
16 | import static org.junit.Assert.assertTrue;
17 |
18 | public class FilterObjectMapperBuilderTest {
19 | private ObjectMapper filterObjectMapperTrue;
20 | private ObjectMapper filterObjectMapperFalse;
21 |
22 | private boolean serializerExist(Iterable serializers, Class serializer) {
23 | while (serializers.iterator().hasNext()) {
24 | if (serializers.iterator().next().getClass().equals(serializer))
25 | return true;
26 | }
27 | return false;
28 | }
29 |
30 | @Before
31 | public void init() {
32 | SerializationConfig configTrue = new SerializationConfig();
33 | SerializationConfig configFalse = new SerializationConfig()
34 | .enableDateTimeModule(false);
35 |
36 | filterObjectMapperTrue = new FilterObjectMapperBuilder(new ObjectMapper())
37 | .withFilterFields(new FilterFields())
38 | .withSetSerializationConfig(configTrue)
39 | .build();
40 |
41 | filterObjectMapperFalse = new FilterObjectMapperBuilder(new ObjectMapper())
42 | .withFilterFields(null)
43 | .withSetSerializationConfig(configFalse)
44 | .build();
45 | }
46 |
47 | private SerializerFactoryConfig getFactoryConfig(ObjectMapper objectMapper) {
48 | BasicSerializerFactory serializationConfig = (BasicSerializerFactory) objectMapper.getSerializerFactory();
49 | return serializationConfig.getFactoryConfig();
50 | }
51 |
52 | private boolean registeredModule(ObjectMapper objectMapper, String moduleName) {
53 | try {
54 | return objectMapper.getRegisteredModuleIds().stream().anyMatch(m -> ((String) m).contains(moduleName));
55 | } catch (NullPointerException e) {
56 | return false;
57 | }
58 | }
59 |
60 | @Test
61 | public void testConfigureSerializersTrue() {
62 | SerializerFactoryConfig serializerFactoryConfig = getFactoryConfig(filterObjectMapperTrue);
63 |
64 | boolean jdk8SerializerExist = serializerExist(serializerFactoryConfig.serializers(), Jdk8Serializers.class);
65 | assertTrue(jdk8SerializerExist);
66 |
67 | boolean simpleSerializerExist = serializerExist(serializerFactoryConfig.serializers(), SimpleSerializers.class);
68 | assertTrue(simpleSerializerExist);
69 | }
70 |
71 | @Test
72 | public void testRegisteredModulesTrue() {
73 | boolean timeModuleExist = registeredModule(filterObjectMapperTrue, JavaTimeModule.class.getName());
74 | assertTrue(timeModuleExist);
75 | }
76 |
77 | @Test
78 | public void testConfigureSerializersFalse() {
79 | SerializerFactoryConfig serializerFactoryConfig = getFactoryConfig(filterObjectMapperFalse);
80 |
81 | boolean jdk8SerializerExist = serializerExist(serializerFactoryConfig.serializers(), Jdk8Serializers.class);
82 | assertFalse(jdk8SerializerExist);
83 |
84 | boolean simpleSerializerExist = serializerExist(serializerFactoryConfig.serializers(), SimpleSerializers.class);
85 | assertFalse(simpleSerializerExist);
86 | }
87 |
88 | @Test
89 | public void testRegisteredModulesFalse() {
90 | boolean timeModuleExist = registeredModule(filterObjectMapperFalse, JavaTimeModule.class.getName());
91 | assertFalse(timeModuleExist);
92 | }
93 |
94 | }
95 |
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/components/FilterProviderITest.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.components;
2 |
3 | import com.jfilter.filter.BaseFilter;
4 | import com.jfilter.mock.MockMethods;
5 | import com.jfilter.mock.config.WSConfigurationHelper;
6 | import org.junit.Test;
7 | import org.springframework.beans.factory.annotation.Autowired;
8 | import org.springframework.context.annotation.Configuration;
9 | import org.springframework.core.MethodParameter;
10 | import org.springframework.web.context.WebApplicationContext;
11 |
12 | import static org.junit.Assert.assertTrue;
13 | import static org.junit.Assert.assertFalse;
14 | import static org.junit.Assert.assertNotNull;
15 | import static org.junit.Assert.assertNull;
16 |
17 | @Configuration
18 | public class FilterProviderITest {
19 | @Autowired
20 | private WebApplicationContext webApplicationContext;
21 |
22 | private FilterProvider filterProvider;
23 |
24 | @Autowired(required = false)
25 | public FilterProviderITest setFilterProvider(FilterProvider filterProvider) {
26 | this.filterProvider = filterProvider;
27 | return this;
28 | }
29 |
30 | @Test
31 | public void testIsEnabledTrue() throws Exception {
32 | WSConfigurationHelper.instance(WSConfigurationHelper.Instance.FILTER_ENABLED, this);
33 |
34 | boolean result = FilterProvider.isFilterEnabled(webApplicationContext);
35 |
36 | assertTrue(result);
37 | }
38 |
39 | @Test
40 | public void testIsEnabledFalse() throws Exception {
41 | WSConfigurationHelper.instance(WSConfigurationHelper.Instance.FILTER_DISABLED, this);
42 | boolean result = FilterProvider.isFilterEnabled(webApplicationContext);
43 |
44 | assertFalse(result);
45 | }
46 |
47 | @Test
48 | public void testGetFilter() throws Exception {
49 | WSConfigurationHelper.instance(WSConfigurationHelper.Instance.FILTER_ENABLED, this);
50 | MethodParameter methodParameter = MockMethods.singleAnnotation();
51 |
52 | BaseFilter filter = filterProvider.getFilter(methodParameter);
53 |
54 | assertNotNull(filter);
55 | }
56 |
57 | @Test
58 | public void testGetFilterNull() throws Exception {
59 | WSConfigurationHelper.instance(WSConfigurationHelper.Instance.FILTER_ENABLED, this);
60 | MethodParameter methodParameter = MockMethods.methodWithLazyAnnotation();
61 |
62 | BaseFilter filter = filterProvider.getFilter(methodParameter);
63 |
64 | assertNull(filter);
65 | }
66 | }
67 |
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/components/FilterProviderTest.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.components;
2 |
3 | import com.jfilter.filter.BaseFilter;
4 | import com.jfilter.mock.MockMethods;
5 | import org.junit.Before;
6 | import org.junit.Test;
7 | import org.springframework.core.MethodParameter;
8 | import static org.junit.Assert.assertNotNull;
9 | import static org.junit.Assert.assertFalse;
10 | import static org.junit.Assert.assertTrue;
11 | import static org.junit.Assert.assertEquals;
12 |
13 | public class FilterProviderTest {
14 | private FilterProvider filterProvider;
15 | private MethodParameter fileAnnotationMethod;
16 | private MethodParameter fileAnnotationYamlMethod;
17 | private MethodParameter methodWithoutAnnotationsMethod;
18 |
19 | @Before
20 | public void init() {
21 | filterProvider = new FilterProvider();
22 |
23 | fileAnnotationMethod = MockMethods.fileAnnotation();
24 | fileAnnotationYamlMethod = MockMethods.fileAnnotationYaml();
25 | assertNotNull(fileAnnotationMethod);
26 | assertNotNull(fileAnnotationYamlMethod);
27 |
28 | methodWithoutAnnotationsMethod = MockMethods.methodWithoutAnnotations();
29 | assertNotNull(methodWithoutAnnotationsMethod);
30 | }
31 |
32 | @Test
33 | public void testIsAcceptFalse() {
34 | boolean result = filterProvider.isAccept(methodWithoutAnnotationsMethod);
35 | assertFalse(result);
36 | }
37 |
38 | @Test
39 | public void testCacheSizeGreaterZero() {
40 | BaseFilter filter = filterProvider.getFilter(fileAnnotationMethod);
41 | assertNotNull(filter);
42 |
43 | assertTrue(filterProvider.cacheSize() > 0);
44 | }
45 |
46 | @Test
47 | public void testCacheSizeZero() {
48 | BaseFilter filter = filterProvider.getFilter(fileAnnotationMethod);
49 | assertNotNull(filter);
50 |
51 | filterProvider.clearCache();
52 | assertEquals(0, filterProvider.cacheSize());
53 | }
54 |
55 | @Test
56 | public void testCacheSizeGreaterZeroYaml() {
57 | BaseFilter filter = filterProvider.getFilter(fileAnnotationYamlMethod);
58 | assertNotNull(filter);
59 |
60 | assertTrue(filterProvider.cacheSize() > 0);
61 | }
62 |
63 | @Test
64 | public void testCacheSizeZeroYaml() {
65 | BaseFilter filter = filterProvider.getFilter(fileAnnotationYamlMethod);
66 | assertNotNull(filter);
67 |
68 | filterProvider.clearCache();
69 | assertEquals(0, filterProvider.cacheSize());
70 | }
71 |
72 |
73 | }
74 |
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/components/FilterRegisterDefaultConvertersITest.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.components;
2 |
3 | import com.jfilter.mock.MockUtils;
4 | import com.jfilter.mock.config.WSConfigurationHelper;
5 | import org.junit.Test;
6 | import org.springframework.beans.factory.annotation.Autowired;
7 | import org.springframework.context.event.ContextRefreshedEvent;
8 | import org.springframework.context.event.EventListener;
9 | import org.springframework.stereotype.Component;
10 | import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter;
11 |
12 | import java.util.ArrayList;
13 | import java.util.List;
14 | import java.util.concurrent.TimeUnit;
15 | import java.util.concurrent.atomic.AtomicBoolean;
16 |
17 | import static org.awaitility.Awaitility.await;
18 | import static org.junit.Assert.assertTrue;
19 |
20 | @Component
21 | public class FilterRegisterDefaultConvertersITest {
22 | private RequestMappingHandlerAdapter handlerAdapter;
23 | private static final List registeredConverters = new ArrayList<>();
24 | private static final AtomicBoolean changed = new AtomicBoolean(false);
25 |
26 | @Autowired(required = false)
27 | public FilterRegisterDefaultConvertersITest setHandlerAdapter(RequestMappingHandlerAdapter handlerAdapter) {
28 | this.handlerAdapter = handlerAdapter;
29 | return this;
30 | }
31 |
32 | @EventListener
33 | public void handleContextRefresh(ContextRefreshedEvent event) {
34 | MockUtils.copyConverters(FilterRegisterDefaultConvertersITest.registeredConverters, handlerAdapter);
35 | FilterRegisterDefaultConvertersITest.changed.set(true);
36 | }
37 |
38 | @Test
39 | public void testConfigureMessageConvertersEnabled() throws Exception {
40 | WSConfigurationHelper.instance(WSConfigurationHelper.Instance.FILTER_USE_DEFAULT_CONVERTERS, this);
41 | await().atMost(5, TimeUnit.SECONDS).untilTrue(FilterRegisterDefaultConvertersITest.changed);
42 | boolean contain = FilterRegisterDefaultConvertersITest.registeredConverters.size() >= 2 &&
43 | MockUtils.beanFilterConverterLoaded(FilterRegisterDefaultConvertersITest.registeredConverters);
44 | assertTrue(contain);
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/components/FilterRegisterITest.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.components;
2 |
3 | import com.jfilter.mock.MockUtils;
4 | import com.jfilter.mock.config.WSConfigurationHelper;
5 | import org.junit.Test;
6 | import org.springframework.beans.factory.annotation.Autowired;
7 | import org.springframework.context.event.ContextRefreshedEvent;
8 | import org.springframework.context.event.EventListener;
9 | import org.springframework.stereotype.Component;
10 | import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter;
11 |
12 | import java.util.ArrayList;
13 | import java.util.List;
14 | import java.util.concurrent.TimeUnit;
15 | import java.util.concurrent.atomic.AtomicBoolean;
16 |
17 | import static org.awaitility.Awaitility.await;
18 | import static org.junit.Assert.assertFalse;
19 | import static org.junit.Assert.assertTrue;
20 |
21 | @Component
22 | public class FilterRegisterITest {
23 | private FilterRegister filterRegister;
24 | private RequestMappingHandlerAdapter handlerAdapter;
25 | private static final List registeredConverters = new ArrayList<>();
26 | private static final AtomicBoolean changed = new AtomicBoolean(false);
27 |
28 | @Autowired(required = false)
29 | public FilterRegisterITest setFilterRegister(FilterRegister filterRegister) {
30 | this.filterRegister = filterRegister;
31 | return this;
32 | }
33 |
34 | @Autowired(required = false)
35 | public FilterRegisterITest setHandlerAdapter(RequestMappingHandlerAdapter handlerAdapter) {
36 | this.handlerAdapter = handlerAdapter;
37 | return this;
38 | }
39 |
40 | @EventListener
41 | public void handleContextRefresh(ContextRefreshedEvent event) {
42 | MockUtils.copyConverters(FilterRegisterITest.registeredConverters, handlerAdapter);
43 | FilterRegisterITest.changed.set(true);
44 | }
45 |
46 | @Test
47 | public void testConfigureMessageConvertersEnabled() throws Exception {
48 | WSConfigurationHelper.instance(WSConfigurationHelper.Instance.FILTER_ENABLED, this);
49 | await().atMost(5, TimeUnit.SECONDS).untilTrue(FilterRegisterITest.changed);
50 | boolean contain = FilterRegisterITest.registeredConverters.size() >= 2 &&
51 | MockUtils.beanFilterConverterLoaded(FilterRegisterITest.registeredConverters);
52 | assertTrue(contain);
53 | }
54 |
55 | @Test
56 | public void testConfigureMessageConvertersDisabled() throws Exception {
57 | WSConfigurationHelper.instance(WSConfigurationHelper.Instance.FILTER_DISABLED_FILTERED, this);
58 | filterRegister.configureMessageConverters(new ArrayList<>());
59 | await().atMost(5, TimeUnit.SECONDS).untilTrue(FilterRegisterITest.changed);
60 | boolean contain = MockUtils.beanFilterConverterLoaded(FilterRegisterITest.registeredConverters);
61 | assertFalse(contain);
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/components/ObjectMapperCacheITest.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.components;
2 |
3 | import com.fasterxml.jackson.databind.ObjectMapper;
4 | import com.jfilter.converter.MethodParameterDetails;
5 | import com.jfilter.filter.FilterFields;
6 | import com.jfilter.mock.MockMethods;
7 | import com.jfilter.mock.config.WSConfigurationHelper;
8 | import org.junit.Before;
9 | import org.junit.Test;
10 | import org.springframework.beans.factory.annotation.Autowired;
11 | import org.springframework.core.MethodParameter;
12 | import org.springframework.http.MediaType;
13 | import org.springframework.stereotype.Component;
14 |
15 | import static org.junit.Assert.assertEquals;
16 | import static org.junit.Assert.assertNotNull;
17 |
18 | @Component
19 | public class ObjectMapperCacheITest {
20 | private ObjectMapperCache objectMapperCache;
21 | private FilterConfiguration filterConfiguration;
22 | private MethodParameter methodParameter;
23 |
24 | @Autowired
25 | public ObjectMapperCacheITest setObjectMapperCache(ObjectMapperCache objectMapperCache) {
26 | this.objectMapperCache = objectMapperCache;
27 | return this;
28 | }
29 |
30 | @Autowired
31 | public ObjectMapperCacheITest setFilterConfiguration(FilterConfiguration filterConfiguration) {
32 | this.filterConfiguration = filterConfiguration;
33 | return this;
34 | }
35 |
36 | @Before
37 | public void init() throws Exception {
38 | WSConfigurationHelper.instance(WSConfigurationHelper.Instance.FILTER_ENABLED2, this);
39 | filterConfiguration.setEnabled(true);
40 | methodParameter = MockMethods.mockIgnoreSettingsMethod();
41 | }
42 |
43 | @Test
44 | public void testNotNull() {
45 | assertNotNull(objectMapperCache);
46 | }
47 |
48 | @Test
49 | public void testFindObjectMapper() {
50 | MethodParameterDetails methodParameterDetails = new MethodParameterDetails(methodParameter, MediaType.APPLICATION_JSON, new FilterFields());
51 | ObjectMapper objectMapper = objectMapperCache.findObjectMapper(methodParameterDetails);
52 | assertNotNull(objectMapper);
53 | }
54 |
55 | @Test
56 | public void testFindObjectMapperAlreadyCreated() {
57 | MethodParameterDetails methodParameterDetails = new MethodParameterDetails(methodParameter, MediaType.APPLICATION_JSON, new FilterFields());
58 | MethodParameterDetails methodParameterDetails2 = new MethodParameterDetails(methodParameter, MediaType.APPLICATION_JSON, new FilterFields());
59 | ObjectMapper objectMapper = objectMapperCache.findObjectMapper(methodParameterDetails);
60 | ObjectMapper objectMapper2 = objectMapperCache.findObjectMapper(methodParameterDetails2);
61 |
62 | assertEquals(objectMapper, objectMapper2);
63 | }
64 |
65 | }
66 |
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/components/ServiceDisabledWSTest.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.components;
2 |
3 | import com.jfilter.mock.webservice.WSClassFieldSingle;
4 | import com.jfilter.mock.MockClassesHelper;
5 | import com.jfilter.mock.MockHttpRequestHelper;
6 | import com.jfilter.mock.MockUser;
7 | import com.jfilter.mock.config.WSConfigurationDisabled;
8 | import org.junit.Before;
9 | import org.junit.Test;
10 | import org.junit.runner.RunWith;
11 | import org.springframework.beans.factory.annotation.Autowired;
12 | import org.springframework.test.context.ContextConfiguration;
13 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
14 | import org.springframework.test.context.web.WebAppConfiguration;
15 | import org.springframework.test.web.servlet.MockMvc;
16 | import org.springframework.test.web.servlet.setup.MockMvcBuilders;
17 | import org.springframework.web.context.WebApplicationContext;
18 |
19 | import static org.junit.Assert.assertNotEquals;
20 |
21 | @ContextConfiguration(classes = WSConfigurationDisabled.class)
22 | @RunWith(SpringJUnit4ClassRunner.class)
23 | @WebAppConfiguration
24 | public class ServiceDisabledWSTest {
25 | private MockMvc mockMvc;
26 | private WebApplicationContext webApplicationContext;
27 |
28 | @Autowired
29 | public ServiceDisabledWSTest setWebApplicationContext(WebApplicationContext webApplicationContext) {
30 | this.webApplicationContext = webApplicationContext;
31 | return this;
32 | }
33 |
34 | @Before
35 | public void init() {
36 | this.mockMvc = MockMvcBuilders.webAppContextSetup(this.webApplicationContext).build();
37 | }
38 |
39 | @Test
40 | public void testWSClassFieldSingle() {
41 | MockUser user = MockClassesHelper.getUserMock();
42 | user.setId(null);
43 |
44 | String result = MockHttpRequestHelper.doRequest(mockMvc, WSClassFieldSingle.MAPPING_SIGN_IN_FIELD_SINGLE, "ROLE", "ADMIN");
45 |
46 | assertNotEquals(user.toString(), result);
47 | }
48 |
49 |
50 |
51 | }
52 |
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/components/ServiceEnabledWSTest.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.components;
2 |
3 | import com.jfilter.mock.webservice.WSClassFieldSingle;
4 | import com.jfilter.mock.MockClassesHelper;
5 | import com.jfilter.mock.MockHttpRequestHelper;
6 | import com.jfilter.mock.MockUser;
7 | import com.jfilter.mock.config.WSConfigurationEnabled;
8 | import org.junit.Before;
9 | import org.junit.Test;
10 | import org.junit.runner.RunWith;
11 | import org.springframework.beans.factory.annotation.Autowired;
12 | import org.springframework.test.context.ContextConfiguration;
13 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
14 | import org.springframework.test.context.web.WebAppConfiguration;
15 | import org.springframework.test.web.servlet.MockMvc;
16 | import org.springframework.test.web.servlet.setup.MockMvcBuilders;
17 | import org.springframework.web.context.WebApplicationContext;
18 | import static com.jfilter.mock.webservice.WSClassFieldMultiple.MAPPING_SIGN_IN_FIELD_MULTIPLE;
19 | import static com.jfilter.mock.webservice.WSClassStrategies.MAPPING_SIGN_IN_STRATEGIES;
20 | import static com.jfilter.mock.webservice.WSClassStrategyMultiple.MAPPING_SIGN_IN_STRATEGY_MULTIPLE;
21 | import static com.jfilter.mock.webservice.WSClassStrategySingle.MAPPING_SIGN_IN_STRATEGY_SINGLE;
22 | import static com.jfilter.mock.webservice.WSMethod.MAPPING_SIGN_IN_DEFAULT;
23 | import static junit.framework.TestCase.assertEquals;
24 |
25 | @ContextConfiguration(classes = WSConfigurationEnabled.class)
26 | @RunWith(SpringJUnit4ClassRunner.class)
27 | @WebAppConfiguration
28 | public class ServiceEnabledWSTest {
29 | private MockMvc mockMvc;
30 | private WebApplicationContext webApplicationContext;
31 |
32 | @Autowired
33 | public ServiceEnabledWSTest setWebApplicationContext(WebApplicationContext webApplicationContext) {
34 | this.webApplicationContext = webApplicationContext;
35 | return this;
36 | }
37 |
38 | @Before
39 | public void init() {
40 | this.mockMvc = MockMvcBuilders.webAppContextSetup(this.webApplicationContext).build();
41 | }
42 |
43 | @Test
44 | public void testWSClassFieldSingle() {
45 | MockUser user = MockClassesHelper.getUserMock();
46 | user.setId(null);
47 |
48 | String result = MockHttpRequestHelper.doRequest(mockMvc, WSClassFieldSingle.MAPPING_SIGN_IN_FIELD_SINGLE, "ROLE", "ADMIN");
49 |
50 | assertEquals(user.toString(), result);
51 | }
52 |
53 | @Test
54 | public void testWSClassFieldMultiple() {
55 | MockUser user = MockClassesHelper.getUserMock();
56 | user.setId(null)
57 | .setPassword(null);
58 |
59 | String result = MockHttpRequestHelper.doRequest(mockMvc, MAPPING_SIGN_IN_FIELD_MULTIPLE, "ROLE", "ADMIN");
60 |
61 | assertEquals(user.toString(), result);
62 | }
63 |
64 | @Test
65 | public void testWSClassStrategySingle() {
66 | MockUser user = MockClassesHelper.getUserMock();
67 | user.setId(null)
68 | .setPassword(null);
69 |
70 | String result = MockHttpRequestHelper.doRequest(mockMvc, MAPPING_SIGN_IN_STRATEGY_SINGLE, "ROLE", "ADMIN");
71 |
72 | assertEquals(user.toString(), result);
73 | }
74 |
75 | @Test
76 | public void testWSClassStrategyMultiple() {
77 | MockUser user = MockClassesHelper.getUserMock();
78 | user.setId(null)
79 | .setPassword(null)
80 | .setEmail(null);
81 |
82 | String result = MockHttpRequestHelper.doRequest(mockMvc, MAPPING_SIGN_IN_STRATEGY_MULTIPLE, "ROLE", "ADMIN");
83 |
84 | assertEquals(user.toString(), result);
85 | }
86 |
87 | @Test
88 | public void testWSClassStrategies() {
89 | MockUser user = MockClassesHelper.getUserMock();
90 | user.setId(null)
91 | .setPassword(null)
92 | .setEmail(null);
93 |
94 | String result = MockHttpRequestHelper.doRequest(mockMvc, MAPPING_SIGN_IN_STRATEGIES, "ROLE", "ADMIN");
95 |
96 | assertEquals(user.toString(), result);
97 | }
98 |
99 | @Test
100 | public void testWSSignInDefault() {
101 | MockUser user = MockClassesHelper.getUserMock();
102 |
103 | String result = MockHttpRequestHelper.doRequest(mockMvc, MAPPING_SIGN_IN_DEFAULT, "ROLE", "ADMIN");
104 |
105 | assertEquals(user.toString(), result);
106 | }
107 | }
108 |
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/converter/ConverterMapperITest.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.converter;
2 |
3 | import com.jfilter.components.DynamicFilterProvider;
4 | import com.jfilter.filter.FilterFields;
5 | import com.jfilter.mock.MockHttpRequestHelper;
6 | import com.jfilter.mock.MockMethods;
7 | import com.jfilter.mock.MockUser;
8 | import com.jfilter.mock.config.WSConfigurationHelper;
9 | import com.jfilter.request.RequestSession;
10 | import org.junit.Test;
11 | import org.springframework.beans.factory.annotation.Autowired;
12 | import org.springframework.core.MethodParameter;
13 | import org.springframework.stereotype.Component;
14 |
15 | import javax.servlet.http.HttpServletRequest;
16 | import java.util.Arrays;
17 | import static org.junit.Assert.assertEquals;
18 |
19 | @Component
20 | public class ConverterMapperITest {
21 |
22 | @Autowired
23 | private DynamicFilterProvider dynamicFilterProvider;
24 |
25 | @Test
26 | public void testOnGetFilterFieldsTrue() throws Exception {
27 | WSConfigurationHelper.instance(WSConfigurationHelper.Instance.FILTER_ENABLED, this);
28 |
29 | FilterFields filterFields = new FilterFields(MockUser.class, Arrays.asList("id", "password"));
30 |
31 | MethodParameter methodParameter = MockMethods.dynamicSessionFilter();
32 | HttpServletRequest request = MockHttpRequestHelper.getMockDynamicFilterRequest(filterFields);
33 | FilterFields found = dynamicFilterProvider.getFields(methodParameter, new RequestSession(request));
34 |
35 | assertEquals(filterFields, found);
36 | }
37 |
38 | @Test
39 | public void testOnGetFilterFieldsEmpty() throws Exception {
40 | WSConfigurationHelper.instance(WSConfigurationHelper.Instance.FILTER_ENABLED, this);
41 |
42 | MethodParameter methodParameter = MockMethods.methodWithoutAnnotations();
43 | HttpServletRequest request = MockHttpRequestHelper.getMockDynamicFilterRequest(null);
44 | FilterFields found = dynamicFilterProvider.getFields(methodParameter, new RequestSession(request));
45 |
46 | assertEquals(0, found.getFieldsMap().size());
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/converter/ConverterMapperWSTest.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.converter;
2 |
3 | import com.jfilter.filter.FilterFields;
4 | import com.jfilter.mock.MockClassesHelper;
5 | import com.jfilter.mock.MockHttpRequestHelper;
6 | import com.jfilter.mock.MockUser;
7 | import com.jfilter.mock.config.WSConfigurationEnabled;
8 | import org.junit.Test;
9 | import org.junit.runner.RunWith;
10 | import org.springframework.beans.factory.annotation.Autowired;
11 | import org.springframework.test.context.ContextConfiguration;
12 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
13 | import org.springframework.test.context.web.WebAppConfiguration;
14 | import org.springframework.test.web.servlet.MockMvc;
15 | import org.springframework.test.web.servlet.setup.MockMvcBuilders;
16 | import org.springframework.web.context.WebApplicationContext;
17 | import java.util.Arrays;
18 | import static com.jfilter.components.DynamicSessionFilter.ATTRIBUTE_FILTER_FIELDS;
19 | import static com.jfilter.mock.webservice.WSMethod.MAPPING_SIGN_IN_DYNAMIC;
20 | import static org.junit.Assert.assertEquals;
21 |
22 | @ContextConfiguration(classes = WSConfigurationEnabled.class)
23 | @RunWith(SpringJUnit4ClassRunner.class)
24 | @WebAppConfiguration
25 | public class ConverterMapperWSTest {
26 | private MockMvc mockMvc;
27 |
28 | @Autowired
29 | public void setWebApplicationContext(WebApplicationContext webApplicationContext) {
30 | mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
31 | }
32 |
33 | @Test
34 | public void testSetFilterFields() {
35 | MockUser user = MockClassesHelper.getUserMock();
36 | String result = MockHttpRequestHelper.doRequest(mockMvc, MAPPING_SIGN_IN_DYNAMIC);
37 | assertEquals(user.toString(), result);
38 | }
39 |
40 | @Test
41 | public void testNotSetFilterFields() {
42 | MockUser user = MockClassesHelper.getUserMock();
43 | user.setId(null);
44 | user.setPassword(null);
45 |
46 | FilterFields filterFields = new FilterFields(MockUser.class, Arrays.asList("id", "password"));
47 | String result = MockHttpRequestHelper.doRequest(mockMvc, MAPPING_SIGN_IN_DYNAMIC, ATTRIBUTE_FILTER_FIELDS, filterFields);
48 | assertEquals(user.toString(), result);
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/filter/BaseFilterTest.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.filter;
2 |
3 | import org.junit.Test;
4 | import static org.junit.Assert.assertNotNull;
5 |
6 | public class BaseFilterTest {
7 |
8 | @Test(expected = IllegalArgumentException.class)
9 | public void testNullMethod() {
10 | BaseFilter baseFilter = new FieldFilter(null);
11 | assertNotNull(baseFilter);
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/filter/DynamicSessionFilterITest.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.filter;
2 |
3 | import com.jfilter.components.DynamicFilterProvider;
4 | import com.jfilter.mock.MockHttpRequestHelper;
5 | import com.jfilter.mock.MockMethods;
6 | import com.jfilter.mock.MockUser;
7 | import com.jfilter.mock.config.WSConfigurationHelper;
8 | import com.jfilter.request.RequestSession;
9 | import org.junit.Test;
10 | import org.springframework.beans.factory.annotation.Autowired;
11 | import org.springframework.core.MethodParameter;
12 | import org.springframework.stereotype.Component;
13 |
14 | import javax.servlet.http.HttpServletRequest;
15 | import java.util.Arrays;
16 |
17 | import static org.junit.Assert.assertNotNull;
18 | import static org.junit.Assert.assertEquals;
19 |
20 | @Component
21 | public class DynamicSessionFilterITest {
22 |
23 | @Autowired
24 | private DynamicFilterProvider dynamicFilterProvider;
25 |
26 | @Test
27 | public void testOnGetFilterFieldsNotNull() throws Exception {
28 | WSConfigurationHelper.instance(WSConfigurationHelper.Instance.FILTER_ENABLED, this);
29 | MethodParameter methodParameter = MockMethods.dynamicSessionFilter();
30 | HttpServletRequest request = MockHttpRequestHelper.getMockDynamicFilterRequest(null);
31 | FilterFields found = dynamicFilterProvider.getFields(methodParameter, new RequestSession(request));
32 |
33 | assertNotNull(found);
34 | }
35 |
36 | @Test
37 | public void testMockDynamicNullFilter() throws Exception {
38 | WSConfigurationHelper.instance(WSConfigurationHelper.Instance.FILTER_ENABLED, this);
39 | MethodParameter methodParameter = MockMethods.mockDynamicNullFilter();
40 |
41 | RequestSession requestSession = new RequestSession(MockHttpRequestHelper.getMockDynamicFilterRequest(new FilterFields(MockUser.class, Arrays.asList("id", "password"))));
42 |
43 | FilterFields found = dynamicFilterProvider.getFields(methodParameter, requestSession);
44 |
45 | assertEquals(FilterFields.EMPTY_FIELDS.get(), found);
46 | }
47 |
48 | @Test
49 | public void testDynamicSessionFilter() throws Exception {
50 | WSConfigurationHelper.instance(WSConfigurationHelper.Instance.FILTER_ENABLED, this);
51 | MethodParameter methodParameter = MockMethods.dynamicSessionFilter();
52 |
53 | RequestSession requestSession = new RequestSession(MockHttpRequestHelper.getMockDynamicFilterRequest(new FilterFields(MockUser.class, Arrays.asList("id", "password"))));
54 |
55 | FilterFields found = dynamicFilterProvider.getFields(methodParameter, requestSession);
56 |
57 | assertNotNull(found);
58 | }
59 | }
60 |
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/filter/FileConfigurationTest.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.filter;
2 |
3 | import com.jfilter.mock.MockClassesHelper;
4 | import org.junit.Before;
5 | import org.junit.Test;
6 |
7 | import static org.junit.Assert.assertEquals;
8 | import static org.junit.Assert.assertNotNull;
9 |
10 | public class FileConfigurationTest {
11 | private FileConfig mockConfig;
12 |
13 | @Before
14 | public void init() {
15 | mockConfig = MockClassesHelper.getMockAdminFileConfig();
16 | assertNotNull(mockConfig);
17 | }
18 |
19 | @Test
20 | public void testControllerClassName() {
21 | FileConfig.Controller controller = mockConfig.getControllers().get(0);
22 | assertEquals("com.jfilter.filter.FileConfigurationTest", controller.getClassName());
23 | }
24 |
25 | @Test
26 | public void testStrategy() {
27 | FileConfig.Controller controller = mockConfig.getControllers().get(0);
28 | FileConfig.Strategy strategy = controller.getStrategies().get(0);
29 | assertEquals("ROLE", strategy.getAttributeName());
30 | assertEquals("ADMIN", strategy.getAttributeValue());
31 | }
32 |
33 | @Test
34 | public void testFilter() {
35 | FileConfig.Controller controller = mockConfig.getControllers().get(0);
36 | FileConfig.Strategy strategy = controller.getStrategies().get(0);
37 | FileConfig.Filter filter = strategy.getFilters().get(0);
38 | assertEquals("com.jfilter.filter.FileConfigurationTest", filter.getClassName());
39 | }
40 |
41 | @Test
42 | public void testField() {
43 | FileConfig.Controller controller = mockConfig.getControllers().get(0);
44 | FileConfig.Strategy strategy = controller.getStrategies().get(0);
45 | FileConfig.Filter filter = strategy.getFilters().get(0);
46 | FileConfig.Field field = filter.getFields().get(0);
47 | assertEquals("id", field.getName());
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/filter/FileFilterTest.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.filter;
2 |
3 | import com.jfilter.FilterException;
4 | import com.jfilter.mock.MockClassesHelper;
5 | import com.jfilter.mock.MockHttpRequestHelper;
6 | import com.jfilter.mock.MockMethods;
7 | import com.jfilter.request.RequestSession;
8 | import org.junit.Assert;
9 | import org.junit.Test;
10 | import java.io.IOException;
11 | import java.io.File;
12 | import java.io.FileOutputStream;
13 | import java.util.Arrays;
14 |
15 | public class FileFilterTest {
16 |
17 | @Test
18 | public void testMethodWithoutAnnotations() {
19 | FileFilter fileFilter = new FileFilter(MockMethods.methodWithoutAnnotations());
20 | FilterFields filterFields = fileFilter.getFields(MockClassesHelper.getUserMock(),
21 | new RequestSession(MockHttpRequestHelper.getMockAdminRequest()));
22 | Assert.assertEquals(0, filterFields.getFieldsMap().size());
23 | }
24 |
25 | @Test
26 | public void testMethodNotExistFile() {
27 | FileFilter fileFilter = new FileFilter(MockMethods.fileNotExist());
28 | FilterFields filterFields = fileFilter.getFields(MockClassesHelper.getUserMock(),
29 | new RequestSession(MockHttpRequestHelper.getMockAdminRequest()));
30 | Assert.assertEquals(0, filterFields.getFieldsMap().size());
31 | }
32 |
33 | @Test
34 | public void testMethodBadConfig() {
35 | FileFilter fileFilter = new FileFilter(MockMethods.fileBadConfig());
36 | FilterFields filterFields = fileFilter.getFields(MockClassesHelper.getUserMock(),
37 | new RequestSession(MockHttpRequestHelper.getMockAdminRequest()));
38 | Assert.assertEquals(0, filterFields.getFieldsMap().size());
39 | }
40 |
41 | @Test
42 | public void testFileAnnotationClassNotFound() {
43 | FileFilter fileFilter = new FileFilter(MockMethods.fileAnnotationClassNotFound());
44 | FilterFields filterFields = fileFilter.getFields(MockClassesHelper.getUserMock(),
45 | new RequestSession(MockHttpRequestHelper.getMockAdminRequest()));
46 | Assert.assertEquals(Arrays.asList("id", "password"), filterFields.getFieldsMap().get(null));
47 | }
48 |
49 | @Test
50 | public void testFileAnnotationEmpty() {
51 | FileFilter fileFilter = new FileFilter(MockMethods.fileAnnotationEmpty());
52 | FilterFields filterFields = fileFilter.getFields(MockClassesHelper.getUserMock(),
53 | new RequestSession(MockHttpRequestHelper.getMockAdminRequest()));
54 |
55 | Assert.assertEquals(0, filterFields.getFieldsMap().size());
56 | }
57 |
58 | @Test(expected = FilterException.class)
59 | public void testIOException() throws IOException {
60 | String fileName = FileFilter.getFileName("config_io_exception.xml");
61 | File file = new File(fileName);
62 |
63 | try (FileOutputStream in = new FileOutputStream(file)) {
64 | java.nio.channels.FileLock lock = in.getChannel().lock();
65 | try {
66 | FileFilter fileFilter = new FileFilter(MockMethods.fileLocked());
67 | FilterFields filterFields = fileFilter.getFields(MockClassesHelper.getUserMock(),
68 | new RequestSession(MockHttpRequestHelper.getMockAdminRequest()));
69 |
70 | Assert.assertEquals(0, filterFields.getFieldsMap().size());
71 | } finally {
72 | lock.release();
73 | }
74 | }
75 | }
76 | }
77 |
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/filter/FilterFactoryTest.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.filter;
2 |
3 | import com.jfilter.mock.MockMethods;
4 | import org.junit.Test;
5 | import org.springframework.core.MethodParameter;
6 |
7 | import static org.junit.Assert.assertNotNull;
8 | import static org.junit.Assert.assertTrue;
9 | import static org.junit.Assert.assertFalse;
10 | import static org.junit.Assert.assertEquals;
11 | import static org.junit.Assert.assertNull;
12 |
13 | public class FilterFactoryTest {
14 |
15 | @Test(expected = IllegalAccessException.class)
16 | public void testInit() throws IllegalAccessException, InstantiationException {
17 | FilterFactory filterFactory = FilterFactory.class.newInstance();
18 | assertNotNull(filterFactory);
19 | }
20 |
21 | @Test
22 | public void testIgnoreSettingMethod() {
23 | MethodParameter methodParameter = MockMethods.mockIgnoreSettingsMethod();
24 | assertTrue(FilterFactory.isAccept(methodParameter));
25 | }
26 |
27 | @Test
28 | public void testIgnoreWithoutAnnotations() {
29 | MethodParameter methodParameter = MockMethods.methodWithoutAnnotations();
30 | assertFalse(FilterFactory.isAccept(methodParameter));
31 | }
32 |
33 | @Test
34 | public void testStrategiesMethod() {
35 | MethodParameter methodParameter = MockMethods.mockIgnoreStrategiesMethod();
36 | assertTrue(FilterFactory.isAccept(methodParameter));
37 | }
38 |
39 | @Test
40 | public void testFactoryFieldIgnore() {
41 | MethodParameter methodParameter = MockMethods.mockIgnoreSettingsMethod();
42 | assertNotNull(methodParameter);
43 |
44 | BaseFilter filter = FilterFactory.getFromFactory(methodParameter);
45 | assertNotNull(filter);
46 |
47 | assertEquals(filter.getClass(), FieldFilter.class);
48 | }
49 |
50 | @Test
51 | public void testFactoryStrategyFilter() {
52 | MethodParameter methodParameter = MockMethods.mockIgnoreStrategiesMethod();
53 | assertNotNull(methodParameter);
54 |
55 | BaseFilter filter = FilterFactory.getFromFactory(methodParameter);
56 | assertNotNull(filter);
57 |
58 | assertEquals(filter.getClass(), StrategyFilter.class);
59 | }
60 |
61 | @Test
62 | public void testFactoryNull() {
63 | MethodParameter methodParameter = MockMethods.methodWithoutAnnotations();
64 | assertNotNull(methodParameter);
65 | BaseFilter filter = FilterFactory.getFromFactory(methodParameter);
66 | assertNull(filter);
67 | }
68 | }
69 |
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/filter/FilterFieldsTest.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.filter;
2 |
3 | import org.junit.Before;
4 | import org.junit.Test;
5 | import java.util.Arrays;
6 | import static org.junit.Assert.assertTrue;
7 | import static org.junit.Assert.assertFalse;
8 | import static org.junit.Assert.assertNotSame;
9 | import static org.junit.Assert.assertEquals;
10 | import static org.junit.Assert.assertNotEquals;
11 |
12 | public class FilterFieldsTest {
13 | private FilterFields filterFields;
14 | private FilterFields filterFieldsNull;
15 |
16 | @Before
17 | public void init() {
18 | filterFields = new FilterFields(String.class, Arrays.asList("id", "password"));
19 | filterFieldsNull = new FilterFields(void.class, Arrays.asList("id", "password"));
20 | }
21 |
22 | @Test
23 | public void testEqualsTrue() {
24 | FilterFields filterFields = new FilterFields();
25 | boolean result = filterFields.equals(new FilterFields());
26 |
27 | assertTrue(result);
28 | }
29 |
30 | @SuppressWarnings("EqualsBetweenInconvertibleTypes")
31 | @Test
32 | public void testEqualsFalse() {
33 | FilterFields filterFields = new FilterFields();
34 | boolean result = filterFields.equals(1);
35 |
36 | assertFalse(result);
37 | }
38 |
39 | @Test
40 | public void testHashCodeEquals() {
41 | FilterFields filterFields2 = new FilterFields(String.class, Arrays.asList("id", "password"));
42 |
43 | assertNotSame(filterFields, filterFields2);
44 | assertEquals(filterFields.hashCode(), filterFields2.hashCode());
45 | }
46 |
47 | @Test
48 | public void testHashCodeNotEquals() {
49 | FilterFields filterFields2 = new FilterFields(String.class, Arrays.asList("some_id", "some_password"));
50 |
51 | assertNotSame(filterFields, filterFields2);
52 | assertNotEquals(filterFields.hashCode(), filterFields2.hashCode());
53 | }
54 |
55 | @Test
56 | public void testEquals() {
57 | FilterFields filterFields2 = new FilterFields(String.class, Arrays.asList("id", "password"));
58 | assertEquals(filterFields, filterFields2);
59 | }
60 |
61 | @Test
62 | public void testNotEquals() {
63 | FilterFields filterFields2 = new FilterFields(String.class, Arrays.asList("some_id", "some_password"));
64 | assertNotEquals(filterFields, filterFields2);
65 | }
66 |
67 | @Test
68 | public void testEqualsBehaviour() {
69 | filterFields.setFilterBehaviour(FilterBehaviour.KEEP_FIELDS);
70 |
71 | FilterFields filterFields2 = new FilterFields(String.class, Arrays.asList("id", "password"));
72 | filterFields2.setFilterBehaviour(FilterBehaviour.KEEP_FIELDS);
73 | assertEquals(filterFields, filterFields2);
74 | }
75 |
76 | @Test
77 | public void testNotEqualsBehaviour() {
78 | filterFields.setFilterBehaviour(FilterBehaviour.KEEP_FIELDS);
79 |
80 | FilterFields filterFields2 = new FilterFields(String.class, Arrays.asList("id", "password"));
81 | filterFields2.setFilterBehaviour(FilterBehaviour.HIDE_FIELDS);
82 | assertNotEquals(filterFields, filterFields2);
83 | }
84 |
85 | @Test
86 | public void testGetFieldsByClassAndList() {
87 | FilterFields filterFields2 = FilterFields.getFieldsBy(String.class, Arrays.asList("id", "password"));
88 |
89 | assertEquals(filterFields, filterFields2);
90 | }
91 |
92 | @Test
93 | public void testGetFieldsByList() {
94 | FilterFields filterFields2 = FilterFields.getFieldsBy(Arrays.asList("id", "password"));
95 |
96 | assertEquals(filterFieldsNull, filterFields2);
97 | }
98 |
99 | @Test
100 | public void testGetFieldsByClassAndArray() {
101 | FilterFields filterFields2 = FilterFields.getFieldsBy(String.class, new String[]{"id", "password"});
102 |
103 | assertEquals(filterFields, filterFields2);
104 | }
105 |
106 | @Test
107 | public void testGetFieldsByArray() {
108 | FilterFields filterFields2 = FilterFields.getFieldsBy(new String[]{"id", "password"});
109 |
110 | assertEquals(filterFieldsNull, filterFields2);
111 | }
112 |
113 | @Test
114 | public void testAppendFieldsNull() {
115 | FilterFields filterFields2 = FilterFields.getFieldsBy(new String[]{"id", "password"});
116 | filterFields2.appendToMap(null);
117 |
118 | assertEquals(filterFieldsNull, filterFields2);
119 | }
120 |
121 | @Test
122 | public void testAppendFieldsSizeZero() {
123 | FilterFields filterFields2 = FilterFields.getFieldsBy(new String[]{"id", "password"});
124 | filterFields2.appendToMap(FilterFields.EMPTY_FIELDS.get());
125 |
126 | assertEquals(filterFieldsNull, filterFields2);
127 | }
128 |
129 | @Test
130 | public void testEqualsSameObject() {
131 | FilterFields filterFields2 = FilterFields.getFieldsBy(new String[]{"id", "password"});
132 | assertTrue(filterFields2.equals(filterFields2));
133 | }
134 |
135 | }
136 |
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/filter/StrategyFilterTest.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.filter;
2 |
3 | import com.jfilter.mock.MockClassesHelper;
4 | import com.jfilter.mock.MockHttpRequestHelper;
5 | import com.jfilter.mock.MockMethods;
6 | import com.jfilter.request.RequestSession;
7 | import org.junit.Assert;
8 | import org.junit.Before;
9 | import org.junit.Test;
10 | import org.springframework.core.MethodParameter;
11 |
12 | public class StrategyFilterTest {
13 | private StrategyFilter strategyFilter;
14 |
15 | @Before
16 | public void init() {
17 | MethodParameter methodParameter = MockMethods.mockIgnoreStrategyMethod();
18 | strategyFilter = new StrategyFilter(methodParameter);
19 | }
20 |
21 | @Test
22 | public void testUserSession() {
23 | RequestSession requestSession = new RequestSession(MockHttpRequestHelper.getMockUserRequest());
24 | FilterFields filterFields = strategyFilter.getFields(MockClassesHelper.getUserMock(), requestSession);
25 | Assert.assertEquals(1, filterFields.getFieldsMap().size());
26 | }
27 |
28 | @Test
29 | public void testClearSession() {
30 | RequestSession requestSession = new RequestSession(MockHttpRequestHelper.getMockClearRequest());
31 | FilterFields filterFields = strategyFilter.getFields(MockClassesHelper.getUserMock(), requestSession);
32 | Assert.assertEquals(0, filterFields.getFieldsMap().size());
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/mapper/FilterObjectMapperITest.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.mapper;
2 |
3 | import com.jfilter.components.FilterConfiguration;
4 | import com.jfilter.mock.config.WSConfigurationEnabled;
5 | import static org.junit.Assert.assertNotNull;
6 |
7 | import org.junit.Before;
8 | import org.junit.Test;
9 | import org.junit.runner.RunWith;
10 | import org.springframework.beans.factory.annotation.Autowired;
11 | import org.springframework.test.context.ContextConfiguration;
12 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
13 | import org.springframework.test.context.web.WebAppConfiguration;
14 | import com.fasterxml.jackson.databind.ser.FilterProvider;
15 |
16 | @ContextConfiguration(classes = WSConfigurationEnabled.class)
17 | @RunWith(SpringJUnit4ClassRunner.class)
18 | @WebAppConfiguration
19 | public class FilterObjectMapperITest {
20 | private FilterObjectMapper objectMapper;
21 |
22 | @Autowired
23 | private FilterConfiguration filterConfiguration;
24 |
25 | @Before
26 | public void init() {
27 | objectMapper = new FilterObjectMapper(filterConfiguration);
28 | }
29 |
30 | @Test
31 | public void testWriterNotNull() {
32 | assertNotNull(objectMapper.writer());
33 | }
34 |
35 | @Test
36 | public void testWriterWithViewNotNull() {
37 | assertNotNull(objectMapper.writerWithView(null));
38 | }
39 |
40 | @Test
41 | public void testWriterWithfilterProviderNotNull() {
42 | assertNotNull(objectMapper.writer((FilterProvider) null));
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/mapper/FilterObjectWriterITest.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.mapper;
2 |
3 | import com.fasterxml.jackson.core.JsonEncoding;
4 | import com.fasterxml.jackson.core.JsonGenerator;
5 | import com.jfilter.components.FilterConfiguration;
6 | import com.jfilter.components.FilterProvider;
7 | import com.jfilter.converter.FilterClassWrapper;
8 | import com.jfilter.converter.MethodParameterDetails;
9 | import com.jfilter.filter.BaseFilter;
10 | import com.jfilter.mock.MockMethods;
11 | import com.jfilter.mock.MockUser;
12 | import com.jfilter.mock.config.WSConfigurationEnabled;
13 | import org.junit.Before;
14 | import org.junit.Test;
15 | import org.junit.runner.RunWith;
16 | import org.springframework.beans.factory.annotation.Autowired;
17 | import org.springframework.core.MethodParameter;
18 | import org.springframework.http.MediaType;
19 | import org.springframework.test.context.ContextConfiguration;
20 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
21 | import org.springframework.test.context.web.WebAppConfiguration;
22 |
23 |
24 | import java.io.ByteArrayOutputStream;
25 | import java.io.IOException;
26 |
27 | import static org.junit.Assert.assertEquals;
28 | import static org.junit.Assert.assertNotNull;
29 |
30 | @ContextConfiguration(classes = WSConfigurationEnabled.class)
31 | @RunWith(SpringJUnit4ClassRunner.class)
32 | @WebAppConfiguration
33 | public class FilterObjectWriterITest {
34 | private FilterObjectWriter writer;
35 | private MockUser user;
36 | private ByteArrayOutputStream out;
37 | private JsonGenerator generator;
38 |
39 | @Autowired
40 | private FilterConfiguration filterConfiguration;
41 |
42 | @Autowired
43 | private FilterProvider filterProvider;
44 |
45 | @Before
46 | public void init() throws IOException {
47 | FilterObjectMapper objectMapper = new FilterObjectMapper(filterConfiguration);
48 | writer = (FilterObjectWriter) objectMapper.writer();
49 | user = new MockUser();
50 |
51 | out = new ByteArrayOutputStream();
52 | generator = objectMapper.getFactory().createGenerator(out, JsonEncoding.UTF8);
53 | }
54 |
55 | @Test
56 | public void testWriteValue() throws IOException {
57 | writer.writeValue(generator, user);
58 | assertNotNull(out.toString());
59 | }
60 |
61 | @Test(expected = NullPointerException.class)
62 | public void testWriteValueFilterClassWrapperNull() throws IOException {
63 | FilterClassWrapper filterClassWrapper = new FilterClassWrapper(user, null);
64 | writer.writeValue(generator, filterClassWrapper);
65 | }
66 |
67 | @Test
68 | public void testWriteValueFilterClassWrapperNotNull() throws IOException {
69 |
70 | MethodParameter methodParameter = MockMethods.singleAnnotation();
71 |
72 | BaseFilter filter = filterProvider.getFilter(methodParameter);
73 |
74 | MethodParameterDetails methodParameterDetails = new MethodParameterDetails(methodParameter,
75 | MediaType.APPLICATION_JSON, filter.getFields(user, null));
76 |
77 | FilterClassWrapper filterClassWrapper = new FilterClassWrapper(user, methodParameterDetails);
78 | writer.writeValue(generator, filterClassWrapper);
79 |
80 | String output = out.toString();
81 |
82 | assertEquals(-1, output.indexOf("\"id\""));
83 | }
84 |
85 | @Test
86 | public void testGetFilterConfiguration() {
87 | assertEquals(filterConfiguration, writer.getFilterConfiguration());
88 | }
89 | }
90 |
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/mapper/FilterObjectWriterTest.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.mapper;
2 |
3 | import com.fasterxml.jackson.core.util.DefaultPrettyPrinter;
4 | import com.fasterxml.jackson.databind.JavaType;
5 | import com.fasterxml.jackson.databind.ObjectMapper;
6 | import com.fasterxml.jackson.databind.ObjectWriter;
7 | import org.junit.Before;
8 | import org.junit.Test;
9 |
10 | import static org.junit.Assert.assertNotNull;
11 |
12 | public class FilterObjectWriterTest {
13 | private FilterObjectWriter filterObjectWriter;
14 | private ObjectMapper objectMapper;
15 |
16 | @Before
17 | public void init() {
18 | objectMapper = new ObjectMapper();
19 | filterObjectWriter = new FilterObjectWriter(objectMapper, objectMapper.getSerializationConfig());
20 | }
21 |
22 | @Test
23 | public void testForTypeNull() {
24 | FilterObjectWriter filterObjectWriter = new FilterObjectWriter(objectMapper, null);
25 | JavaType javaType = null;
26 | ObjectWriter objectWriter = filterObjectWriter.forType(javaType);
27 | assertNotNull(objectWriter);
28 | }
29 |
30 | @Test(expected = NullPointerException.class)
31 | public void testForTypeNullNullPointerException() {
32 | FilterObjectWriter filterObjectWriter = new FilterObjectWriter(objectMapper, null);
33 | JavaType javaType = objectMapper.constructType(void.class);
34 | ObjectWriter objectWriter = filterObjectWriter.forType(javaType);
35 | assertNotNull(objectWriter);
36 | }
37 |
38 | @Test
39 | public void testForTypeNotNull() {
40 | JavaType javaType = objectMapper.constructType(void.class);
41 | ObjectWriter objectWriter = filterObjectWriter.forType(javaType);
42 | assertNotNull(objectWriter);
43 | }
44 |
45 | @Test
46 | public void testWithNotNull() {
47 | ObjectWriter objectWriter = filterObjectWriter.with(new DefaultPrettyPrinter());
48 | assertNotNull(objectWriter);
49 | }
50 |
51 | @Test
52 | public void testWithNull() {
53 | DefaultPrettyPrinter prettyPrinter = null;
54 | ObjectWriter objectWriter = filterObjectWriter.with(prettyPrinter);
55 | assertNotNull(objectWriter);
56 | }
57 | }
58 |
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/mapper/FilterXmlMapperITest.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.mapper;
2 |
3 | import com.fasterxml.jackson.databind.ser.FilterProvider;
4 | import com.jfilter.components.FilterConfiguration;
5 | import com.jfilter.mock.config.WSConfigurationEnabled;
6 | import org.junit.Before;
7 | import org.junit.Test;
8 | import org.junit.runner.RunWith;
9 | import org.springframework.beans.factory.annotation.Autowired;
10 | import org.springframework.test.context.ContextConfiguration;
11 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
12 | import org.springframework.test.context.web.WebAppConfiguration;
13 |
14 | import static org.junit.Assert.assertNotNull;
15 |
16 | @ContextConfiguration(classes = WSConfigurationEnabled.class)
17 | @RunWith(SpringJUnit4ClassRunner.class)
18 | @WebAppConfiguration
19 | public class FilterXmlMapperITest {
20 | private FilterXmlMapper objectMapper;
21 |
22 | @Autowired
23 | private FilterConfiguration filterConfiguration;
24 |
25 | @Before
26 | public void init() {
27 | objectMapper = new FilterXmlMapper(filterConfiguration);
28 | }
29 |
30 | @Test
31 | public void testWriterNotNull() {
32 | assertNotNull(objectMapper.writer());
33 | }
34 |
35 | @Test
36 | public void testWriterWithViewNotNull() {
37 | assertNotNull(objectMapper.writerWithView(null));
38 | }
39 |
40 | @Test
41 | public void testWriterWithfilterProviderNotNull() {
42 | assertNotNull(objectMapper.writer((FilterProvider) null));
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/mock/MockClassesHelper.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.mock;
2 |
3 | import com.jfilter.filter.FileConfig;
4 |
5 | import java.util.ArrayList;
6 | import java.util.HashMap;
7 | import java.util.List;
8 | import java.util.Map;
9 | import java.util.Arrays;
10 |
11 |
12 | public class MockClassesHelper {
13 |
14 | public static MockUser getUserMock() {
15 | MockUser mockUser = new MockUser();
16 |
17 | Map values = new HashMap<>();
18 | values.put("name", "value");
19 |
20 | List collection = new ArrayList<>(Arrays.asList("Hello", "World"));
21 |
22 | mockUser.setId(100)
23 | .setEmail("mail@mail.com")
24 | .setFullName("Jane Doe")
25 | .setPassword("1234567")
26 | .setId(100)
27 | .setCollectionValue(collection)
28 | .setMapValue(values)
29 | .setBoolValue(true)
30 | .setByteValue((byte) 100)
31 | .setCharValue('c')
32 | .setDoubleValue(5.5)
33 | .setFloatValue(5.5f)
34 | .setLongValue(100500)
35 | .setShortValue((short) 15);
36 |
37 | return mockUser;
38 | }
39 |
40 | public static FileConfig getMockAdminFileConfig() {
41 |
42 | FileConfig.Filter filter = new FileConfig.Filter();
43 | filter.setClassName("com.jfilter.filter.FileConfigurationTest");
44 | filter.getFields().add(new FileConfig.Field().setName("id"));
45 | filter.getFields().add(new FileConfig.Field().setName("password"));
46 |
47 | FileConfig.Strategy strategy = new FileConfig.Strategy();
48 | strategy.setAttributeName("ROLE")
49 | .setAttributeValue("ADMIN")
50 | .getFilters()
51 | .add(filter);
52 |
53 | FileConfig.Controller controller = new FileConfig.Controller();
54 | controller.setClassName("com.jfilter.filter.FileConfigurationTest")
55 | .getStrategies()
56 | .add(strategy);
57 |
58 | FileConfig fileConfig = new FileConfig();
59 | fileConfig.getControllers()
60 | .add(controller);
61 | return fileConfig;
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/mock/MockFile.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.mock;
2 |
3 | import java.io.File;
4 |
5 | public class MockFile extends File {
6 | private static final long serialVersionUID = -8702456483666584628L;
7 |
8 | public MockFile(String pathname) {
9 | super(pathname);
10 | }
11 |
12 | @Override
13 | public boolean exists() {
14 | return true;
15 | }
16 |
17 | @Override
18 | public boolean isDirectory() {
19 | return true;
20 | }
21 |
22 | @Override
23 | public boolean isHidden() {
24 | return true;
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/mock/MockHttpRequestHelper.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.mock;
2 |
3 | import com.jfilter.filter.FilterFields;
4 | import org.springframework.http.MediaType;
5 | import org.springframework.mock.web.MockHttpServletRequest;
6 | import org.springframework.test.web.servlet.MockMvc;
7 | import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;
8 |
9 | import javax.servlet.http.HttpServletRequest;
10 |
11 | import static com.jfilter.components.DynamicSessionFilter.ATTRIBUTE_FILTER_FIELDS;
12 | import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
13 | import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
14 |
15 | public class MockHttpRequestHelper {
16 |
17 | private static HttpServletRequest getMockRequest(String attributeName, Object attributeValue) {
18 | MockHttpServletRequest request = new MockHttpServletRequest("GET", "");
19 | if (attributeName != null && !attributeName.isEmpty())
20 | request.getSession().setAttribute(attributeName, attributeValue);
21 | return request;
22 | }
23 |
24 | public static HttpServletRequest getMockAdminRequest() {
25 | return getMockRequest("ROLE", "ADMIN");
26 | }
27 |
28 | public static HttpServletRequest getMockUserRequest() {
29 | return getMockRequest("ROLE", "USER");
30 | }
31 |
32 | public static HttpServletRequest getMockClearRequest() {
33 | return getMockRequest("", "");
34 | }
35 |
36 | public static HttpServletRequest getMockDynamicFilterRequest(FilterFields filterFields) {
37 | return getMockRequest(ATTRIBUTE_FILTER_FIELDS, filterFields);
38 | }
39 |
40 | private static String getContent(MockMvc mockMvc, MockHttpServletRequestBuilder requestBuilder) {
41 | final StringBuilder result = new StringBuilder();
42 | try {
43 | mockMvc.perform(requestBuilder)
44 | .andDo(print())
45 | .andExpect(mvcResult -> result.append(mvcResult.getResponse().getContentAsString()));
46 | } catch (Exception e) {
47 | return result.toString();
48 | }
49 | return result.toString();
50 | }
51 |
52 | public static String doRequest(MockMvc mockMvc, String url, String attributeName, Object attributeValue) {
53 | MockHttpServletRequestBuilder requestBuilder = post(url);
54 | requestBuilder
55 | .param("email", "email")
56 | .param("password", "password")
57 | .contentType(MediaType.APPLICATION_FORM_URLENCODED);
58 |
59 | if (attributeName != null && attributeValue != null)
60 | requestBuilder.sessionAttr(attributeName, attributeValue);
61 | return MockHttpRequestHelper.getContent(mockMvc, requestBuilder);
62 | }
63 |
64 | public static String doRequest(MockMvc mockMvc, String url) {
65 | return doRequest(mockMvc, url, null, null);
66 | }
67 | }
68 |
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/mock/MockUtils.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.mock;
2 |
3 | import com.jfilter.components.FilterConverter;
4 | import com.jfilter.filter.FileFilter;
5 | import com.jfilter.mapper.FilterObjectMapper;
6 | import com.jfilter.mapper.FilterXmlMapper;
7 | import org.awaitility.core.ConditionTimeoutException;
8 | import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
9 | import org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter;
10 | import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter;
11 |
12 | import java.io.File;
13 | import java.io.IOException;
14 | import java.nio.file.Files;
15 | import java.util.List;
16 | import java.util.concurrent.TimeUnit;
17 | import java.util.concurrent.atomic.AtomicBoolean;
18 |
19 | import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
20 | import static java.nio.file.StandardOpenOption.WRITE;
21 | import static org.awaitility.Awaitility.await;
22 |
23 | public class MockUtils {
24 |
25 | @SuppressWarnings("UnusedReturnValue")
26 | public static boolean sleep(Integer timeout) {
27 | try {
28 | await().atMost(timeout, TimeUnit.SECONDS)
29 | .untilTrue(new AtomicBoolean(false));
30 | return true;
31 | } catch (ConditionTimeoutException e) {
32 | return false;
33 | }
34 | }
35 |
36 | public static boolean fileCopy(String sourceName, String destinationName) {
37 | File sourceFile = FileFilter.resourceFile(sourceName);
38 | File destinationFile = FileFilter.resourceFile(destinationName);
39 | if (sourceFile == null || destinationFile == null)
40 | return false;
41 |
42 | if (sourceFile.exists() && destinationFile.exists()) {
43 | try {
44 | Files.copy(sourceFile.toPath(), destinationFile.toPath(), REPLACE_EXISTING);
45 | } catch (IOException e) {
46 | return false;
47 | }
48 | return true;
49 | }
50 | return false;
51 | }
52 |
53 | @SuppressWarnings("UnusedReturnValue")
54 | public static boolean fileWrite(File file, String content) {
55 | try {
56 | if (file != null && file.exists()) {
57 | Files.write(file.toPath(), content.getBytes(), WRITE);
58 | return true;
59 | } else
60 | return false;
61 | } catch (IOException e) {
62 | return false;
63 | }
64 | }
65 |
66 | public static boolean beanFilterConverterLoaded(List registeredConverters) {
67 | final AtomicBoolean result = new AtomicBoolean(false);
68 | registeredConverters.forEach(i -> {
69 | if (i instanceof FilterConverter) {
70 | result.set(true);
71 | } else if (i instanceof MappingJackson2HttpMessageConverter &&
72 | ((MappingJackson2HttpMessageConverter) i).getObjectMapper() instanceof FilterObjectMapper) {
73 | result.set(true);
74 | } else if (i instanceof MappingJackson2XmlHttpMessageConverter &&
75 | ((MappingJackson2XmlHttpMessageConverter) i).getObjectMapper() instanceof FilterXmlMapper) {
76 | result.set(true);
77 | }
78 | });
79 | return result.get();
80 | }
81 |
82 | public static void copyConverters(List registeredConverters, RequestMappingHandlerAdapter handlerAdapter) {
83 | registeredConverters.clear();
84 | registeredConverters.addAll(handlerAdapter.getMessageConverters());
85 | }
86 |
87 |
88 | }
89 |
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/mock/config/MockDynamicFilter.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.mock.config;
2 |
3 | import com.jfilter.filter.DynamicFilterComponent;
4 |
5 | @DynamicFilterComponent
6 | public class MockDynamicFilter {
7 | }
8 |
9 |
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/mock/config/MockDynamicNullFilter.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.mock.config;
2 |
3 | import com.comparator.Comparator;
4 | import com.jfilter.filter.DynamicFilterComponent;
5 | import com.jfilter.filter.DynamicFilterEvent;
6 | import com.jfilter.filter.FilterFields;
7 | import com.jfilter.request.RequestSession;
8 |
9 | @DynamicFilterComponent
10 | public class MockDynamicNullFilter implements DynamicFilterEvent {
11 |
12 | @Override
13 | public void onRequest(Comparator comparator) {
14 | //Do nothing
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/mock/config/WSConfigurationCustomConverter.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.mock.config;
2 |
3 | import com.fasterxml.jackson.databind.ObjectMapper;
4 | import com.jfilter.EnableJsonFilter;
5 | import com.jfilter.components.FilterConfiguration;
6 | import com.jfilter.mapper.FilterObjectMapper;
7 | import com.jfilter.mapper.FilterXmlMapper;
8 | import org.springframework.beans.factory.annotation.Autowired;
9 | import org.springframework.context.annotation.ComponentScan;
10 | import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
11 | import org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter;
12 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
13 |
14 | @EnableJsonFilter
15 | @ComponentScan({"com.jfilter.mock.webservice"})
16 | public class WSConfigurationCustomConverter extends WebMvcConfigurerAdapter {
17 |
18 | public class CustomJsonConverter extends MappingJackson2HttpMessageConverter {
19 | public CustomJsonConverter(ObjectMapper objectMapper) {
20 | super(objectMapper);
21 | }
22 | }
23 |
24 | public class CustomXmlConverter extends MappingJackson2XmlHttpMessageConverter {
25 | public CustomXmlConverter(ObjectMapper objectMapper) {
26 | super(objectMapper);
27 | }
28 | }
29 |
30 | @Autowired
31 | public void configure(FilterConfiguration filterConfiguration) {
32 | //Add custom message converters
33 | filterConfiguration.withCustomConverter(new CustomJsonConverter(new FilterObjectMapper(filterConfiguration)));
34 | filterConfiguration.withCustomConverter(new CustomXmlConverter(new FilterXmlMapper(filterConfiguration)));
35 | }
36 | }
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/mock/config/WSConfigurationDisabled.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.mock.config;
2 |
3 | import org.springframework.context.annotation.ComponentScan;
4 | import org.springframework.context.annotation.Configuration;
5 | import org.springframework.web.servlet.config.annotation.EnableWebMvc;
6 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
7 |
8 | @SuppressWarnings("ALL")
9 | @Configuration
10 | @ComponentScan({"com.jfilter.mock.webservice"})
11 | @EnableWebMvc
12 | public class WSConfigurationDisabled extends WebMvcConfigurerAdapter {
13 |
14 | }
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/mock/config/WSConfigurationDisabledFiltered.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.mock.config;
2 |
3 | import org.springframework.context.annotation.ComponentScan;
4 | import org.springframework.context.annotation.Configuration;
5 | import org.springframework.context.annotation.FilterType;
6 | import org.springframework.web.servlet.config.annotation.EnableWebMvc;
7 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
8 |
9 | @Configuration
10 | @ComponentScan(basePackages ={"com.jfilter", "com.jfilter.components", "com.jfilter.mock.webservice"},
11 | excludeFilters = {@ComponentScan.Filter(type=FilterType.ASSIGNABLE_TYPE, value = WSConfigurationEnabled.class)})
12 | @EnableWebMvc
13 | public class WSConfigurationDisabledFiltered extends WebMvcConfigurerAdapter {
14 |
15 | }
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/mock/config/WSConfigurationEnabled.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.mock.config;
2 |
3 | import com.jfilter.EnableJsonFilter;
4 | import com.jfilter.components.FilterRegister;
5 | import org.springframework.beans.factory.annotation.Autowired;
6 | import org.springframework.context.annotation.ComponentScan;
7 | import org.springframework.context.annotation.Configuration;
8 | import org.springframework.http.converter.HttpMessageConverter;
9 | import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
10 | import org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter;
11 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
12 | import java.util.List;
13 |
14 | @Configuration
15 | @EnableJsonFilter
16 | @ComponentScan({"com.jfilter.mock.webservice"})
17 | public class WSConfigurationEnabled extends WebMvcConfigurerAdapter {
18 | @Autowired
19 | private FilterRegister filterRegister;
20 |
21 | @Override
22 | public void configureMessageConverters(List> converters) {
23 | if (filterRegister != null)
24 | filterRegister.configureMessageConverters(converters);
25 | converters.add(new MappingJackson2HttpMessageConverter());
26 | converters.add(new MappingJackson2XmlHttpMessageConverter());
27 | super.configureMessageConverters(converters);
28 | }
29 | }
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/mock/config/WSConfigurationHelper.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.mock.config;
2 |
3 | import com.jfilter.EnableJsonFilter;
4 | import org.junit.runner.RunWith;
5 | import org.springframework.test.context.ContextConfiguration;
6 | import org.springframework.test.context.TestContextManager;
7 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
8 | import org.springframework.test.context.web.WebAppConfiguration;
9 |
10 | public class WSConfigurationHelper {
11 |
12 | public enum Instance {
13 | FILTER_ENABLED(Enabled.class),
14 | FILTER_ENABLED2(Enabled2.class),
15 | FILTER_DISABLED(Disabled.class),
16 | FILTER_DISABLED_FILTERED(DisabledFiltered .class),
17 | FILTER_USE_DEFAULT_CONVERTERS(UseDefaultConverters .class),
18 | FILTER_USE_CUSTOM_CONVERTERS(UseCustomConverters .class);
19 |
20 | private final Class className;
21 |
22 | Instance(Class clazz) {
23 | this.className = clazz;
24 | }
25 | }
26 |
27 | public static void instance(Instance testClass, Object testInstance) throws Exception {
28 | TestContextManager testContextManager = new TestContextManager(testClass.className);
29 | testContextManager.prepareTestInstance(testInstance);
30 | }
31 |
32 | @ContextConfiguration(classes = WSConfigurationEnabled.class)
33 | @WebAppConfiguration
34 | @RunWith(SpringJUnit4ClassRunner.class)
35 | @EnableJsonFilter
36 | private class Enabled {
37 |
38 | }
39 |
40 | @ContextConfiguration(classes = WSConfigurationEnabled.class)
41 | @WebAppConfiguration
42 | @RunWith(SpringJUnit4ClassRunner.class)
43 | @EnableJsonFilter
44 | private class Enabled2 {
45 |
46 | }
47 |
48 | @ContextConfiguration(classes = WSConfigurationDisabled.class)
49 | @WebAppConfiguration
50 | @RunWith(SpringJUnit4ClassRunner.class)
51 | private class Disabled {
52 |
53 | }
54 |
55 | @ContextConfiguration(classes = WSConfigurationDisabledFiltered.class)
56 | @WebAppConfiguration
57 | @RunWith(SpringJUnit4ClassRunner.class)
58 | private class DisabledFiltered {
59 |
60 | }
61 |
62 | @ContextConfiguration(classes = WSUseDefaultConvertersEnabled.class)
63 | @WebAppConfiguration
64 | @RunWith(SpringJUnit4ClassRunner.class)
65 | private class UseDefaultConverters {
66 |
67 | }
68 |
69 | @ContextConfiguration(classes = WSConfigurationCustomConverter.class)
70 | @WebAppConfiguration
71 | @RunWith(SpringJUnit4ClassRunner.class)
72 | private class UseCustomConverters {
73 |
74 | }
75 | }
76 |
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/mock/config/WSUseDefaultConvertersEnabled.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.mock.config;
2 |
3 | import com.jfilter.EnableJsonFilter;
4 | import com.jfilter.components.FilterConfiguration;
5 | import org.springframework.beans.factory.annotation.Autowired;
6 | import org.springframework.context.annotation.ComponentScan;
7 | import org.springframework.http.converter.HttpMessageConverter;
8 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
9 |
10 | import java.util.List;
11 |
12 | @EnableJsonFilter
13 | @ComponentScan({"com.jfilter.mock.webservice"})
14 | public class WSUseDefaultConvertersEnabled extends WebMvcConfigurerAdapter {
15 |
16 | @Override
17 | public void configureMessageConverters(List> converters) {
18 | super.configureMessageConverters(converters);
19 | }
20 |
21 | @SuppressWarnings("SpringJavaAutowiredMembersInspection")
22 | @Autowired
23 | public void configure(FilterConfiguration filterConfiguration) {
24 | filterConfiguration.setUseDefaultConverters(true);
25 | }
26 |
27 |
28 | }
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/mock/webservice/WSClassDynamicFilter.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.mock.webservice;
2 |
3 | import com.jfilter.components.DynamicSessionFilter;
4 | import com.jfilter.filter.DynamicFilter;
5 | import com.jfilter.filter.FilterFields;
6 | import com.jfilter.mock.MockClassesHelper;
7 | import com.jfilter.mock.MockUser;
8 | import com.jfilter.util.FilterUtil;
9 | import org.springframework.http.MediaType;
10 | import org.springframework.web.bind.annotation.RequestMapping;
11 | import org.springframework.web.bind.annotation.RequestMethod;
12 | import org.springframework.web.bind.annotation.RequestParam;
13 | import org.springframework.web.bind.annotation.RestController;
14 |
15 | import javax.servlet.http.HttpSession;
16 | import java.util.Arrays;
17 |
18 | @RestController
19 | @DynamicFilter(DynamicSessionFilter.class)
20 | public class WSClassDynamicFilter {
21 | public static final String MAPPING_NOT_NULL_DYNAMIC_CLASS_FILTER = "/dynamic-class/notNullFilter";
22 | public static final String MAPPING_DYNAMIC_CLASS_SESSION_ATTRIBUTE_FIELDS = "/dynamic-class/sessionAttributeFields";
23 |
24 | @RequestMapping(value = MAPPING_NOT_NULL_DYNAMIC_CLASS_FILTER,
25 | params = {"email", "password"}, method = RequestMethod.POST,
26 | consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE},
27 | produces = {MediaType.APPLICATION_JSON_VALUE})
28 | public MockUser notNullFilter(@RequestParam("email") String email, @RequestParam("password") String password) {
29 | return MockClassesHelper.getUserMock();
30 | }
31 |
32 | @RequestMapping(value = MAPPING_DYNAMIC_CLASS_SESSION_ATTRIBUTE_FIELDS,
33 | params = {"email", "password"}, method = RequestMethod.POST,
34 | consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE},
35 | produces = {MediaType.APPLICATION_JSON_VALUE})
36 | public MockUser sessionAttributeFields(HttpSession session, @RequestParam("email") String email, @RequestParam("password") String password) {
37 |
38 | FilterUtil.useFilter(session, FilterFields.getFieldsBy(Arrays.asList("id", "password", "email")));
39 | return MockClassesHelper.getUserMock();
40 | }
41 |
42 | }
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/mock/webservice/WSClassFieldMultiple.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.mock.webservice;
2 |
3 | import com.jfilter.filter.FieldFilterSetting;
4 | import com.jfilter.mock.MockClassesHelper;
5 | import com.jfilter.mock.MockUser;
6 | import org.springframework.http.MediaType;
7 | import org.springframework.web.bind.annotation.RequestMapping;
8 | import org.springframework.web.bind.annotation.RequestMethod;
9 | import org.springframework.web.bind.annotation.RequestParam;
10 | import org.springframework.web.bind.annotation.RestController;
11 |
12 | @RestController
13 | @FieldFilterSetting(fields = {"id"})
14 | @FieldFilterSetting(fields = {"password"})
15 | public class WSClassFieldMultiple {
16 | public static final String MAPPING_SIGN_IN_FIELD_MULTIPLE = "/field-multiple/customers/signIn";
17 |
18 |
19 | @RequestMapping(value = MAPPING_SIGN_IN_FIELD_MULTIPLE,
20 | params = {"email", "password"}, method = RequestMethod.POST,
21 | consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE},
22 | produces = {MediaType.APPLICATION_JSON_VALUE})
23 | public MockUser signInn(@RequestParam("email") String email, @RequestParam("password") String password) {
24 | return MockClassesHelper.getUserMock();
25 | }
26 |
27 | }
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/mock/webservice/WSClassFieldSingle.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.mock.webservice;
2 |
3 | import com.jfilter.filter.FieldFilterSetting;
4 | import com.jfilter.mock.MockClassesHelper;
5 | import com.jfilter.mock.MockUser;
6 | import org.springframework.http.MediaType;
7 | import org.springframework.web.bind.annotation.RequestMapping;
8 | import org.springframework.web.bind.annotation.RequestMethod;
9 | import org.springframework.web.bind.annotation.RequestParam;
10 | import org.springframework.web.bind.annotation.RestController;
11 |
12 | @RestController
13 | @FieldFilterSetting(fields = {"id"})
14 | public class WSClassFieldSingle {
15 | public static final String MAPPING_SIGN_IN_FIELD_SINGLE = "/field-single/customers/signIn";
16 |
17 | @RequestMapping(value = MAPPING_SIGN_IN_FIELD_SINGLE,
18 | params = {"email", "password"}, method = RequestMethod.POST,
19 | consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE},
20 | produces = {MediaType.APPLICATION_JSON_VALUE})
21 | public MockUser signInn(@RequestParam("email") String email, @RequestParam("password") String password) {
22 | return MockClassesHelper.getUserMock();
23 | }
24 |
25 | }
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/mock/webservice/WSClassFile.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.mock.webservice;
2 |
3 | import com.jfilter.mock.MockClassesHelper;
4 | import com.jfilter.filter.FileFilterSetting;
5 | import com.jfilter.mock.MockUser;
6 | import org.springframework.http.MediaType;
7 | import org.springframework.web.bind.annotation.RequestMapping;
8 | import org.springframework.web.bind.annotation.RequestMethod;
9 | import org.springframework.web.bind.annotation.RequestParam;
10 | import org.springframework.web.bind.annotation.RestController;
11 |
12 | @RestController
13 | @FileFilterSetting(fileName = "configMockWebService.xml")
14 | public class WSClassFile {
15 | public static final String MAPPING_SIGN_IN_FILE = "/file/customers/signIn";
16 |
17 | @RequestMapping(value = MAPPING_SIGN_IN_FILE,
18 | params = {"email", "password"}, method = RequestMethod.POST,
19 | consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE},
20 | produces = {MediaType.APPLICATION_JSON_VALUE})
21 | public MockUser signIn(@RequestParam("email") String email, @RequestParam("password") String password) {
22 | return MockClassesHelper.getUserMock();
23 | }
24 |
25 | }
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/mock/webservice/WSClassStrategies.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.mock.webservice;
2 |
3 | import com.jfilter.filter.FieldFilterSetting;
4 | import com.jfilter.filter.SessionStrategies;
5 | import com.jfilter.filter.SessionStrategy;
6 | import com.jfilter.mock.MockClassesHelper;
7 | import com.jfilter.mock.MockUser;
8 | import org.springframework.http.MediaType;
9 | import org.springframework.web.bind.annotation.RequestMapping;
10 | import org.springframework.web.bind.annotation.RequestMethod;
11 | import org.springframework.web.bind.annotation.RequestParam;
12 | import org.springframework.web.bind.annotation.RestController;
13 |
14 | @RestController
15 |
16 | @SessionStrategies({
17 | @SessionStrategy(attributeName = "ROLE", attributeValue = "ADMIN", ignoreFields = {
18 | @FieldFilterSetting(fields = {"id", "password"})
19 | }),
20 | @SessionStrategy(attributeName = "ROLE", attributeValue = "ADMIN", ignoreFields = {
21 | @FieldFilterSetting(fields = {"email"})
22 | })
23 | })
24 |
25 | public class WSClassStrategies {
26 | public static final String MAPPING_SIGN_IN_STRATEGIES = "/strategies/customers/signIn";
27 |
28 | @RequestMapping(value = MAPPING_SIGN_IN_STRATEGIES,
29 | params = {"email", "password"}, method = RequestMethod.POST,
30 | consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE},
31 | produces = {MediaType.APPLICATION_JSON_VALUE})
32 | public MockUser signIn(@RequestParam("email") String email, @RequestParam("password") String password) {
33 | return MockClassesHelper.getUserMock();
34 | }
35 |
36 | }
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/mock/webservice/WSClassStrategyMultiple.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.mock.webservice;
2 |
3 | import com.jfilter.filter.FieldFilterSetting;
4 | import com.jfilter.filter.SessionStrategy;
5 | import com.jfilter.mock.MockClassesHelper;
6 | import com.jfilter.mock.MockUser;
7 | import org.springframework.http.MediaType;
8 | import org.springframework.web.bind.annotation.RequestMapping;
9 | import org.springframework.web.bind.annotation.RequestMethod;
10 | import org.springframework.web.bind.annotation.RequestParam;
11 | import org.springframework.web.bind.annotation.RestController;
12 |
13 | @RestController
14 |
15 | @SessionStrategy(attributeName = "ROLE", attributeValue = "ADMIN", ignoreFields = {
16 | @FieldFilterSetting(fields = {"id", "password"})
17 | })
18 |
19 | @SessionStrategy(attributeName = "ROLE", attributeValue = "ADMIN", ignoreFields = {
20 | @FieldFilterSetting(fields = {"email"})
21 | })
22 | public class WSClassStrategyMultiple {
23 | public static final String MAPPING_SIGN_IN_STRATEGY_MULTIPLE = "/strategy-multiple/customers/signIn";
24 |
25 | @RequestMapping(value = MAPPING_SIGN_IN_STRATEGY_MULTIPLE,
26 | params = {"email", "password"}, method = RequestMethod.POST,
27 | consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE},
28 | produces = {MediaType.APPLICATION_JSON_VALUE})
29 | public MockUser signInn(@RequestParam("email") String email, @RequestParam("password") String password) {
30 | return MockClassesHelper.getUserMock();
31 | }
32 |
33 | }
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/mock/webservice/WSClassStrategySingle.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.mock.webservice;
2 |
3 | import com.jfilter.filter.FieldFilterSetting;
4 | import com.jfilter.filter.SessionStrategy;
5 | import com.jfilter.mock.MockClassesHelper;
6 | import com.jfilter.mock.MockUser;
7 | import org.springframework.http.MediaType;
8 | import org.springframework.web.bind.annotation.RequestMapping;
9 | import org.springframework.web.bind.annotation.RequestMethod;
10 | import org.springframework.web.bind.annotation.RequestParam;
11 | import org.springframework.web.bind.annotation.RestController;
12 |
13 | @RestController
14 |
15 | @SessionStrategy(attributeName = "ROLE", attributeValue = "ADMIN", ignoreFields = {
16 | @FieldFilterSetting(fields = {"id", "password"})
17 | })
18 | public class WSClassStrategySingle {
19 | public static final String MAPPING_SIGN_IN_STRATEGY_SINGLE = "/strategy-single/customers/signIn";
20 |
21 | @RequestMapping(value = MAPPING_SIGN_IN_STRATEGY_SINGLE,
22 | params = {"email", "password"}, method = RequestMethod.POST,
23 | consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE},
24 | produces = {MediaType.APPLICATION_JSON_VALUE})
25 | public MockUser signInn(@RequestParam("email") String email, @RequestParam("password") String password) {
26 | return MockClassesHelper.getUserMock();
27 | }
28 |
29 | }
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/mock/webservice/WSDynamicFilter.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.mock.webservice;
2 |
3 | import com.jfilter.components.DynamicSessionFilter;
4 | import com.jfilter.filter.DynamicFilter;
5 | import com.jfilter.filter.FilterFields;
6 | import com.jfilter.mock.MockClassesHelper;
7 | import com.jfilter.mock.MockUser;
8 | import com.jfilter.mock.config.MockDynamicNullFilter;
9 | import com.jfilter.util.FilterUtil;
10 | import org.springframework.http.MediaType;
11 | import org.springframework.web.bind.annotation.RequestMapping;
12 | import org.springframework.web.bind.annotation.RequestMethod;
13 | import org.springframework.web.bind.annotation.RequestParam;
14 | import org.springframework.web.bind.annotation.RestController;
15 |
16 | import javax.servlet.http.HttpServletRequest;
17 | import javax.servlet.http.HttpSession;
18 | import java.util.Arrays;
19 |
20 | @RestController
21 | public class WSDynamicFilter {
22 | public static final String MAPPING_NOT_NULL_DYNAMIC_FILTER = "/dynamic/notNullFilter";
23 | public static final String MAPPING_NULL_DYNAMIC_FILTER = "/dynamic/nullFilter";
24 | public static final String MAPPING_DYNAMIC_SESSION_ATTRIBUTE_FIELDS = "/dynamic/sessionAttributeFields";
25 | public static final String MAPPING_DYNAMIC_REQUEST_ATTRIBUTE_FIELDS = "/dynamic/requestAttributeFields";
26 |
27 | @DynamicFilter(DynamicSessionFilter.class)
28 | @RequestMapping(value = MAPPING_NOT_NULL_DYNAMIC_FILTER,
29 | params = {"email", "password"}, method = RequestMethod.POST,
30 | consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE},
31 | produces = {MediaType.APPLICATION_JSON_VALUE})
32 | public MockUser notNullFilter(@RequestParam("email") String email, @RequestParam("password") String password) {
33 | return MockClassesHelper.getUserMock();
34 | }
35 |
36 | @DynamicFilter(MockDynamicNullFilter.class)
37 | @RequestMapping(value = MAPPING_NULL_DYNAMIC_FILTER,
38 | params = {"email", "password"}, method = RequestMethod.POST,
39 | consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE},
40 | produces = {MediaType.APPLICATION_JSON_VALUE})
41 | public MockUser nullFilter(@RequestParam("email") String email, @RequestParam("password") String password) {
42 | return MockClassesHelper.getUserMock();
43 | }
44 |
45 | @DynamicFilter(DynamicSessionFilter.class)
46 | @RequestMapping(value = MAPPING_DYNAMIC_SESSION_ATTRIBUTE_FIELDS,
47 | params = {"email", "password"}, method = RequestMethod.POST,
48 | consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE},
49 | produces = {MediaType.APPLICATION_JSON_VALUE})
50 | public MockUser sessionAttributeFields(HttpSession session, @RequestParam("email") String email, @RequestParam("password") String password) {
51 |
52 | FilterUtil.useFilter(session, FilterFields.getFieldsBy(Arrays.asList("id", "password", "email")));
53 | return MockClassesHelper.getUserMock();
54 | }
55 |
56 | @DynamicFilter(DynamicSessionFilter.class)
57 | @RequestMapping(value = MAPPING_DYNAMIC_REQUEST_ATTRIBUTE_FIELDS,
58 | params = {"email", "password"}, method = RequestMethod.POST,
59 | consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE},
60 | produces = {MediaType.APPLICATION_JSON_VALUE})
61 | public MockUser sessionAttributeFields(HttpServletRequest request, @RequestParam("email") String email, @RequestParam("password") String password) {
62 |
63 | FilterUtil.useFilter(request, FilterFields.getFieldsBy(Arrays.asList("id", "password", "email")));
64 | return MockClassesHelper.getUserMock();
65 | }
66 |
67 | }
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/request/RequestMethodParameterTest.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.request;
2 |
3 | import com.jfilter.filter.FileConfigurationTest;
4 | import com.jfilter.mock.MockClassesHelper;
5 | import com.jfilter.filter.FilterFields;
6 | import com.jfilter.filter.FileConfig;
7 | import org.junit.Test;
8 |
9 | import static org.junit.Assert.assertNotNull;
10 | import static org.junit.Assert.assertTrue;
11 | import static org.junit.Assert.assertEquals;
12 |
13 | public class RequestMethodParameterTest {
14 |
15 | @Test
16 | public void testGetStrategyFieldsNotNull() {
17 | FileConfig config = MockClassesHelper.getMockAdminFileConfig();
18 | assertNotNull(config);
19 |
20 | FileConfig.Strategy strategy = config.getControllers().get(0).getStrategies().get(0);
21 | assertNotNull(strategy);
22 |
23 | FilterFields filterFields = strategy.appendStrategyFields(new FilterFields());
24 | assertTrue(filterFields.getFieldsMap().keySet().size() > 0);
25 | }
26 |
27 | @Test
28 | public void testGetStrategyFieldsEmptyStrategy() {
29 | FileConfig.Strategy strategy = new FileConfig.Strategy();
30 | FilterFields filterFields = strategy.appendStrategyFields(new FilterFields());
31 | assertEquals(0, filterFields.getFieldsMap().keySet().size());
32 | }
33 |
34 | @Test
35 | public void testGetStrategyFieldsNull() {
36 | FileConfig.Strategy strategy = new FileConfig.Strategy();
37 | FilterFields filterFields = strategy.appendStrategyFields(new FilterFields());
38 | assertEquals(0, filterFields.getFieldsMap().keySet().size());
39 | }
40 |
41 | @Test
42 | public void testGetStrategyFieldsMultiple() {
43 | FileConfig mockConfig = MockClassesHelper.getMockAdminFileConfig();
44 |
45 | FileConfig.Strategy strategy = mockConfig.getControllers().get(0).getStrategies().get(0);
46 |
47 | FileConfig.Filter filter = new FileConfig.Filter();
48 | filter.setClassName(strategy.getFilters().get(0).getClassName());
49 | filter.getFields().add(new FileConfig.Field().setName("password"));
50 | filter.getFields().add(new FileConfig.Field().setName("email"));
51 | filter.getFields().add(new FileConfig.Field().setName("email"));
52 |
53 |
54 | strategy.getFilters().add(filter);
55 | strategy.getFilters().add(filter);
56 |
57 | FilterFields filterFields = strategy.appendStrategyFields(new FilterFields());
58 | assertEquals(3, filterFields.getFields(FileConfigurationTest.class).size());
59 | }
60 |
61 |
62 |
63 | }
64 |
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/request/RequestSessionTest.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.request;
2 |
3 | import com.jfilter.mock.MockHttpRequestHelper;
4 | import org.junit.Before;
5 | import org.junit.Test;
6 |
7 | import javax.servlet.http.HttpServletRequest;
8 |
9 | import static org.junit.Assert.assertEquals;
10 | import static org.junit.Assert.assertNull;
11 | import static org.junit.Assert.assertNotNull;
12 | import static org.junit.Assert.assertTrue;
13 | import static org.junit.Assert.assertFalse;
14 |
15 | public class RequestSessionTest {
16 | private RequestSession requestSession;
17 |
18 | @Before
19 | public void init() {
20 | this.requestSession = new RequestSession(MockHttpRequestHelper.getMockAdminRequest());
21 | }
22 |
23 | @Test
24 | public void testClassExists() {
25 | Object object = requestSession.getSessionProperty("ROLE");
26 | assertEquals("ADMIN", object);
27 | }
28 |
29 | @Test
30 | public void testClassExistsFalse() {
31 | Object object = requestSession.getSessionProperty("SOME_FIELD");
32 | assertNull(object);
33 | }
34 |
35 | @Test(expected = IllegalArgumentException.class)
36 | public void testNullSession() {
37 | RequestSession requestSession = new RequestSession(null);
38 | assertNotNull(requestSession);
39 | }
40 |
41 | @Test
42 | public void testGetSession() {
43 | assertNotNull(requestSession.getSession());
44 | }
45 |
46 | @Test
47 | public void testPropertyExist() {
48 | RequestSession requestSession = new RequestSession(MockHttpRequestHelper.getMockAdminRequest());
49 | boolean result = requestSession.isSessionPropertyExists("ROLE", "ADMIN");
50 |
51 | assertTrue(result);
52 | }
53 |
54 | @Test
55 | public void testPropertyNotExist() {
56 | RequestSession requestSession = new RequestSession(MockHttpRequestHelper.getMockAdminRequest());
57 | boolean result = requestSession.isSessionPropertyExists("UN_EXIST", "UN_EXIST");
58 |
59 | assertFalse(result);
60 | }
61 |
62 | @Test
63 | public void testPropertyNotExistNullProperty() {
64 | RequestSession requestSession = new RequestSession(MockHttpRequestHelper.getMockAdminRequest());
65 | boolean result = requestSession.isSessionPropertyExists(null, "UN_EXIST");
66 | assertFalse(result);
67 | }
68 |
69 | @Test
70 | public void testPropertyNotExistNullValue() {
71 | RequestSession requestSession = new RequestSession(MockHttpRequestHelper.getMockAdminRequest());
72 | boolean result = requestSession.isSessionPropertyExists("UN_EXIST", null);
73 | assertFalse(result);
74 | }
75 |
76 | @Test
77 | public void testPropertyNotExistNulls() {
78 | RequestSession requestSession = new RequestSession(MockHttpRequestHelper.getMockAdminRequest());
79 | boolean result = requestSession.isSessionPropertyExists(null, null);
80 | assertFalse(result);
81 | }
82 |
83 | @Test
84 | public void testGetSessionProperty() {
85 | RequestSession requestSession = new RequestSession(MockHttpRequestHelper.getMockAdminRequest());
86 | Object result = requestSession.getSessionProperty("ROLE");
87 | assertNotNull(result);
88 | }
89 |
90 | @Test
91 | public void testGetSessionPropertyFalse() {
92 | RequestSession requestSession = new RequestSession(MockHttpRequestHelper.getMockAdminRequest());
93 | Object result = requestSession.getSessionProperty("UN_EXIST");
94 | assertNull(result);
95 | }
96 |
97 | @Test
98 | public void testGetSessionPropertyNull() {
99 | RequestSession requestSession = new RequestSession(MockHttpRequestHelper.getMockAdminRequest());
100 | Object result = requestSession.getSessionProperty(null);
101 | assertNull(result);
102 | }
103 |
104 | @Test
105 | public void testRequestNotNull() {
106 | RequestSession requestSession = new RequestSession(MockHttpRequestHelper.getMockAdminRequest());
107 | HttpServletRequest request = requestSession.getRequest();
108 | assertNotNull(request);
109 | }
110 | }
111 |
--------------------------------------------------------------------------------
/src/test/java/com/jfilter/util/FilterUtilTest.java:
--------------------------------------------------------------------------------
1 | package com.jfilter.util;
2 |
3 | import com.jfilter.TestUtils;
4 | import org.junit.Test;
5 | import java.lang.reflect.InvocationTargetException;
6 |
7 | public class FilterUtilTest {
8 |
9 | @Test(expected = InvocationTargetException.class)
10 | public void constructorTest() throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
11 | TestUtils.instantiateObject(FilterUtil.class);
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/src/test/resources/bad_config.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/test/resources/config.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/src/test/resources/config.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | controllers:
3 | - className: "com.jfilter.mock.MockMethods"
4 | strategies:
5 | - attributeName: "ROLE"
6 | attributeValue: "ADMIN"
7 | filters:
8 | - className: "com.jfilter.mock.MockUser"
9 | fields:
10 | - name: "id"
11 | filterBehaviour: "HIDE_FIELDS"
12 | - attributeName: "ROLE"
13 | attributeValue: "USER"
14 | filters:
15 | - className: "com.jfilter.mock.MockUser"
16 | fields:
17 | - name: "id"
18 | - name: "password"
19 | filterBehaviour: "HIDE_FIELDS"
20 |
--------------------------------------------------------------------------------
/src/test/resources/configMockWebService.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/src/test/resources/config_class_duplicated.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/src/test/resources/config_class_not_found.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/src/test/resources/config_default_strategy.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/src/test/resources/config_dynamic.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/src/test/resources/config_io_exception.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/src/test/resources/config_no_controllers.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/test/resources/config_no_strategies.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/src/test/resources/config_with_behaviour.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------