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 - 2022 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}