| /******************************************************************************* |
| * Copyright (c) 2001, 2008 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.xsd.core.internal.validation.eclipse; |
| |
| |
| /** |
| * The XSDMessageInfoHelper creates a string with the |
| */ |
| public class XSDMessageInfoHelper |
| { |
| public XSDMessageInfoHelper() |
| { super(); |
| } |
| |
| public String[] createMessageInfo(String errorKey, String errorMessage) |
| { |
| //Now map the error key to what we would want to underline: |
| String nameOrValue = ""; |
| String selectionStrategy = ""; |
| if(errorKey != null) |
| { |
| if (errorKey.equals("s4s-elt-invalid-content.1") || errorKey.equals("s4s-elt-must-match.1") || |
| errorKey.equals("s4s-att-must-appear") || errorKey.equals("s4s-elt-invalid-content.2")) //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ |
| { |
| selectionStrategy = "START_TAG"; //$NON-NLS-1$ |
| } |
| else if (errorKey.equals("s4s-att-not-allowed")) //$NON-NLS-1$ |
| { |
| selectionStrategy = "ATTRIBUTE_NAME"; //$NON-NLS-1$ |
| nameOrValue = getFirstStringBetweenSingleQuotes(errorMessage); |
| } |
| else if (errorKey.equals("s4s-att-invalid-value")) //$NON-NLS-1$ |
| { |
| selectionStrategy = "ATTRIBUTE_VALUE"; //$NON-NLS-1$ |
| nameOrValue = getFirstStringBetweenSingleQuotes(errorMessage); |
| } |
| else if (errorKey.equals("s4s-elt-character")) //$NON-NLS-1$ |
| { |
| selectionStrategy = "TEXT"; //$NON-NLS-1$ |
| } |
| else if (errorKey.equals("src-resolve.4.2") || errorKey.equals("src-resolve")) //$NON-NLS-1$ //$NON-NLS-2$ |
| { |
| selectionStrategy = "VALUE_OF_ATTRIBUTE_WITH_GIVEN_VALUE"; //$NON-NLS-1$ |
| nameOrValue = getFirstStringBetweenSingleQuotes(errorMessage); |
| } |
| else if (errorKey.equals("EqRequiredInAttribute") || errorKey.equals("OpenQuoteExpected") || |
| errorKey.equals("LessthanInAttValue")) //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ |
| { |
| selectionStrategy = "ATTRIBUTE_NAME"; //$NON-NLS-1$ |
| nameOrValue = getFirstStringBetweenQuotes(errorMessage); |
| } |
| else if (errorKey.equals("ElementUnterminated")) //$NON-NLS-1$ |
| { |
| selectionStrategy = "ENTIRE_ELEMENT"; //$NON-NLS-1$ |
| } |
| else if (errorKey.equals("ETagUnterminated") || errorKey.equals("ETagRequired")) //$NON-NLS-1$ //$NON-NLS-2$ |
| { |
| selectionStrategy = "END_TAG"; //$NON-NLS-1$ |
| } |
| } |
| String messageInfo[] = new String[2]; |
| messageInfo[0] = selectionStrategy; |
| messageInfo[1] = nameOrValue; |
| return messageInfo; |
| } |
| |
| /** |
| * This method is used to get the value between the first pair of single quotes |
| * It is used to extract information from the error Message (for example |
| * an attribute name) |
| * |
| * @param s |
| * The string to extract the value from. |
| */ |
| protected String getFirstStringBetweenSingleQuotes(String s) |
| { |
| return getFirstStringBetweenDelimiters(s, '\''); |
| } |
| |
| /** |
| * This method is used to get the value between the first pair of quotes |
| * It is used to extract information from the error Message (for example |
| * an attribute name) |
| * |
| * @param s |
| * The string to extract the value from. |
| */ |
| protected String getFirstStringBetweenQuotes(String s) |
| { |
| return getFirstStringBetweenDelimiters(s, '\"'); |
| } |
| |
| /** |
| * This method is used to get the value between the first start and end occurrences of the given delimiter character. |
| * |
| * @param s |
| * The string to extract the value from. |
| * @param delimiter |
| * The start and end character |
| */ |
| protected String getFirstStringBetweenDelimiters(String s, char delimiter) |
| { |
| int first = s.indexOf(delimiter); |
| int second = s.indexOf(delimiter, first + 1); |
| String stringBetweenDelimiters = null; |
| if (first != -1 && second != -1) |
| { |
| stringBetweenDelimiters = s.substring(first + 1, second); |
| } |
| return stringBetweenDelimiters; |
| } |
| } |