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