001 /* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the "License"); 007 * you may not use this file except in compliance with the License. 008 * You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, software 013 * distributed under the License is distributed on an "AS IS" BASIS, 014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018 /* 019 * $Id: ElemMessage.java 468643 2006-10-28 06:56:03Z minchau $ 020 */ 021 package org.apache.xalan.templates; 022 023 import javax.xml.transform.TransformerException; 024 025 import org.apache.xalan.res.XSLMessages; 026 import org.apache.xalan.res.XSLTErrorResources; 027 import org.apache.xalan.transformer.TransformerImpl; 028 029 /** 030 * Implement xsl:message. 031 * <pre> 032 * <!ELEMENT xsl:message %template;> 033 * <!ATTLIST xsl:message 034 * %space-att; 035 * terminate (yes|no) "no" 036 * > 037 * </pre> 038 * @see <a href="http://www.w3.org/TR/xslt#message">message in XSLT Specification</a> 039 * @xsl.usage advanced 040 */ 041 public class ElemMessage extends ElemTemplateElement 042 { 043 static final long serialVersionUID = 1530472462155060023L; 044 045 /** 046 * If the terminate attribute has the value yes, then the 047 * XSLT transformer should terminate processing after sending 048 * the message. The default value is no. 049 * @serial 050 */ 051 private boolean m_terminate = Constants.ATTRVAL_NO; // default value 052 053 /** 054 * Set the "terminate" attribute. 055 * If the terminate attribute has the value yes, then the 056 * XSLT transformer should terminate processing after sending 057 * the message. The default value is no. 058 * 059 * @param v Value to set for "terminate" attribute. 060 */ 061 public void setTerminate(boolean v) 062 { 063 m_terminate = v; 064 } 065 066 /** 067 * Get the "terminate" attribute. 068 * If the terminate attribute has the value yes, then the 069 * XSLT transformer should terminate processing after sending 070 * the message. The default value is no. 071 * 072 * @return value of "terminate" attribute. 073 */ 074 public boolean getTerminate() 075 { 076 return m_terminate; 077 } 078 079 /** 080 * Get an int constant identifying the type of element. 081 * @see org.apache.xalan.templates.Constants 082 * 083 * @return The token ID for this element 084 */ 085 public int getXSLToken() 086 { 087 return Constants.ELEMNAME_MESSAGE; 088 } 089 090 /** 091 * Return the node name. 092 * 093 * @return name of the element 094 */ 095 public String getNodeName() 096 { 097 return Constants.ELEMNAME_MESSAGE_STRING; 098 } 099 100 /** 101 * Send a message to diagnostics. 102 * The xsl:message instruction sends a message in a way that 103 * is dependent on the XSLT transformer. The content of the xsl:message 104 * instruction is a template. The xsl:message is instantiated by 105 * instantiating the content to create an XML fragment. This XML 106 * fragment is the content of the message. 107 * 108 * @param transformer non-null reference to the the current transform-time state. 109 * 110 * @throws TransformerException 111 */ 112 public void execute( 113 TransformerImpl transformer) 114 throws TransformerException 115 { 116 117 if (transformer.getDebug()) 118 transformer.getTraceManager().fireTraceEvent(this); 119 120 String data = transformer.transformToString(this); 121 122 transformer.getMsgMgr().message(this, data, m_terminate); 123 124 if(m_terminate) 125 transformer.getErrorListener().fatalError(new TransformerException(XSLMessages.createMessage(XSLTErrorResources.ER_STYLESHEET_DIRECTED_TERMINATION, null))); //"Stylesheet directed termination")); 126 127 if (transformer.getDebug()) 128 transformer.getTraceManager().fireTraceEndEvent(this); 129 } 130 }