A hierarchical config engine is a collection of config rules, where the rules get more specific as you travel down your hierarchy. The rules apply to each request in runtime, so its a runtime hierarchical config engine
For example you can have below config rules :-
Country Code | CityCode | AirlineCode | Surcharge |
us | null | null | 1.00 |
null | null | dl | 6.00 |
us | null | dl | 3.00 |
us | nyc | null | 2.50 |
us | nyc | aa | 4.50 |
us | nyc | dl | 5.50 |
Config rules
These config rules would mean:-
So the idea is that you can define general rules and more specific rules and the most specific rule will apply to your runtime record.
Let’s build a simple runtime config engine that applies a surcharge to customer selected flight based on origin’s country, city and airline.
<dependency>
<groupId>com.kapoorlabs</groupId>
<artifactId>kiara</artifactId>
<version>2.0.10</version>
</dependency>
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Config {
private String country;
private String originCity;
private String airline;
private Double surcharge;
}
import com.kapoorlabs.kiara.domain.Store;
import com.kapoorlabs.kiara.exception.LoadDataException;
import com.kapoorlabs.kiara.loader.StoreLoader;
public void loadConfigStore() throws LoadDataException {
configStore = new Store<>(Config.class);
StoreLoader<Config> storeLoader = new StoreLoader<>(configStore);
storeLoader.loadTable(new Config("in", null, null, 2.00));
storeLoader.loadTable(new Config("us", null, null, 1.00));
storeLoader.loadTable(new Config("us", null, "dl", 3.00));
storeLoader.loadTable(new Config("us", "nyc", null, 2.50));
storeLoader.loadTable(new Config("us", "nyc", "aa", 4.50));
storeLoader.loadTable(new Config("us", "nyc", "dl", 5.50));
storeLoader.prepareForSearch();
}
In this example we are just loading the config data from within the source code, but the source of the config data can be any data store, such as a file, database, a network stream, etc.
import com.kapoorlabs.kiara.domain.Store;
import com.kapoorlabs.kiara.exception.LoadDataException;
import com.kapoorlabs.kiara.loader.StoreLoader;
public Double getSurcharge(Store<Config> configStore, FlightRecord flightRecord) {
String country = flightRecord.getCountry();
String city = flightRecord.getCity();
String airline = flightRecord.getAirline();
KeywordSearchResult<Config> result = keywordSearch.getMinimumMatch(country + " " + city + " " + airline, configStore);
Double surcharge = result.getResult().get(0).getSurCharge()
return surcharge;
}
And your are Done!
Given you have following rules: –
Country Code | CityCode | AirlineCode | Surcharge |
us | null | null | 1.00 |
null | null | dl | 6.00 |
us | null | dl | 3.00 |
us | nyc | null | 2.50 |
us | nyc | aa | 4.50 |
us | nyc | dl | 5.50 |
Config rules
The following results should be self explanatory, but feel free to post a question in comments, in case of any doubt.
keywordSearch.getMinimumMatch(” us “, configStore); -> will give you surcharge of 1.00
keywordSearch.getMinimumMatch(” us dl”, configStore); -> will give you surcharge of 3.00
keywordSearch.getMinimumMatch(” nyc us dl”, configStore); -> will give you surcharge of 5.50
keywordSearch.getMinimumMatch(” bos us dl”, configStore); -> will give you surcharge of 3.00
keywordSearch.getMinimumMatch(” us nyc jb”, configStore); -> will give you surcharge of 2.50
https://blog.goo.ne.jp/lifetvs/e/3d0c7aa26128aa74163c41d8056d4ec6
https://www.deviantart.com/gdsffds/journal/Create-a-dynamic-config-engine-in-5-minutes-usin-873925623
https://paiza.io/projects/jWCd_FuOMq0EovUlf9XnWA
https://caribbeanfever.com/photo/albums/saasdsasad
https://www.thewyco.com/general/create-a-dynamic-config-engine-in-5-minutes-using-java-21-03-2021
- Let’s not forget the primary purpose of a driveway is to park your car and drive it towards the house or out of it. But it doesn’t harm
- Did you know that a large percentage of all computer crashes are caused by missing DLL files? If any of these DLL files have been damaged, the computer wiss
- If you are thinking about how online university assignment help service providers will make things easier for you.
- “He’s playing a game he’s not going to suffer from. It’s the people of Northern Ireland who are going to suffer from his rhetoric,&rdquo