/**
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
package org.apache.airavata.workflow.model.utils;

public interface MessageConstants {

    /**
     * Error message for XML format errors.
     */
    public static final String XML_ERROR = "XML format error.";

    /**
     * Error message when the format of a component is wrong.
     */
    public static final String COMPONENT_FORMAT_ERROR = "The component is in wrong format.";

    /**
     * Error message for unexpected errors. When you see this, fix it!!
     */
    public static final String UNEXPECTED_ERROR = "Unexpected error.";

    /**
     * MORE_THAN_ONE_CONNECTIONS
     */
    public static final String MORE_THAN_ONE_CONNECTIONS = "Cannot connect more than one output ports to an input port.";
}