package com.bagri.server.hazelcast.impl;
import static com.bagri.core.Constants.pn_config_path;
import static com.bagri.core.Constants.pn_config_properties_file;
import static com.bagri.core.Constants.pn_document_collections;
import static com.bagri.core.Constants.pn_document_data_format;
import static com.bagri.core.Constants.pn_log_level;
import static com.bagri.core.Constants.pn_node_instance;
import static com.bagri.core.Constants.pn_schema_format_default;
import static org.junit.Assert.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.bagri.core.api.ResultCursor;
import com.bagri.core.server.api.df.json.JsonpParser;
import com.bagri.core.server.api.df.json.JsonpBuilder;
import com.bagri.core.system.Collection;
import com.bagri.core.system.DataFormat;
import com.bagri.core.system.Library;
import com.bagri.core.system.Module;
import com.bagri.core.system.Schema;
import com.bagri.core.test.BagriManagementTest;
import com.bagri.server.hazelcast.impl.SchemaRepositoryImpl;
import com.bagri.support.util.JMXUtils;
public class JsonQueryManagementTest extends BagriManagementTest {
private static ClassPathXmlApplicationContext context;
@BeforeClass
public static void setUpBeforeClass() throws Exception {
sampleRoot = "..\\..\\etc\\samples\\json\\";
//System.setProperty(pn_log_level, "trace");
System.setProperty(pn_node_instance, "0");
System.setProperty("logback.configurationFile", "hz-logging.xml");
System.setProperty(pn_config_properties_file, "json.properties");
System.setProperty(pn_config_path, "src\\test\\resources");
context = new ClassPathXmlApplicationContext("spring/cache-test-context.xml");
}
@AfterClass
public static void tearDownAfterClass() throws Exception {
context.close();
}
@Before
public void setUp() throws Exception {
xRepo = context.getBean(SchemaRepositoryImpl.class);
SchemaRepositoryImpl xdmRepo = (SchemaRepositoryImpl) xRepo;
Schema schema = xdmRepo.getSchema();
if (schema == null) {
schema = new Schema(1, new java.util.Date(), "test", "test", "test schema", true, null);
schema.setProperty(pn_schema_format_default, "JSON");
Collection collection = new Collection(1, new Date(), JMXUtils.getCurrentUser(),
1, "securities", "/{http://tpox-benchmark.com/security}Security", "all securities", true);
schema.addCollection(collection);
xdmRepo.setSchema(schema);
xdmRepo.setDataFormats(getBasicDataFormats());
xdmRepo.setLibraries(new ArrayList<Library>());
xdmRepo.setModules(new ArrayList<Module>());
long txId = xRepo.getTxManagement().beginTransaction();
createDocumentTest(sampleRoot + "security1500.json");
createDocumentTest(sampleRoot + "security5621.json");
createDocumentTest(sampleRoot + "security9012.json");
xRepo.getTxManagement().commitTransaction(txId);
}
}
@After
public void tearDown() throws Exception {
removeDocumentsTest();
}
//protected String getFileName(String original) {
// return original.substring(0, original.indexOf(".")) + ".json";
//}
protected Properties getDocumentProperties() {
Properties props = new Properties();
props.setProperty(pn_document_collections, "securities");
props.setProperty(pn_document_data_format, "JSON");
return props;
}
@Test
public void convertJsonDocumentsTest() throws Exception {
String query = "for $map in fn:collection()\n" +
"let $props := entry('method', 'json')\n" +
"let $json := fn:serialize($map, $props)\n" +
"return fn:json-to-xml($json)";
ResultCursor docs = query(query, null, null);
assertNotNull(docs);
List<String> jsons = new ArrayList<>();
while (docs.next()) {
String json = docs.getString();
jsons.add(json);
//System.out.println(json);
}
docs.close();
assertEquals(3, jsons.size());
}
@Test
public void serializeJsonDocumentsTest() throws Exception {
String query = "for $uri in fn:uri-collection()\n" +
"let $map := fn:json-doc($uri)\n" +
"let $props := map { 'method': 'json' }\n" +
"return fn:serialize($map, $props)";
Properties props = new Properties();
//props.setProperty("method", "json");
ResultCursor docs = query(query, null, props);
assertNotNull(docs);
props = new Properties();
//props.setProperty("method", "json");
List<String> jsons = new ArrayList<>();
while (docs.next()) {
String json = docs.getString();
jsons.add(json);
//System.out.println(json);
}
docs.close();
assertEquals(3, jsons.size());
}
@Test
public void getJsonDocumentsTest() throws Exception {
String query = "for $map in fn:collection(\"securities\")\n" +
"let $v := get($map, 'Security')\n" +
"where get($v, 'Symbol') = 'IBM'\n" +
"return $v?('Symbol', 'Name')";
ResultCursor docs = query(query, null, null);
assertNotNull(docs);
Properties props = new Properties();
props.setProperty("method", "text");
List<String> results = new ArrayList<>();
while (docs.next()) {
String text = docs.getString();
results.add(text);
}
docs.close();
assertEquals(2, results.size());
}
@Test
public void queryJsonDocumentsTest() throws Exception {
String query = "for $uri in fn:uri-collection(\"securities\")\n" +
"let $map := fn:json-doc($uri)\n" +
"let $sec := get($map, 'Security')\n" +
"where get($sec, 'id') = 5621\n" +
"return fn:serialize($map, map{'method': 'json'})";
Properties props = new Properties();
//props.setProperty("method", "json");
ResultCursor docs = query(query, null, props);
assertNotNull(docs);
List<String> jsons = new ArrayList<>();
while (docs.next()) {
String json = docs.getString();
jsons.add(json);
//System.out.println(json);
}
docs.close();
assertEquals(1, jsons.size());
}
}