| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You 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. |
| */ |
| |
| /* $Id$ */ |
| |
| package org.apache.fop.layoutmgr.table; |
| |
| import org.apache.fop.fo.Constants; |
| import org.apache.fop.fo.flow.table.BorderSpecification; |
| import org.apache.fop.fo.properties.CommonBorderPaddingBackground; |
| import org.apache.fop.fo.properties.CommonBorderPaddingBackground.BorderInfo; |
| |
| /** |
| * Implements the normal "collapse" border model defined in 6.7.10 in XSL 1.0. |
| * |
| * TODO Column groups are not yet checked in this algorithm! |
| */ |
| public class CollapsingBorderModelEyeCatching extends CollapsingBorderModel { |
| |
| /** {@inheritDoc} */ |
| public BorderSpecification determineWinner(BorderSpecification border1, |
| BorderSpecification border2, boolean discard) { |
| BorderInfo bi1 = border1.getBorderInfo(); |
| BorderInfo bi2 = border2.getBorderInfo(); |
| if (discard) { |
| if (bi1.getWidth().isDiscard()) { |
| if (bi2.getWidth().isDiscard()) { |
| return new BorderSpecification( |
| CommonBorderPaddingBackground.getDefaultBorderInfo(), 0/*TODO*/); |
| } else { |
| return border2; |
| } |
| } else if (bi2.getWidth().isDiscard()) { |
| return border1; |
| } |
| } |
| // Otherwise, fall back to the default resolution algorithm |
| return determineWinner(border1, border2); |
| } |
| |
| /** {@inheritDoc} */ |
| public BorderSpecification determineWinner(BorderSpecification border1, |
| BorderSpecification border2) { |
| BorderInfo bi1 = border1.getBorderInfo(); |
| BorderInfo bi2 = border2.getBorderInfo(); |
| // Rule 1 |
| if (bi1.getStyle() == Constants.EN_HIDDEN) { |
| return border1; |
| } else if (bi2.getStyle() == Constants.EN_HIDDEN) { |
| return border2; |
| } |
| // Rule 2 |
| if (bi2.getStyle() == Constants.EN_NONE) { |
| return border1; |
| } else if (bi1.getStyle() == Constants.EN_NONE) { |
| return border2; |
| } |
| // Rule 3 |
| int width1 = bi1.getRetainedWidth(); |
| int width2 = bi2.getRetainedWidth(); |
| if (width1 > width2) { |
| return border1; |
| } else if (width1 == width2) { |
| int cmp = compareStyles(bi1.getStyle(), bi2.getStyle()); |
| if (cmp > 0) { |
| return border1; |
| } else if (cmp < 0) { |
| return border2; |
| } |
| } else { |
| return border2; |
| } |
| // Rule 4 |
| int cmp = compareFOs(border1.getHolder(), border2.getHolder()); |
| if (cmp > 0) { |
| return border1; |
| } else if (cmp < 0) { |
| return border2; |
| } |
| return null; |
| } |
| } |