1 /* 2 * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. 3 */ 4 /* 5 * Licensed to the Apache Software Foundation (ASF) under one or more 6 * contributor license agreements. See the NOTICE file distributed with 7 * this work for additional information regarding copyright ownership. 8 * The ASF licenses this file to You under the Apache License, Version 2.0 9 * (the "License"); you may not use this file except in compliance with 10 * the License. You may obtain a copy of the License at 11 * 12 * http://www.apache.org/licenses/LICENSE-2.0 13 * 14 * Unless required by applicable law or agreed to in writing, software 15 * distributed under the License is distributed on an "AS IS" BASIS, 16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17 * See the License for the specific language governing permissions and 18 * limitations under the License. 19 */ 20 21 package com.sun.org.apache.xerces.internal.dom; 22 23 import com.sun.org.apache.xerces.internal.impl.xs.XSImplementationImpl; 24 import java.util.ArrayList; 25 import java.util.List; 26 import org.w3c.dom.DOMImplementation; 27 import org.w3c.dom.DOMImplementationList; 28 29 /** 30 * Allows to retrieve <code>XSImplementation</code>, DOM Level 3 Core and LS implementations 31 * and PSVI implementation. 32 * <p>See also the 33 * <a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/core.html#DOMImplementationSource'> 34 * Document Object Model (DOM) Level 3 Core Specification</a>. 35 * 36 * @xerces.internal 37 * 38 * @author Elena Litani, IBM 39 * @LastModified: Oct 2017 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 }