X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=router%2Fimpl%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fxmlrouter%2Fimpl%2FTransformationPath.java;fp=router%2Fimpl%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fxmlrouter%2Fimpl%2FTransformationPath.java;h=230c7fcae4a35d2f59df2784bb62c4ee772bceef;hb=8e41cb29f75362a792292d21b481bd06a9506296;hp=0000000000000000000000000000000000000000;hpb=9dbc2844950b55ae552fe74840954ea71b754c7a;p=xmlrouter diff --git a/router/impl/src/main/java/org/wamblee/xmlrouter/impl/TransformationPath.java b/router/impl/src/main/java/org/wamblee/xmlrouter/impl/TransformationPath.java new file mode 100644 index 0000000..230c7fc --- /dev/null +++ b/router/impl/src/main/java/org/wamblee/xmlrouter/impl/TransformationPath.java @@ -0,0 +1,136 @@ +/* + * Copyright 2005-2011 the original author or authors. + * + * 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.wamblee.xmlrouter.impl; + +import java.util.ArrayList; +import java.util.List; + +import org.wamblee.xmlrouter.config.Transformation; + +/** + * Transformation path from a source document to a destination. + * + * @author Erik Brakkee + * + */ +public class TransformationPath { + + private List transformations; + + /** + * Constructs empty path. + */ + public TransformationPath() { + transformations = new ArrayList(); + } + + /** + * Constructs path with single transformation. + * + * @param aTransformation + * Single transformation. + */ + public TransformationPath(Transformation aTransformation) { + this(); + transformations.add(aTransformation); + } + + /** + * Constructs path with list of transformations. + * + * @param aTransformations + * List of transformations. + */ + public TransformationPath(List aTransformations) { + this(); + transformations.addAll(aTransformations); + } + + /** + * Appends a transormation path to the current path. + * + * @param aSequence + * Transformation sequence to append. + * @return Appended transformations equence. + * @throws Runtime + * exception if the appended transformation would not be valid. + */ + public TransformationPath appendPath(TransformationPath aSequence) { + if (transformations.isEmpty()) { + return new TransformationPath(aSequence.transformations); + } + if (aSequence.transformations.isEmpty()) { + // nothing to append + return new TransformationPath(transformations); + } + // both are non-empty + if (!getToType().equals(aSequence.getFromType())) { + throw new RuntimeException( + "error concatening sequence, destination of first differs from source of second"); + } + List t = new ArrayList(transformations); + t.addAll(aSequence.transformations); + return new TransformationPath(t); + } + + /** + * @return Number of transformations. + */ + public int size() { + return transformations.size(); + } + + /** + * @return From type of the path or null if the sequence is empty. + */ + public String getFromType() { + if (transformations.isEmpty()) { + return null; + } + return transformations.get(0).getFromType(); + } + + /** + * @return To type of the path or null if the sequence is empty. + */ + public String getToType() { + if (transformations.isEmpty()) { + return null; + } + return transformations.get(transformations.size() - 1).getToType(); + } + + /** + * @return The transformations. + */ + public List getTransformations() { + return transformations; + } + + @Override + public String toString() { + StringBuffer buf = new StringBuffer(); + buf.append("TransformationPath("); + for (int i = 0; i < transformations.size(); i++) { + if (i > 0) { + buf.append(", "); + } + buf.append(transformations.get(i).toString()); + } + buf.append(")"); + return buf.toString(); + } +}