/*
* 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 java.util.List;
import org.deidentifier.arx.DataType;
import org.deidentifier.arx.aggregates.HierarchyBuilder;
import org.deidentifier.arx.aggregates.HierarchyBuilderIntervalBased;
import org.deidentifier.arx.aggregates.HierarchyBuilderIntervalBased.Range;
/**
* A model for interval-based builders.
*
* @author Fabian Prasser
* @param <T>
*/
public class HierarchyWizardModelIntervals<T> extends HierarchyWizardModelGrouping<T>{
/**
* Constructor to create an initial definition.
*
* @param dataType
* @param data
*/
public HierarchyWizardModelIntervals(final DataType<T> dataType, String[] data) {
super(data, dataType, true);
this.update();
}
@Override
public HierarchyBuilderIntervalBased<T> getBuilder(boolean serializable) throws Exception{
HierarchyBuilderIntervalBased<T> builder = HierarchyBuilderIntervalBased.create(super.getDataType(),
new Range<T>(super.getLowerRange().repeat,
super.getLowerRange().snap,
super.getLowerRange().label),
new Range<T>(super.getUpperRange().repeat,
super.getUpperRange().snap,
super.getUpperRange().label));
builder.setAggregateFunction(this.getDefaultFunction());
for (HierarchyWizardGroupingInterval<T> interval : super.getIntervals()) {
builder.addInterval(interval.min, interval.max, interval.function);
}
int level = 0;
for (List<HierarchyWizardGroupingGroup<T>> list : super.getModelGroups()) {
for (HierarchyWizardGroupingGroup<T> group : list){
builder.getLevel(level).addGroup(group.size, group.function);
}
level++;
}
return builder;
}
@Override
public void parse(HierarchyBuilder<T> builder) throws IllegalArgumentException {
if (!(builder instanceof HierarchyBuilderIntervalBased)) {
return;
}
super.parse((HierarchyBuilderIntervalBased<T>)builder);
}
@Override
protected void build() {
super.hierarchy = null;
super.error = null;
super.groupsizes = null;
if (data==null) return;
HierarchyBuilderIntervalBased<T> builder = null;
try {
builder = getBuilder(false);
} catch (Exception e){
super.error = e.getMessage();
return;
}
String error = builder.isValid();
if (error != null) {
super.error = error;
return;
}
try {
super.groupsizes = builder.prepare(data);
} catch(Exception e){
super.error = e.getMessage();
return;
}
try {
super.hierarchy = builder.build();
} catch(Exception e){
super.error = e.getMessage();
return;
}
}
}