/*
* 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.define;
import org.deidentifier.arx.gui.Controller;
import org.deidentifier.arx.gui.model.Model;
import org.deidentifier.arx.gui.model.ModelEvent;
import org.deidentifier.arx.gui.model.ModelEvent.ModelPart;
import org.deidentifier.arx.gui.resources.Resources;
import org.deidentifier.arx.gui.view.SWTUtil;
import org.deidentifier.arx.gui.view.def.IView;
import org.deidentifier.arx.gui.view.impl.common.ComponentTitledFolder;
import org.deidentifier.arx.gui.view.impl.common.ComponentTitledFolderButtonBar;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.ToolItem;
/**
* This view displays basic information about the research subset.
*
* @author Fabian Prasser
*/
public class ViewSubsetDefinition implements IView{
/** Controller */
private Controller controller;
/** View */
private Composite root;
/** Model */
private Model model;
/** View */
private Text size;
/** View */
private Text origin;
/** View */
private Text total;
/** View */
private Text percent;
/** View */
private ToolItem all;
/** View */
private ToolItem none;
/** View */
private ToolItem file;
/** View */
private ToolItem filter;
/**
* Creates a new instance.
*
* @param parent
* @param controller
*/
public ViewSubsetDefinition(final Composite parent,
final Controller controller) {
this.controller = controller;
this.controller.addListener(ModelPart.MODEL, this);
this.controller.addListener(ModelPart.INPUT, this);
this.controller.addListener(ModelPart.RESEARCH_SUBSET, this);
this.root = build(parent);
}
@Override
public void dispose() {
controller.removeListener(this);
}
@Override
public void reset() {
size.setText("0"); //$NON-NLS-1$
total.setText("0"); //$NON-NLS-1$
percent.setText("0%"); //$NON-NLS-1$
origin.setText(""); //$NON-NLS-1$
disable();
}
@Override
public void update(final ModelEvent event) {
if (event.part == ModelPart.MODEL) {
model = (Model) event.data;
if (model.getInputConfig().getInput()!=null){
root.setRedraw(false);
// TODO: Load subset
enable();
root.setRedraw(true);
}
} else if (event.part == ModelPart.INPUT) {
if (model.getInputConfig().getInput()!=null){
enable();
}
} else if (event.part == ModelPart.RESEARCH_SUBSET) {
if (model!=null){
update();
}
}
}
/**
* Builds the view.
*
* @param parent
* @return
*/
private Composite build(Composite parent) {
ComponentTitledFolderButtonBar bar = new ComponentTitledFolderButtonBar("id-40"); //$NON-NLS-1$
bar.add(Resources.getMessage("SubsetDefinitionView.1"), //$NON-NLS-1$
controller.getResources().getManagedImage("page_white.png"), //$NON-NLS-1$
new Runnable() {
@Override
public void run() {
controller.actionSubsetNone();
}
});
bar.add(Resources.getMessage("SubsetDefinitionView.2"), //$NON-NLS-1$
controller.getResources().getManagedImage("page_white_text.png"), //$NON-NLS-1$
new Runnable() {
@Override
public void run() {
controller.actionSubsetAll();
}
});
bar.add(Resources.getMessage("SubsetDefinitionView.3"), //$NON-NLS-1$
controller.getResources().getManagedImage("disk.png"), //$NON-NLS-1$
new Runnable() {
@Override
public void run() {
controller.actionSubsetFile();
}
});
bar.add(Resources.getMessage("SubsetDefinitionView.4"), //$NON-NLS-1$
controller.getResources().getManagedImage("find.png"), //$NON-NLS-1$
new Runnable() {
@Override
public void run() {
controller.actionSubsetQuery();
}
});
bar.add(Resources.getMessage("SubsetDefinitionView.7"), //$NON-NLS-1$
controller.getResources().getManagedImage("shuffle.png"), //$NON-NLS-1$
new Runnable() {
@Override
public void run() {
controller.actionSubsetRandom();
}
});
ComponentTitledFolder folder = new ComponentTitledFolder(parent, controller, bar, null);
folder.setLayoutData(SWTUtil.createFillHorizontallyGridData());
Composite group = folder.createItem(Resources.getMessage("SubsetDefinitionView.0"), null); //$NON-NLS-1$
folder.setSelection(0);
GridLayout layout = new GridLayout();
layout.numColumns = 8;
layout.makeColumnsEqualWidth = false;
group.setLayout(layout);
group.setLayoutData(SWTUtil.createFillGridData());
Label l = new Label(group, SWT.NONE);
l.setText(Resources.getMessage("SubsetDefinitionView.6")); //$NON-NLS-1$
size = new Text(group, SWT.BORDER);
size.setText("0"); //$NON-NLS-1$
size.setLayoutData(SWTUtil.createFillHorizontallyGridData());
size.setEditable(false);
l = new Label(group, SWT.NONE);
l.setText("/"); //$NON-NLS-1$
total = new Text(group, SWT.BORDER);
total.setText("0"); //$NON-NLS-1$
total.setLayoutData(SWTUtil.createFillHorizontallyGridData());
total.setEditable(false);
l = new Label(group, SWT.NONE);
l.setText("="); //$NON-NLS-1$
percent = new Text(group, SWT.BORDER);
percent.setText("0%"); //$NON-NLS-1$
percent.setLayoutData(SWTUtil.createFillHorizontallyGridData());
percent.setEditable(false);
l = new Label(group, SWT.NONE);
l.setText(Resources.getMessage("SubsetDefinitionView.5")); //$NON-NLS-1$
origin = new Text(group, SWT.BORDER);
origin.setText(""); //$NON-NLS-1$
origin.setLayoutData(SWTUtil.createFillHorizontallyGridData());
origin.setEditable(false);
all = folder.getButtonItem(Resources.getMessage("SubsetDefinitionView.1")); //$NON-NLS-1$
none = folder.getButtonItem(Resources.getMessage("SubsetDefinitionView.2")); //$NON-NLS-1$
file = folder.getButtonItem(Resources.getMessage("SubsetDefinitionView.3")); //$NON-NLS-1$
filter = folder.getButtonItem(Resources.getMessage("SubsetDefinitionView.4")); //$NON-NLS-1$
return group;
}
/**
* Disables the view.
*/
private void disable(){
// TODO: Maybe make this a default for all views?
all.setEnabled(false);
none.setEnabled(false);
file.setEnabled(false);
filter.setEnabled(false);
SWTUtil.disable(root);
}
/**
* Enables the view.
*/
private void enable(){
// TODO: Maybe make this a default for all views?
all.setEnabled(true);
none.setEnabled(true);
file.setEnabled(true);
filter.setEnabled(true);
SWTUtil.enable(root);
}
/**
* Updates the view.
*/
private void update() {
// TODO: Maybe make this a default for all views?
if (model==null || model.getInputConfig()==null || model.getInputConfig().getResearchSubset()==null){
reset();
return;
}
int size = model.getInputConfig().getResearchSubset().size();
int total = model.getInputConfig().getInput().getHandle().getNumRows();
double percent = (double)size / (double)total * 100d;
this.size.setText(SWTUtil.getPrettyString(size));
this.total.setText(SWTUtil.getPrettyString(total));
this.percent.setText(SWTUtil.getPrettyString(percent)+"%");
this.origin.setText(model.getSubsetOrigin());
}
}