/*******************************************************************************
 * 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.xsd.ui.internal.validation;


/**
 * @author Mark Hutchinson
 * 
 * The XSDMessageInfoHelper creates a string with the
 */
public class XSDMessageInfoHelper
{
  public XSDMessageInfoHelper()
  { super();
  }

  public String[] createMessageInfo(String errorMessage, String errorKey)
  { 
    //Now map the error key to what we would want to underline:
    String nameOrValue = "";
    String selectionStrategy = "";
    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"))
    { selectionStrategy = "START_TAG";
    }
    else if (errorKey.equals("s4s-att-not-allowed"))
    { selectionStrategy = "ATTRIBUTE_NAME";
      nameOrValue = getFirstStringBetweenSingleQuotes(errorMessage);
    }
    else if (errorKey.equals("s4s-att-invalid-value"))
    { selectionStrategy = "ATTRIBUTE_VALUE";
      nameOrValue = getFirstStringBetweenSingleQuotes(errorMessage);
    }
    else if (errorKey.equals("s4s-elt-character"))
    { selectionStrategy = "TEXT";
    }
    else if (errorKey.equals("src-resolve.4.2") || errorKey.equals("src-resolve"))
    { selectionStrategy = "VALUE_OF_ATTRIBUTE_WITH_GIVEN_VALUE";
      nameOrValue = getFirstStringBetweenSingleQuotes(errorMessage);
    }
    String messageInfo[] = new String[2];
    messageInfo[0] = selectionStrategy;
    messageInfo[1] = nameOrValue;
    return messageInfo;    
  }

  /*
   * Mark Hutchinson
   * 
   * 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)
   */
  private String getFirstStringBetweenSingleQuotes(String s)
  {
    int first = s.indexOf("'");
    int second = s.indexOf("'", first + 1);
    String betweenQuotes = null;
    if (first != -1 && second != -1)
    { betweenQuotes = s.substring(first + 1, second);
    }
    return betweenQuotes;
  }
}
