1 /* 2 * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. 3 * @LastModified: Oct 2017 4 */ 5 /* 6 * Licensed to the Apache Software Foundation (ASF) under one or more 7 * contributor license agreements. See the NOTICE file distributed with 8 * this work for additional information regarding copyright ownership. 9 * The ASF licenses this file to You under the Apache License, Version 2.0 10 * (the "License"); you may not use this file except in compliance with 11 * the License. You may obtain a copy of the License at 12 * 13 * http://www.apache.org/licenses/LICENSE-2.0 14 * 15 * Unless required by applicable law or agreed to in writing, software 16 * distributed under the License is distributed on an "AS IS" BASIS, 17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18 * See the License for the specific language governing permissions and 19 * limitations under the License. 20 */ 21 22 package com.sun.org.apache.xerces.internal.dom; 23 24 import com.sun.org.apache.xerces.internal.impl.xs.XSImplementationImpl; 25 import java.util.ArrayList; 26 import java.util.List; 27 import org.w3c.dom.DOMImplementation; 28 import org.w3c.dom.DOMImplementationList; 29 30 /** 31 * Allows to retrieve <code>XSImplementation</code>, DOM Level 3 Core and LS implementations 32 * and PSVI implementation. 33 * <p>See also the 34 * <a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/core.html#DOMImplementationSource'> 35 * Document Object Model (DOM) Level 3 Core Specification</a>. 36 * 37 * @xerces.internal 38 * 39 * @author Elena Litani, IBM 40 */ 41 public class DOMXSImplementationSourceImpl 42 extends DOMImplementationSourceImpl { 43 44 /** 45 * A method to request a DOM implementation. 46 * @param features A string that specifies which features are required. 47 * This is a space separated list in which each feature is specified 48 * by its name optionally followed by a space and a version number. 49 * This is something like: "XML 1.0 Traversal Events 2.0" 50 * @return An implementation that has the desired features, or 51 * <code>null</code> if this source has none. 52 */ 53 public DOMImplementation getDOMImplementation(String features) { 54 DOMImplementation impl = super.getDOMImplementation(features); 55 if (impl != null){ 56 return impl; 57 } 58 // if not try the PSVIDOMImplementation 59 impl = PSVIDOMImplementationImpl.getDOMImplementation(); 60 if (testImpl(impl, features)) { 61 return impl; 62 } 63 // if not try the XSImplementation 64 impl = XSImplementationImpl.getDOMImplementation(); 65 if (testImpl(impl, features)) { 66 return impl; 67 } 68 69 return null; 70 } 71 72 /** 73 * A method to request a list of DOM implementations that support the 74 * specified features and versions, as specified in . 75 * @param features A string that specifies which features and versions 76 * are required. This is a space separated list in which each feature 77 * is specified by its name optionally followed by a space and a 78 * version number. This is something like: "XML 3.0 Traversal +Events 79 * 2.0" 80 * @return A list of DOM implementations that support the desired 81 * features. 82 */ 83 public DOMImplementationList getDOMImplementationList(String features) { 84 final List<DOMImplementation> implementations = new ArrayList<>(); 85 86 // first check whether the CoreDOMImplementation would do 87 DOMImplementationList list = super.getDOMImplementationList(features); 88 //Add core DOMImplementations 89 for (int i=0; i < list.getLength(); i++ ) { 90 implementations.add(list.item(i)); 91 } 92 93 DOMImplementation impl = PSVIDOMImplementationImpl.getDOMImplementation(); 94 if (testImpl(impl, features)) { 95 implementations.add(impl); 96 } 97 98 impl = XSImplementationImpl.getDOMImplementation(); 99 if (testImpl(impl, features)) { 100 implementations.add(impl); 101 } 102 return new DOMImplementationListImpl(implementations); 103 } 104 }