| /******************************************************************************* |
| * 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 |
| * Jens Lukowski/Innoopract - initial renaming/restructuring |
| * |
| *******************************************************************************/ |
| package org.eclipse.wst.xml.ui.internal.dialogs; |
| |
| import java.util.Hashtable; |
| import java.util.Iterator; |
| import java.util.List; |
| |
| import org.eclipse.wst.common.uriresolver.internal.provisional.URIResolver; |
| import org.eclipse.wst.common.uriresolver.internal.util.URIHelper; |
| import org.eclipse.wst.xml.core.internal.contentmodel.util.DOMNamespaceInfoManager; |
| import org.eclipse.wst.xml.core.internal.contentmodel.util.NamespaceInfo; |
| import org.eclipse.wst.xml.ui.internal.XMLUIMessages; |
| |
| public class NamespaceInfoErrorHelper { |
| |
| protected List errorList; |
| |
| public NamespaceInfoErrorHelper() { |
| } |
| |
| public String computeErrorMessage(List namespaceInfoList, URIResolver idResolver) { |
| String result = null; |
| Hashtable prefixTable = new Hashtable(); |
| Hashtable uriTable = new Hashtable(); |
| for (Iterator iterator = namespaceInfoList.iterator(); iterator.hasNext();) { |
| NamespaceInfo nsInfo = (NamespaceInfo) iterator.next(); |
| nsInfo.normalize(); |
| |
| String urikey = nsInfo.uri != null ? nsInfo.uri : ""; //$NON-NLS-1$ |
| NamespaceInfo nsInfo2 = null; |
| if ((nsInfo2 = (NamespaceInfo) uriTable.get(urikey)) != null) { |
| if ((nsInfo.uri != null) && nsInfo.uri.equals(nsInfo2.uri)) { |
| result = XMLUIMessages._UI_WARNING_MORE_THAN_ONE_NS_WITH_NAME + "'" + nsInfo.uri + "'"; //$NON-NLS-1$ //$NON-NLS-2$ |
| } |
| else { |
| result = XMLUIMessages._UI_WARNING_MORE_THAN_ONE_NS_WITHOUT_NAME; |
| } |
| break; |
| } |
| else { |
| uriTable.put(urikey, nsInfo); |
| } |
| |
| if (nsInfo.uri != null) { |
| String key = nsInfo.prefix != null ? nsInfo.prefix : ""; //$NON-NLS-1$ |
| if (prefixTable.get(key) != null) { |
| if (nsInfo.prefix != null) { |
| result = XMLUIMessages._UI_WARNING_MORE_THAN_ONE_NS_WITH_PREFIX + "'" + nsInfo.prefix + "'"; //$NON-NLS-1$ //$NON-NLS-2$ |
| break; |
| } |
| else { |
| result = XMLUIMessages._UI_WARNING_MORE_THAN_ONE_NS_WITHOUT_PREFIX; |
| break; |
| } |
| } |
| else { |
| prefixTable.put(key, nsInfo); |
| } |
| |
| if ((nsInfo.locationHint != null) && (idResolver != null)) { |
| String grammarURI = idResolver.resolve(null, nsInfo.locationHint, nsInfo.locationHint); |
| if (!URIHelper.isReadableURI(grammarURI, false)) { |
| result = XMLUIMessages._UI_WARNING_SCHEMA_CAN_NOT_BE_LOCATED + " '" + nsInfo.locationHint + "'"; //$NON-NLS-1$ //$NON-NLS-2$ |
| break; |
| } |
| } |
| if ((idResolver != null) && (nsInfo.locationHint == null) && !nsInfo.uri.equals(DOMNamespaceInfoManager.XSI_URI)) { |
| result = XMLUIMessages._UI_WARNING_LOCATION_HINT_NOT_SPECIFIED + " '" + nsInfo.uri + "'"; //$NON-NLS-1$ //$NON-NLS-2$ |
| break; |
| } |
| } |
| else { |
| if (nsInfo.prefix != null) { |
| result = XMLUIMessages._UI_WARNING_NAMESPACE_NAME_NOT_SPECIFIED + " '" + nsInfo.prefix + "'"; //$NON-NLS-1$ //$NON-NLS-2$ |
| break; |
| } |
| } |
| } |
| // additional tests |
| if (result == null) { |
| for (Iterator iterator = namespaceInfoList.iterator(); iterator.hasNext();) { |
| NamespaceInfo nsInfo = (NamespaceInfo) iterator.next(); |
| nsInfo.normalize(); |
| if ((nsInfo.uri != null) && nsInfo.isPrefixRequired && (nsInfo.prefix == null)) { |
| result = XMLUIMessages._UI_WARNING_PREFIX_NOT_SPECIFIED + " '" + nsInfo.uri + "'"; //$NON-NLS-1$ //$NON-NLS-2$ |
| break; |
| } |
| } |
| } |
| |
| return result; |
| } |
| } |