/*
* 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.aggregates.HierarchyBuilder.Type;
import org.deidentifier.arx.gui.resources.Resources;
import org.deidentifier.arx.gui.view.SWTUtil;
import org.eclipse.jface.wizard.IWizardPage;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
/**
* A hierarchy page for choosing the type of builder.
*
* @author Fabian Prasser
* @param <T>
*/
public class HierarchyWizardPageType<T> extends WizardPage {
/** Var. */
private final HierarchyWizardModel<T> model;
/** Var. */
private Button interval;
/** Var. */
private Button order;
/** Var. */
private Button redaction;
/** Var. */
private IWizardPage next;
/** Var. */
private final HierarchyWizardPageIntervals<T> intervalPage;
/** Var. */
private final HierarchyWizardPageOrder<T> orderPage;
/** Var. */
private final HierarchyWizardPageRedaction<T> redactionPage;
/** Var. */
private final HierarchyWizard<T> wizard;
/**
* Creates a new instance.
*
* @param wizard
* @param model
* @param intervalPage
* @param orderPage
* @param redactionPage
*/
public HierarchyWizardPageType(final HierarchyWizard<T> wizard,
final HierarchyWizardModel<T> model,
final HierarchyWizardPageIntervals<T> intervalPage,
final HierarchyWizardPageOrder<T> orderPage,
final HierarchyWizardPageRedaction<T> redactionPage) {
super(""); //$NON-NLS-1$
this.wizard = wizard;
this.redactionPage = redactionPage;
this.orderPage = orderPage;
this.intervalPage = intervalPage;
this.model = model;
this.next = intervalPage;
setTitle(Resources.getMessage("HierarchyWizardPageType.0")); //$NON-NLS-1$
setDescription(Resources.getMessage("HierarchyWizardPageType.1")); //$NON-NLS-1$
setPageComplete(true);
}
@Override
public boolean canFlipToNextPage() {
return isPageComplete();
}
@Override
public void createControl(final Composite parent) {
final Composite composite = new Composite(parent, SWT.NONE);
composite.setLayoutData(SWTUtil.createFillGridData());
composite.setLayout(SWTUtil.createGridLayout(1, false));
this.interval = new Button(composite, SWT.RADIO);
this.interval.setText(Resources.getMessage("HierarchyWizardPageType.2")); //$NON-NLS-1$
this.interval.setEnabled(model.getIntervalModel() != null);
this.order = new Button(composite, SWT.RADIO);
this.order.setText(Resources.getMessage("HierarchyWizardPageType.3")); //$NON-NLS-1$
this.order.setEnabled(true);
this.redaction = new Button(composite, SWT.RADIO);
this.redaction.setText(Resources.getMessage("HierarchyWizardPageType.4")); //$NON-NLS-1$
this.redaction.setEnabled(true);
this.interval.addSelectionListener(new SelectionAdapter(){
@Override public void widgetSelected(SelectionEvent arg0) {
if (interval.getSelection()) {
next = intervalPage;
model.setType(Type.INTERVAL_BASED);
}
}
});
this.order.addSelectionListener(new SelectionAdapter(){
@Override public void widgetSelected(SelectionEvent arg0) {
if (order.getSelection()) {
next = orderPage;
model.setType(Type.ORDER_BASED);
}
}
});
this.redaction.addSelectionListener(new SelectionAdapter(){
@Override public void widgetSelected(SelectionEvent arg0) {
if (redaction.getSelection()) {
next = redactionPage;
model.setType(Type.REDACTION_BASED);
}
}
});
interval.setSelection(model.getType() == Type.INTERVAL_BASED);
order.setSelection(model.getType() == Type.ORDER_BASED);
redaction.setSelection(model.getType() == Type.REDACTION_BASED);
switch (model.getType()){
case INTERVAL_BASED: next = intervalPage; break;
case ORDER_BASED: next = orderPage; break;
case REDACTION_BASED: next = redactionPage; break;
default:
throw new IllegalStateException("Unknown type of builder"); //$NON-NLS-1$
}
setControl(composite);
}
@Override
public IWizardPage getNextPage() {
return next;
}
@Override
public boolean isPageComplete() {
return true;
}
@Override
public void setVisible(boolean value){
if (value) {
Button load = this.wizard.getLoadButton();
if (load != null) load.setEnabled(true);
Button save = this.wizard.getSaveButton();
if (save != null) save.setEnabled(false);
}
super.setVisible(value);
}
/**
* Updates the page.
*/
public void updatePage() {
interval.setSelection(model.getType() == Type.INTERVAL_BASED);
order.setSelection(model.getType() == Type.ORDER_BASED);
redaction.setSelection(model.getType() == Type.REDACTION_BASED);
switch (model.getType()){
case INTERVAL_BASED: next = intervalPage; break;
case ORDER_BASED: next = orderPage; break;
case REDACTION_BASED: next = redactionPage; break;
}
}
}