/* * 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.model; import org.deidentifier.arx.DataSubset; import org.deidentifier.arx.criteria.KMap; import org.deidentifier.arx.criteria.KMap.CellSizeEstimator; import org.deidentifier.arx.criteria.PrivacyCriterion; import org.deidentifier.arx.gui.resources.Resources; import org.deidentifier.arx.gui.view.SWTUtil; /** * This class implements a model for the k-map criterion. * * @author Fabian Prasser */ public class ModelKMapCriterion extends ModelImplicitCriterion{ /** SVUID. */ private static final long serialVersionUID = 2268947734419591705L; /** k. */ private int k = 5; /** The significance level */ private double significanceLevel = 0.01d; /** The estimator */ private CellSizeEstimator estimator; /** * Creates a new instance */ public ModelKMapCriterion() { // Empty by design } /** * Creates a new instance * @param k */ public ModelKMapCriterion(int k) { super(); this.k = k; this.estimator = null; } @Override public ModelKMapCriterion clone() { ModelKMapCriterion result = new ModelKMapCriterion(); result.k = this.k; result.setEnabled(this.isEnabled()); result.setEstimator(this.estimator); return result; } @Override public PrivacyCriterion getCriterion(Model model) { if (estimator == null) { DataSubset subset = DataSubset.create(model.getInputConfig().getInput(), model.getInputConfig().getResearchSubset()); return new KMap(k, subset); } else { ModelRisk riskModel = model.getRiskModel(); return new KMap(k, significanceLevel, riskModel.getPopulationModel(), estimator); } } /** * Returns the estimator. * @return */ public CellSizeEstimator getEstimator() { return estimator; } /** * Returns k. * * @return */ public int getK() { return k; } @Override public String getLabel() { return Resources.getMessage("Model.32"); //$NON-NLS-1$ } /** * Returns the significance level. * @return */ public double getSignificanceLevel() { return significanceLevel; } @Override public void parse(ModelCriterion criterion, boolean _default) { if (!(criterion instanceof ModelKMapCriterion)) { return; } ModelKMapCriterion other = (ModelKMapCriterion)criterion; this.k = other.k; this.setEstimator(other.estimator); this.significanceLevel = other.significanceLevel; if (!_default) { this.setEnabled(other.isEnabled()); } } /** * Sets the used estimator. * @param estimator */ public void setEstimator(CellSizeEstimator estimator) { this.estimator = estimator; } /** * Sets k. * * @param k */ public void setK(int k) { this.k = k; } /** * Sets the significance level. * @param significanceLevel */ public void setSignificanceLevel(double significanceLevel) { this.significanceLevel = significanceLevel; } @Override public String toString() { String value = SWTUtil.getPrettyString(k) + Resources.getMessage("Model.33"); //$NON-NLS-1$ if (estimator != null) { value += " (" + estimator + "/" + SWTUtil.getPrettyString(significanceLevel) + ")"; } return value; } }