/**
 * 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.camel.component.optaplanner;

public interface OptaPlannerConstants {
    String DEFAULT_SOLVER_ID = "DEFAULT_SOLVER";
    String SOLVER_ID = "CamelOptaPlannerSolverId";
    String IS_ASYNC = "CamelOptaPlannerIsAsync";
    String BEST_SOLUTION = "CamelOptaPlannerBestSolution";
    String TIME_SPENT = "CamelOptaPlannerTimeSpent";
    String IS_SOLVING = "CamelOptaPlannerIsSolving";
    String IS_TERMINATE_EARLY = "CamelOptaPlannerIsTerminateEarly";
    String IS_EVERY_PROBLEM_FACT_CHANGE_PROCESSED = "CamelOptaPlannerIsEveryProblemFactChangeProcessed";
    long IS_EVERY_PROBLEM_FACT_CHANGE_DELAY = 100;
}