/*
 * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
 */
/*
 * 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 com.sun.org.apache.xalan.internal.xsltc.trax;

import com.sun.org.apache.xalan.internal.xsltc.DOM;
import com.sun.org.apache.xalan.internal.xsltc.StripFilter;
import com.sun.org.apache.xalan.internal.xsltc.compiler.util.ErrorMsg;
import com.sun.org.apache.xalan.internal.xsltc.dom.DOMWSFilter;
import com.sun.org.apache.xalan.internal.xsltc.dom.SAXImpl;
import com.sun.org.apache.xalan.internal.xsltc.dom.XSLTCDTMManager;
import com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
import org.xml.sax.SAXException;

Author:Morten Jorgensen
@LastModified: Nov 2017
/** * @author Morten Jorgensen * @LastModified: Nov 2017 */
public final class XSLTCSource implements Source { private String _systemId = null; private Source _source = null; private ThreadLocal<SAXImpl> _dom = new ThreadLocal<>();
Create a new XSLTC-specific source from a system ID
/** * Create a new XSLTC-specific source from a system ID */
public XSLTCSource(String systemId) { _systemId = systemId; }
Create a new XSLTC-specific source from a JAXP Source
/** * Create a new XSLTC-specific source from a JAXP Source */
public XSLTCSource(Source source) { _source = source; }
Implements javax.xml.transform.Source.setSystemId() Set the system identifier for this Source. This Source can get its input either directly from a file (in this case it will instanciate and use a JAXP parser) or it can receive it through ContentHandler/LexicalHandler interfaces.
Params:
  • systemId – The system Id for this Source
/** * Implements javax.xml.transform.Source.setSystemId() * Set the system identifier for this Source. * This Source can get its input either directly from a file (in this case * it will instanciate and use a JAXP parser) or it can receive it through * ContentHandler/LexicalHandler interfaces. * @param systemId The system Id for this Source */
public void setSystemId(String systemId) { _systemId = systemId; if (_source != null) { _source.setSystemId(systemId); } }
Implements javax.xml.transform.Source.getSystemId() Get the system identifier that was set with setSystemId.
Returns:The system identifier that was set with setSystemId, or null if setSystemId was not called.
/** * Implements javax.xml.transform.Source.getSystemId() * Get the system identifier that was set with setSystemId. * @return The system identifier that was set with setSystemId, * or null if setSystemId was not called. */
public String getSystemId() { if (_source != null) { return _source.getSystemId(); } else { return(_systemId); } }
Internal interface which returns a DOM for a given DTMManager and translet.
/** * Internal interface which returns a DOM for a given DTMManager and translet. */
protected DOM getDOM(XSLTCDTMManager dtmManager, AbstractTranslet translet) throws SAXException { SAXImpl idom = _dom.get(); if (idom != null) { if (dtmManager != null) { idom.migrateTo(dtmManager); } } else { Source source = _source; if (source == null) { if (_systemId != null && _systemId.length() > 0) { source = new StreamSource(_systemId); } else { ErrorMsg err = new ErrorMsg(ErrorMsg.XSLTC_SOURCE_ERR); throw new SAXException(err.toString()); } } DOMWSFilter wsfilter = null; if (translet != null && translet instanceof StripFilter) { wsfilter = new DOMWSFilter(translet); } boolean hasIdCall = (translet != null) ? translet.hasIdCall() : false; if (dtmManager == null) { dtmManager = XSLTCDTMManager.newInstance(); } idom = (SAXImpl)dtmManager.getDTM(source, true, wsfilter, false, false, hasIdCall); String systemId = getSystemId(); if (systemId != null) { idom.setDocumentURI(systemId); } _dom.set(idom); } return idom; } }