/*
* ARX: Powerful Data Anonymization
* Copyright 2012 - 2017 Fabian Prasser, Florian Kohlmayer and contributors
*
* Licensed 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.deidentifier.arx.gui.view.impl.wizard;
import org.deidentifier.arx.gui.view.impl.wizard.HierarchyWizard.HierarchyWizardView;
import org.eclipse.jface.wizard.IWizardPage;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.widgets.Button;
/**
* An abstract base class for pages that allow configuring a builder.
*
* @author Fabian Prasser
* @param <T>
*/
public abstract class HierarchyWizardPageBuilder<T> extends WizardPage implements HierarchyWizardView {
/** Var. */
private final HierarchyWizardPageFinal<T> finalPage;
/** Var. */
private final HierarchyWizardModelAbstract<T> model;
/** Var. */
private final HierarchyWizard<T> wizard;
/**
* Creates a new base class.
*
* @param wizard
* @param model
* @param finalPage
*/
public HierarchyWizardPageBuilder(final HierarchyWizard<T> wizard,
final HierarchyWizardModelAbstract<T> model,
final HierarchyWizardPageFinal<T> finalPage){
super(""); //$NON-NLS-1$
this.wizard = wizard;
this.model = model;
this.finalPage = finalPage;
this.model.setView(this);
this.model.update();
}
@Override
public boolean canFlipToNextPage() {
return isPageComplete();
}
@Override
public IWizardPage getNextPage() {
return finalPage;
}
@Override
public void setVisible(boolean value){
if (value) {
this.model.update();
Button load = this.wizard.getLoadButton();
if (load != null) load.setEnabled(false);
}
super.setVisible(value);
model.setVisible(value);
}
@Override
public void update() {
if (model.getError() != null) {
this.setErrorMessage(model.getError());
finalPage.setGroups(null);
finalPage.setHierarchy(null);
this.setPageComplete(false);
Button save = this.wizard.getSaveButton();
if (save != null) save.setEnabled(false);
} else {
this.setErrorMessage(null);
finalPage.setGroups(model.getGroups());
finalPage.setHierarchy(model.getHierarchy());
this.setPageComplete(true);
Button save = this.wizard.getSaveButton();
if (save != null) save.setEnabled(true);
}
}
/**
* Update the page when the model has changed.
*/
public abstract void updatePage();
}