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