/**
* 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.ambari.view.migration;
import org.apache.ambari.view.DataStore;
import org.apache.ambari.view.ViewInstanceDefinition;
import java.util.Map;
/**
* Interface for view data migration context class. Provides access
* to the information about origin(source) and current(target) instances.
* Also provides utility methods for copying persistence entities and
* instance data.
*/
public interface ViewDataMigrationContext {
/**
* Get the current(target) instance data version.
*
* @return the data version of current instance
*/
int getCurrentDataVersion();
/**
* Get the instance definition of current instance.
*
* @return the instance definition of current instance
*/
ViewInstanceDefinition getCurrentInstanceDefinition();
/**
* Get persistence entities of the current view instance.
*
* @return the mapping of entity class name to the class objects,
* loaded by the classloader of current view version.
*/
Map<String, Class> getCurrentEntityClasses();
/**
* Get a data store for current view persistence entities.
*
* @return a data store of current view instance
*/
DataStore getCurrentDataStore();
/**
* Save an instance data value for the given key and given user
* to current instance.
*
* @param user the user (owner of instance data)
* @param key the key
* @param value the value
*/
void putCurrentInstanceData(String user, String key, String value);
/**
* Get the current instance data in the mapping of user owning data to the key-value data.
*
* @return mapping of the data owner to the current instance data entries
*/
Map<String, Map<String, String>> getCurrentInstanceDataByUser();
/**
* Get the origin(source) instance data version.
*
* @return the data version of origin instance
*/
int getOriginDataVersion();
/**
* Get the instance definition of origin instance.
*
* @return the instance definition of origin instance
*/
ViewInstanceDefinition getOriginInstanceDefinition();
/**
* Get persistence entities of the origin view instance.
*
* @return the mapping of entity class name to the class objects,
* loaded by the classloader of origin view version.
*/
Map<String, Class> getOriginEntityClasses();
/**
* Get a data store for origin view persistence entities.
*
* @return a data store of origin view instance
*/
DataStore getOriginDataStore();
/**
* Save an instance data value for the given key and given user
* to origin instance.
*
* @param user the user (owner of instance data)
* @param key the key
* @param value the value
*/
void putOriginInstanceData(String user, String key, String value);
/**
* Get the origin instance data in the mapping of user owning data to the key-value data.
*
* @return mapping of the data owner to the origin instance data entries
*/
Map<String, Map<String, String>> getOriginInstanceDataByUser();
/**
* Utility method provides ability to copy all entity objects from origin to current
* DataStore. Copies all fields as is without any processing.
*
* @param originEntityClass class object of origin (migration source) instance
* @param currentEntityClass class object of current (migration target) instance
*/
void copyAllObjects(Class originEntityClass, Class currentEntityClass) throws ViewDataMigrationException;
/**
* Utility method provides ability to copy all entity objects from origin to current
* DataStore. Entity converter can be provided to do any required migration.
*
* @param originEntityClass class object of origin (migration source) instance
* @param currentEntityClass class object of current (migration target) instance
* @param entityConverter object responsible of converting every single instance.
*/
void copyAllObjects(Class originEntityClass, Class currentEntityClass, EntityConverter entityConverter)
throws ViewDataMigrationException;
/**
* Utility method that copies all instance data from origin to current
* instance without changing.
*/
void copyAllInstanceData();
}