/**
* Copyright (c) 2011, SOCIETIES Consortium (WATERFORD INSTITUTE OF TECHNOLOGY (TSSG), HERIOT-WATT UNIVERSITY (HWU), SOLUTA.NET
* (SN), GERMAN AEROSPACE CENTRE (Deutsches Zentrum fuer Luft- und Raumfahrt e.V.) (DLR), Zavod za varnostne tehnologije
* informacijske družbe in elektronsko poslovanje (SETCCE), INSTITUTE OF COMMUNICATION AND COMPUTER SYSTEMS (ICCS), LAKE
* COMMUNICATIONS (LAKE), INTEL PERFORMANCE LEARNING SOLUTIONS LTD (INTEL), PORTUGAL TELECOM INOVAÇÃO, SA (PTIN), IBM Corp.,
* INSTITUT TELECOM (ITSUD), AMITEC DIACHYTI EFYIA PLIROFORIKI KAI EPIKINONIES ETERIA PERIORISMENIS EFTHINIS (AMITEC), TELECOM
* ITALIA S.p.a.(TI), TRIALOG (TRIALOG), Stiftelsen SINTEF (SINTEF), NEC EUROPE LTD (NEC))
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following
* conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
* BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
* SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package org.societies.api.internal.privacytrust.privacy.model.dataobfuscation;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.societies.api.internal.schema.privacytrust.privacy.model.dataobfuscation.ObfuscationLevelType;
/**
* Describe obfuscation algorithm of a data type:
* - obfuscable or not
* - how (continuous, discrete)
* - result persistable
* And provide example of obfuscation for the GUI
* @author Olivier Maridat (Trialog)
*/
public abstract class ObfuscatorInfo {
protected boolean obfuscable;
protected boolean persistable;
protected ObfuscationLevelType obfuscationLevelType;
protected int nbOfObfuscationLevelStep;
protected String obfuscableDataType;
protected Map<Double, String> obfuscationExamples;
/**
* To know if this obfuscation can be done on this node
* @return True if the obfuscation can be done on this node. Otherwise, it is useless to try to do anything with this obfuscator
*/
public boolean isObfuscable() {
return obfuscable;
}
/**
* To know if the obfuscated data can be persisted or not
* @return the wrapped data to obfuscate
*/
public boolean isPersistable() {
return persistable;
}
/**
* Type of the obfuscation continous or discrete
* If discrete, the number of steps is useful
* @see getNbOfObfuscationLevelStep()
* @return the type of the obfuscation
*/
public ObfuscationLevelType getObfuscationLevelType() {
return obfuscationLevelType;
}
/**
* Number of classes for a discrete obfuscation level
* @return the number of steps available
*/
public int getNbOfObfuscationLevelStep() {
return nbOfObfuscationLevelStep;
}
/**
* SOCIETIES type of the obfuscable data
* @return the type of the obfuscable data
*/
public String getObfuscableDataType() {
return obfuscableDataType;
}
/**
* Return a friendly example of obfuscation at a specific obfuscation level
* @param obfuscationLevel The example provided will demonstrate an obfuscation near this obfuscation level
* @return Friendly example of obfuscation. Null if no examples are provided.
*/
public String getObfuscationExample(double obfuscationLevel) {
// - No example: null
if (null == obfuscationExamples || obfuscationExamples.size() <= 0) {
return null;
}
// - Examples: search the good slot
double previous = 0;
String lastExample = null;
for(Entry<Double, String> entry : obfuscationExamples.entrySet()) {
double current = entry.getKey().doubleValue();
lastExample = entry.getValue();
// Current slot
if (obfuscationLevel >= previous && obfuscationLevel < current) {
return lastExample;
}
previous = current;
}
// Last slot or not in the slots: return the last one
return lastExample;
}
/**
* Retrieve all friendly obfuscation examples
* @return All friendly obfuscation examples. Null if no examples are provided.
*/
public List<String> getAllObfuscationExamples() {
if (null == obfuscationExamples || obfuscationExamples.size() <= 0) {
return null;
}
return new ArrayList<String>(obfuscationExamples.values());
}
}