@Test public void testPreferDatasource() throws Exception { Map<String, Datasource> nameToDatasource = new HashMap<>(); nameToDatasource.put("mock", new MockDatasource()); nameToDatasource.put("mock2", new MockDatasource("mock2", List.of("column"), List.of(new MockDataset("ds3", "column", "value3"), new MockDataset("ds", "column", "value4")))); Datasource ds = new PreferDatasource(nameToDatasource, new ConfigThingy("", "NAME \"prefer\" SOURCE \"mock\" OVER \"mock2\""), null); assertEquals("prefer", ds.getName()); assertEquals(List.of("column"), ds.getSchema()); QueryResults results = ds.getContents(); assertEquals(0, results.size()); results = ds.getDatasetsByKey(List.of("ds", "ds3")); assertEquals(2, results.size()); results = ds.find(List.of(new QueryPart("column", "value3"))); assertEquals(1, results.size()); results = ds.find(List.of(new QueryPart("column", "value"))); assertEquals(1, results.size()); }
public PreferDatasource(Map<String, Datasource> nameToDatasource, ConfigThingy sourceDesc, URL context) { name = parseConfig(sourceDesc, "NAME", () -> L.m("NAME der Datenquelle fehlt")); source1Name = parseConfig(sourceDesc, "SOURCE", () -> L.m("SOURCE der Datenquelle %1 fehlt", name)); source2Name = parseConfig(sourceDesc, "OVER", () -> L.m("OVER-Angabe der Datenquelle %1 fehlt", name)); source1 = nameToDatasource.get(source1Name); source2 = nameToDatasource.get(source2Name); if (source1 == null) throw new ConfigurationErrorException( L.m( "Fehler bei Initialisierung von Datenquelle \"%1\": Referenzierte Datenquelle \"%2\" nicht (oder fehlerhaft) definiert", name)); if (source2 == null) throw new ConfigurationErrorException( L.m( "Fehler bei Initialisierung von Datenquelle \"%1\": Referenzierte Datenquelle \"%2\" nicht (oder fehlerhaft) definiert", name, source2Name)); List<String> schema1 = source1.getSchema(); List<String> schema2 = source2.getSchema(); if (!schema1.containsAll(schema2) || !schema2.containsAll(schema1)) { Set<String> difference1 = new HashSet<>(schema1); difference1.removeAll(schema2); Set<String> difference2 = new HashSet<>(schema2); difference2.removeAll(schema1); StringBuilder buf1 = new StringBuilder(); Iterator<String> iter = difference1.iterator(); while (iter.hasNext()) { buf1.append(iter.next()); if (iter.hasNext()) { buf1.append(", "); } } StringBuilder buf2 = new StringBuilder(); iter = difference2.iterator(); while (iter.hasNext()) { buf2.append(iter.next()); if (iter.hasNext()) { buf2.append(", "); } } throw new ConfigurationErrorException(L.m( "Datenquelle \"%1\" fehlen die Spalten: %2", source1Name, buf2) + L.m(" und ") + L.m("Datenquelle \"%1\" fehlen die Spalten: %2", source2Name, buf1)); } schema = new ArrayList<>(schema1); }
PreferDatasource extends Datasource { public PreferDatasource(Map<String, Datasource> nameToDatasource, ConfigThingy sourceDesc, URL context) { name = parseConfig(sourceDesc, "NAME", () -> L.m("NAME der Datenquelle fehlt")); source1Name = parseConfig(sourceDesc, "SOURCE", () -> L.m("SOURCE der Datenquelle %1 fehlt", name)); source2Name = parseConfig(sourceDesc, "OVER", () -> L.m("OVER-Angabe der Datenquelle %1 fehlt", name)); source1 = nameToDatasource.get(source1Name); source2 = nameToDatasource.get(source2Name); if (source1 == null) throw new ConfigurationErrorException( L.m( "Fehler bei Initialisierung von Datenquelle \"%1\": Referenzierte Datenquelle \"%2\" nicht (oder fehlerhaft) definiert", name)); if (source2 == null) throw new ConfigurationErrorException( L.m( "Fehler bei Initialisierung von Datenquelle \"%1\": Referenzierte Datenquelle \"%2\" nicht (oder fehlerhaft) definiert", name, source2Name)); List<String> schema1 = source1.getSchema(); List<String> schema2 = source2.getSchema(); if (!schema1.containsAll(schema2) || !schema2.containsAll(schema1)) { Set<String> difference1 = new HashSet<>(schema1); difference1.removeAll(schema2); Set<String> difference2 = new HashSet<>(schema2); difference2.removeAll(schema1); StringBuilder buf1 = new StringBuilder(); Iterator<String> iter = difference1.iterator(); while (iter.hasNext()) { buf1.append(iter.next()); if (iter.hasNext()) { buf1.append(", "); } } StringBuilder buf2 = new StringBuilder(); iter = difference2.iterator(); while (iter.hasNext()) { buf2.append(iter.next()); if (iter.hasNext()) { buf2.append(", "); } } throw new ConfigurationErrorException(L.m( "Datenquelle \"%1\" fehlen die Spalten: %2", source1Name, buf2) + L.m(" und ") + L.m("Datenquelle \"%1\" fehlen die Spalten: %2", source2Name, buf1)); } schema = new ArrayList<>(schema1); } }
PreferDatasource extends Datasource { public PreferDatasource(Map<String, Datasource> nameToDatasource, ConfigThingy sourceDesc, URL context) { name = parseConfig(sourceDesc, "NAME", () -> L.m("NAME der Datenquelle fehlt")); source1Name = parseConfig(sourceDesc, "SOURCE", () -> L.m("SOURCE der Datenquelle %1 fehlt", name)); source2Name = parseConfig(sourceDesc, "OVER", () -> L.m("OVER-Angabe der Datenquelle %1 fehlt", name)); source1 = nameToDatasource.get(source1Name); source2 = nameToDatasource.get(source2Name); if (source1 == null) throw new ConfigurationErrorException( L.m( "Fehler bei Initialisierung von Datenquelle \"%1\": Referenzierte Datenquelle \"%2\" nicht (oder fehlerhaft) definiert", name)); if (source2 == null) throw new ConfigurationErrorException( L.m( "Fehler bei Initialisierung von Datenquelle \"%1\": Referenzierte Datenquelle \"%2\" nicht (oder fehlerhaft) definiert", name, source2Name)); List<String> schema1 = source1.getSchema(); List<String> schema2 = source2.getSchema(); if (!schema1.containsAll(schema2) || !schema2.containsAll(schema1)) { Set<String> difference1 = new HashSet<>(schema1); difference1.removeAll(schema2); Set<String> difference2 = new HashSet<>(schema2); difference2.removeAll(schema1); StringBuilder buf1 = new StringBuilder(); Iterator<String> iter = difference1.iterator(); while (iter.hasNext()) { buf1.append(iter.next()); if (iter.hasNext()) { buf1.append(", "); } } StringBuilder buf2 = new StringBuilder(); iter = difference2.iterator(); while (iter.hasNext()) { buf2.append(iter.next()); if (iter.hasNext()) { buf2.append(", "); } } throw new ConfigurationErrorException(L.m( "Datenquelle \"%1\" fehlen die Spalten: %2", source1Name, buf2) + L.m(" und ") + L.m("Datenquelle \"%1\" fehlen die Spalten: %2", source2Name, buf1)); } schema = new ArrayList<>(schema1); } PreferDatasource(Map<String, Datasource> nameToDatasource,
      ConfigThingy sourceDesc, URL context); }
