/* * 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; import org.apache.wicket.Component; import org.apache.wicket.markup.parser.IXmlPullParser.HttpTagType; import org.apache.wicket.markup.parser.XmlTag; import org.apache.wicket.markup.parser.XmlTag.TagType; import org.apache.wicket.request.Response; /** * * @author Juergen Donnerstag */ public class HtmlSpecialTag extends MarkupElement { /** The underlying xml tag */ protected final XmlTag xmlTag; /** Boolean flags. See above */ private int flags = 0; private final HttpTagType httpTagType; /** * Construct. * * @param tag * The underlying xml tag * @param httpTagType */ public HtmlSpecialTag(final XmlTag tag, final HttpTagType httpTagType) { xmlTag = tag.makeImmutable(); this.httpTagType = httpTagType; } /** * THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT USE IT! * * @param flag * The flag to set * @param set * True to turn the flag on, false to turn it off */ public final void setFlag(final int flag, final boolean set) { if (set) { flags |= flag; } else { flags &= ~flag; } } /** * THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT USE IT! * * @param flag * The flag to test * @return True if the flag is set */ public final boolean getFlag(final int flag) { return (flags & flag) != 0; } /** * Gets the length of the tag in characters. * * @return The tag's length */ public final int getLength() { return xmlTag.getLength(); } /** * @see org.apache.wicket.markup.parser.XmlTag#getPos() * @return Tag location (index in input string) */ public final int getPos() { return xmlTag.getPos(); } /** * @return the tag type (OPEN, CLOSE or OPEN_CLOSE). */ public final TagType getType() { return xmlTag.getType(); } /** * @see org.apache.wicket.markup.parser.XmlTag#isClose() * @return True if this tag is a close tag */ public final boolean isClose() { return xmlTag.isClose(); } /** * @see org.apache.wicket.markup.parser.XmlTag#isOpen() * @return True if this tag is an open tag */ public final boolean isOpen() { return xmlTag.isOpen(); } /** * @see org.apache.wicket.markup.parser.XmlTag#isOpenClose() * @return True if this tag is an open and a close tag */ public final boolean isOpenClose() { return xmlTag.isOpenClose(); } /** * Copies all internal properties from this tag to <code>dest</code>. This is basically cloning * without instance creation. * * @param dest * tag whose properties will be set */ void copyPropertiesTo(final HtmlSpecialTag dest) { dest.flags = flags; } @Override public CharSequence toCharSequence() { return xmlTag.toCharSequence(); } /** * Converts this object to a string representation. * * @return String version of this object */ @Override public final String toString() { return "" + httpTagType + ": '" + xmlTag.toString() + "'"; } /** * Write the tag to the response * * @param response * The response to write to * @param stripWicketAttributes * if true, wicket:id are removed from output * @param namespace * Wicket's namespace to use */ public final void writeOutput(final Response response, final boolean stripWicketAttributes, final String namespace) { response.write(toString()); } /** * Converts this object to a string representation including useful information for debugging * * @return String version of this object */ @Override public final String toUserDebugString() { return xmlTag.toUserDebugString(); } /** * @return Returns the underlying xml tag. */ public final XmlTag getXmlTag() { return xmlTag; } @Override public boolean equalTo(final MarkupElement element) { if (element instanceof HtmlSpecialTag) { final HtmlSpecialTag that = (HtmlSpecialTag)element; return getXmlTag().equalTo(that.getXmlTag()); } return false; } /** * For subclasses to override. Gets called just before a Component gets rendered. It is * guaranteed that the markupStream is set on the Component and determineVisibility is not yet * called. * * @param component * The component that is about to be rendered * @param markupStream * The current amrkup stream */ public void onBeforeRender(final Component component, final MarkupStream markupStream) { } /** * Gets httpTagType. * * @return httpTagType */ public final HttpTagType getHttpTagType() { return httpTagType; } }