/* * Copyright 2015 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.uberfire.ext.wires.core.grids.client.model.impl; import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Stack; import org.uberfire.ext.wires.core.grids.client.model.GridCell; import org.uberfire.ext.wires.core.grids.client.model.GridCellValue; import org.uberfire.ext.wires.core.grids.client.model.GridRow; /** * Base implementation of a grid row to avoid boiler-plate for more specific implementations. */ public class BaseGridRow implements GridRow { protected double height = 20.0; protected Map<Integer, GridCell<?>> cells = new HashMap<Integer, GridCell<?>>(); private boolean hasMergedCells = false; private Stack<Double> heights = new Stack<Double>(); private int collapseLevel = 0; public BaseGridRow() { this(20); } public BaseGridRow(final double height) { this.height = height; this.heights.push(height); } @Override public Map<Integer, GridCell<?>> getCells() { return Collections.unmodifiableMap(cells); } @Override public double getHeight() { return this.height; } @Override public void setHeight(final double height) { this.height = height; } @Override public double peekHeight() { return heights.peek(); } @Override public boolean isMerged() { return hasMergedCells; } @Override public boolean isCollapsed() { return collapseLevel > 0; } @Override public void collapse() { collapseLevel++; heights.push(height); for (GridCell<?> cell : cells.values()) { cell.collapse(); } } @Override public void expand() { if (collapseLevel == 0) { return; } collapseLevel--; height = heights.pop(); for (GridCell<?> cell : cells.values()) { cell.expand(); } } @Override public void reset() { collapseLevel = 0; hasMergedCells = false; height = heights.firstElement(); heights.clear(); heights.push(height); for (GridCell<?> cell : cells.values()) { cell.reset(); } } //This is not part of the GridCell interface as we don't want to expose this for general use @SuppressWarnings("unchecked") void setCell(final int columnIndex, final GridCellValue value) { if (!cells.containsKey(columnIndex)) { cells.put(columnIndex, new BaseGridCell(value)); } else { ((BaseGridCell) cells.get(columnIndex)).setValue(value); } } //This is not part of the GridCell interface as we don't want to expose this for general use void deleteCell(final int columnIndex) { cells.remove(columnIndex); } //This is not part of the GridCell interface as we don't want to expose this for general use void setHasMergedCells(final boolean hasMergedCells) { this.hasMergedCells = hasMergedCells; } }