package org.activityinfo.ui.client.component.importDialog.validation;
import com.google.common.base.Function;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.Style;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Widget;
import org.activityinfo.core.shared.importing.model.ImportModel;
import org.activityinfo.core.shared.importing.validation.ValidatedRowTable;
import org.activityinfo.promise.Promise;
import org.activityinfo.promise.PromiseMonitor;
import org.activityinfo.ui.client.component.importDialog.ImportPage;
import org.activityinfo.ui.client.component.importDialog.Importer;
/**
* Presents the result of the matching to the user and provides
* and opportunity to resolve conversion problems or ambiguities
* in reference instances.
*/
public class ValidationPage extends Composite implements PromiseMonitor, ImportPage {
private static ValidationPageUiBinder uiBinder = GWT
.create(ValidationPageUiBinder.class);
interface ValidationPageUiBinder extends UiBinder<Widget, ValidationPage> {
}
private ImportModel model;
private Importer importer;
@UiField(provided = true)
ValidationGrid dataGrid;
@UiField
Element loadingElement;
@UiField
Element loadingErrorElement;
public ValidationPage(ImportModel model, Importer importer) {
this.model = model;
this.importer = importer;
ValidationPageStyles.INSTANCE.ensureInjected();
dataGrid = new ValidationGrid();
initWidget(uiBinder.createAndBindUi(this));
}
@Override
public void start() {
importer.validateRows(model)
.withMonitor(this)
.then(new Function<ValidatedRowTable, Void>() {
@Override
public Void apply(ValidatedRowTable input) {
dataGrid.refresh(input);
return null;
}
});
}
@Override
public void fireStateChanged() {
}
public int getInvalidRowsCount() {
return dataGrid.getInvalidRowsCount();
}
@Override
public void onPromiseStateChanged(Promise.State state) {
this.loadingElement.getStyle().setDisplay( state == Promise.State.PENDING ?
Style.Display.BLOCK : Style.Display.NONE );
this.loadingErrorElement.getStyle().setDisplay( state == Promise.State.REJECTED ?
Style.Display.BLOCK : Style.Display.NONE );
}
@Override
public boolean isValid() {
return true;
}
@Override
public boolean hasNextStep() {
return false;
}
@Override
public boolean hasPreviousStep() {
return false;
}
@Override
public void nextStep() {
}
@Override
public void previousStep() {
}
}