/*
* 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.AttributeType.Hierarchy;
import org.deidentifier.arx.aggregates.HierarchyBuilder;
import org.deidentifier.arx.gui.view.impl.wizard.HierarchyWizard.HierarchyWizardView;
/**
* An abstract base model for all builders.
*
* @author Fabian Prasser
* @param <T>
*/
public abstract class HierarchyWizardModelAbstract<T> {
/** Var. */
protected final String[] data;
/** Var. */
protected int[] groupsizes;
/** Var. */
protected Hierarchy hierarchy;
/** Var. */
protected String error;
/** Var. */
protected HierarchyWizardView view;
/** Var. */
protected boolean visible = false;
/**
* Creates a new instance.
*
* @param data
*/
public HierarchyWizardModelAbstract(String[] data) {
this.data = data;
}
/**
* Returns the builder currently configured.
*
* @param serializable
* @return
* @throws Exception
*/
public abstract HierarchyBuilder<T> getBuilder(boolean serializable) throws Exception;
/**
* Returns the data.
*
* @return
*/
public String[] getData() {
return data;
}
/**
* Returns an error message, null if everything is ok.
*
* @return
*/
public String getError() {
return error;
}
/**
* Returns the sizes of the resulting groups.
*
* @return
*/
public int[] getGroups() {
return groupsizes;
}
/**
* Returns the resulting hierarchy.
*
* @return
*/
public Hierarchy getHierarchy() {
return hierarchy;
}
/**
* Parses a builder and updates the model accordingly.
*
* @param builder
*/
public abstract void parse(HierarchyBuilder<T> builder);
/**
* Sets the according view.
*
* @param view
*/
public void setView(HierarchyWizardView view){
this.view = view;
}
/**
* Updates the resulting hierarchy and the view.
*/
public void update(){
if (visible) build();
if (view != null) view.update();
}
/**
* Updates all UI components apart from the sender
*/
public abstract void updateUI(HierarchyWizardView sender);
/**
* Implement this to run the builder.
*/
protected abstract void build();
/**
* Set visible.
*
* @param visible
*/
protected void setVisible(boolean visible){
this.visible = visible;
if (visible) update();
}
}