Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 35 additions & 0 deletions instance/emf/complex/accounting/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
<?xml version="1.0"?>
<!--
/*********************************************************************
* Copyright (c) 2026 Contributors to the Eclipse Foundation.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
**********************************************************************/
-->
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.eclipse.daanse</groupId>
<artifactId>org.eclipse.daanse.rolap.mapping.instance.emf.complex</artifactId>
<version>${revision}</version>
</parent>
<artifactId>
org.eclipse.daanse.rolap.mapping.instance.emf.complex.accounting</artifactId>
<name>${project.artifactId}</name>
<description>${project.artifactId}</description>
<dependencies>
<dependency>
<groupId>org.eclipse.daanse</groupId>
<artifactId>
org.eclipse.daanse.rolap.mapping.instance.api
</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,218 @@
/*
* Copyright (c) 2026 Contributors to the Eclipse Foundation.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
*
*/
package org.eclipse.daanse.rolap.mapping.instance.emf.complex.accounting;

import org.eclipse.daanse.olap.check.model.check.CatalogCheck;
import org.eclipse.daanse.olap.check.model.check.CubeCheck;
import org.eclipse.daanse.olap.check.model.check.DatabaseColumnAttribute;
import org.eclipse.daanse.olap.check.model.check.DatabaseColumnAttributeCheck;
import org.eclipse.daanse.olap.check.model.check.DatabaseColumnCheck;
import org.eclipse.daanse.olap.check.model.check.DatabaseSchemaCheck;
import org.eclipse.daanse.olap.check.model.check.DatabaseTableCheck;
import org.eclipse.daanse.olap.check.model.check.DimensionCheck;
import org.eclipse.daanse.olap.check.model.check.HierarchyCheck;
import org.eclipse.daanse.olap.check.model.check.LevelCheck;
import org.eclipse.daanse.olap.check.model.check.MeasureCheck;
import org.eclipse.daanse.olap.check.model.check.OlapCheckFactory;
import org.eclipse.daanse.olap.check.model.check.OlapCheckSuite;
import org.eclipse.daanse.olap.check.model.check.OlapConnectionCheck;
import org.eclipse.daanse.olap.check.runtime.api.OlapCheckSuiteSupplier;

import org.osgi.service.component.annotations.Component;

