Package org.apache.wicket.markup.transformer

Source Code of org.apache.wicket.markup.transformer.XsltOutputTransformerContainer

/*
* 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.
*/
package org.apache.wicket.markup.transformer;

import org.apache.wicket.AttributeModifier;
import org.apache.wicket.Component;
import org.apache.wicket.markup.MarkupType;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;

/**
* A container which output markup will be processes by a XSLT processor prior to writing the output
* into the web response. The *.xsl resource must be located in the same path as the nearest parent
* with an associated markup and must have a filename equal to the component's id.
* <p>
* The containers tag will be the root element of the xml data applied for transformation to ensure
* the xml data are well formed (single root element). In addition the attribute
* <code>xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.3-strict.dtd</code> is added
* to the root element to allow the XSL processor to handle the wicket namespace.
* <p>
* Similar to this container, a <code>IBehavior</code> is available which does the same, but does
* not require an additional Container.
*
* @see org.apache.wicket.markup.transformer.XsltTransformerBehavior
*
* @author Juergen Donnerstag
*/
public class XsltOutputTransformerContainer extends AbstractOutputTransformerContainer
{
  private static final long serialVersionUID = 1L;

  /** An optional xsl file path */
  private final String xslFile;

  /**
   * Instead of using the default mechanism to determine the associated XSL file, it is given by
   * the user.
   *
   * @see org.apache.wicket.Component#Component(String, IModel)
   *
   * @param id
   *            the wicket:id
   * @param model
   *            the model (unused)
   * @param xslFilePath
   *            XSL input file path
   */
  public XsltOutputTransformerContainer(final String id, final IModel<?> model,
    final String xslFilePath)
  {
    super(id);

    xslFile = xslFilePath;

    // The containers tag will be transformed as well. Thus we make sure that
    // the xml provided to the xsl processor is well formed (has a single
    // root element)
    setTransformBodyOnly(false);

    // Make the XSLT processor happy and allow him to handle the wicket
    // tags and attributes which are in the wicket namespace
    add(AttributeModifier.replace("xmlns:wicket",
      Model.of("http://wicket.apache.org/dtds.data/wicket-xhtml1.3-strict.dtd")));
  }

  /**
   * Construct
   *
   * @param id
   *            the wicket:id
   * @param model
   *            the model (unused)
   * @see org.apache.wicket.Component#Component(String, IModel)
   */
  public XsltOutputTransformerContainer(final String id, final IModel<?> model)
  {
    this(id, model, null);
  }

  /**
   * Construct
   *
   * @param id
   *            the wicket:id
   * @see org.apache.wicket.Component#Component(String)
   */
  public XsltOutputTransformerContainer(final String id)
  {
    this(id, null, null);
  }

  @Override
  public MarkupType getMarkupType()
  {
    return new MarkupType("xsl", null);
  }

  @Override
  public CharSequence transform(final Component component, final CharSequence output)
    throws Exception
  {
    return new XsltTransformer(xslFile).transform(component, output);
  }
}
TOP

Related Classes of org.apache.wicket.markup.transformer.XsltOutputTransformerContainer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.