/**
 * 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.metamodel;

import org.apache.metamodel.util.Action;

/**
 * Represents any updating operation or update script that can be executed on a
 * {@link UpdateableDataContext}. Users of MetaModel should implement their own
 * {@link UpdateScript} and submit them to the
 * {@link UpdateableDataContext#executeUpdate(UpdateScript)} method for
 * execution.
 */
public interface UpdateScript extends Action<UpdateCallback> {

	/**
	 * Invoked by MetaModel when the update script should be run. User should
	 * implement this method and invoke update operations on the
	 * {@link UpdateCallback}.
	 */
	@Override
	public void run(UpdateCallback callback);
}
