001package ca.uhn.fhir.rest.gclient;
002
003import ca.uhn.fhir.rest.param.ParamPrefixEnum;
004
005/*
006 * #%L
007 * HAPI FHIR - Core Library
008 * %%
009 * Copyright (C) 2014 - 2021 Smile CDR, Inc.
010 * %%
011 * Licensed under the Apache License, Version 2.0 (the "License");
012 * you may not use this file except in compliance with the License.
013 * You may obtain a copy of the License at
014 *
015 *      http://www.apache.org/licenses/LICENSE-2.0
016 *
017 * Unless required by applicable law or agreed to in writing, software
018 * distributed under the License is distributed on an "AS IS" BASIS,
019 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
020 * See the License for the specific language governing permissions and
021 * limitations under the License.
022 * #L%
023 */
024
025/**
026 * Token parameter type for use in fluent client interfaces
027 */
028public class NumberClientParam extends BaseClientParam  implements IParam {
029
030        private final String myParamName;
031
032        public NumberClientParam(String theParamName) {
033                myParamName = theParamName;
034        }
035
036        public IMatches<ICriterion<NumberClientParam>> exactly() {
037                return new IMatches<ICriterion<NumberClientParam>>() {
038                        @Override
039                        public ICriterion<NumberClientParam> number(long theNumber) {
040                                return new StringCriterion<>(getParamName(), Long.toString(theNumber));
041                        }
042
043                        @Override
044                        public ICriterion<NumberClientParam> number(String theNumber) {
045                                return new StringCriterion<>(getParamName(), (theNumber));
046                        }
047                };
048        }
049
050        @Override
051        public String getParamName() {
052                return myParamName;
053        }
054
055        public IMatches<ICriterion<NumberClientParam>> greaterThan() {
056                return new IMatches<ICriterion<NumberClientParam>>() {
057                        @Override
058                        public ICriterion<NumberClientParam> number(long theNumber) {
059                                return new StringCriterion<>(getParamName(), ParamPrefixEnum.GREATERTHAN, Long.toString(theNumber));
060                        }
061
062                        @Override
063                        public ICriterion<NumberClientParam> number(String theNumber) {
064                                return new StringCriterion<>(getParamName(), ParamPrefixEnum.GREATERTHAN, (theNumber));
065                        }
066                };
067        }
068
069        public IMatches<ICriterion<NumberClientParam>> greaterThanOrEqual() {
070                return new IMatches<ICriterion<NumberClientParam>>() {
071                        @Override
072                        public ICriterion<NumberClientParam> number(long theNumber) {
073                                return new StringCriterion<>(getParamName(), ParamPrefixEnum.GREATERTHAN_OR_EQUALS, Long.toString(theNumber));
074                        }
075
076                        @Override
077                        public ICriterion<NumberClientParam> number(String theNumber) {
078                                return new StringCriterion<>(getParamName(), ParamPrefixEnum.GREATERTHAN_OR_EQUALS, (theNumber));
079                        }
080                };
081        }
082
083        public IMatches<ICriterion<NumberClientParam>> lessThan() {
084                return new IMatches<ICriterion<NumberClientParam>>() {
085                        @Override
086                        public ICriterion<NumberClientParam> number(long theNumber) {
087                                return new StringCriterion<>(getParamName(), ParamPrefixEnum.LESSTHAN, Long.toString(theNumber));
088                        }
089
090                        @Override
091                        public ICriterion<NumberClientParam> number(String theNumber) {
092                                return new StringCriterion<>(getParamName(), ParamPrefixEnum.LESSTHAN, (theNumber));
093                        }
094                };
095        }
096
097        public IMatches<ICriterion<NumberClientParam>> lessThanOrEqual() {
098                return new IMatches<ICriterion<NumberClientParam>>() {
099                        @Override
100                        public ICriterion<NumberClientParam> number(long theNumber) {
101                                return new StringCriterion<>(getParamName(), ParamPrefixEnum.LESSTHAN_OR_EQUALS, Long.toString(theNumber));
102                        }
103
104                        @Override
105                        public ICriterion<NumberClientParam> number(String theNumber) {
106                                return new StringCriterion<>(getParamName(), ParamPrefixEnum.LESSTHAN_OR_EQUALS, (theNumber));
107                        }
108                };
109        }
110
111        public IMatches<ICriterion<NumberClientParam>> withPrefix(final ParamPrefixEnum thePrefix) {
112                return new IMatches<ICriterion<NumberClientParam>>() {
113                        @Override
114                        public ICriterion<NumberClientParam> number(long theNumber) {
115                                return new StringCriterion<>(getParamName(), thePrefix, Long.toString(theNumber));
116                        }
117
118                        @Override
119                        public ICriterion<NumberClientParam> number(String theNumber) {
120                                return new StringCriterion<>(getParamName(), thePrefix, (theNumber));
121                        }
122                };
123        }
124
125        public interface IMatches<T> {
126                /**
127                 * Creates a search criterion that matches against the given number
128                 * 
129                 * @param theNumber
130                 *            The number
131                 * @return A criterion
132                 */
133                T number(long theNumber);
134
135                /**
136                 * Creates a search criterion that matches against the given number
137                 * 
138                 * @param theNumber
139                 *            The number
140                 * @return A criterion
141                 */
142                T number(String theNumber);
143        }
144
145}