@Test public void testThingyDatasource() throws Exception { Datasource ds = new ThingyDatasource(null, new ConfigThingy("", "NAME \"conf\" URL \"" + file + "\" Schluessel(\"column\" \"column2\")"), null); Dataset data = ds.find(List.of(new QueryPart("column", "value1"))).iterator().next(); assertTrue(data.getKey().contains("value1") && data.getKey().contains("value2")); assertEquals("value2", data.get("column2")); assertThrows(ColumnNotFoundException.class, () -> data.get("unknown")); }
public ThingyDatasource(Map<String, Datasource> nameToDatasource, ConfigThingy sourceDesc, URL context) throws IOException { String name = parseConfig(sourceDesc, "NAME", () -> L.m("NAME der Datenquelle fehlt")); String urlStr = parseConfig(sourceDesc, "URL", () -> L.m("URL der Datenquelle \"%1\" fehlt", name)); try { URL url = new URL(context, ConfigThingy.urlEncode(urlStr)); ConfigThingy conf = new ConfigThingy(name, url); ConfigThingy schemaDesc = conf.get("Schema"); List<String> schema = new ArrayList<>(); String[] schemaOrdered = new String[schemaDesc.count()]; int i = 0; for (ConfigThingy spalteConfig : schemaDesc) { String spalte = spalteConfig.toString(); if (!SPALTENNAME.matcher(spalte).matches()) { throw new ConfigurationErrorException(L.m( "Fehler in Definition von Datenquelle %1: Spalte \"%2\" entspricht nicht der Syntax eines Bezeichners", name, spalte)); } if (schema.contains(spalte)) { throw new ConfigurationErrorException(L.m( "Fehler in Definition von Datenquelle %1: Spalte \"%2\" doppelt aufgeführt im Schema", name, spalte)); } schema.add(spalte); schemaOrdered[i++] = spalte; } String[] keyCols = parseKeys(sourceDesc, name, schema); List<Dataset> data = parseData(conf, name, schema, schemaOrdered, keyCols); init(name, schema, data); } catch (NodeNotFoundException x) { throw new ConfigurationErrorException(L.m( "Fehler in Conf-Datei von Datenquelle %1: Abschnitt 'Schema' fehlt", name), x); } catch (MalformedURLException e) { throw new ConfigurationErrorException( L.m("Fehler in Definition von Datenquelle %1: Fehler in URL \"%2\": ", name, urlStr), e); } catch (SyntaxErrorException e) { throw new ConfigurationErrorException( L.m("Fehler in Conf-Datei von Datenquelle %1: ", name), e); } }
ThingyDatasource extends RAMDatasource { public ThingyDatasource(Map<String, Datasource> nameToDatasource, ConfigThingy sourceDesc, URL context) throws IOException { String name = parseConfig(sourceDesc, "NAME", () -> L.m("NAME der Datenquelle fehlt")); String urlStr = parseConfig(sourceDesc, "URL", () -> L.m("URL der Datenquelle \"%1\" fehlt", name)); try { URL url = new URL(context, ConfigThingy.urlEncode(urlStr)); ConfigThingy conf = new ConfigThingy(name, url); ConfigThingy schemaDesc = conf.get("Schema"); List<String> schema = new ArrayList<>(); String[] schemaOrdered = new String[schemaDesc.count()]; int i = 0; for (ConfigThingy spalteConfig : schemaDesc) { String spalte = spalteConfig.toString(); if (!SPALTENNAME.matcher(spalte).matches()) { throw new ConfigurationErrorException(L.m( "Fehler in Definition von Datenquelle %1: Spalte \"%2\" entspricht nicht der Syntax eines Bezeichners", name, spalte)); } if (schema.contains(spalte)) { throw new ConfigurationErrorException(L.m( "Fehler in Definition von Datenquelle %1: Spalte \"%2\" doppelt aufgeführt im Schema", name, spalte)); } schema.add(spalte); schemaOrdered[i++] = spalte; } String[] keyCols = parseKeys(sourceDesc, name, schema); List<Dataset> data = parseData(conf, name, schema, schemaOrdered, keyCols); init(name, schema, data); } catch (NodeNotFoundException x) { throw new ConfigurationErrorException(L.m( "Fehler in Conf-Datei von Datenquelle %1: Abschnitt 'Schema' fehlt", name), x); } catch (MalformedURLException e) { throw new ConfigurationErrorException( L.m("Fehler in Definition von Datenquelle %1: Fehler in URL \"%2\": ", name, urlStr), e); } catch (SyntaxErrorException e) { throw new ConfigurationErrorException( L.m("Fehler in Conf-Datei von Datenquelle %1: ", name), e); } } }
ThingyDatasource extends RAMDatasource { public ThingyDatasource(Map<String, Datasource> nameToDatasource, ConfigThingy sourceDesc, URL context) throws IOException { String name = parseConfig(sourceDesc, "NAME", () -> L.m("NAME der Datenquelle fehlt")); String urlStr = parseConfig(sourceDesc, "URL", () -> L.m("URL der Datenquelle \"%1\" fehlt", name)); try { URL url = new URL(context, ConfigThingy.urlEncode(urlStr)); ConfigThingy conf = new ConfigThingy(name, url); ConfigThingy schemaDesc = conf.get("Schema"); List<String> schema = new ArrayList<>(); String[] schemaOrdered = new String[schemaDesc.count()]; int i = 0; for (ConfigThingy spalteConfig : schemaDesc) { String spalte = spalteConfig.toString(); if (!SPALTENNAME.matcher(spalte).matches()) { throw new ConfigurationErrorException(L.m( "Fehler in Definition von Datenquelle %1: Spalte \"%2\" entspricht nicht der Syntax eines Bezeichners", name, spalte)); } if (schema.contains(spalte)) { throw new ConfigurationErrorException(L.m( "Fehler in Definition von Datenquelle %1: Spalte \"%2\" doppelt aufgeführt im Schema", name, spalte)); } schema.add(spalte); schemaOrdered[i++] = spalte; } String[] keyCols = parseKeys(sourceDesc, name, schema); List<Dataset> data = parseData(conf, name, schema, schemaOrdered, keyCols); init(name, schema, data); } catch (NodeNotFoundException x) { throw new ConfigurationErrorException(L.m( "Fehler in Conf-Datei von Datenquelle %1: Abschnitt 'Schema' fehlt", name), x); } catch (MalformedURLException e) { throw new ConfigurationErrorException( L.m("Fehler in Definition von Datenquelle %1: Fehler in URL \"%2\": ", name, urlStr), e); } catch (SyntaxErrorException e) { throw new ConfigurationErrorException( L.m("Fehler in Conf-Datei von Datenquelle %1: ", name), e); } } ThingyDatasource(Map<String, Datasource> nameToDatasource, ConfigThingy sourceDesc, URL context); }
ThingyDatasource extends RAMDatasource { public ThingyDatasource(Map<String, Datasource> nameToDatasource, ConfigThingy sourceDesc, URL context) throws IOException { String name = parseConfig(sourceDesc, "NAME", () -> L.m("NAME der Datenquelle fehlt")); String urlStr = parseConfig(sourceDesc, "URL", () -> L.m("URL der Datenquelle \"%1\" fehlt", name)); try { URL url = new URL(context, ConfigThingy.urlEncode(urlStr)); ConfigThingy conf = new ConfigThingy(name, url); ConfigThingy schemaDesc = conf.get("Schema"); List<String> schema = new ArrayList<>(); String[] schemaOrdered = new String[schemaDesc.count()]; int i = 0; for (ConfigThingy spalteConfig : schemaDesc) { String spalte = spalteConfig.toString(); if (!SPALTENNAME.matcher(spalte).matches()) { throw new ConfigurationErrorException(L.m( "Fehler in Definition von Datenquelle %1: Spalte \"%2\" entspricht nicht der Syntax eines Bezeichners", name, spalte)); } if (schema.contains(spalte)) { throw new ConfigurationErrorException(L.m( "Fehler in Definition von Datenquelle %1: Spalte \"%2\" doppelt aufgeführt im Schema", name, spalte)); } schema.add(spalte); schemaOrdered[i++] = spalte; } String[] keyCols = parseKeys(sourceDesc, name, schema); List<Dataset> data = parseData(conf, name, schema, schemaOrdered, keyCols); init(name, schema, data); } catch (NodeNotFoundException x) { throw new ConfigurationErrorException(L.m( "Fehler in Conf-Datei von Datenquelle %1: Abschnitt 'Schema' fehlt", name), x); } catch (MalformedURLException e) { throw new ConfigurationErrorException( L.m("Fehler in Definition von Datenquelle %1: Fehler in URL \"%2\": ", name, urlStr), e); } catch (SyntaxErrorException e) { throw new ConfigurationErrorException( L.m("Fehler in Conf-Datei von Datenquelle %1: ", name), e); } } ThingyDatasource(Map<String, Datasource> nameToDatasource, ConfigThingy sourceDesc, URL context);  }
ThingyDatasource extends RAMDatasource { public ThingyDatasource(Map<String, Datasource> nameToDatasource, ConfigThingy sourceDesc, URL context) throws IOException { String name = parseConfig(sourceDesc, "NAME", () -> L.m("NAME der Datenquelle fehlt")); String urlStr = parseConfig(sourceDesc, "URL", () -> L.m("URL der Datenquelle \"%1\" fehlt", name)); try { URL url = new URL(context, ConfigThingy.urlEncode(urlStr)); ConfigThingy conf = new ConfigThingy(name, url); ConfigThingy schemaDesc = conf.get("Schema"); List<String> schema = new ArrayList<>(); String[] schemaOrdered = new String[schemaDesc.count()]; int i = 0; for (ConfigThingy spalteConfig : schemaDesc) { String spalte = spalteConfig.toString(); if (!SPALTENNAME.matcher(spalte).matches()) { throw new ConfigurationErrorException(L.m( "Fehler in Definition von Datenquelle %1: Spalte \"%2\" entspricht nicht der Syntax eines Bezeichners", name, spalte)); } if (schema.contains(spalte)) { throw new ConfigurationErrorException(L.m( "Fehler in Definition von Datenquelle %1: Spalte \"%2\" doppelt aufgeführt im Schema", name, spalte)); } schema.add(spalte); schemaOrdered[i++] = spalte; } String[] keyCols = parseKeys(sourceDesc, name, schema); List<Dataset> data = parseData(conf, name, schema, schemaOrdered, keyCols); init(name, schema, data); } catch (NodeNotFoundException x) { throw new ConfigurationErrorException(L.m( "Fehler in Conf-Datei von Datenquelle %1: Abschnitt 'Schema' fehlt", name), x); } catch (MalformedURLException e) { throw new ConfigurationErrorException( L.m("Fehler in Definition von Datenquelle %1: Fehler in URL \"%2\": ", name, urlStr), e); } catch (SyntaxErrorException e) { throw new ConfigurationErrorException( L.m("Fehler in Conf-Datei von Datenquelle %1: ", name), e); } } ThingyDatasource(Map<String, Datasource> nameToDatasource, ConfigThingy sourceDesc, URL context);   }