/*
* 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.DataType;
import org.deidentifier.arx.aggregates.HierarchyBuilder;
import org.deidentifier.arx.aggregates.HierarchyBuilderRedactionBased;
import org.deidentifier.arx.aggregates.HierarchyBuilderRedactionBased.Order;
import org.deidentifier.arx.gui.resources.Resources;
import org.deidentifier.arx.gui.view.impl.wizard.HierarchyWizard.HierarchyWizardView;
/**
* A model for redaction-based builders.
*
* @author Fabian Prasser
* @param <T>
*/
public class HierarchyWizardModelRedaction<T> extends HierarchyWizardModelAbstract<T> {
/** Var. */
private Order redactionOrder = Order.RIGHT_TO_LEFT;
/** Var. */
private Order alignmentOrder = Order.LEFT_TO_RIGHT;
/** Var. */
private char paddingCharacter = ' ';
/** Var. */
private char redactionCharacter = '*';
/** Meta-data about the nature of the domain of the attribute. */
private Integer maxValueLength;
/** Meta-data about the nature of the domain of the attribute. */
private Integer domainSize;
/** Meta-data about the nature of the domain of the attribute. */
private Integer alphabetSize;
/**
* Creates a new instance.
*
* @param dataType
* @param data
*/
public HierarchyWizardModelRedaction(DataType<T> dataType, String[] data) {
// Super
super(data);
// Init
HierarchyBuilderRedactionBased<T> temp = HierarchyBuilderRedactionBased.create('c');
temp.setDomainMetadata(data);
this.maxValueLength = temp.getMaxValueLength().intValue();
this.domainSize = temp.getDomainSize().intValue();
this.alphabetSize = temp.getAlphabetSize().intValue();
// Update
this.update();
}
/**
* Returns the alignment order.
*
* @return
*/
public Order getAlignmentOrder() {
return alignmentOrder;
}
/**
* @return the alphabetSize
*/
public Integer getAlphabetSize() {
return alphabetSize;
}
@Override
public HierarchyBuilderRedactionBased<T> getBuilder(boolean serializable) {
// Create
HierarchyBuilderRedactionBased<T> builder = HierarchyBuilderRedactionBased.create(alignmentOrder,
redactionOrder,
paddingCharacter,
redactionCharacter);
// Set domain properties
if (domainSize != null && alphabetSize != null && maxValueLength != null) {
builder.setDomainAndAlphabetSize(domainSize, alphabetSize, maxValueLength);
} else if (domainSize != null && maxValueLength != null) {
builder.setDomainSize(domainSize, maxValueLength);
} else if (alphabetSize != null && maxValueLength != null) {
builder.setAlphabetSize(alphabetSize, maxValueLength);
}
// Return
return builder;
}
/**
* @return the domainSize
*/
public Integer getDomainSize() {
return domainSize;
}
/**
* @return the maxValueLength
*/
public Integer getMaxValueLength() {
return maxValueLength;
}
/**
* Returns the padding character.
*
* @return
*/
public char getPaddingCharacter() {
return paddingCharacter;
}
/**
* Returns the redaction parameter.
*
* @return
*/
public char getRedactionCharacter() {
return redactionCharacter;
}
/**
* Returns the redaction order.
*
* @return
*/
public Order getRedactionOrder() {
return redactionOrder;
}
@Override
public void parse(HierarchyBuilder<T> _builder) {
if (!(_builder instanceof HierarchyBuilderRedactionBased)) {
return;
}
HierarchyBuilderRedactionBased<T> builder = (HierarchyBuilderRedactionBased<T>)_builder;
this.redactionOrder = builder.getRedactionOrder();
this.alignmentOrder = builder.getAligmentOrder();
this.redactionCharacter = builder.getRedactionCharacter();
this.paddingCharacter = builder.getPaddingCharacter();
this.domainSize = builder.getDomainSize().intValue();
this.alphabetSize = builder.getAlphabetSize().intValue();
this.maxValueLength = builder.getMaxValueLength().intValue();
this.update();
}
/**
* Sets the alignment order.
*
* @param alignmentOrder
*/
public void setAlignmentOrder(Order alignmentOrder) {
if (alignmentOrder != this.alignmentOrder) {
this.alignmentOrder = alignmentOrder;
this.update();
}
}
/**
* @param alphabetSize the alphabetSize to set
*/
public void setAlphabetSize(Integer alphabetSize) {
this.alphabetSize = alphabetSize;
}
/**
* @param domainSize the domainSize to set
*/
public void setDomainSize(Integer domainSize) {
this.domainSize = domainSize;
}
/**
* @param maxValueLength the maxValueLength to set
*/
public void setMaxValueLength(Integer maxValueLength) {
this.maxValueLength = maxValueLength;
}
/**
* Sets the padding character.
*
* @param paddingCharacter
*/
public void setPaddingCharacter(char paddingCharacter) {
if (this.paddingCharacter != paddingCharacter){
this.paddingCharacter = paddingCharacter;
this.update();
}
}
/**
* Sets the redaction character.
*
* @param redactionCharacter
*/
public void setRedactionCharacter(char redactionCharacter) {
if (this.redactionCharacter != redactionCharacter){
this.redactionCharacter = redactionCharacter;
this.update();
}
}
/**
* Sets the redaction order.
*
* @param redactionOrder
*/
public void setRedactionOrder(Order redactionOrder) {
if (redactionOrder != this.redactionOrder){
this.redactionOrder = redactionOrder;
this.update();
}
}
@Override
public void updateUI(HierarchyWizardView sender) {
// Empty by design
}
@Override
protected void build() {
super.hierarchy = null;
super.error = null;
super.groupsizes = null;
if (data==null) return;
HierarchyBuilderRedactionBased<T> builder = getBuilder(false);
try {
super.groupsizes = builder.prepare(data);
} catch(Exception e){
super.error = Resources.getMessage("HierarchyWizardModelRedaction.0"); //$NON-NLS-1$
return;
}
try {
super.hierarchy = builder.build();
} catch(Exception e){
super.error = Resources.getMessage("HierarchyWizardModelRedaction.1"); //$NON-NLS-1$
return;
}
}
}