/*
* 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.common;
import org.deidentifier.arx.DataDefinition;
import org.deidentifier.arx.DataHandle;
import org.deidentifier.arx.RowSet;
import org.deidentifier.arx.gui.Controller;
import org.deidentifier.arx.gui.model.ModelEvent;
import org.deidentifier.arx.gui.model.ModelEvent.ModelPart;
import org.deidentifier.arx.gui.resources.Resources;
import org.eclipse.nebula.widgets.nattable.selection.event.CellSelectionEvent;
import org.eclipse.swt.widgets.Composite;
/**
* A view on a <code>Data</code> object.
*
* @author Fabian Prasser
*/
public class ViewDataOutput extends ViewData {
/**
*
* Creates a new data view.
*
* @param parent
* @param controller
*/
public ViewDataOutput(final Composite parent,
final Controller controller,
final String helpid) {
super(parent, controller, helpid, Resources.getMessage("AnalyzeView.0")); //$NON-NLS-1 //$NON-NLS-1$
}
@Override
public void update(final ModelEvent event) {
super.update(event);
if (event.part == ModelPart.INPUT) {
reset();
return;
}
if (event.part == ModelPart.OUTPUT) {
// No result avail
if (event.data == null) {
reset();
return;
}
// Obtain data definition
DataDefinition definition = getDefinition();
// Check
if (definition == null) {
reset();
return;
}
// Update the table
DataHandle handle = getHandle();
// Check
if (handle == null) {
reset();
return;
}
// Use input subset
table.setResearchSubset(getSubset());
table.setGroups(model.getGroups());
table.setData(handle);
// Update the attribute types
table.getHeaderImages().clear();
for (int i = 0; i < handle.getNumColumns(); i++) {
updateHeaderImage(i, definition.getAttributeType(handle.getAttributeName(i)));
}
// Redraw
table.setEnabled(true);
table.redraw();
this.enableSorting();
} else if (event.part == ModelPart.RESEARCH_SUBSET) {
// Update research subset
table.setResearchSubset((RowSet)event.data);
table.redraw();
} else if (event.part == ModelPart.SELECTED_VIEW_CONFIG || event.part == ModelPart.RESULT) {
// Update the table
DataHandle handle = getHandle();
// Check
if (handle == null) {
reset();
return;
}
table.setData(handle);
table.setGroups(model.getGroups());
table.setResearchSubset(getSubset());
table.redraw();
}
}
/**
* Returns the research subset.
*
* @return
*/
private RowSet getSubset(){
if (model != null && model.getOutputConfig() != null){
return model.getOutputConfig().getResearchSubset();
} else {
return null;
}
}
@Override
protected void actionCellSelected(CellSelectionEvent arg1) {
super.actionCellSelected(arg1);
}
@Override
protected void actionSort(){
controller.actionDataSort(false);
}
@Override
protected DataDefinition getDefinition() {
if (model == null) return null;
else return model.getOutputDefinition();
}
@Override
protected DataHandle getHandle() {
if (model != null){
DataHandle handle = model.getOutput();
if (model.getViewConfig().isSubset() &&
model.getOutputConfig() != null &&
model.getOutputConfig().getConfig() != null) {
handle = handle.getView();
}
return handle;
} else {
return null;
}
}
}