/**
* Check suite for the Accounting complex mapping. Asserts that the catalog,
* the three cubes (AccountingIst read-only, AccountingWb writeback, and
* Accounting VirtualCube), all measures, dimensions/hierarchies/levels, and
* the full database schema (tables + column types) materialise as expected.
*/
@Component(service = OlapCheckSuiteSupplier.class)
public class CheckSuiteSupplier implements OlapCheckSuiteSupplier {

private static final OlapCheckFactory factory = OlapCheckFactory.eINSTANCE;

private static final String CATALOG_NAME = "Accounting";
private static final String CUBE_IST_NAME = "AccountingIst";
private static final String CUBE_WB_NAME = "AccountingWb";
private static final String CUBE_V_NAME = "Accounting";

@Override
public OlapCheckSuite get() {
// The full dimension shape — surfaced on every cube.
DimensionCheck yearDim = createDimensionCheck("Year", createHierarchyCheck("Year", createLevelCheck("Year")));
DimensionCheck accountDim = createDimensionCheck("Account",

Check failure on line 53 in instance/emf/complex/accounting/src/main/java/org/eclipse/daanse/rolap/mapping/instance/emf/complex/accounting/CheckSuiteSupplier.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Define a constant instead of duplicating this literal "Account" 6 times.

See more on https://sonarcloud.io/project/issues?id=eclipse-daanse_org.eclipse.daanse.rolap.mapping&issues=AZ5qEhUfX49mFh-MSWuV&open=AZ5qEhUfX49mFh-MSWuV&pullRequest=429
createHierarchyCheck("Account",
createLevelCheck("Category"),
createLevelCheck("Group"),
createLevelCheck("Account")));
DimensionCheck orgUnitDim = createDimensionCheck("OrgUnit", createHierarchyCheck("OrgUnit",
createLevelCheck("L1"), createLevelCheck("L2"), createLevelCheck("L3")));

// AccountingIst — read-only, holds only AmountIst.
CubeCheck cubeIstCheck = factory.createCubeCheck();
cubeIstCheck.setName("CubeCheck-" + CUBE_IST_NAME);

Check failure on line 63 in instance/emf/complex/accounting/src/main/java/org/eclipse/daanse/rolap/mapping/instance/emf/complex/accounting/CheckSuiteSupplier.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Define a constant instead of duplicating this literal "CubeCheck-" 3 times.

See more on https://sonarcloud.io/project/issues?id=eclipse-daanse_org.eclipse.daanse.rolap.mapping&issues=AZ5qEhUfX49mFh-MSWuY&open=AZ5qEhUfX49mFh-MSWuY&pullRequest=429
cubeIstCheck.setDescription("Read-only cube AccountingIst — AmountIst measure only, no writeback");
cubeIstCheck.setCubeName(CUBE_IST_NAME);
cubeIstCheck.getMeasureChecks().add(createMeasureCheck("AmountIst"));
addAllDimensions(cubeIstCheck);

// AccountingWb — writeback-enabled, holds AmountPlan + Comments.
CubeCheck cubeWbCheck = factory.createCubeCheck();
cubeWbCheck.setName("CubeCheck-" + CUBE_WB_NAME);
cubeWbCheck.setDescription("Writeback cube AccountingWb — AmountPlan + Comments, bound to BOOKINGWB");
cubeWbCheck.setCubeName(CUBE_WB_NAME);
cubeWbCheck.getMeasureChecks().add(createMeasureCheck("AmountPlan"));
cubeWbCheck.getMeasureChecks().add(createMeasureCheck("Comments"));
addAllDimensions(cubeWbCheck);

// Accounting — VirtualCube exposing all three measures.
CubeCheck cubeVCheck = factory.createCubeCheck();
cubeVCheck.setName("CubeCheck-" + CUBE_V_NAME);
cubeVCheck.setDescription("VirtualCube Accounting — combines AccountingIst + AccountingWb, exposes all three measures");
cubeVCheck.setCubeName(CUBE_V_NAME);
cubeVCheck.getMeasureChecks().add(createMeasureCheck("AmountIst"));
cubeVCheck.getMeasureChecks().add(createMeasureCheck("AmountPlan"));
cubeVCheck.getMeasureChecks().add(createMeasureCheck("Comments"));
cubeVCheck.getDimensionChecks().add(yearDim);
cubeVCheck.getDimensionChecks().add(accountDim);
cubeVCheck.getDimensionChecks().add(orgUnitDim);

DatabaseTableCheck bookingTable = createTableCheck("BOOKING", createColumnCheck("BOOKING_ID", "INTEGER"),
createColumnCheck("YEAR_KEY", "INTEGER"),

Check failure on line 91 in instance/emf/complex/accounting/src/main/java/org/eclipse/daanse/rolap/mapping/instance/emf/complex/accounting/CheckSuiteSupplier.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Define a constant instead of duplicating this literal "YEAR_KEY" 3 times.

See more on https://sonarcloud.io/project/issues?id=eclipse-daanse_org.eclipse.daanse.rolap.mapping&issues=AZ5qEhUfX49mFh-MSWuW&open=AZ5qEhUfX49mFh-MSWuW&pullRequest=429
createColumnCheck("ACCOUNT_KEY", "VARCHAR"), createColumnCheck("ORG_UNIT_KEY", "VARCHAR"),
createColumnCheck("AMOUNT_IST", "INTEGER"),
createColumnCheck("AMOUNT_PLAN", "INTEGER"), createColumnCheck("COMMENT", "VARCHAR"));

DatabaseTableCheck bookingWbTable = createTableCheck("BOOKINGWB", createColumnCheck("ID", "VARCHAR"),
createColumnCheck("USER", "VARCHAR"), createColumnCheck("YEAR_KEY", "INTEGER"),
createColumnCheck("ACCOUNT_KEY", "VARCHAR"),
createColumnCheck("ORG_UNIT_KEY", "VARCHAR"),
createColumnCheck("AMOUNT_PLAN", "INTEGER"), createColumnCheck("COMMENT", "VARCHAR"));

DatabaseTableCheck accountTable = createTableCheck("ACCOUNT",
createColumnCheck("L1_KEY", "VARCHAR"),
createColumnCheck("L1_NAME", "VARCHAR"),
createColumnCheck("L2_KEY", "VARCHAR"),
createColumnCheck("L2_NAME", "VARCHAR"),
createColumnCheck("L3_KEY", "VARCHAR"),
createColumnCheck("L3_NAME", "VARCHAR"));

DatabaseTableCheck yearTable = createTableCheck("YEAR", createColumnCheck("YEAR_KEY", "INTEGER"),
createColumnCheck("YEAR_NAME", "VARCHAR"));

DatabaseTableCheck orgUnitTable = createTableCheck("ORGUNIT", createColumnCheck("L1_KEY", "VARCHAR"),
createColumnCheck("L1_NAME", "VARCHAR"), createColumnCheck("L2_KEY", "VARCHAR"),
createColumnCheck("L2_NAME", "VARCHAR"), createColumnCheck("L3_KEY", "VARCHAR"),
createColumnCheck("L3_NAME", "VARCHAR"));

DatabaseSchemaCheck databaseSchemaCheck = factory.createDatabaseSchemaCheck();
databaseSchemaCheck.setName("Database Schema Check for " + CATALOG_NAME);
databaseSchemaCheck.setDescription("Database Schema Check for Accounting mapping");
databaseSchemaCheck.getTableChecks().add(bookingTable);
databaseSchemaCheck.getTableChecks().add(bookingWbTable);
databaseSchemaCheck.getTableChecks().add(accountTable);
databaseSchemaCheck.getTableChecks().add(yearTable);
databaseSchemaCheck.getTableChecks().add(orgUnitTable);

CatalogCheck catalogCheck = factory.createCatalogCheck();
catalogCheck.setName(CATALOG_NAME);
catalogCheck.setDescription("Catalog '" + CATALOG_NAME + "' with three cubes (Ist / Wb / Virtual) and full dimensions");
catalogCheck.setCatalogName(CATALOG_NAME);
catalogCheck.getCubeChecks().add(cubeIstCheck);
catalogCheck.getCubeChecks().add(cubeWbCheck);
catalogCheck.getCubeChecks().add(cubeVCheck);
catalogCheck.getDatabaseSchemaChecks().add(databaseSchemaCheck);

OlapConnectionCheck connectionCheck = factory.createOlapConnectionCheck();
connectionCheck.setName("Connection Check " + CATALOG_NAME);
connectionCheck.setDescription("Connection check for the Accounting mapping example");
connectionCheck.getCatalogChecks().add(catalogCheck);

OlapCheckSuite suite = factory.createOlapCheckSuite();
suite.setName("Accounting Example Suite");
suite.setDescription("Check suite for the Accounting complex mapping example");
suite.getConnectionChecks().add(connectionCheck);

return suite;
}

/** Adds the full 3-dimension shape onto the given CubeCheck. */
private void addAllDimensions(CubeCheck cube) {
cube.getDimensionChecks().add(createDimensionCheck("Year",
createHierarchyCheck("Year", createLevelCheck("Year"))));
cube.getDimensionChecks().add(createDimensionCheck("Account",
createHierarchyCheck("Account",
createLevelCheck("Category"),
createLevelCheck("Group"),
createLevelCheck("Account"))));
cube.getDimensionChecks().add(createDimensionCheck("OrgUnit", createHierarchyCheck("OrgUnit",
createLevelCheck("L1"), createLevelCheck("L2"), createLevelCheck("L3"))));
}

private MeasureCheck createMeasureCheck(String measureName) {
MeasureCheck measureCheck = factory.createMeasureCheck();
measureCheck.setName("MeasureCheck-" + measureName);
measureCheck.setDescription("Check that measure '" + measureName + "' exists");
measureCheck.setMeasureName(measureName);
return measureCheck;
}

private DimensionCheck createDimensionCheck(String dimensionName, HierarchyCheck... hierarchyChecks) {
DimensionCheck dimensionCheck = factory.createDimensionCheck();
dimensionCheck.setName("DimensionCheck for " + dimensionName);
dimensionCheck.setDimensionName(dimensionName);
for (HierarchyCheck hc : hierarchyChecks) {
dimensionCheck.getHierarchyChecks().add(hc);
}
return dimensionCheck;
}

private HierarchyCheck createHierarchyCheck(String hierarchyName, LevelCheck... levelChecks) {
HierarchyCheck hierarchyCheck = factory.createHierarchyCheck();
hierarchyCheck.setName("HierarchyCheck-" + hierarchyName);
hierarchyCheck.setHierarchyName(hierarchyName);
for (LevelCheck lc : levelChecks) {
hierarchyCheck.getLevelChecks().add(lc);
}
return hierarchyCheck;
}

private LevelCheck createLevelCheck(String levelName) {
LevelCheck levelCheck = factory.createLevelCheck();
levelCheck.setName("LevelCheck-" + levelName);
levelCheck.setLevelName(levelName);
return levelCheck;
}

private DatabaseColumnCheck createColumnCheck(String columnName, String columnType) {
DatabaseColumnAttributeCheck columnTypeCheck = factory.createDatabaseColumnAttributeCheck();
columnTypeCheck.setAttributeType(DatabaseColumnAttribute.TYPE);
columnTypeCheck.setExpectedValue(columnType);

DatabaseColumnCheck columnCheck = factory.createDatabaseColumnCheck();
columnCheck.setName("Database Column Check " + columnName);
columnCheck.setColumnName(columnName);
columnCheck.getColumnAttributeChecks().add(columnTypeCheck);
return columnCheck;
}

private DatabaseTableCheck createTableCheck(String tableName, DatabaseColumnCheck... columnChecks) {
DatabaseTableCheck tableCheck = factory.createDatabaseTableCheck();
tableCheck.setName("Database Table Check " + tableName);
tableCheck.setTableName(tableName);
for (DatabaseColumnCheck cc : columnChecks) {
tableCheck.getColumnChecks().add(cc);
}
return tableCheck;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
/*
* Copyright (c) 2026 Contributors to the Eclipse Foundation.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
*
*/
@org.osgi.annotation.bundle.Export
@org.osgi.annotation.versioning.Version("0.0.1")
package org.eclipse.daanse.rolap.mapping.instance.emf.complex.accounting;
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
L1_KEY,L1_NAME,L2_KEY,L2_NAME,L3_KEY,L3_NAME
VARCHAR,VARCHAR,VARCHAR,VARCHAR,VARCHAR,VARCHAR
EXPENSES,Expenses,PERSONNEL,Personnel,SALARIES,Salaries
EXPENSES,Expenses,PERSONNEL,Personnel,SOCIAL_SEC,Social Security
EXPENSES,Expenses,RENT,Rent,OFFICE_RENT,Office Rent
EXPENSES,Expenses,RENT,Rent,WAREHOUSE_RENT,Warehouse Rent
EXPENSES,Expenses,TRAVEL,Travel,FLIGHTS,Flights
EXPENSES,Expenses,TRAVEL,Travel,HOTELS,Hotels
REVENUE,Revenue,SALES,Sales,PRODUCT_SALES,Product Sales
REVENUE,Revenue,SERVICES,Services,CONSULTING,Consulting
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
BOOKING_ID,YEAR_KEY,ACCOUNT_KEY,ORG_UNIT_KEY,AMOUNT_IST,AMOUNT_PLAN,COMMENT
INTEGER,INTEGER,VARCHAR,VARCHAR,INTEGER,INTEGER,VARCHAR
1,2025,SALARIES,DEPT_A1,52000,50000,Hired one engineer in Q1
2,2025,OFFICE_RENT,DEPT_A1,12000,12000,Annual lease
3,2025,FLIGHTS,DEPT_A1,3200,4000,Less travel than planned
4,2025,PRODUCT_SALES,DEPT_A1,98000,90000,Strong Q4
5,2025,SALARIES,DEPT_A2,48000,48000,
6,2025,OFFICE_RENT,DEPT_A2,9000,9000,
7,2025,HOTELS,DEPT_A2,2200,2500,
8,2025,SOCIAL_SEC,DEPT_A2,9600,9600,
9,2025,SALARIES,DEPT_B1,75000,72000,Includes bonus
10,2025,WAREHOUSE_RENT,DEPT_B1,28000,28000,
11,2025,CONSULTING,DEPT_B1,42000,40000,Brand campaign
12,2025,PRODUCT_SALES,DEPT_B1,60000,55000,
13,2026,SALARIES,DEPT_A1,55000,55000,
14,2026,OFFICE_RENT,DEPT_A1,12500,12500,Rent increase
15,2026,FLIGHTS,DEPT_A1,4200,4000,Conference travel
16,2026,PRODUCT_SALES,DEPT_A1,105000,100000,
17,2026,SALARIES,DEPT_A2,50000,49000,
18,2026,OFFICE_RENT,DEPT_A2,9200,9200,
19,2026,HOTELS,DEPT_A2,2800,2600,
20,2026,SOCIAL_SEC,DEPT_A2,10000,9800,
21,2026,SALARIES,DEPT_B1,78000,75000,
22,2026,WAREHOUSE_RENT,DEPT_B1,30000,30000,New warehouse
23,2026,CONSULTING,DEPT_B1,45000,45000,
24,2026,PRODUCT_SALES,DEPT_B1,68000,65000,
25,2027,SALARIES,DEPT_A1,0,58000,Plan only
26,2027,OFFICE_RENT,DEPT_A1,0,13000,Plan only
27,2027,FLIGHTS,DEPT_A1,0,4500,Plan only
28,2027,PRODUCT_SALES,DEPT_A1,0,115000,Plan only
29,2027,SALARIES,DEPT_A2,0,52000,Plan only
30,2027,OFFICE_RENT,DEPT_A2,0,9500,Plan only
31,2027,HOTELS,DEPT_A2,0,3000,Plan only
32,2027,SOCIAL_SEC,DEPT_A2,0,10400,Plan only
33,2027,SALARIES,DEPT_B1,0,80000,Plan only
34,2027,WAREHOUSE_RENT,DEPT_B1,0,31000,Plan only
35,2027,CONSULTING,DEPT_B1,0,48000,Plan only
36,2027,PRODUCT_SALES,DEPT_B1,0,72000,Plan only
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
ID,USER,YEAR_KEY,ACCOUNT_KEY,ORG_UNIT_KEY,AMOUNT_PLAN,COMMENT
VARCHAR,VARCHAR,INTEGER,VARCHAR,VARCHAR,INTEGER,VARCHAR
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
L1_KEY,L1_NAME,L2_KEY,L2_NAME,L3_KEY,L3_NAME
VARCHAR,VARCHAR,VARCHAR,VARCHAR,VARCHAR,VARCHAR
COMPANY,Company,DIV_A,Division A,DEPT_A1,Department A1
COMPANY,Company,DIV_A,Division A,DEPT_A2,Department A2
COMPANY,Company,DIV_B,Division B,DEPT_B1,Department B1
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
YEAR_KEY,YEAR_NAME
INTEGER,VARCHAR
2025,2025
2026,2026
2027,2027
35 changes: 35 additions & 0 deletions instance/emf/complex/accountingonecube/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
<?xml version="1.0"?>
<!--
/*********************************************************************
* Copyright (c) 2026 Contributors to the Eclipse Foundation.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
**********************************************************************/
-->
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.eclipse.daanse</groupId>
<artifactId>org.eclipse.daanse.rolap.mapping.instance.emf.complex</artifactId>
<version>${revision}</version>
</parent>
<artifactId>
org.eclipse.daanse.rolap.mapping.instance.emf.complex.accountingonecube</artifactId>
<name>${project.artifactId}</name>
<description>${project.artifactId}</description>
<dependencies>
<dependency>
<groupId>org.eclipse.daanse</groupId>
<artifactId>
org.eclipse.daanse.rolap.mapping.instance.api
</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
Loading
Loading