/*
 * Copyright (c) 2011, 2012, 2015 Eike Stepper (Berlin, Germany) 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:
 *    Martin Fluegge - initial API and implementation
 */
package org.eclipse.emf.cdo.dawn.ui.messages;

import org.eclipse.osgi.util.NLS;

/**
 * @author Martin Fluegge
 * @since 2.0
 */
public class Messages extends NLS
{
  private static final String BUNDLE_NAME = "org.eclipse.emf.cdo.dawn.ui.messages.messages"; //$NON-NLS-1$

  public static String CDOResourceNodeChooserComposite_1;

  public static String DawnCreateNewResourceWizardPage_0;

  public static String DawnCreateNewResourceWizardPage_10;

  public static String DawnCreateNewResourceWizardPage_11;

  public static String DawnCreateNewResourceWizardPage_12;

  public static String DawnCreateNewResourceWizardPage_2;

  public static String DawnCreateNewResourceWizardPage_3;

  public static String DawnCreateNewResourceWizardPage_6;

  public static String DawnCreateNewResourceWizardPage_8;

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

  private Messages()
  {
  }
}
