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_data_format; import static com.bagri.core.Constants.pn_log_level; import static com.bagri.core.Constants.pn_node_instance; import static com.bagri.server.hazelcast.util.SpringContextHolder.setContext; import static org.junit.Assert.*; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import java.util.Properties; import javax.xml.xquery.XQItem; 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.model.Document; 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.bean.SampleBean; import com.bagri.server.hazelcast.impl.SchemaRepositoryImpl; public class BindDocumentManagementTest 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, "test.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); xdmRepo.setSchema(schema); xdmRepo.setDataFormats(getBasicDataFormats()); xdmRepo.setLibraries(new ArrayList<Library>()); xdmRepo.setModules(new ArrayList<Module>()); setContext(schema.getName(), context); } } @After public void tearDown() throws Exception { // remove documents here! removeDocumentsTest(); } @Test public void createBeanDocumentTest() throws Exception { long txId = xRepo.getTxManagement().beginTransaction(); SampleBean sb1 = new SampleBean(1, false, "XYZ"); Document bDoc = xRepo.getDocumentManagement().storeDocumentFromBean("bean_test.xml", sb1, null); assertNotNull(bDoc); uris.add(bDoc.getUri()); xRepo.getTxManagement().commitTransaction(txId); String xml = xRepo.getDocumentManagement().getDocumentAsString(bDoc.getUri(), null); assertNotNull(xml); SampleBean sb2 = (SampleBean) xRepo.getDocumentManagement().getDocumentAsBean(bDoc.getUri(), null); assertEquals(sb1.getIntProperty(), sb2.getIntProperty()); assertTrue(sb1.isBooleanProperty() == sb2.isBooleanProperty()); assertEquals(sb1.getStringProperty(), sb2.getStringProperty()); } @Test public void createMapDocumentTest() throws Exception { long txId = xRepo.getTxManagement().beginTransaction(); Map<String, Object> m1 = new HashMap<>(); m1.put("intProp", 1); m1.put("boolProp", Boolean.FALSE); m1.put("strProp", "XYZ"); Properties props = new Properties(); props.setProperty(pn_document_data_format, "MAP"); Document mDoc = xRepo.getDocumentManagement().storeDocumentFromMap("map_test1.xml", m1, props); assertNotNull(mDoc); assertEquals(txId, mDoc.getTxStart()); uris.add(mDoc.getUri()); xRepo.getTxManagement().commitTransaction(txId); //String xml = xRepo.getDocumentManagement().getDocumentAsString(mDoc.getUri(), null); //assertNotNull(xml); //System.out.println(xml); Map<String, Object> m2 = xRepo.getDocumentManagement().getDocumentAsMap(mDoc.getUri(), props); assertEquals(m1.get("intProp"), m2.get("intProp")); assertEquals(m1.get("boolProp"), m2.get("boolProp")); assertEquals(m1.get("strProp"), m2.get("strProp")); /* m2.put("intProp", 2); m2.put("boolProp", Boolean.TRUE); m2.put("strProp", "ABC"); txId = xRepo.getTxManagement().beginTransaction(); mDoc = xRepo.getDocumentManagement().storeDocumentFromMap("map_test2.xml", m2, props); assertNotNull(mDoc); assertEquals(txId, mDoc.getTxStart()); uris.add(mDoc.getUri()); xRepo.getTxManagement().commitTransaction(txId); String query = //"declare default element namespace \"\";\n" + "declare variable $value external;\n" + "for $doc in fn:collection()/map\n" + //"where $doc/intProp = $value\n" + "where $doc[intProp = $value]\n" + "return $doc/strProp/text()"; Map<String, Object> params = new HashMap<>(); params.put("value", 0); ResultCursor results = query(query, params, null); assertFalse(results.next()); results.close(); params.put("value", 1); results = query(query, params, null); assertTrue(results.next()); props = new Properties(); props.setProperty("method", "text"); XQItem item = (XQItem) results.getXQItem(); String text = item.getItemAsString(props); assertEquals("XYZ", text); assertFalse(results.next()); results.close(); */ } @Test public void queryDocumentTest() throws Exception { String xml = "<map>\n" + " <boolProp>false</boolProp>\n" + " <strProp>XYZ</strProp>\n" + " <intProp>1</intProp>\n" + "</map>"; long txId = xRepo.getTxManagement().beginTransaction(); Document mDoc = xRepo.getDocumentManagement().storeDocumentFromString("map.xml", xml, null); assertNotNull(mDoc); assertEquals(txId, mDoc.getTxStart()); uris.add(mDoc.getUri()); xRepo.getTxManagement().commitTransaction(txId); String query = //"declare default element namespace \"\";\n" + "declare variable $value external;\n" + "for $doc in fn:collection()/map\n" + "where $doc/intProp = $value\n" + //"where $doc[intProp = $value]\n" + "return $doc/strProp/text()"; Map<String, Object> params = new HashMap<>(); params.put("value", 1); try (ResultCursor results = query(query, params, null)) { assertTrue(results.next()); Properties props = new Properties(); props.setProperty("method", "text"); XQItem item = (XQItem) results.getXQItem(); String text = item.getItemAsString(props); assertEquals("XYZ", text); assertFalse(results.next()); } } }