/*******************************************************************************
 * Copyright (c) 2009 Shane Clarke.
 * 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:
 *    Shane Clarke - initial API and implementation
 *******************************************************************************/
package org.eclipse.jst.ws.internal.jaxws.ui;

import org.eclipse.osgi.util.NLS;

public class JAXWSUIMessages extends NLS {
    private static final String BUNDLE_NAME = "org.eclipse.jst.ws.internal.jaxws.ui.JAXWSUIMessages"; //$NON-NLS-1$

    public static String ANNOTATION_ARRAY_CELL_EDITOR_ADD_LABEL;
    public static String ANNOTATION_ARRAY_CELL_EDITOR_BROWSE_LABEL0;
    public static String ANNOTATION_ARRAY_CELL_EDITOR_BROWSE_LABEL1;
    public static String ANNOTATION_ARRAY_CELL_EDITOR_BROWSE_LABEL2;
    public static String ANNOTATION_ARRAY_CELL_EDITOR_BROWSE_LABEL3;
    public static String ANNOTATION_ARRAY_CELL_EDITOR_BROWSE_LABEL4;
    public static String ANNOTATION_ARRAY_CELL_EDITOR_BROWSE_LABEL5;
    public static String ANNOTATION_ARRAY_CELL_EDITOR_DOWN_LABEL;
    public static String ANNOTATION_ARRAY_CELL_EDITOR_EDIT_ARRAY_VALUES_TITLE;
    public static String ANNOTATION_ARRAY_CELL_EDITOR_REMOVE_LABEL;
    public static String ANNOTATION_ARRAY_CELL_EDITOR_SELECT_CLASS_TITLE;
    public static String ANNOTATION_ARRAY_CELL_EDITOR_UP_LABEL;
    public static String ANNOTATION_ARRAY_CELL_EDITOR_NESTED_ARRAYS_NOT_SUPPORTED;

    public static String ANNOTATION_EDITING_SUPPORT_NOT_VALID_MESSAGE_PREFIX;

    public static String ANNOTATIONS_VIEW_ANNOTATIONS_COLUMN_NAME;
    public static String ANNOTATIONS_VIEW_ANNOTATIONS_NOT_AVAILABLE_ON_SELECTION;
    public static String ANNOTATIONS_VIEW_ANNOTATIONS_VALUES_COLUMN_NAME;

    public static String ANNOTATIONS_VIEW_FILTER_ACTION_NAME;
    public static String ANNOTATIONS_VIEW_FILTER_ACTION_SELECT_CATEGORIES_MESSAGE;

    public static String ANNOTATIONS_VIEW_NO_SUITABLE_LIBRARY_FOUND;
    public static String ANNOTATIONS_VIEW_OTHER_ANNOTATION_LIBRARIES_USE;

    public static String CONFIGURE_JAVA_1_6_LIBRARY;

    public static String ADD_ANNOTATION;
    public static String ADD_MISSING_METHOD;
    public static String ADD_UNIMPLEMENTED_METHODS;
    public static String CHANGE_METHOD_VISIBILITY;
    public static String CHANGE_METHOD_RETURN_TYPE;
    public static String CREATE_CONSTRUCTOR;
    public static String REMOVE_ANNOTATION;
    public static String REMOVE_METHOD;
    public static String REMOVE_FINAL_MODIFIER;
    public static String REMOVE_ILLEGAL_MODIFIER;
    public static String REMOVE_STATIC_MODIFIER;
    public static String REMOVE_MEMBERVALUEPAIR;
    public static String REMOVE_ALL_OTHER_MEMBERVALUEPAIRS;

    public static String JAXWS_HANDLER_WIZARD_TITLE;
    public static String JAXWS_HANDLER_WIZARD_PAGE_TITLE;
    public static String JAXWS_HANDLER_WIZARD_PAGE_DESCRIPTION;

    public static String JAXWS_ADD_HANDLER_WIZARD_PAGE_TITLE;
    public static String JAXWS_ADD_HANDLER_WIZARD_PAGE_DESCRIPTION;

    public static String JAXWS_ORDER_HANDLER_WIZARD_PAGE_TITLE;
    public static String JAXWS_ORDER_HANDLER_WIZARD_PAGE_DESCRIPTION;

    public static String JAXWS_CONFIGURE_HANDLER_WIZARD_TITLE;

    public static String JAXWS_HANDLER_ADD;
    public static String JAXWS_HANDLER_REMOVE;

    public static String JAXWS_HANDLER_MOVE_UP;
    public static String JAXWS_HANDLER_MOVE_DOWN;

    public static String JAXWS_HANDLER_NAME_COLUMN;
    public static String JAXWS_HANDLER_CLASS_COLUMN;
    public static String JAXWS_HANDLER_TYPE_COLUMN;

    public static String JAXWS_LOGICAL;
    public static String JAXWS_PROTOCOL;

    public static String JAXWS_HANDLER_TYPE;
    public static String JAXWS_LOGICAL_HANDLER;
    public static String JAXWS_SOAP_HANDLER;
    public static String JAXWS_HANDLER_CONFIGURATION;
    public static String JAXWS_HANDLER_CONFIGURATION_ADD;
    public static String JAXWS_HANDLER_CONFIGURATION_CREATE;
    public static String JAXWS_HANDLER_CONFIGURATION_EDIT;
    public static String JAXWS_HANDLER_CONFIGURATION_CHOOSE;
    public static String JAXWS_HANDLER_CONFIGURATION_ASSOCIATE;
    public static String JAXWS_HANDLER_CONFIGURATION_WEB_SERVICE;
    public static String JAXWS_HANDLER_CONFIGURATION_FILE_PATH1;
    public static String JAXWS_HANDLER_CONFIGURATION_FILE_PATH2;
    public static String JAXWS_HANDLER_CONFIGURATION_FILE_PATH3;
    public static String JAXWS_HANDLER_CONFIGURATION_BROWSE1;
    public static String JAXWS_HANDLER_CONFIGURATION_BROWSE2;
    public static String JAXWS_HANDLER_CONFIGURATION_BROWSE3;

    public static String JAXWS_HANDLER_CONFIGURATION_CREATE_DIALOG_TITLE;
    public static String JAXWS_HANDLER_CONFIGURATION_CREATE_DIALOG_DESCRIPTION;
    public static String JAXWS_HANDLER_CONFIGURATION_CREATE_DIALOG_FILE_NAME;
    public static String JAXWS_HANDLER_CONFIGURATION_CREATE_DIALOG_ENTER_NAME;
    public static String JAXWS_HANDLER_CONFIGURATION_CREATE_DIALOG_CHOOSE_FOLDER;
    public static String JAXWS_HANDLER_CONFIGURATION_CREATE_DIALOG_INVALID_NAME;
    public static String JAXWS_HANDLER_CONFIGURATION_CREATE_DIALOG_FILE_EXISTS;
    public static String JAXWS_HANDLER_CONFIGURATION_CREATE_DIALOG_FILE_PROJECT;
    public static String JAXWS_HANDLER_CONFIGURATION_CREATE_DIALOG_EMPTY_FILE_NAME;

    public static String JAXWS_HANDLER_CONFIGURATION_EDIT_DIALOG_TITLE;
    public static String JAXWS_HANDLER_CONFIGURATION_EDIT_DIALOG_DESCRIPTION;
    public static String JAXWS_HANDLER_CONFIGURATION_EDIT_DIALOG_INVALID;
    public static String JAXWS_HANDLER_CONFIGURATION_EDIT_FILE_NOT_FOUND;
    public static String JAXWS_HANDLER_CONFIGURATION_EDIT_FILE_NOT_FOUND_IN_PROJECT;

    public static String JAXWS_HANDLER_CONFIGURATION_WS_DIALOG_TITLE;
    public static String JAXWS_HANDLER_CONFIGURATION_WS_DIALOG_DESCRIPTION;
    public static String JAXWS_HANDLER_CONFIGURATION_WS_DIALOG_INVALID;
    public static String JAXWS_HANDLER_CONFIGURATION_WS_NOT_FOUND;

    public static String JAXWS_HANDLER_CONFIGURATION_HANDLER_DIALOG_TITLE;
    public static String JAXWS_HANDLER_CONFIGURATION_HANDLER_DIALOG_DESCRIPTION;
    public static String JAXWS_HANDLER_CONFIGURATION_HANDLER_DIALOG_INVALID;

    public static String JAXWS_HANDLER_CONFIGURATION_NEW_HANDLER_PATH_EMTPY;
    public static String JAXWS_HANDLER_CONFIGURATION_EXISTING_HANDLER_PATH_EMTPY;
    public static String JAXWS_HANDLER_CONFIGURATION_WS_PATH_EMTPY;

    public static String JAXWS_HANDLER_EXTEND_IMPLEMENT_HANDLER;
    public static String JAXWS_HANDLER_LIBRARY_CLASSPATH;

    static {
        // initialize resource bundle
        NLS.initializeMessages(BUNDLE_NAME, JAXWSUIMessages.class);
    }

    private JAXWSUIMessages() {
    }
}
