org.apache.fop.area.LinkResolver Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of org.apache.fop Show documentation
Show all versions of org.apache.fop Show documentation
The core maven build properties
The newest version!
/*
* 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: LinkResolver.java 1617052 2014-08-10 06:55:01Z gadams $ */
package org.apache.fop.area;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
/**
* Link resolving for resolving internal links.
*/
public class LinkResolver implements Resolvable, Serializable {
private static final long serialVersionUID = -7102134165192960718L;
private boolean resolved;
private String idRef;
private Area area;
private transient List dependents;
public LinkResolver() {
this(null, null);
}
/**
* Create a new link resolver.
*
* @param id the id to resolve
* @param a the area that will have the link attribute
*/
public LinkResolver(String id, Area a) {
idRef = id;
area = a;
}
private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException {
ois.defaultReadObject();
}
/**
* @return true if this link is resolved
*/
public boolean isResolved() {
return resolved;
}
/**
* Get the references for this link.
*
* @return the String array of references.
*/
public String[] getIDRefs() {
return new String[] {idRef};
}
/**
* Resolve by adding an internal link to the first PageViewport in the list.
*
* {@inheritDoc}
*/
public void resolveIDRef(String id, List pages) {
resolveIDRef(id, pages.get(0));
}
/**
* Resolve by adding an InternalLink trait to the area
*
* @param id the target id (should be equal to the object's idRef)
* @param pv the PageViewport containing the first area with the given id
*/
public void resolveIDRef(String id, PageViewport pv) {
if (idRef.equals(id) && pv != null) {
resolved = true;
if (area != null) {
Trait.InternalLink iLink = new Trait.InternalLink(pv.getKey(), idRef);
area.addTrait(Trait.INTERNAL_LINK, iLink);
area = null; // break circular reference from basic link area to this resolver
}
resolveDependents(id, pv);
}
}
/**
* Add dependent resolvable. Used to resolve second-order resolvables that
* depend on resolution of this resolver.
* @param dependent resolvable
*/
public void addDependent(Resolvable dependent) {
if (dependents == null) {
dependents = new ArrayList();
}
dependents.add(dependent);
}
private void resolveDependents(String id, PageViewport pv) {
if (dependents != null) {
List pages = new ArrayList();
pages.add(pv);
for (Resolvable r : dependents) {
r.resolveIDRef(id, pages);
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy