Rest and Java Sample Codes

Rest and Java Sample Codes

✅ Enterprise: AWS, Azure, GCP, and On-Premises

✅ Marketplace: AWS, Azure, and GCP

✅ SaaS: AWS, Azure, and GCP

✅ Single Node Installation (SNI)


Here are some sample codes to help you use REST and Java APIs for working with Kyvos entities. 

Adding new user group in Kyvos 

/**Method to add new group in Kyvos*/ public static void addGroup(String groupName) throws UnsupportedEncodingException { UserGroup group = new UserGroup(); group.setGroupName(groupName); group.setUserGroupId(groupName); group.setDescription("test Group"); group.setRole("0"); group.setGroupType(UserAuthType.NATIVE); group.setUserIds(new String[]{""}); System.out.println(group.getXML()); String params = "groupXML="+URLEncoder.encode(group.getXML(), java.nio.charset.StandardCharsets.UTF_8.toString()); RESTClient.sendRequest("group", params, "POST");

Updating user group in Kyvos 

/**Method to update a group in Kyvos*/ public static void updateGroup(String groupName) throws UnsupportedEncodingException { String groupXML = RESTClient.sendRequest("group/"+groupName+"?addResponseTag=false", null, "GET"); System.out.println(groupXML); UserGroup group = new UserGroup(groupXML); System.out.println(group.getXML()); group.setUserIds(new String[]{"", ""}); String params = "groupXML="+URLEncoder.encode(group.getXML(), java.nio.charset.StandardCharsets.UTF_8.toString()); RESTClient.sendRequest("group/"+group.getGroupName(), params, "PUT");

Creating new relationship design

/**Method to create a fresh DRD*/ public static void createDRD() throws Exception { String RF_1_ID = ""; String RF_2_ID = ""; DRDObject drdObject = new DRDObject(); drdObject.setViewType(Enums.DRDViewType.TABULAR); drdObject.setName(""); drdObject.setId(Utility.getGUID()); drdObject.setFolderName(""); drdObject.setFolderId(""); // Creating DRD Node using registered file id DRDObject.DRDDatasetDetails node1 = new DRDObject.DRDDatasetDetails(); node1.setId(RF_1_ID); node1.setAliasName("NODE_NAME_1"); drdObject.addNode("NODE_ID_1", node1); DRDObject.DRDDatasetDetails node2 = new DRDObject.DRDDatasetDetails(); node2.setId(RF_2_ID); node2.setAliasName("NODE_NAME_2"); drdObject.addNode("NODE_ID_2", node2); DRDRelation drdRelation = new DRDRelation(); drdRelation.setSourceID("NODE_ID_1"); drdRelation.setFirstDSID("NODE_ID_1"); drdRelation.setSecondDSID("NODE_ID_2"); drdRelation.setRelationType("ONE_TO_MANY"); drdRelation.addJoin("ID", "Product_ID"); drdRelation.setRelationName("test"); ArrayList<DRDRelation> drdRelationList = new ArrayList<>(); drdRelationList.add(drdRelation); drdObject.getDrdRelationsMap().put(Utility.getClientGuid(""), drdRelationList); System.out.println(drdObject.getXML()); String params = "drdXML="+URLEncoder.encode(drdObject.getXML(), java.nio.charset.StandardCharsets.UTF_8.toString()); System.out.println(RESTClient.sendRequest("datasetrelationship", params, "POST")); }

Updating relationship design

/**Method to update existing DRD*/ public static void updateDRD(String drdName) { String drdXML = ""; DRDObject drdObj = new DRDObject(drdXML); // user can add, remove or modify drd nodes from map. HashMap<String, DRDDatasetDetails> drdNodeMap = drdObj.getDrdDataSetDetailsMap(); // user can add, remove or modify node relations. HashMap<String, ArrayList<DRDRelation>> relationMap = drdObj.getDrdRelationsMap(); for (String relationKEy : relationMap.keySet()) { for (DRDRelation drdRelation : relationMap.get(relationKEy)) { if ("NODE_ID_1".equals(drdRelation.getSourceID())) { List<DRDJoinBy> joinByList = drdRelation.getDRDJoinByList(); for (DRDJoinBy joinBy : joinByList) { if (joinBy.getFirstDSCol().equalsIgnoreCase("saledate")) { joinBy.setFirstDSCol("saledate2"); } } } } } System.out.println(drdObj.getXML()); } }

Adding single data security rule to semantic model

* This method is used to add single data security rule to semantic model * * @param smodelId: is of semantic model * @throws ISecurityException, UnsupportedEncodingException * @throws ReportObjectException * @throws InterfaceInitException */ public static ResponseStatus addDataSecurityRule(String smodelId) throws ISecurityException, UnsupportedEncodingException, ReportObjectException, InterfaceInitException { // userInfo => get user info SecurityManager secMgr = SecurityManager.getInstance(); RepositoryManager rm = new RepositoryManager(); // get semantic model object in which rule is to be added. ReportObjectManager rom = new ReportObjectManager(); CubeObject co = (CubeObject) rom.getReportObject(Enums.IRO.TYPE.ANALYTICAL, smodelId, true, userInfo, Enums.IRO.SUBTYPE.CUBE); List<ColumnLevelSecurityField> columnFieldList = new ArrayList<>(); // will contain column level rule objects List<com.kyvos.commons.entity.olap.viewer.Filter> rowFilterList = new ArrayList<>(); // will contain row level // filter objects // create row level filters String rowFilterDimensionName = "Account-CR"; String rowFilterFieldName = "Account"; String rowFilterOperator = "IN_LIST"; String rowFilterValue = "Assets"; // create filter object. // For IN_LIST operator : public com.kyvos.commons.entity.olap.viewer.Filter // createRowLevelDimensionFilterByList(CubeObject cubeObject, String // dimensionName, String levelName, String operator, List<String> valuesList) // For BETWEEN operator : public com.kyvos.commons.entity.olap.viewer.Filter // createFilter(CubeObject cubeObject, String dimensionName, String levelName, // String operator, String firstValue, String secondValue) // For other operators: public com.kyvos.commons.entity.olap.viewer.Filter // createRowLevelDimensionFilter(CubeObject cubeObject, String dimensionName, // String levelName, String operator, String value) com.kyvos.commons.entity.olap.viewer.Filter rowFilter = secMgr.createRowLevelDimensionFilter(co, rowFilterDimensionName, rowFilterFieldName, rowFilterOperator.toUpperCase(), rowFilterValue); rowFilter.setRelation(Enums.FilterRelation.and); rowFilterList.add(rowFilter); // create column level field String columnDimensionName = ""; String columnFieldType = ""; String columnFieldName = ""; String columnRestriction = Enums.ColumnLevelSecurityRestriction.CONDITIONAL_MASK_DATA.name(); // create masking info object if restriction type is masking. Add filters if // conditional masking is used. List<com.kyvos.commons.entity.olap.viewer.Filter> columnFilterList = new ArrayList<>(); String filterDimensionName = ""; String filterFieldName = ""; String filterOperator = ""; String filterValue = ""; // create filter object in same way as for row level rules com.kyvos.commons.entity.olap.viewer.Filter colFilter = secMgr.createRowLevelDimensionFilter(co, filterDimensionName, filterFieldName, filterOperator.toUpperCase(), filterValue); colFilter.setRelation(Enums.FilterRelation.and); // for column level filters enclosures are supported colFilter.setStartEnclosure("("); colFilter.setEndEnclosure(")"); columnFilterList.add(colFilter); ColumnLevelSecurityMaskingInfo columnMaskingInfo = new ColumnLevelSecurityMaskingInfo( Enums.ColumnLevelSecurityMaskType.FIX, "*", "", columnFilterList); // get ColumnLevelSecurityField object // createColumnLevelField(CubeObject cubeObject, String dimensionName, String // fieldType, String fieldName, String restriction, // ColumnLevelSecurityMaskingInfo maskingInfo) throws ISecurityException { ColumnLevelSecurityField columnField = secMgr.createColumnLevelField(co, columnDimensionName, columnFieldType, columnFieldName, columnRestriction, columnMaskingInfo); columnFieldList.add(columnField); String ruleName = "testRule"; String ruleDescription = "desc"; // Add rule using Java API return secMgr.addDataSecurityRule(co, ruleName, ruleDescription, rowFilterList, columnFieldList, userInfo); }

Updating single data security rule

** * This method is used to update single data security rule * * @param smodelId: is of cube * @param ruleName: name of rule to be updated * @throws ISecurityException, UnsupportedEncodingException * @throws ReportObjectException */ public static ResponseStatus updateDataSecurityRule(String smodelId, String ruleName) throws ISecurityException, UnsupportedEncodingException, ReportObjectException { // userInfo => get user info SecurityManager secMgr = SecurityManager.getInstance(); RepositoryManager rm = new RepositoryManager(); // get semantic model object in which rule is to be added. ReportObjectManager rom = new ReportObjectManager(); CubeObject co = (CubeObject) rom.getReportObject(Enums.IRO.TYPE.ANALYTICAL, smodelId, true, userInfo, Enums.IRO.SUBTYPE.CUBE); DataSecurityRule rule = DataSecurityJavaAPI.getDataSecurityRule(smodelId, ruleName); if (rule == null) { return null; } List<ColumnLevelSecurityField> columnFieldList = new ArrayList<>(); // will contain column level rule objects List<com.kyvos.commons.entity.olap.viewer.Filter> rowFilterList = new ArrayList<>(); // will contain row level // filter objects // create row level filters String rowFilterDimensionName = ""; String rowFilterFieldName = ""; String rowFilterOperator = ""; String rowFilterValue = ""; // create filter object. // For IN_LIST operator : public com.kyvos.commons.entity.olap.viewer.Filter // createRowLevelDimensionFilterByList(CubeObject cubeObject, String // dimensionName, String levelName, String operator, List<String> valuesList) // For BETWEEN operator : public com.kyvos.commons.entity.olap.viewer.Filter // createFilter(CubeObject cubeObject, String dimensionName, String levelName, // String operator, String firstValue, String secondValue) // For other operators: public com.kyvos.commons.entity.olap.viewer.Filter // createRowLevelDimensionFilter(CubeObject cubeObject, String dimensionName, // String levelName, String operator, String value) com.kyvos.commons.entity.olap.viewer.Filter rowFilter = secMgr.createRowLevelDimensionFilter(co, rowFilterDimensionName, rowFilterFieldName, rowFilterOperator.toUpperCase(), rowFilterValue); rowFilter.setRelation(Enums.FilterRelation.and); rowFilterList.add(rowFilter); // create column level field String columnDimensionName = ""; String columnFieldType = ""; String columnFieldName = ""; String columnRestriction = Enums.ColumnLevelSecurityRestriction.CONDITIONAL_MASK_DATA.name(); // create masking info object if restriction type is masking. Add filters if // conditional masking is used. List<com.kyvos.commons.entity.olap.viewer.Filter> columnFilterList = new ArrayList<>(); String filterDimensionName = ""; String filterFieldName = ""; String filterOperator = ""; String filterValue = ""; // create filter object in same way as for row level rules com.kyvos.commons.entity.olap.viewer.Filter colFilter = secMgr.createRowLevelDimensionFilter(co, filterDimensionName, filterFieldName, filterOperator.toUpperCase(), filterValue); colFilter.setRelation(Enums.FilterRelation.and); // for column level filters enclosures are supported colFilter.setStartEnclosure("("); colFilter.setEndEnclosure(")"); columnFilterList.add(colFilter); ColumnLevelSecurityMaskingInfo columnMaskingInfo = new ColumnLevelSecurityMaskingInfo( Enums.ColumnLevelSecurityMaskType.FIX, "*", "", columnFilterList); ColumnLevelSecurityField columnField = secMgr.createColumnLevelField(co, columnDimensionName, columnFieldType, columnFieldName, columnRestriction, columnMaskingInfo); columnFieldList.add(columnField); String ruleDescription = "desc"; // update rule information rule.setColumnLevelFieldsList(columnFieldList); rule.setRowLevelFiltersList(rowFilterList); rule.setDescription(ruleDescription); return secMgr.updateDataSecurityRule(co, rule, userInfo); }

Getting data security rule

/** * method to get data security rule * * @param smodelId: ID of Semantic Model * @param ruleName: name of rule to be deleted * @return object of type DataSecurityRule. * @throws ReportObjectException * @throws ISecurityException. */ public static DataSecurityRule getDataSecurityRule(String smodelId, String ruleName) throws ISecurityException, UnsupportedEncodingException, ReportObjectException { // userInfo => get user info SecurityManager secMgr = SecurityManager.getInstance(); // get semantic model object in which rule is applied. ReportObjectManager rom = new ReportObjectManager(); CubeObject cubeObject = (CubeObject) rom.getReportObject(Enums.IRO.TYPE.ANALYTICAL, smodelId, true, userInfo, Enums.IRO.SUBTYPE.CUBE); // java api to get data security rule return secMgr.getDataSecurityRule(cubeObject, ruleName, userInfo); }

Deleting data security rule from semantic model of given semantic model ID

/** * method to delete data security rule from semantic model of given semanitc model ID * * @param smodelId: ID of semantic model * @param ruleName: name of rule to be deleted * @return object of type ResponseStatus. * @throws ReportObjectException * @throws ISecurityException. */ public static ResponseStatus deleteDataSecurityRule(String smodelId, String ruleName) throws ISecurityException, UnsupportedEncodingException, ReportObjectException { // userInfo // get semantic model object in which rule is applied. ReportObjectManager rom = new ReportObjectManager(); CubeObject cubeObject = (CubeObject) rom.getReportObject(Enums.IRO.TYPE.ANALYTICAL, smodelId, true, userInfo, Enums.IRO.SUBTYPE.CUBE); SecurityManager secMgr = SecurityManager.getInstance(); // java api to delete single data security rule return secMgr.deleteDataSecurityRule(cubeObject, ruleName, userInfo); }

Adding data security rules mapping for user

/** * method to add data security rules mapping for a user. * * @param smodelId: ID of semantic model * @return object of type ResponseStatus. * @throws ReportObjectException * @throws ISecurityException. */ public static ResponseStatus assignDataSecurityRulesToUser(String smodelId) throws ISecurityException, UnsupportedEncodingException, ReportObjectException { // userInfo // get semantic model object in which rule is applied. ReportObjectManager rom = new ReportObjectManager(); CubeObject cubeObject = (CubeObject) rom.getReportObject(Enums.IRO.TYPE.ANALYTICAL, smodelId, true, userInfo, Enums.IRO.SUBTYPE.CUBE); SecurityManager secMgr = SecurityManager.getInstance(); // user to which rules are to be assigned String userName = "userName"; // set rules which are to be assigned to user List<String> ruleNames = new ArrayList<>(); ruleNames.add("testRule"); // java api to assign rules to user return secMgr.addDataSecurityRulesMappingForUser(cubeObject, userName, ruleNames, userInfo); }

Adding data security rules mapping for a group

/** * method to add data security rules mapping for a group. * * @param cubeObject: Object of type CubeObject. * @return object of type ResponseStatus. * @throws ReportObjectException * @throws ISecurityException. */ public static ResponseStatus assignDataSecurityRulesToGroup(String smodelId) throws ISecurityException, UnsupportedEncodingException, ReportObjectException { // userInfo // get semantic model object in which rule is applied. ReportObjectManager rom = new ReportObjectManager(); CubeObject cubeObject = (CubeObject) rom.getReportObject(Enums.IRO.TYPE.ANALYTICAL, smodelId, true, userInfo, Enums.IRO.SUBTYPE.CUBE); SecurityManager secMgr = SecurityManager.getInstance(); // group name to which rules are to be assigned String groupName = "TestGroup"; // rules names which are to be assigned to group List<String> ruleNames = new ArrayList<>(); ruleNames.add("testRule"); return secMgr.addDataSecurityRulesMappingForGroup(cubeObject, groupName, ruleNames, userInfo); } }

Creating a Registered file 

/**Method to create RF*/ addRegisteredFile(""); } public static void addRegisteredFile(String fileName) throws Exception { ReportClient.init("." + java.io.File.separator + "conf" + java.io.File.separator + "kyvosclient.properties", "." + java.io.File.separator + "conf" + java.io.File.separator + "globals.properties", true); RepositoryManager rm = new RepositoryManager(); UserInfo userInfo = new UserInfo("Username","Password"); RegisteredFile rf = new RegisteredFile(); rf.setId(rm.getGuid()); rf.setName(fileName); rf.setFolderId("folder_16648879882851127070040120298929"); rf.setFolderName("RESTAPI"); rf.setConnectionName("DefaultHadoopCluster01"); // To Create TABLE based Register file. rf.setInputType(Enums.RFInputTypes.TABLE); HCatalogSource hCatalogSource = (HCatalogSource)rf.getDataSource(); hCatalogSource.setDbName("automationtables"); hCatalogSource.setTableName("account"); // Get column details for current Register file using REST API. ArrayList<FetchColumn> columnDetails = getColumnDetailsFromServer(rf); System.out.println("Colum Details "+ columnDetails.size()); // TO add or update user parameters. rf.addOrUpdateQOPrameter("dbName", "automationtables", "My Description "); // Setting column details. rf.setColumnDetails(columnDetails); // Invoking REST API to save file. String urlParameters = "registerFileXML="+ URLEncoder.encode(rf.getXML(), java.nio.charset.StandardCharsets.UTF_8.toString()); RESTClient.sendRequest("registerfiles", urlParameters, "POST"); RegisteredFile registeredFile = rm.getRegisteredFileByName("SQLRF","RESTAPI",userInfo); ArrayList columnsDetails = registeredFile.getFetchStep().getColumnDetails(); System.out.println("columnDetails size = " + columnsDetails.size()); } public static ArrayList getColumnDetailsFromServer(RegisteredFile rf) throws IOException { String urlParameters = "registerFileXML="+URLEncoder.encode(rf.getXML(), java.nio.charset.StandardCharsets.UTF_8.toString()); /**Rest API Method to send request to create RF*/ String responseString = RESTClient.sendRequest("registerfiles/createFetchStep", urlParameters, "POST"); FetchStep fetchStep = new FetchStep(responseString); return fetchStep.getColumnDetails(); } }

Creating semantic model

public class CubeAPI { String drdXML = ""; DRDObject sourceDRD = new DRDObject(drdXML); public static void createCubeWithDRD(DRDObject drdObj) throws UnsupportedEncodingException { CubeObject cubeObject = new CubeObject(drdObj, "API_CUBE_1_ID", "API_CUBE_1"); cubeObject.setFolderId(""); cubeObject.setFolderName(""); Dimension dim = cubeObject.addDimension("Transactions"); DimAttribute attr = dim.addDimAttribute("lineorder", "COLUMN13"); attr.setName("QUANTITY"); attr.setDataType("NUMBER"); attr = dim.addDimAttribute("lineorder", "COLUMN12"); attr.setName("DISCOUNT"); attr.setDataType("NUMBER"); dim = cubeObject.addDimension("Dates"); Hierarchy hierarchy = dim.addTimeHierarchy("H_Dates", "Y-M-D", "dates", "D_DATEKEY"); Level level = hierarchy.addLevel(hierarchy.getAssociatedQueryName(), hierarchy.getDataField()); level.setName("Year"); level.setDataType("DATE"); level.setDateDataType("Year"); level.setFormatType("4"); level = hierarchy.addLevel(hierarchy.getAssociatedQueryName(), hierarchy.getDataField()); level.setName("Month"); level.setDataType("DATE"); level.setDateDataType("Month"); level = hierarchy.addLevel(hierarchy.getAssociatedQueryName(), hierarchy.getDataField()); level.setName("Day"); level.setDataType("DATE"); level.setDateDataType("Day"); attr = dim.addDimAttribute("dates", "D_YEARMONTHNUM"); attr.setName("YEARMONTHNUM"); attr.setDataType("NUMBER"); attr = dim.addDimAttribute("dates", "D_WEEKNUMINYEAR"); attr.setName("D_WEEKNUMINYEAR"); attr.setDataType("NUMBER"); attr = dim.addDimAttribute("dates", "D_YEARMONTH"); attr.setName("D_YEARMONTH"); dim = cubeObject.addDimension("Parts"); hierarchy = dim.addHierarchy("H_Parts"); level = hierarchy.addLevel("part", "COLUMN3"); level.setName("MFGR"); level = hierarchy.addLevel("part", "COLUMN4"); level.setName("CATEGORY"); level = hierarchy.addLevel("part", "COLUMN5"); level.setName("BRAND1"); CalculatedMember member = new CalculatedMember(); member.setId("CalculatedMember1_ID"); member.setMemberName("CalculatedMember1"); member.setExpression("[Measures].[Profit]-20"); member.setParentMemberUname(hierarchy.getUniqueName()); member.setParentHierachy(hierarchy.getName()); member.setParentLevelMemb("ALLMEMBER"); member.setDescription("test description"); ArrayList<CalculatedMember> calculatedMembers = dim.getCalculatedMembers(); calculatedMembers.add(member); dim = cubeObject.addDimension("Supplier"); // Set materialize dim.setMaterialize("NO"); // Set SCD dim.setScd(null); // Set SCD TYPE dim.setSCDType(1); hierarchy = dim.addHierarchy("H_Supplier"); // Set materialize hierarchy.setMaterialize("NO"); level = hierarchy.addLevel("supplier", "COLUMN6"); level.setName("REGION"); level = hierarchy.addLevel("supplier", "COLUMN5"); level.setName("NATION"); level = hierarchy.addLevel("supplier", "COLUMN4"); level.setName("CITY"); dim = cubeObject.addDimension("Customer"); hierarchy = dim.addHierarchy("H_Customer"); level = hierarchy.addLevel("Customer", "COLUMN6"); level.setName("REGION"); level = hierarchy.addLevel("Customer", "COLUMN5"); level.setName("NATION"); level = hierarchy.addLevel("Customer", "COLUMN5"); level.setName("CITY"); // Set custom rollup level.setCustomrollup(null); cubeObject.addMeasureGroups("MeasureGroup"); Measure measure = cubeObject.addMeasureInMeasureGroup("lineorder", "Revenue", "MeasureGroup"); measure.setIsDefault(true); measure.setFormat("#,##0"); measure = cubeObject.addMeasureInMeasureGroup("lineorder", "COLUMN13", "MeasureGroup"); measure.setName("Lo_Revenue"); measure = cubeObject.addMeasureInMeasureGroup("lineorder", "Profit", "MeasureGroup"); measure = new Measure(); measure.setName("PROFIT-10"); measure.setType(Enums.CubeObject.Measure.Type.CALCULATED); measure.setSolveOrder(0); measure.setExpression("[Measures].[Profit]-10"); measure.setNonEmptyBehavior(Enums.CubeObject.Measure.NonEmptyBehavior.BY_EXPRESSION); cubeObject.addMeasureInMeasureGroup(measure, "MeasureGroup"); // Sliding Window SlidingWindow slidingWindow = new SlidingWindow(); slidingWindow.setSlidingWindowID("ID"); slidingWindow.setDimensionIdForPartition("DIM_ID"); slidingWindow.setHierarchyIdForPartition("HIERARCHY_ID"); slidingWindow.setLevelIdForPartition("LEVEL_ID"); slidingWindow.setPartitionField("LEVEL_NAME"); slidingWindow.setPartitionLength(1); slidingWindow.setTotalPartitions(2); slidingWindow.setTotalLength(3); slidingWindow.setAutoCalculatePartition(true); slidingWindow.setUnit("UNIT"); slidingWindow.setSlidingWindowEnabled(true); // subPartition ArrayList<SubPartition> subPartitions = new ArrayList<SubPartition>(); SubPartition subPartition = new SubPartition(); subPartition.setDimensionId("MyDimID"); subPartition.setLevelId("LEVEL_ID"); subPartition.setField("LEVEL_NAME"); subPartition.setHierarchyId("HIERARCHY_ID"); subPartitions.add(subPartition); slidingWindow.getOrderedSubpartitionDims().add(subPartition.getDimensionId()); slidingWindow.setSubPartitions(subPartitions); ArrayList<SlidingWindow> slidingWindowList = new ArrayList<SlidingWindow>(); slidingWindowList.add(slidingWindow); cubeObject.setSlidingWindows(slidingWindowList); // Aggregation Strategy // Add CONFIGURATION_DRIVEN Aggregation Strategy. ConfigurationBasedAggregatesStrategy configAggregatesStrategy = new ConfigurationBasedAggregatesStrategy(cubeObject.getId()); EntityProperty.EntityAdvanceProperty property = new EntityProperty.EntityAdvanceProperty(); property.setName("nameNode"); property.setValue("valueNode"); property.setRecommendedValue("recValueNode"); property.setSystemDefaultValue("sysDefaultValueNode"); property.setInheritedValue("inheritedValueNode"); property.setMode("MANUAL"); property.setRemarks("remarks"); Map<String, EntityProperty.EntityAdvanceProperty> configurationBasedPropMap = new HashMap<>(); configurationBasedPropMap.put(property.getName(), property); configAggregatesStrategy.setPropertiesMap(configurationBasedPropMap); cubeObject.setAggregatesStrategy(configAggregatesStrategy); // Add QUERY_DRIVEN Aggregation Strategy. QueryBasedAggregatesStrategy queryAggregatesStrategy = new QueryBasedAggregatesStrategy(cubeObject.getId()); queryAggregatesStrategy.setAggregatesID("aggregateIdNode"); queryAggregatesStrategy.setOrientationInfo("orientationInfoNode"); queryAggregatesStrategy.setAggregateCount("aggregatesCountNode"); queryAggregatesStrategy.setLastAcceptedTime("lastAcceptedTimeNode"); queryAggregatesStrategy.setLastQueryCount("lastQueryCount"); queryAggregatesStrategy.setLastQueryConsiderationTime("lastQueryConsiderationTimeNode"); cubeObject.setAggregatesStrategy(queryAggregatesStrategy); // SET Raw data querying cubeObject.setAllowRawDataQuery(Enums.SQLRawDataQueryingModes.ENABALED); String params = "smodelXML="+URLEncoder.encode(cubeObject.getXML(), java.nio.charset.StandardCharsets.UTF_8.toString()); System.out.println(RESTClient.sendRequest("smodels", params, "POST")); } public static void createCubeWithoutDRD() throws UnsupportedEncodingException { CubeObject cubeObject = new CubeObject(); cubeObject.setId("CUBE_OBJECT_16618824042"); cubeObject.setName("test_cube_1_2222"); cubeObject.setFolderId("folder_16520830348231127029020129312845"); cubeObject.setFolderName(""); cubeObject.setDRDBasedCube(true); cubeObject.setDrdID("DRD_14641110707932127044085187784961"); cubeObject.setDrdName("Dell_Sample"); Dimension dim = new Dimension(); dim.setName("Product"); dim.setUniqueName("DIM_632407_1"); dim.setDimID("DIM_632407_1"); dim.setType("Regular"); Hierarchy hierarchy = new Hierarchy(); hierarchy.setUniqueName("H_514877_1"); hierarchy.setName("H_Product"); Level level = new Level(); level.setDataField("Product_Category"); level.setName("Product_Category"); level.setDataType("CHAR"); level.setAssociatedDimQueryName("SampleDell"); level.setAssociatedDimQueryId("14641108622483127092051153919832_0"); level.setUniqueName("DIMENSION_ATTRIBUTE_410611_1"); hierarchy.addLevel(level); dim.addHierarchy(hierarchy); dim.addDimAttribute(null, null); cubeObject.addMeasureGroups("MeasureGroup"); Measure measure = new Measure(); measure.setName("Sale_Amount"); measure.setDataField("Sale_Amount"); measure.setQueryName("SampleDell"); measure.setQueryID("14641108622483127092051153919832_0"); measure.setDataType("NUMBER"); measure.setSummaryFunction("0"); measure.setFormat("#,##0.00"); measure.setFormatType("2"); measure.setIsDefault(true); cubeObject.addMeasureInMeasureGroup(measure, "MeasureGroup"); cubeObject.addDimension(dim); String params = "smodelXML="+URLEncoder.encode(cubeObject.getXML(), java.nio.charset.StandardCharsets.UTF_8.toString()); System.out.println(RESTClient.sendRequest("smodels", params, "POST")); }

Updating a semantic model

public static void updateCube(String smodelId) throws UnsupportedEncodingException { CubeObject co = new CubeObject(getCubeObject(smodelId, null, null)); // get dimension list, iterate and get all dimensions. // dimensions cab be modified now. // dimensions cab also be removed from list. ArrayList<Dimension> dimensions = co.getDimensions(); Dimension dim1 = dimensions.get(0); // get hierarchy and it can be modified. Hierarchy hierarchy = dim1.getHierarchy(); // get level list, iterate and get all levels. // levels cab be modified now. // levels cab also be removed from list. ArrayList<Level> levels = hierarchy.getLevels(); // get attribute list, iterate and get all attributes. // attributes cab be modified now. // attributes cab also be removed from list. ArrayList<DimAttribute> attributes = dim1.getDimAttributes(); // get calculated member list, iterate and get all calculated members. // calculated members cab be modified now. // calculated members cab also be removed from list. ArrayList<CalculatedMember> calcMembers = dim1.getCalculatedMembers(); // below methods can be used to update measures. co.getMeasureById("measureid"); co.getMeasureByName("measureName"); co.removeMeasureByUniqName("measureId"); Map<String , Measure> measures = co.getMeasures(); for(String measureName: measures.keySet()) { System.out.println(measureName); Measure measure = measures.get(measureName); System.out.println(measure.getXML()); } // Working with sliding windows. ArrayList<SlidingWindow> slidingWindows = co.getSlidingWindows(); IAggregatesStrategy aggregatesStrategy = co.getAggregatesStrategy(); // check aggregation strategy class. if (aggregatesStrategy instanceof QueryBasedAggregatesStrategy) { QueryBasedAggregatesStrategy queryBasedAggregatesStrategy = (QueryBasedAggregatesStrategy) aggregatesStrategy; } else if (aggregatesStrategy instanceof ConfigurationBasedAggregatesStrategy) { ConfigurationBasedAggregatesStrategy configurationBasedAggregatesStrategy = (ConfigurationBasedAggregatesStrategy) aggregatesStrategy; } // finally update the semantic model object. String params = "smodelXML="+URLEncoder.encode(co.getXML(), java.nio.charset.StandardCharsets.UTF_8.toString()); RESTClient.sendRequest("smodels/"+co.getId(), params, "PUT"); }

Adding a connection 

public static void addConnection(String connectionName) throws UnsupportedEncodingException { DBConnection connection = new DBConnection(); connection.setConnectionName(connectionName); connection.setProperty("kyvos.connection.role", "SYSADMIN"); connection.setProperty("kyvos.connection.server", ""); connection.setProperty("kyvos.connection.isEncryptedConnection", "true"); connection.setProperty("kyvos.connection.provider", "SNOWFLAKE"); connection.setProperty("kyvos.connection.properties.version", ""); connection.setProperty("kyvos.connection.url", ""); connection.setProperty("kyvos.connection.lastUpdateTimestamp", ""); connection.setProperty("kyvos.connection.userImpersonation", "false"); connection.setProperty("kyvos.connection.warehouse", ""); connection.setProperty("kyvos.connection.user", ""); connection.setProperty("kyvos.connection.isRead", "true"); connection.setProperty("kyvos.connection.password", "", "true", null); connection.setProperty("kyvos.connection.database", ""); connection.setProperty("kyvos.connection.account", ""); connection.setProperty("kyvos.connection.defaultsqlengine", "true"); connection.setProperty("kyvos.connection.name", connectionName); connection.setProperty("kyvos.connection.authenticationtype", "SNOWFLAKE"); connection.setProperty("kyvos.databricks.cluster.id", ""); System.out.println(connection.getXML()); String params = "connectionXML="+URLEncoder.encode(connection.getXML(), java.nio.charset.StandardCharsets.UTF_8.toString()); /**Rest API Method to create connection*/ RESTClient.sendRequest("connection", params, "POST"); }

Updating a connection 

public static void updateConnection(String connectionName) throws UnsupportedEncodingException { /**Rest API Method to get connection details*/ String connectionXML = RESTClient.sendRequest("connection/"+connectionName+"?addResponseTag=false", null, "GET"); /**Updating Connection XML*/ DBConnection connection = new DBConnection(connectionXML); connection.setProperty("kyvos.connection.user", ""); String params = "connectionXML="+URLEncoder.encode(connection.getXML(), java.nio.charset.StandardCharsets.UTF_8.toString()); /**Rest API Method to update connection*/ System.out.println(RESTClient.sendRequest("connection", params, "PUT")); } }



Copyright Kyvos, Inc. 2026. All rights reserved.