PreferDatasource extends Datasource { public PreferDatasource(Map<String, Datasource> nameToDatasource, ConfigThingy sourceDesc, URL context) { name = parseConfig(sourceDesc, "NAME", () -> L.m("NAME der Datenquelle fehlt")); source1Name = parseConfig(sourceDesc, "SOURCE", () -> L.m("SOURCE der Datenquelle %1 fehlt", name)); source2Name = parseConfig(sourceDesc, "OVER", () -> L.m("OVER-Angabe der Datenquelle %1 fehlt", name)); source1 = nameToDatasource.get(source1Name); source2 = nameToDatasource.get(source2Name); if (source1 == null) throw new ConfigurationErrorException( L.m( "Fehler bei Initialisierung von Datenquelle \"%1\": Referenzierte Datenquelle \"%2\" nicht (oder fehlerhaft) definiert", name)); if (source2 == null) throw new ConfigurationErrorException( L.m( "Fehler bei Initialisierung von Datenquelle \"%1\": Referenzierte Datenquelle \"%2\" nicht (oder fehlerhaft) definiert", name, source2Name)); List<String> schema1 = source1.getSchema(); List<String> schema2 = source2.getSchema(); if (!schema1.containsAll(schema2) || !schema2.containsAll(schema1)) { Set<String> difference1 = new HashSet<>(schema1); difference1.removeAll(schema2); Set<String> difference2 = new HashSet<>(schema2); difference2.removeAll(schema1); StringBuilder buf1 = new StringBuilder(); Iterator<String> iter = difference1.iterator(); while (iter.hasNext()) { buf1.append(iter.next()); if (iter.hasNext()) { buf1.append(", "); } } StringBuilder buf2 = new StringBuilder(); iter = difference2.iterator(); while (iter.hasNext()) { buf2.append(iter.next()); if (iter.hasNext()) { buf2.append(", "); } } throw new ConfigurationErrorException(L.m( "Datenquelle \"%1\" fehlen die Spalten: %2", source1Name, buf2) + L.m(" und ") + L.m("Datenquelle \"%1\" fehlen die Spalten: %2", source2Name, buf1)); } schema = new ArrayList<>(schema1); } PreferDatasource(Map<String, Datasource> nameToDatasource,
      ConfigThingy sourceDesc, URL context); @Override List<String> getSchema(); @Override QueryResults getDatasetsByKey(Collection<String> keys); @Override QueryResults getContents(); @Override QueryResults find(List<QueryPart> query); @Override String getName(); }
