blob: 5fa12346bf20248da56653d73c325575cce3adb1 [file] [log] [blame]
/*
* 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.fo.flow;
import java.awt.Color;
import org.xml.sax.Attributes;
import org.xml.sax.Locator;
import org.apache.fop.apps.FOPException;
import org.apache.fop.datatypes.Length;
import org.apache.fop.fo.FONode;
import org.apache.fop.fo.FObj;
import org.apache.fop.fo.PropertyList;
import org.apache.fop.fo.StaticPropertyList;
import org.apache.fop.fo.ValidationException;
import org.apache.fop.fo.properties.SpaceProperty;
/**
* Common change bar base class. Handles change bar properties and validates child nodes.
*/
public abstract class ChangeBar extends FObj {
/**
* Constructs a ChangeBar element with common parts for both begin and end change bars.
*
* @param parent The parent node
*/
public ChangeBar(FONode parent) {
super(parent);
}
/**
* The change bar class (required).
*/
protected String changeBarClass;
/**
* The change bar color.
*/
protected Color color;
/**
* The change bar offset.
*/
protected Length offset;
/**
* The change bar placement.
*/
protected int placement = -1;
/**
* The change bar style.
*/
protected int style = -1;
/**
* The change bar width.
*/
protected Length width;
/**
* The actual line height.
*/
protected SpaceProperty lineHeight;
/** {@inheritDoc} */
public void bind(PropertyList pList) throws FOPException {
super.bind(pList);
changeBarClass = pList.get(PR_CHANGE_BAR_CLASS).getString();
color = pList.get(PR_CHANGE_BAR_COLOR).getColor(getUserAgent());
offset = pList.get(PR_CHANGE_BAR_OFFSET).getLength();
placement = pList.get(PR_CHANGE_BAR_PLACEMENT).getEnum();
style = pList.get(PR_CHANGE_BAR_STYLE).getEnum();
width = pList.get(PR_CHANGE_BAR_WIDTH).getLength();
lineHeight = pList.get(PR_LINE_HEIGHT).getSpace();
}
/** {@inheritDoc} */
protected void validateChildNode(
Locator loc,
String namespaceURI,
String localName) throws ValidationException {
// no children allowed
invalidChildError(loc, namespaceURI, localName);
}
/** {@inheritDoc} */
public void processNode(String elementName, Locator locator,
Attributes attlist, PropertyList pList) throws FOPException {
super.processNode(elementName, locator, attlist, pList);
if (inMarker()) {
PropertyList newPList = new StaticPropertyList(this, null);
newPList.addAttributesToList(attlist);
bind(newPList);
}
if (changeBarClass == null || changeBarClass.isEmpty()) {
missingPropertyError("change-bar-class");
}
if (findAncestor(FO_FLOW) == -1
&& findAncestor(FO_STATIC_CONTENT) == -1) {
getFOValidationEventProducer().changeBarWrongAncestor(this, getName(), locator);
}
}
/**
* Adds the current change bar to the active change bar list.
*/
protected void push() {
getRoot().getLastPageSequence().pushChangeBar(this);
}
/**
* Removes the starting counterpart of the current change bar from the active change bar list.
*/
protected void pop() {
getRoot().getLastPageSequence().popChangeBar(this);
}
/**
* Returns the starting counterpart of the current (ending) change bar.
*
* @return The starting counterpart of the current (ending) change bar
*/
protected ChangeBar getChangeBarBegin() {
return getRoot().getLastPageSequence().getChangeBarBegin(this);
}
/**
* Returns the change bar class.
*
* @return The change bar class
*/
public String getChangeBarClass() {
return changeBarClass;
}
/**
* Returns the change bar color.
*
* @return The change bar color
*/
public Color getColor() {
return color;
}
/**
* Returns the change bar offset.
*
* @return The change bar offset
*/
public Length getOffset() {
return offset;
}
/**
* Returns the change bar placement.
*
* @return The change bar placement
*/
public int getPlacement() {
return placement;
}
/**
* Returns the change bar style.
*
* @return The change bar style
*/
public int getStyle() {
return style;
}
/**
* Returns the change bar width.
*
* @return The change bar width
*/
public Length getWidth() {
return width;
}
/**
* Returns the line height.
*
* @return The line height
*/
public SpaceProperty getLineHeight() {
return lineHeight;
}
}