| /** |
| * |
| * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany) |
| * |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License 2.0 |
| * which accompanies this distribution, and is available at |
| * https://www.eclipse.org/legal/epl-2.0/ |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| * |
| * Contributors: |
| * Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation |
| * |
| */ |
| package org.eclipse.osbp.xtext.datamart.common.olap; |
| |
| import java.util.ArrayList; |
| import java.util.HashMap; |
| import java.util.List; |
| import java.util.ListIterator; |
| import java.util.Map; |
| |
| import mondrian.olap.Axis; |
| |
| import org.eclipse.osbp.bpm.api.BPMTaskSummary; |
| import org.olap4j.CellSetAxis; |
| |
| |
| public class DerivedAxis { |
| private DerivedCellSet container = null; |
| public static final int AXIS_COLUMNS = 0; // see Cellset javadoc |
| public static final int AXIS_ROWS = 1; // see Cellset javadoc |
| |
| private CellSetAxis olapAxis = null; |
| private Axis mondrianAxis = null; |
| private List<BPMTaskSummary> taskAxis = null; |
| private List<DerivedPosition> positionList = new ArrayList<>(); |
| private Map<Integer, DerivedPosition> positionsByOrdinal = new HashMap<>(); |
| private Map<DerivedPosition, Integer> ordinalsByPosition = new HashMap<>(); |
| public DerivedAxis(CellSetAxis olapAxis, DerivedCellSet container) { |
| super(); |
| this.container = container; |
| this.olapAxis = olapAxis; |
| for (org.olap4j.Position olapPosition : olapAxis.getPositions()) { |
| DerivedPosition pos = new DerivedPosition(olapPosition, container); |
| positionList.add(pos); |
| positionsByOrdinal.put(olapPosition.getOrdinal(), pos); |
| ordinalsByPosition.put(pos, olapPosition.getOrdinal()); |
| } |
| } |
| |
| public DerivedAxis(Axis mondrianAxis, DerivedCellSet container) { |
| super(); |
| this.container = container; |
| this.mondrianAxis = mondrianAxis; |
| int ordinal = 0; |
| for (mondrian.olap.Position mondrianPosition : mondrianAxis.getPositions()) { |
| DerivedPosition pos = new DerivedPosition(mondrianPosition, ordinal, container); |
| positionList.add(pos); |
| positionsByOrdinal.put(ordinal, pos); |
| ordinalsByPosition.put(pos, ordinal); |
| ordinal++; |
| } |
| } |
| |
| public DerivedAxis(List<BPMTaskSummary> taskAxis, int axisNo, DerivedCellSet container) { |
| super(); |
| this.container = container; |
| this.taskAxis = taskAxis; |
| int ordinal = 0; |
| if (axisNo == 0) { |
| DerivedPosition pos = new DerivedPosition("name", ordinal++, container); |
| positionList.add(pos); |
| positionsByOrdinal.put(ordinal, pos); |
| ordinalsByPosition.put(pos, ordinal); |
| pos = new DerivedPosition("priority", ordinal++, container); |
| positionList.add(pos); |
| positionsByOrdinal.put(ordinal, pos); |
| ordinalsByPosition.put(pos, ordinal); |
| pos = new DerivedPosition("status", ordinal++, container); |
| positionList.add(pos); |
| positionsByOrdinal.put(ordinal, pos); |
| ordinalsByPosition.put(pos, ordinal); |
| pos = new DerivedPosition("subject", ordinal++, container); |
| positionList.add(pos); |
| positionsByOrdinal.put(ordinal, pos); |
| ordinalsByPosition.put(pos, ordinal); |
| pos = new DerivedPosition("description", ordinal++, container); |
| positionList.add(pos); |
| positionsByOrdinal.put(ordinal, pos); |
| ordinalsByPosition.put(pos, ordinal); |
| pos = new DerivedPosition("expiration", ordinal++, container); |
| positionList.add(pos); |
| positionsByOrdinal.put(ordinal, pos); |
| ordinalsByPosition.put(pos, ordinal); |
| pos = new DerivedPosition("created", ordinal++, container); |
| positionList.add(pos); |
| positionsByOrdinal.put(ordinal, pos); |
| ordinalsByPosition.put(pos, ordinal); |
| pos = new DerivedPosition("created by", ordinal++, container); |
| positionList.add(pos); |
| positionsByOrdinal.put(ordinal, pos); |
| ordinalsByPosition.put(pos, ordinal); |
| pos = new DerivedPosition("activation", ordinal++, container); |
| positionList.add(pos); |
| positionsByOrdinal.put(ordinal, pos); |
| ordinalsByPosition.put(pos, ordinal); |
| pos = new DerivedPosition("owner", ordinal++, container); |
| positionList.add(pos); |
| positionsByOrdinal.put(ordinal, pos); |
| ordinalsByPosition.put(pos, ordinal); |
| pos = new DerivedPosition("taskid", ordinal++, container); |
| positionList.add(pos); |
| positionsByOrdinal.put(ordinal, pos); |
| ordinalsByPosition.put(pos, ordinal); |
| } |
| if (axisNo == 1) { |
| for (BPMTaskSummary task : taskAxis) { |
| DerivedPosition pos = new DerivedPosition("row", ordinal++, container); |
| positionList.add(pos); |
| positionsByOrdinal.put(ordinal, pos); |
| ordinalsByPosition.put(pos, ordinal); |
| } |
| } |
| } |
| |
| public List<DerivedPosition> getPositions() { |
| return positionList; |
| } |
| |
| public int getPositionCount() { |
| if (olapAxis!=null){ |
| return olapAxis.getPositionCount(); |
| } else if (mondrianAxis!=null) { |
| return mondrianAxis.getPositions().size(); |
| } else { |
| return positionList.size(); |
| } |
| } |
| |
| public ListIterator<DerivedPosition> iterator() { |
| return getPositions().listIterator(); |
| } |
| |
| public Map<Integer, DerivedPosition> getPositionsByOrdinal() { |
| return positionsByOrdinal; |
| } |
| |
| public void setPositionsByOrdinal(Map<Integer, DerivedPosition> positionsByOrdinal) { |
| this.positionsByOrdinal = positionsByOrdinal; |
| } |
| |
| public Map<DerivedPosition, Integer> getOrdinalsByPosition() { |
| return ordinalsByPosition; |
| } |
| |
| public void setOrdinalsByPosition(Map<DerivedPosition, Integer> ordinalsByPosition) { |
| this.ordinalsByPosition = ordinalsByPosition; |
| } |
| |
| public DerivedPosition getPositionByOrdinal(Integer ordinal) { |
| if (positionsByOrdinal.containsKey(ordinal)) { |
| return positionsByOrdinal.get(ordinal); |
| } |
| return null; |
| } |
| |
| public int getOrdinalByPosition(DerivedPosition pos) { |
| if (ordinalsByPosition.containsKey(pos)) { |
| return ordinalsByPosition.get(pos); |
| } |
| return -1; |
| } |
| } |