| /******************************************************************************* |
| * Copyright (c) 2001, 2004 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.wst.dtd.core.internal.contentmodel; |
| |
| import java.io.InputStream; |
| import java.net.URL; |
| |
| import org.eclipse.wst.sse.core.internal.encoding.EncodingHelper; |
| import org.eclipse.wst.xml.core.internal.contentmodel.CMDocument; |
| |
| public class CMDocumentEncodingHelper { |
| protected static void setEncodingInfo(CMDocument cmDocument, String uri) { |
| if (cmDocument != null) { |
| uri = addImpliedFileProtocol(uri); |
| InputStream inputStream = null; |
| try { |
| URL url = new URL(uri); |
| inputStream = url.openStream(); |
| String[] encodingInfo = (String[]) cmDocument.getProperty("encodingInfo"); //$NON-NLS-1$ |
| if (encodingInfo != null) { |
| // if (Display.getCurrent() != null) |
| // { |
| updateFromEncodingHelper(inputStream, encodingInfo); |
| // } |
| // else |
| // { |
| // encodingInfo[0] = "UTF8"; |
| // encodingInfo[1] = "UTF-8"; |
| // } |
| } |
| } |
| catch (Exception e) { |
| } |
| finally { |
| if (inputStream != null) { |
| try { |
| inputStream.close(); |
| } |
| catch (Exception e) { |
| } |
| } |
| } |
| } |
| } |
| |
| private static void updateFromEncodingHelper(InputStream iStream, String[] encodingInfo) { |
| EncodingHelper encodingHelper = new EncodingHelper(iStream); |
| encodingInfo[0] = encodingHelper.getEncoding() != null ? encodingHelper.getEncoding() : EncodingHelper.getDefaultEncoding(); |
| encodingInfo[1] = encodingHelper.getEncodingTag() != null ? encodingHelper.getEncodingTag() : EncodingHelper.getDefaultEncodingTag(); |
| } |
| |
| |
| // This code is taken from org.eclipse.wst.xml.uriresolver.util.URIHelper |
| // I didn't want to add this plugin as a dependency |
| // in order to simplify our xerces dependenies |
| protected static final String FILE_PROTOCOL = "file:"; //$NON-NLS-1$ |
| protected static final String PROTOCOL_PATTERN = ":"; //$NON-NLS-1$ |
| |
| public static String addImpliedFileProtocol(String uri) { |
| if (!hasProtocol(uri)) { |
| uri = FILE_PROTOCOL + uri; |
| } |
| return uri; |
| } |
| |
| public static boolean hasProtocol(String uri) { |
| boolean result = false; |
| if (uri != null) { |
| int index = uri.indexOf(PROTOCOL_PATTERN); |
| if (index != -1 && index > 2) // assume protocol with be length |
| // 3 so that the'C' in 'C:/' is |
| // not interpreted as a protocol |
| { |
| result = true; |
| } |
| } |
| return result; |
| } |
| } |