PreferDatasource extends Datasource { public PreferDatasource(Map<String, Datasource> nameToDatasource, ConfigThingy sourceDesc, URL context) { name = parseConfig(sourceDesc, "NAME", () -> L.m("NAME der Datenquelle fehlt")); source1Name = parseConfig(sourceDesc, "SOURCE", () -> L.m("SOURCE der Datenquelle %1 fehlt", name)); source2Name = parseConfig(sourceDesc, "OVER", () -> L.m("OVER-Angabe der Datenquelle %1 fehlt", name)); source1 = nameToDatasource.get(source1Name); source2 = nameToDatasource.get(source2Name); if (source1 == null) throw new ConfigurationErrorException( L.m( "Fehler bei Initialisierung von Datenquelle \"%1\": Referenzierte Datenquelle \"%2\" nicht (oder fehlerhaft) definiert", name)); if (source2 == null) throw new ConfigurationErrorException( L.m( "Fehler bei Initialisierung von Datenquelle \"%1\": Referenzierte Datenquelle \"%2\" nicht (oder fehlerhaft) definiert", name, source2Name)); List<String> schema1 = source1.getSchema(); List<String> schema2 = source2.getSchema(); if (!schema1.containsAll(schema2) || !schema2.containsAll(schema1)) { Set<String> difference1 = new HashSet<>(schema1); difference1.removeAll(schema2); Set<String> difference2 = new HashSet<>(schema2); difference2.removeAll(schema1); StringBuilder buf1 = new StringBuilder(); Iterator<String> iter = difference1.iterator(); while (iter.hasNext()) { buf1.append(iter.next()); if (iter.hasNext()) { buf1.append(", "); } } StringBuilder buf2 = new StringBuilder(); iter = difference2.iterator(); while (iter.hasNext()) { buf2.append(iter.next()); if (iter.hasNext()) { buf2.append(", "); } } throw new ConfigurationErrorException(L.m( "Datenquelle \"%1\" fehlen die Spalten: %2", source1Name, buf2) + L.m(" und ") + L.m("Datenquelle \"%1\" fehlen die Spalten: %2", source2Name, buf1)); } schema = new ArrayList<>(schema1); } PreferDatasource(Map<String, Datasource> nameToDatasource,
      ConfigThingy sourceDesc, URL context); @Override List<String> getSchema(); @Override QueryResults getDatasetsByKey(Collection<String> keys); @Override QueryResults getContents(); @Override QueryResults find(List<QueryPart> query); @Override String getName();  }