All Downloads are FREE. Search and download functionalities are using the official Maven repository.

eu.clarussecure.proxy.protection.modules.anonymization.AnonymizationCapabilities Maven / Gradle / Ivy

The newest version!
package eu.clarussecure.proxy.protection.modules.anonymization;

import java.util.Map;
import java.util.Set;

import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import eu.clarussecure.proxy.spi.Capabilities;
import eu.clarussecure.proxy.spi.Mode;
import eu.clarussecure.proxy.spi.Operation;
import eu.clarussecure.proxy.spi.protection.ProtectionModuleCapabilities;
import eu.clarussecure.proxy.spi.security.policy.SecurityPolicy;

public class AnonymizationCapabilities implements ProtectionModuleCapabilities {

    private final Map> datasetCRUDOperations = Capabilities
            .toMap(new Enum[][] { { Operation.CREATE, Mode.AS_IT_IS, Mode.BUFFERING, Mode.STREAMING },
                    { Operation.READ, Mode.AS_IT_IS }, { Operation.UPDATE }, { Operation.DELETE, Mode.AS_IT_IS } });

    private final Map> recordCRUDOperations = Capabilities.toMap(new Enum[][] {
            { Operation.CREATE }, { Operation.READ, Mode.AS_IT_IS }, { Operation.UPDATE }, { Operation.DELETE } });

    @Override
    public Set getSupportedCRUDOperations(boolean wholeDataset) {
        return wholeDataset ? datasetCRUDOperations.keySet() : recordCRUDOperations.keySet();
    }

    @Override
    public Set getSupportedProcessingModes(boolean wholeDataset, Operation operation) {
        return wholeDataset ? datasetCRUDOperations.get(operation) : recordCRUDOperations.get(operation);
    }

    @Override
    public Mode getPreferredProcessingMode(boolean wholedataset, Operation operation, SecurityPolicy securityPolicy) {
        Set modes = getSupportedProcessingModes(wholedataset, operation);
        if (modes.size() <= 1) {
            return modes.isEmpty() ? null : modes.iterator().next();
        }
        Mode preferredMode = Mode.AS_IT_IS;
        if (wholedataset && operation == Operation.CREATE) {
            Node rootNode = securityPolicy.getDocument().getFirstChild();
            Node protectionNode = securityPolicy.findSubNode(SecurityPolicy.PROTECTION_ELT, rootNode);
            Node attributeTypesNode = securityPolicy.findSubNode("attribute_types", protectionNode);
            if (attributeTypesNode.hasChildNodes()) {
                preferredMode = Mode.STREAMING;
                //preferredMode = Mode.BUFFERING;
                NodeList subnodes = attributeTypesNode.getChildNodes();
                for (int i = 0; i < subnodes.getLength(); i++) {
                    Node subnode = subnodes.item(i);
                    if (subnode.getNodeType() == Node.ELEMENT_NODE) {
                        if (subnode.getNodeName().equals("attribute_type")) {
                            Node protectionAttr = subnode.getAttributes().getNamedItem("protection");
                            if (protectionAttr != null) {
                                String protection = protectionAttr.getNodeValue();
                                if ("coarsening".equals(protection)) {
                                    Node coarseningTypeAttr = subnode.getAttributes().getNamedItem("coarsening_type");
                                    if (coarseningTypeAttr != null) {
                                        String coarseningType = coarseningTypeAttr.getNodeValue();
                                        if ("microaggregation".equals(coarseningType)) {
                                            preferredMode = Mode.BUFFERING;
                                            break;
                                        }
                                    }
                                } else if ("k-anonymity".equals(protection) || "t-closeness".equals(protection)) {
                                    preferredMode = Mode.BUFFERING;
                                    break;
                                }
                            }
                        }
                    }
                }
            }
        }
        return preferredMode;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy