Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public static DataSource parseData(InputStream contents, String identifier)
- public static DataSource parseData(InputStream contents, String identifier) {
- if (DataSource1.respondsTo(identifier) {
- return new DataSource1(contents);
- }
- //more ifs. There likely will be about 20 of those.
- }
- interface DataSource {
- boolean respondsTo(String identifier)
- }
- class DataSource1 implements DataSource {
- DataSource1(InputStream is) { /* magic goes here */ }
- @Override boolean respondsTo(String identifier) { identifier in ["DS1 idX", "DS1 idY", "DS1 idZ"] }
- }
- class DataSource2 implements DataSource {
- DataSource2(InputStream is) { /* magic goes here */ }
- @Override boolean respondsTo(String identifier) { identifier in ["DS2 idX", "DS2 idY", "DS2 idZ"] }
- }
- // ...
- class DataSource20 implements DataSource {
- DataSource20(InputStream is) { /* magic goes here */ }
- @Override boolean respondsTo(String identifier) { identifier in ["DS20 idX", "DS20 idY", "DS20 idZ"] }
- }
- enum DataSourceEnum {
- ds1 (["DS1 idZ", "DS1 idY", "DS1 idZ"], { is -> new DataSource1(is) }),
- ds2 (["DS1 idZ", "DS1 idY", "DS1 idZ"], { is -> new DataSource2(is) }),
- // ...
- ds20 (["DS20 idX", "DS20 idY", "DS20 idZ"], { is -> new DataSource20(is) })
- private final static Map<String, DataSourceEnum> dsMapping = [:]
- final Closure<DataSource> buildDataSource
- private DataSourceEnum(List<String> identifiers, Closure<DataSource> ctor) {
- DataSourceEnum.dsMapping += identifiers.collectEntries { id -> [(id):this] }
- this.buildDataSource = ctor
- }
- static DataSourceEnum identify(String id) { dsMapping[id] }
- }
- DataSource parseData(InputStream contents, String identifier) {
- DataSourceEnum.identify(identifier)?.buildDataSource(contents)
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement