package com.opendoorlogistics.studio.tables.custom;
import com.opendoorlogistics.api.ExecutionReport;
import com.opendoorlogistics.api.ODLApi;
import com.opendoorlogistics.api.tables.ODLDatastoreUndoable;
import com.opendoorlogistics.api.tables.ODLTable;
import com.opendoorlogistics.api.tables.ODLTableAlterable;
import com.opendoorlogistics.api.tables.beans.BeanMappedRow;
import com.opendoorlogistics.api.tables.beans.BeanTableMapping;
import com.opendoorlogistics.studio.LoadedState.HasLoadedDatastore;
class BeanMappingInfo<T extends BeanMappedRow> {
private final ODLApi api;
private final BeanTableMapping mapping;
private final HasLoadedDatastore hasDs;
BeanMappingInfo(ODLApi api,Class<T> cls,HasLoadedDatastore hasDs) {
this.api = api;
this.hasDs = hasDs;
this.mapping = api.tables().mapBeanToTable(cls);
// allow tolerant reading of beans
this.mapping.setReadFailsOnDisallowedNull(false);
}
ODLApi getApi() {
return api;
}
BeanTableMapping getMapping() {
return mapping;
}
// ODLTable createTableAdapter(ExecutionReport report){
// ODLDatastore<?extends ODLTable> adapted= adapt(report);
// if(!report.isFailed() && adapted!=null){
// return adapted.getTableAt(0);
// }
// return null;
// }
ODLTable createTableAdapter(ExecutionReport report){
ODLDatastoreUndoable<? extends ODLTableAlterable> ds = getDs();
if(ds==null){
return null;
}
String tableName=mapping.getTableDefinition().getName();
ODLTable ret=api.tables().adaptToTableUsingNames(ds, tableName,mapping.getTableDefinition(), report);
if(report.isFailed()){
return null;
}
return ret;
};
ODLTable getRawTable(){
ODLDatastoreUndoable<? extends ODLTableAlterable> ds = getDs();
if(ds==null){
return null;
}
return api.tables().findTable(ds, mapping.getTableDefinition().getName());
}
ODLDatastoreUndoable<? extends ODLTableAlterable> getDs(){
if(hasDs.getLoadedDatastore()!=null){
return hasDs.getLoadedDatastore().getDs();
}
return null;
}
}