00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 package org.w3c.domts;
00031
00032 import javax.xml.parsers.*;
00033 import org.w3c.dom.*;
00034 import org.w3c.domts.*;
00035 import java.lang.reflect.*;
00036 import java.util.*;
00037 import org.xml.sax.*;
00047 public abstract class DOMTestDocumentBuilderFactory {
00051 private final DocumentBuilderSetting[] settings;
00052
00053
00058 public DOMTestDocumentBuilderFactory(DocumentBuilderSetting[] settings)
00059 throws DOMTestIncompatibleException {
00060 if(settings == null) {
00061 this.settings = new DocumentBuilderSetting[0];
00062 }
00063 else {
00064 this.settings = (DocumentBuilderSetting[]) settings.clone();
00065 }
00066 }
00067
00074 public abstract DOMTestDocumentBuilderFactory newInstance(DocumentBuilderSetting[] settings)
00075 throws DOMTestIncompatibleException;
00076
00077 public abstract DOMImplementation getDOMImplementation();
00078
00079 public abstract boolean hasFeature(String feature,String version);
00080
00081 public abstract Document load(java.net.URL url) throws DOMTestLoadException;
00082
00089 protected DocumentBuilderSetting[] mergeSettings(DocumentBuilderSetting[] newSettings)
00090 {
00091 if(newSettings == null) {
00092 return (DocumentBuilderSetting[]) settings.clone();
00093 }
00094 List mergedSettings = new ArrayList(settings.length + newSettings.length);
00095
00096
00097
00098 for(int i = 0; i < newSettings.length; i++) {
00099 mergedSettings.add(newSettings[i]);
00100 }
00101
00102
00103
00104 for(int i = 0; i < settings.length; i++) {
00105 DocumentBuilderSetting setting = settings[i];
00106 boolean hasConflict = false;
00107 for(int j = 0; j < newSettings.length; j++) {
00108 DocumentBuilderSetting newSetting = newSettings[j];
00109 if(newSetting.hasConflict(setting) || setting.hasConflict(newSetting)) {
00110 hasConflict = true;
00111 break;
00112 }
00113 }
00114 if(!hasConflict) {
00115 mergedSettings.add(setting);
00116 }
00117 }
00118
00119 DocumentBuilderSetting[] mergedArray =
00120 new DocumentBuilderSetting[mergedSettings.size()];
00121 for(int i = 0; i < mergedSettings.size(); i++) {
00122 mergedArray[i] = (DocumentBuilderSetting) mergedSettings.get(i);
00123 }
00124 return mergedArray;
00125 }
00126
00127
00128 public String addExtension(String testFileName) {
00129 return testFileName + ".xml";
00130 }
00131
00132 public abstract boolean isCoalescing();
00133
00134 public abstract boolean isExpandEntityReferences();
00135
00136 public abstract boolean isIgnoringElementContentWhitespace();
00137
00138 public abstract boolean isNamespaceAware();
00139
00140 public abstract boolean isValidating();
00141
00147 public final DocumentBuilderSetting[] getActualSettings() {
00148
00149 DocumentBuilderSetting[] allSettings = new DocumentBuilderSetting[] {
00150 DocumentBuilderSetting.coalescing,
00151 DocumentBuilderSetting.expandEntityReferences,
00152 DocumentBuilderSetting.hasNullString,
00153 DocumentBuilderSetting.ignoringElementContentWhitespace,
00154 DocumentBuilderSetting.namespaceAware,
00155 DocumentBuilderSetting.signed,
00156 DocumentBuilderSetting.validating,
00157 DocumentBuilderSetting.notCoalescing,
00158 DocumentBuilderSetting.notExpandEntityReferences,
00159 DocumentBuilderSetting.notHasNullString,
00160 DocumentBuilderSetting.notIgnoringElementContentWhitespace,
00161 DocumentBuilderSetting.notNamespaceAware,
00162 DocumentBuilderSetting.notSigned,
00163 DocumentBuilderSetting.notValidating
00164 };
00165
00166 List list = new ArrayList(allSettings.length /2);
00167 for(int i = 0; i < allSettings.length; i++) {
00168 if(allSettings[i].hasSetting(this)) {
00169 list.add(allSettings[i]);
00170 }
00171 }
00172 DocumentBuilderSetting[] settings = new DocumentBuilderSetting[list.size()];
00173 for(int i = 0; i < settings.length; i++) {
00174 settings[i] = (DocumentBuilderSetting) list.get(i);
00175 }
00176 return settings;
00177 }
00178
00179 }
00180