blob: 443ab84aec44596a8566ab179a59596ee159fbd4 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005 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.wsdl.validation.internal.xml;
public class XMLMessageInfoHelper
{
//see org.eclipse.wst.xml.ui.reconcile.DelegatingSourceValidator
protected static final String ALL_ATTRIBUTES = "ALL_ATTRIBUTES";
protected static final String ATTRIBUTE_NAME ="ATTRIBUTE_NAME";
protected static final String ATTRIBUTE_VALUE = "ATTRIBUTE_VALUE";
protected static final String START_TAG = "START_TAG";
protected static final String TEXT = "TEXT";
protected static final String FIRST_NON_WHITESPACE_TEXT = "FIRST_NON_WHITESPACE_TEXT";
protected static final String TEXT_ENTITY_REFERENCE = "TEXT_ENTITY_REFERENCE";
protected static final String VALUE_OF_ATTRIBUTE_WITH_GIVEN_VALUE = "VALUE_OF_ATTRIBUTE_WITH_GIVEN_VALUE";
public XMLMessageInfoHelper()
{
super();
}
/**
* returns an array containing information about what should be underlined with the red "squiggles"
* using the errorKey, and the messageArguments
* <br>Position 0 of the array returned contains the selection Strategy,or what DOM Element to underline.
* For example "ATTRIBUTE_NAME"
* <br>Position 1 contains the name or value to squiggle.
* <p>For example, if we wanted to squiggle the attribute name of an attribute name
* foo this method would return {"ATTRIBUTE_NAME", "foo"}
* </p>
* @param errorKey the error key given by the Xerces parser
* @param messageArguments the arguments used by Xerces to "fill in the blanks" of their messages
* @return an array containing the squiggle information
* @see org.eclipse.wst.xml.ui.reconcile.DelegatingReconcileValidator
*
*/
public String[] createMessageInfo(String errorKey, Object[] messageArguments)
{
String selectionStrategy = null;
String nameOrValue = null;
//XML Errors
if (errorKey.equals("cvc-complex-type.2.4.a") || errorKey.equals("cvc-complex-type.2.4.d") || errorKey.equals("cvc-complex-type.2.4.b") || errorKey.equals("MSG_CONTENT_INVALID")
| errorKey.equals("MSG_CONTENT_INCOMPLETE") || errorKey.equals("MSG_REQUIRED_ATTRIBUTE_NOT_SPECIFIED") || errorKey.equals("cvc-complex-type.4"))
{
selectionStrategy = START_TAG;
}
else if (errorKey.equals("cvc-type.3.1.3"))
{
selectionStrategy = TEXT;
}
else if (errorKey.equals("cvc-complex-type.2.3"))
{
selectionStrategy = FIRST_NON_WHITESPACE_TEXT;
}
else if (errorKey.equals("cvc-type.3.1.1"))
{
selectionStrategy = ALL_ATTRIBUTES;
}
else if (errorKey.equals("cvc-complex-type.3.2.2") || errorKey.equals("MSG_ATTRIBUTE_NOT_DECLARED"))
{
selectionStrategy = ATTRIBUTE_NAME;
//in this case we need nameOrValue to be the name of the attribute to underline
nameOrValue = (String)messageArguments[1];
}
else if (errorKey.equals("cvc-attribute.3") || errorKey.equals("MSG_ATTRIBUTE_VALUE_NOT_IN_LIST"))
{
selectionStrategy = ATTRIBUTE_VALUE;
//in this case we need nameOrValue to be the name of the Attribute
if (errorKey.equals("cvc-attribute.3"))
{ nameOrValue = (String)messageArguments[1];
}
else if (errorKey.equals("MSG_ATTRIBUTE_VALUE_NOT_IN_LIST"))
{ nameOrValue = (String)messageArguments[0];
}
}
else if (errorKey.equals("cvc-elt.4.2"))
{ selectionStrategy=VALUE_OF_ATTRIBUTE_WITH_GIVEN_VALUE;
//in this case we need nameOrValue to be the value of the attribute we want to unerline
nameOrValue = (String)messageArguments[1];
}
else if (errorKey.equals("EntityNotDeclared"))
{ selectionStrategy=TEXT_ENTITY_REFERENCE;
}
//WSDL Errors
else if (errorKey.equals("_MESSAGE_UNDEFINED_FOR_OUTPUT") ||
errorKey.equals("_MESSAGE_UNDEFINED_FOR_INPUT") ||
errorKey.equals("_MESSAGE_UNDEFINED_FOR_FAULT"))
{
selectionStrategy=ATTRIBUTE_VALUE;
nameOrValue= "message";
}
else if (errorKey.equals("_PORTTYPE_UNDEFINED_FOR_BINDING"))
{
selectionStrategy=ATTRIBUTE_VALUE;
nameOrValue="type";
}
else if (errorKey.equals("_OPERATION_UNDEFINED_FOR_PORTTYPE"))
{
selectionStrategy=ATTRIBUTE_VALUE;
nameOrValue="name";
}
else if (errorKey.equals("_PART_INVALID_ELEMENT"))
{
selectionStrategy=ATTRIBUTE_VALUE;
nameOrValue="element";
}
else if (errorKey.equals("_NO_BINDING_FOR_PORT"))
{
selectionStrategy=ATTRIBUTE_VALUE;
nameOrValue="binding";
}
String messageInfo[] = new String[2];
messageInfo[0] = selectionStrategy;
messageInfo[1] = nameOrValue;
return messageInfo;
}
}