blob: a6dd89c95d24b8b6a14e18cdd27d952f46ac828f [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010-2014, Abel Hegedus, Istvan Rath and Daniel Varro
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Abel Hegedus - initial API and implementation
*******************************************************************************/
package org.eclipse.viatra.modelobfuscator.xml
import java.io.InputStream
import java.io.OutputStream
import org.eclipse.viatra.modelobfuscator.util.ObfuscatorUtil
import org.eclipse.viatra.modelobfuscator.util.StringObfuscator
import com.google.common.base.Preconditions
/**
* Builder API for setting up an XML obfuscator. Currently the only implementation that can
* be built is {@link XMLModelObfuscator}. the input for the obfuscator is an InputStream, while the output is
* written into an OutputStream. The obfuscated attributes and content is configured by a {@link XMLSchemaConfiguration}.
*
* <p/>The builder allows setting a seed and a salt for the obfuscator, which is used when initializing
* the {@link StringObfuscator}, thus supporting reproducibility and restoration.
*
* <p/>The default value of the seed is a random, 32 character long, hexadecimal string created by
* {@link ObfuscatorUtil#generateHexSeed}. The default value of the salt is empty.
*
* @author Abel Hegedus
*
*/
class XMLModelObfuscatorBuilder {
private InputStream inputStream
private OutputStream outputStream
private extension XMLSchemaConfiguration config
protected extension StringObfuscator stringObfuscator
private String saltString = ""
private String seedString = ObfuscatorUtil.generateHexSeed(32);
/**
* Hiding constructor of builder
*/
protected new() {
}
/**
* Creates a new, unconfigured builder for XML model obfuscators.
*/
def static create(){
new XMLModelObfuscatorBuilder
}
/**
* Sets the input of the built obfuscator
*/
def setInput(InputStream input){
inputStream = input
return this
}
/**
* Sets the output of the built obfuscator
*/
def setOutput(OutputStream output){
outputStream = output
return this
}
/**
* Sets the configuration used for selecting what to obfuscate.
* See {@link XMLSchemaConfiguration} for details.
*/
def setSchemaConfiguration(XMLSchemaConfiguration configuration){
this.config = configuration
return this
}
/**
* Sets the salt used for obfuscating String values.
* See {@link StringObfuscator} for details.
*/
def setSalt(String salt){
saltString = salt
return this
}
/**
* Sets the seed used for obfuscating String values.
* See {@link StringObfuscator} for details.
*/
def setSeed(String seed){
seedString = seed
return this
}
/**
* Returns the {@link XMLModelObfuscator} instance built using the current configuration of the builder.
*/
def build(){
Preconditions.checkState(inputStream != null, "Input resource set cannot be null")
Preconditions.checkState(outputStream != null, "Output resource set cannot be null")
Preconditions.checkState(seedString != null, "Seed cannot be null")
Preconditions.checkState(saltString != null, "Salt cannot be null (empty string allowed)")
val obfuscator = new XMLModelObfuscator()
obfuscator.inputStream = inputStream
obfuscator.outputStream = outputStream
obfuscator.config = config
obfuscator.stringObfuscator = new StringObfuscator(seedString, saltString)
return obfuscator
}
}