/*
 * 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: CollapsingBorderModelEyeCatching.java 679326 2008-07-24 09:35:34Z vhennebert $ */

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!
/** * 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}
/** {@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}
/** {@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; } }