added application and product
diff --git a/plugins/org.eclipse.viatra.modelobfuscator.application/.classpath b/plugins/org.eclipse.viatra.modelobfuscator.application/.classpath
new file mode 100644
index 0000000..ad32c83
--- /dev/null
+++ b/plugins/org.eclipse.viatra.modelobfuscator.application/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.viatra.modelobfuscator.application/.gitignore b/plugins/org.eclipse.viatra.modelobfuscator.application/.gitignore
new file mode 100644
index 0000000..ae3c172
--- /dev/null
+++ b/plugins/org.eclipse.viatra.modelobfuscator.application/.gitignore
@@ -0,0 +1 @@
+/bin/
diff --git a/plugins/org.eclipse.viatra.modelobfuscator.application/.project b/plugins/org.eclipse.viatra.modelobfuscator.application/.project
new file mode 100644
index 0000000..42f5271
--- /dev/null
+++ b/plugins/org.eclipse.viatra.modelobfuscator.application/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.viatra.modelobfuscator.application</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.viatra.modelobfuscator.application/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.viatra.modelobfuscator.application/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..c537b63
--- /dev/null
+++ b/plugins/org.eclipse.viatra.modelobfuscator.application/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/plugins/org.eclipse.viatra.modelobfuscator.application/META-INF/MANIFEST.MF b/plugins/org.eclipse.viatra.modelobfuscator.application/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..6755e77
--- /dev/null
+++ b/plugins/org.eclipse.viatra.modelobfuscator.application/META-INF/MANIFEST.MF
@@ -0,0 +1,9 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: VIATRA Model Obfuscator Headless
+Bundle-SymbolicName: org.eclipse.viatra.modelobfuscator.application;singleton:=true
+Bundle-Version: 0.7.0.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Require-Bundle: org.eclipse.core.runtime,
+ com.google.guava,
+ org.eclipse.viatra.modelobfuscator.runtime
diff --git a/plugins/org.eclipse.viatra.modelobfuscator.application/build.properties b/plugins/org.eclipse.viatra.modelobfuscator.application/build.properties
new file mode 100644
index 0000000..e9863e2
--- /dev/null
+++ b/plugins/org.eclipse.viatra.modelobfuscator.application/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ plugin.xml
diff --git a/plugins/org.eclipse.viatra.modelobfuscator.application/emf_configuration_example.properties b/plugins/org.eclipse.viatra.modelobfuscator.application/emf_configuration_example.properties
new file mode 100644
index 0000000..f43ba4a
--- /dev/null
+++ b/plugins/org.eclipse.viatra.modelobfuscator.application/emf_configuration_example.properties
@@ -0,0 +1,13 @@
+# = EMF Obfuscator =
+
+# Select XML mode for obfuscator
+org.eclipse.viatra.modelobfuscator/mode=emf
+
+# Semicolon separated list of Ecore model files that must be loaded into repository (only XMI resources are supported)
+org.eclipse.viatra.modelobfuscator/ecore=someEcore.ecore;otherEcore.ecore
+
+# Semicolon separated list of input instance model files that are obfuscated together
+org.eclipse.viatra.modelobfuscator/input=someModel.ext;otherModel.xmi;someOtherModel.ext
+
+# Select output directory where all obfuscated files are put (input directories will be also recreated inside this)
+org.eclipse.viatra.modelobfuscator/output=someOutputDir
\ No newline at end of file
diff --git a/plugins/org.eclipse.viatra.modelobfuscator.application/plugin.xml b/plugins/org.eclipse.viatra.modelobfuscator.application/plugin.xml
new file mode 100644
index 0000000..0b79da6
--- /dev/null
+++ b/plugins/org.eclipse.viatra.modelobfuscator.application/plugin.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+ <extension
+ id="org.eclipse.viatra.modelobfuscator.application.app"
+ point="org.eclipse.core.runtime.applications">
+ <application
+ cardinality="singleton-global"
+ thread="main"
+ visible="true">
+ <run
+ class="org.eclipse.viatra.modelobfuscator.application.ModelObfuscatorApplication">
+ </run>
+ </application>
+ </extension>
+ <extension
+ id="product"
+ point="org.eclipse.core.runtime.products">
+ <product
+ application="org.eclipse.viatra.modelobfuscator.application.app"
+ name="VIATRA Model Obfuscator">
+ </product>
+ </extension>
+
+</plugin>
diff --git a/plugins/org.eclipse.viatra.modelobfuscator.application/pom.xml b/plugins/org.eclipse.viatra.modelobfuscator.application/pom.xml
new file mode 100644
index 0000000..f5911df
--- /dev/null
+++ b/plugins/org.eclipse.viatra.modelobfuscator.application/pom.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>org.eclipse.viatra.modelobfuscator.parent</artifactId>
+ <groupId>org.eclipse.viatra</groupId>
+ <version>0.7.0-SNAPSHOT</version>
+ <relativePath>../../releng/org.eclipse.viatra.modelobfuscator.parent/pom.xml</relativePath>
+ </parent>
+ <artifactId>org.eclipse.viatra.modelobfuscator.application</artifactId>
+ <packaging>eclipse-plugin</packaging>
+</project>
\ No newline at end of file
diff --git a/plugins/org.eclipse.viatra.modelobfuscator.application/src/org/eclipse/viatra/modelobfuscator/application/ModelObfuscatorApplication.java b/plugins/org.eclipse.viatra.modelobfuscator.application/src/org/eclipse/viatra/modelobfuscator/application/ModelObfuscatorApplication.java
new file mode 100644
index 0000000..e97eb1b
--- /dev/null
+++ b/plugins/org.eclipse.viatra.modelobfuscator.application/src/org/eclipse/viatra/modelobfuscator/application/ModelObfuscatorApplication.java
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * 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.application;
+
+import java.util.Map;
+
+import org.eclipse.equinox.app.IApplication;
+import org.eclipse.equinox.app.IApplicationContext;
+import org.eclipse.viatra.modelobfuscator.application.common.ModelObfuscatorHeadless;
+
+/**
+ * @author Abel Hegedus
+ *
+ */
+public class ModelObfuscatorApplication implements IApplication {
+
+ @Override
+ public Object start(IApplicationContext context) throws Exception {
+ @SuppressWarnings("unchecked")
+ Map<String, Object> arguments = context.getArguments();
+ String[] args = (String[]) arguments.get("application.args");
+
+ try {
+ return new ModelObfuscatorHeadless().performHeadlessObfuscation(args);
+ } catch (IllegalArgumentException e) {
+ System.out.println("Obfuscation failed");
+ return IApplication.EXIT_OK;
+ }
+
+ }
+
+ @Override
+ public void stop() {
+
+ }
+
+
+}
diff --git a/plugins/org.eclipse.viatra.modelobfuscator.application/src/org/eclipse/viatra/modelobfuscator/application/ModelObfuscatorMain.java b/plugins/org.eclipse.viatra.modelobfuscator.application/src/org/eclipse/viatra/modelobfuscator/application/ModelObfuscatorMain.java
new file mode 100644
index 0000000..2c5be21
--- /dev/null
+++ b/plugins/org.eclipse.viatra.modelobfuscator.application/src/org/eclipse/viatra/modelobfuscator/application/ModelObfuscatorMain.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * 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.application;
+
+import org.eclipse.viatra.modelobfuscator.application.common.ModelObfuscatorHeadless;
+
+/**
+ * @author Abel Hegedus
+ *
+ */
+public class ModelObfuscatorMain {
+
+ public static void main(String[] args) {
+
+ try {
+ new ModelObfuscatorHeadless().performHeadlessObfuscation(args);
+ } catch (IllegalArgumentException e) {
+ System.out.println("Obfuscation failed");
+ }
+
+ }
+
+}
diff --git a/plugins/org.eclipse.viatra.modelobfuscator.application/src/org/eclipse/viatra/modelobfuscator/application/common/ModelObfuscatorHeadless.java b/plugins/org.eclipse.viatra.modelobfuscator.application/src/org/eclipse/viatra/modelobfuscator/application/common/ModelObfuscatorHeadless.java
new file mode 100644
index 0000000..1fae547
--- /dev/null
+++ b/plugins/org.eclipse.viatra.modelobfuscator.application/src/org/eclipse/viatra/modelobfuscator/application/common/ModelObfuscatorHeadless.java
@@ -0,0 +1,351 @@
+/*******************************************************************************
+ * 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.application.common;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.NoSuchElementException;
+import java.util.Properties;
+import java.util.Set;
+import java.util.StringTokenizer;
+
+import org.eclipse.equinox.app.IApplication;
+import org.eclipse.viatra.modelobfuscator.xml.XMLModelObfuscator;
+import org.eclipse.viatra.modelobfuscator.xml.XMLModelObfuscatorBuilder;
+import org.eclipse.viatra.modelobfuscator.xml.XMLSchemaConfiguration;
+
+import com.google.common.base.Optional;
+import com.google.common.base.Strings;
+import com.google.common.collect.HashMultimap;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Multimap;
+import com.google.common.collect.Sets;
+
+/**
+ * @author Abel Hegedus
+ *
+ */
+public class ModelObfuscatorHeadless {
+
+ /*
+ * Command line parameters
+ */
+ private static String configParam = "-c";
+ private static String configLongParam = "--config";
+ private static String seedParam = "-s";
+ private static String saltParam = "--salt";
+
+ /*
+ * Property keys
+ */
+ private static final String PROPERTY_PREFIX = "org.eclipse.viatra.modelobfuscator/";
+ private static final String OBFUSCATION_MODE_PROPERTY = PROPERTY_PREFIX + "mode";
+ private static final String XML_OBFUSCATION_MODE = "xml";
+ private static final String EMF_OBFUSCATION_MODE= "emf";
+ private static final String OBFUSCATION_INPUT_PROPERTY = PROPERTY_PREFIX + "input";
+ private static final String OBFUSCATION_OUTPUT_PROPERTY = PROPERTY_PREFIX + "output";
+ private static final String OBFUSCATION_ECORE_PROPERTY = PROPERTY_PREFIX + "ecore";
+ private static final String OBFUSCATION_TAGS_PROPERTY = PROPERTY_PREFIX + "tags";
+ private static final String OBFUSCATION_ATTRIBUTES_PROPERTY = PROPERTY_PREFIX + "attributes";
+
+ /**
+ * @param args
+ * @return
+ */
+ public Integer performHeadlessObfuscation(String[] args) {
+ String config = null;
+ String seed = null;
+ String salt = null;
+
+ if (args == null || args.length == 0) {
+ reportError("Configuration parameter not set");
+ }
+ int i = 0;
+
+ while (i < args.length) {
+ if (args[i].equals(configLongParam)) {
+ config = args[i + 1];
+ i += 2;
+ } else if (args[i].equals(configParam)) {
+ config = args[i + 1];
+ i += 2;
+ } else if (args[i].equals(seedParam)) {
+ seed = args[i + 1];
+ i += 2;
+ } else if (args[i].equals(saltParam)) {
+ salt = args[i + 1];
+ i += 2;
+ } else {
+ i++;
+ }
+ }
+
+ System.out.println("Obfuscation called with:\n"
+ + " Config : " + Strings.nullToEmpty(config) + "\n"
+ + " Seed : " + Strings.nullToEmpty(seed) + "\n"
+ + " Salt : " + Strings.nullToEmpty(salt));
+
+ if (config == null) {
+ reportError("Configuration parameter not set");
+ }
+
+ Properties configuration = null;
+ // load configuration file
+ try {
+ configuration = loadConfigurationPropertyFile(config);
+ } catch (FileNotFoundException e) {
+ reportError("Could not find configuration file");
+ } catch (IOException e) {
+ reportError("Could not read configuration file");
+ }
+
+ String mode = getPropertyValue(configuration, OBFUSCATION_MODE_PROPERTY);
+
+ if(mode.equals(EMF_OBFUSCATION_MODE)) {
+ // TODO handle EMF obfuscation
+
+ // check input file existence
+
+ // ensure output directory existence
+
+ // load ecore models into registry
+
+ // load inputs into resource set
+
+ // initialize obfuscator
+
+ // perform obfuscation
+
+ // save models to output directory
+
+ } else if(mode.equals(XML_OBFUSCATION_MODE)) {
+
+ // ensure output directory existence
+ File outputDirectory = checkOutputDirectory(configuration);
+
+ // check input file existence
+ Map<String,FileInputStream> inputs = Maps.newHashMap();
+ prepareInputStreams(configuration, inputs);
+
+ // parse schema configuration
+ XMLSchemaConfiguration schemaConfiguration = prepareSchemaConfiguration(configuration);
+
+ // initialize obfuscator
+ XMLModelObfuscatorBuilder obfuscatorBuilder = XMLModelObfuscatorBuilder.create().setSchemaConfiguration(schemaConfiguration);
+
+ if(seed != null) {
+ obfuscatorBuilder.setSeed(seed);
+ }
+ System.out.println("Obfuscating using seed: " + obfuscatorBuilder.getSeed());
+
+ if(salt != null) {
+ obfuscatorBuilder.setSalt(salt);
+ System.out.println("Obfuscating using salt: " + obfuscatorBuilder.getSalt());
+ }
+
+ performObfuscation(outputDirectory, inputs, obfuscatorBuilder);
+
+ } else {
+ reportError("Unknown mode " + mode + " selected in configuration");
+ }
+
+ return IApplication.EXIT_OK;
+ }
+
+ /**
+ * @param outputDirectory
+ * @param inputs
+ * @param obfuscatorBuilder
+ */
+ private void performObfuscation(File outputDirectory, Map<String, FileInputStream> inputs,
+ XMLModelObfuscatorBuilder obfuscatorBuilder) {
+ for (Entry<String, FileInputStream> input : inputs.entrySet()) {
+ BufferedInputStream bufferedInputStream = new BufferedInputStream(input.getValue());
+ obfuscatorBuilder.setInput(bufferedInputStream);
+ String fileName = input.getKey();
+ File output = new File(outputDirectory, fileName);
+ BufferedOutputStream bufferedOutputStream;
+ try {
+ bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(output));
+ obfuscatorBuilder.setOutput(bufferedOutputStream);
+ XMLModelObfuscator obfuscator = obfuscatorBuilder.build();
+ System.out.println("Obfuscating " + fileName);
+ obfuscator.obfuscate();
+ bufferedOutputStream.close();
+ bufferedInputStream.close();
+ } catch (FileNotFoundException e) {
+ reportError("Could not ouput to file " + output.getPath());
+ } catch (IOException e) {
+ reportError("Could not close output file " + output.getPath());
+ }
+ }
+ }
+
+ private Properties loadConfigurationPropertyFile(String configPath) throws FileNotFoundException, IOException {
+ Properties bundle = new Properties();
+ FileInputStream fis = new FileInputStream(configPath);
+ try {
+ bundle.load(fis);
+ } finally {
+ fis.close();
+ }
+ return bundle;
+ }
+
+ /**
+ * @param configuration
+ */
+ private File checkOutputDirectory(Properties configuration) {
+ String output = getPropertyValue(configuration, OBFUSCATION_OUTPUT_PROPERTY);
+ File outputFile = new File(output);
+ if(!outputFile.exists()) {
+ boolean directoryCreated = outputFile.mkdir();
+ if(!directoryCreated) {
+ reportError("Output " + output + " specified in configuration could not be created");
+ }
+ } else if(!outputFile.isDirectory()) {
+ reportError("Output " + output + " specified in configuration is not a directory");
+ }
+ return outputFile;
+ }
+
+ private void prepareInputStreams(Properties configuration, Map<String, FileInputStream> inputs) {
+ String input = getPropertyValue(configuration, OBFUSCATION_INPUT_PROPERTY);
+ StringTokenizer inputTokenizer = new StringTokenizer(input,";");
+ while (inputTokenizer.hasMoreTokens()) {
+ String inputPath = (String) inputTokenizer.nextToken();
+ // create input stream for input files
+ File file = new File(inputPath);
+ createFileInputStreams(inputs, file);
+ }
+ }
+
+ /**
+ * @param inputs
+ * @param inputPath
+ */
+ private void createFileInputStreams(Map<String, FileInputStream> inputs, File file) {
+ if(!file.exists()) {
+ reportError("Input " + file.getPath() + " specified in configuration could not be found");
+ }
+ if(file.isFile()) {
+ try {
+ FileInputStream fileInputStream = new FileInputStream(file);
+ String fileName = file.getName();
+ if(inputs.containsKey(fileName)) {
+ reportError("Multiple files with the same name " + fileName + " in configuration");
+ }
+ inputs.put(fileName,fileInputStream);
+ } catch (FileNotFoundException e) {
+ reportError("Input " + file.getPath() + " specified in configuration could not be found, although it exists");
+ }
+ } else if(file.isDirectory()) {
+ /*
+ * TODO we could support directories, either processing only directly contained files or all transitive
+ * files. However, we would need to take care in putting the directory structure into the output, handle
+ * symbolic and hard links, etc.
+ */
+ reportError("Input" + file.getPath() + " specified in configuration is a directory");
+ }
+ }
+
+ /**
+ * @param configuration
+ * @return
+ */
+ private XMLSchemaConfiguration prepareSchemaConfiguration(Properties configuration) {
+ Optional<String> tags = getOptionalPropertyValue(configuration, OBFUSCATION_TAGS_PROPERTY);
+ Optional<String> attributes = getOptionalPropertyValue(configuration, OBFUSCATION_ATTRIBUTES_PROPERTY);
+ if(!tags.isPresent() && !attributes.isPresent()) {
+ reportError("No schema configuration provided, nothing to obfuscate");
+ }
+
+ Set<String> tagSet = Sets.newHashSet();
+ if(tags.isPresent()) {
+ StringTokenizer tagTokenizer = new StringTokenizer(tags.get(), ";");
+ while (tagTokenizer.hasMoreTokens()) {
+ String tag = tagTokenizer.nextToken();
+ tagSet.add(tag);
+ }
+ }
+
+ Multimap<String, String> attributeMultimap = HashMultimap.create();
+ if(attributes.isPresent()) {
+ StringTokenizer attributeTokenizer = new StringTokenizer(attributes.get(), ";");
+ while (attributeTokenizer.hasMoreTokens()) {
+ String tagAttributes = attributeTokenizer.nextToken();
+ try {
+ StringTokenizer tagAttributeTokenizer = new StringTokenizer(tagAttributes, ":");
+ String tagName = tagAttributeTokenizer.nextToken();
+ String attributeList = tagAttributeTokenizer.nextToken();
+ StringTokenizer attributeListTokenizer = new StringTokenizer(attributeList, ",");
+ while (attributeListTokenizer.hasMoreTokens()) {
+ String attributeName = attributeListTokenizer.nextToken();
+ attributeMultimap.put(tagName, attributeName);
+ }
+ } catch (NoSuchElementException e) {
+ reportError("Incorrect syntax in attributes value of schema configuration when processing: " + tagAttributes);
+ }
+ }
+ }
+
+ XMLSchemaConfiguration schemaConfiguration = new XMLSchemaConfiguration(attributeMultimap, tagSet);
+ return schemaConfiguration;
+ }
+
+ /**
+ * @param configuration
+ * @return
+ */
+ private String getPropertyValue(Properties configuration, String propertyName) {
+ Optional<String> optionalPropertyValue = getOptionalPropertyValue(configuration, propertyName);
+ if(!optionalPropertyValue.isPresent()) {
+ reportError(propertyName + " undefined in configuration");
+ }
+ return optionalPropertyValue.get();
+ }
+
+ /**
+ * @param configuration
+ * @return
+ */
+ private Optional<String> getOptionalPropertyValue(Properties configuration, String propertyName) {
+ String propertyValue = configuration.getProperty(propertyName);
+ return Optional.fromNullable(propertyValue);
+ }
+
+ /**
+ * @return
+ */
+ private Integer reportError(String message) {
+ System.out.println(message);
+ displayHelp();
+ throw new IllegalArgumentException(message);
+ }
+
+ private void displayHelp() {
+ System.out.println("Usage:\n"
+ + "<call> -c <configurationFilePath> [-s <seed>] [-salt <salt>]\n"
+ + " -c : Required, the configuration that describes what to obfuscate.\n"
+ + " --config : Same as -c.\n"
+ + " -s : Optional, the seed used for the obfuscation.\n"
+ + " --seed : Same as -s.\n"
+ + " --salt : Optional, the salt used for the obfuscation.");
+ }
+
+}
diff --git a/plugins/org.eclipse.viatra.modelobfuscator.application/xml_configuration_example.properties b/plugins/org.eclipse.viatra.modelobfuscator.application/xml_configuration_example.properties
new file mode 100644
index 0000000..8d79cb7
--- /dev/null
+++ b/plugins/org.eclipse.viatra.modelobfuscator.application/xml_configuration_example.properties
@@ -0,0 +1,18 @@
+# = XML Obfuscator =
+
+# Select XML mode for obfuscator
+org.eclipse.viatra.modelobfuscator/mode=xml
+
+# Provide inputs as semicolon separated list of files
+org.eclipse.viatra.modelobfuscator/input=somefile.ext;c:/someDir/someOtherFile.ex2
+
+# Select output directory where all obfuscated files are put (input directories will be also recreated inside this)
+org.eclipse.viatra.modelobfuscator/output=someOutputDir
+
+# Schema configuration
+# Semicolon separated list of tags whose text content is obfuscated
+org.eclipse.viatra.modelobfuscator/tags=someTag;otherTag
+
+# Semicolon separated list for tag attributes that are obfuscated
+# (tag name followed by : and comma separated list of attribute names)
+org.eclipse.viatra.modelobfuscator/attributes=someTag:someAttr;otherTag:otherAttr,attr2
diff --git a/plugins/org.eclipse.viatra.modelobfuscator.runtime/.gitignore b/plugins/org.eclipse.viatra.modelobfuscator.runtime/.gitignore
index ae3c172..b33f6af 100644
--- a/plugins/org.eclipse.viatra.modelobfuscator.runtime/.gitignore
+++ b/plugins/org.eclipse.viatra.modelobfuscator.runtime/.gitignore
@@ -1 +1,2 @@
/bin/
+/xtend-gen/
diff --git a/plugins/org.eclipse.viatra.modelobfuscator.runtime/src/org/eclipse/viatra/modelobfuscator/xml/XMLModelObfuscatorBuilder.xtend b/plugins/org.eclipse.viatra.modelobfuscator.runtime/src/org/eclipse/viatra/modelobfuscator/xml/XMLModelObfuscatorBuilder.xtend
index a6dd89c..983dafd 100644
--- a/plugins/org.eclipse.viatra.modelobfuscator.runtime/src/org/eclipse/viatra/modelobfuscator/xml/XMLModelObfuscatorBuilder.xtend
+++ b/plugins/org.eclipse.viatra.modelobfuscator.runtime/src/org/eclipse/viatra/modelobfuscator/xml/XMLModelObfuscatorBuilder.xtend
@@ -95,6 +95,14 @@
return this
}
+ def getSeed(){
+ return seedString
+ }
+
+ def getSalt(){
+ return saltString
+ }
+
/**
* Returns the {@link XMLModelObfuscator} instance built using the current configuration of the builder.
*/
diff --git a/plugins/org.eclipse.viatra.modelobfuscator.runtime/xtend-gen/org/eclipse/viatra/modelobfuscator/api/.gitignore b/plugins/org.eclipse.viatra.modelobfuscator.runtime/xtend-gen/org/eclipse/viatra/modelobfuscator/api/.gitignore
deleted file mode 100644
index ea7b2b7..0000000
--- a/plugins/org.eclipse.viatra.modelobfuscator.runtime/xtend-gen/org/eclipse/viatra/modelobfuscator/api/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-/.DataTypeObfuscator.java._trace
-/.ModelObfuscator.java._trace
-/DataTypeObfuscator.java
-/ModelObfuscator.java
diff --git a/plugins/org.eclipse.viatra.modelobfuscator.runtime/xtend-gen/org/eclipse/viatra/modelobfuscator/emf/simple/.gitignore b/plugins/org.eclipse.viatra.modelobfuscator.runtime/xtend-gen/org/eclipse/viatra/modelobfuscator/emf/simple/.gitignore
deleted file mode 100644
index 3b698f3..0000000
--- a/plugins/org.eclipse.viatra.modelobfuscator.runtime/xtend-gen/org/eclipse/viatra/modelobfuscator/emf/simple/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-/.EMFModelObfuscatorBuilder.java._trace
-/.ResourceFilter.java._trace
-/.SimpleEMFModelObfuscator.java._trace
-/EMFModelObfuscatorBuilder.java
-/ResourceFilter.java
-/SimpleEMFModelObfuscator.java
diff --git a/plugins/org.eclipse.viatra.modelobfuscator.runtime/xtend-gen/org/eclipse/viatra/modelobfuscator/util/.gitignore b/plugins/org.eclipse.viatra.modelobfuscator.runtime/xtend-gen/org/eclipse/viatra/modelobfuscator/util/.gitignore
deleted file mode 100644
index ade536c..0000000
--- a/plugins/org.eclipse.viatra.modelobfuscator.runtime/xtend-gen/org/eclipse/viatra/modelobfuscator/util/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-/.StringObfuscator.java._trace
-/StringObfuscator.java
diff --git a/plugins/org.eclipse.viatra.modelobfuscator.runtime/xtend-gen/org/eclipse/viatra/modelobfuscator/xml/.gitignore b/plugins/org.eclipse.viatra.modelobfuscator.runtime/xtend-gen/org/eclipse/viatra/modelobfuscator/xml/.gitignore
deleted file mode 100644
index bde1def..0000000
--- a/plugins/org.eclipse.viatra.modelobfuscator.runtime/xtend-gen/org/eclipse/viatra/modelobfuscator/xml/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-/.XMLModelObfuscator.java._trace
-/.XMLModelObfuscatorBuilder.java._trace
-/.XMLSchemaConfiguration.java._trace
-/XMLModelObfuscator.java
-/XMLModelObfuscatorBuilder.java
-/XMLSchemaConfiguration.java
diff --git a/plugins/org.eclipse.viatra.modelobfuscator.tests/.gitignore b/plugins/org.eclipse.viatra.modelobfuscator.tests/.gitignore
index ae3c172..b33f6af 100644
--- a/plugins/org.eclipse.viatra.modelobfuscator.tests/.gitignore
+++ b/plugins/org.eclipse.viatra.modelobfuscator.tests/.gitignore
@@ -1 +1,2 @@
/bin/
+/xtend-gen/
diff --git a/plugins/org.eclipse.viatra.modelobfuscator.tests/xtend-gen/org/eclipse/viatra/modelobfuscator/tests/.gitignore b/plugins/org.eclipse.viatra.modelobfuscator.tests/xtend-gen/org/eclipse/viatra/modelobfuscator/tests/.gitignore
deleted file mode 100644
index f822ea9..0000000
--- a/plugins/org.eclipse.viatra.modelobfuscator.tests/xtend-gen/org/eclipse/viatra/modelobfuscator/tests/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-/.SimpleEMFModelObfuscatorTest.java._trace
-/.XMLModelObfuscatorTest.java._trace
-/SimpleEMFModelObfuscatorTest.java
-/XMLModelObfuscatorTest.java
diff --git a/releng/org.eclipse.viatra.modelobfuscator.parent/pom.xml b/releng/org.eclipse.viatra.modelobfuscator.parent/pom.xml
index c882c12..5e41322 100644
--- a/releng/org.eclipse.viatra.modelobfuscator.parent/pom.xml
+++ b/releng/org.eclipse.viatra.modelobfuscator.parent/pom.xml
@@ -177,11 +177,13 @@
</activation>
<modules>
<module>../../plugins/org.eclipse.viatra.modelobfuscator.ui</module>
+ <module>../../plugins/org.eclipse.viatra.modelobfuscator.application</module>
<!-- Needs BPM example metamodel as dependency
<module>../../plugins/org.eclipse.viatra.modelobfuscator.tests</module>
-->
<module>../../features/org.eclipse.viatra.modelobfuscator.feature</module>
<module>../../releng/org.eclipse.viatra.modelobfuscator.update</module>
+ <module>../../releng/org.eclipse.viatra.modelobfuscator.product</module>
</modules>
</profile>
<profile>
diff --git a/releng/org.eclipse.viatra.modelobfuscator.product/.project b/releng/org.eclipse.viatra.modelobfuscator.product/.project
new file mode 100644
index 0000000..730c3f0
--- /dev/null
+++ b/releng/org.eclipse.viatra.modelobfuscator.product/.project
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.viatra.modelobfuscator.product</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ </buildSpec>
+ <natures>
+ </natures>
+</projectDescription>
diff --git a/releng/org.eclipse.viatra.modelobfuscator.product/modelobfuscator.product b/releng/org.eclipse.viatra.modelobfuscator.product/modelobfuscator.product
new file mode 100644
index 0000000..cb33491
--- /dev/null
+++ b/releng/org.eclipse.viatra.modelobfuscator.product/modelobfuscator.product
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?pde version="3.5"?>
+
+<product name="VIATRA Model Obfuscator Product" uid="org.eclipse.viatra.modelobfuscator.product" id="org.eclipse.viatra.modelobfuscator" application="org.eclipse.viatra.modelobfuscator.application.app" version="0.7.0.qualifier" useFeatures="false" includeLaunchers="true">
+
+ <configIni use="default">
+ </configIni>
+
+ <launcherArgs>
+ <programArgs>-consoleLog
+ </programArgs>
+ <vmArgs>-Xms200m -Xmx1024m
+ </vmArgs>
+ <vmArgsMac>-XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts
+ </vmArgsMac>
+ </launcherArgs>
+
+ <windowImages/>
+
+ <launcher>
+ <solaris/>
+ <win useIco="false">
+ <bmp/>
+ </win>
+ </launcher>
+
+ <vm>
+ <windows include="false">org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6</windows>
+ </vm>
+
+ <plugins>
+ <plugin id="com.google.guava"/>
+ <plugin id="com.ibm.icu"/>
+ <plugin id="javax.annotation"/>
+ <plugin id="javax.inject"/>
+ <plugin id="javax.xml"/>
+ <plugin id="org.apache.batik.css"/>
+ <plugin id="org.apache.batik.util"/>
+ <plugin id="org.apache.batik.util.gui"/>
+ <plugin id="org.eclipse.ant.core"/>
+ <plugin id="org.eclipse.compare.core"/>
+ <plugin id="org.eclipse.core.commands"/>
+ <plugin id="org.eclipse.core.contenttype"/>
+ <plugin id="org.eclipse.core.databinding"/>
+ <plugin id="org.eclipse.core.databinding.observable"/>
+ <plugin id="org.eclipse.core.databinding.property"/>
+ <plugin id="org.eclipse.core.expressions"/>
+ <plugin id="org.eclipse.core.filesystem"/>
+ <plugin id="org.eclipse.core.filesystem.win32.x86_64" fragment="true"/>
+ <plugin id="org.eclipse.core.jobs"/>
+ <plugin id="org.eclipse.core.resources"/>
+ <plugin id="org.eclipse.core.resources.win32.x86_64" fragment="true"/>
+ <plugin id="org.eclipse.core.runtime"/>
+ <plugin id="org.eclipse.core.runtime.compatibility.registry" fragment="true"/>
+ <plugin id="org.eclipse.core.variables"/>
+ <plugin id="org.eclipse.e4.core.commands"/>
+ <plugin id="org.eclipse.e4.core.contexts"/>
+ <plugin id="org.eclipse.e4.core.di"/>
+ <plugin id="org.eclipse.e4.core.di.extensions"/>
+ <plugin id="org.eclipse.e4.core.services"/>
+ <plugin id="org.eclipse.e4.ui.bindings"/>
+ <plugin id="org.eclipse.e4.ui.css.core"/>
+ <plugin id="org.eclipse.e4.ui.css.swt"/>
+ <plugin id="org.eclipse.e4.ui.css.swt.theme"/>
+ <plugin id="org.eclipse.e4.ui.di"/>
+ <plugin id="org.eclipse.e4.ui.model.workbench"/>
+ <plugin id="org.eclipse.e4.ui.services"/>
+ <plugin id="org.eclipse.e4.ui.widgets"/>
+ <plugin id="org.eclipse.e4.ui.workbench"/>
+ <plugin id="org.eclipse.e4.ui.workbench.addons.swt"/>
+ <plugin id="org.eclipse.e4.ui.workbench.renderers.swt"/>
+ <plugin id="org.eclipse.e4.ui.workbench.swt"/>
+ <plugin id="org.eclipse.e4.ui.workbench3"/>
+ <plugin id="org.eclipse.emf.cdo.ecore.retrofit" fragment="true"/>
+ <plugin id="org.eclipse.emf.common"/>
+ <plugin id="org.eclipse.emf.ecore"/>
+ <plugin id="org.eclipse.emf.ecore.change"/>
+ <plugin id="org.eclipse.emf.ecore.xmi"/>
+ <plugin id="org.eclipse.equinox.app"/>
+ <plugin id="org.eclipse.equinox.common"/>
+ <plugin id="org.eclipse.equinox.ds"/>
+ <plugin id="org.eclipse.equinox.preferences"/>
+ <plugin id="org.eclipse.equinox.registry"/>
+ <plugin id="org.eclipse.equinox.util"/>
+ <plugin id="org.eclipse.help"/>
+ <plugin id="org.eclipse.jface"/>
+ <plugin id="org.eclipse.jface.databinding"/>
+ <plugin id="org.eclipse.osgi"/>
+ <plugin id="org.eclipse.osgi.compatibility.state" fragment="true"/>
+ <plugin id="org.eclipse.osgi.services"/>
+ <plugin id="org.eclipse.swt"/>
+ <plugin id="org.eclipse.swt.win32.win32.x86_64" fragment="true"/>
+ <plugin id="org.eclipse.team.core"/>
+ <plugin id="org.eclipse.ui"/>
+ <plugin id="org.eclipse.ui.trace"/>
+ <plugin id="org.eclipse.ui.workbench"/>
+ <plugin id="org.eclipse.viatra.modelobfuscator.application"/>
+ <plugin id="org.eclipse.viatra.modelobfuscator.runtime"/>
+ <plugin id="org.eclipse.xtend.lib"/>
+ <plugin id="org.eclipse.xtext.xbase.lib"/>
+ <plugin id="org.w3c.css.sac"/>
+ <plugin id="org.w3c.dom.events"/>
+ <plugin id="org.w3c.dom.smil"/>
+ <plugin id="org.w3c.dom.svg"/>
+ </plugins>
+
+ <configurations>
+ <plugin id="org.eclipse.core.runtime" autoStart="true" startLevel="0" />
+ <plugin id="org.eclipse.equinox.common" autoStart="true" startLevel="2" />
+ <plugin id="org.eclipse.equinox.ds" autoStart="true" startLevel="1" />
+ <plugin id="org.eclipse.osgi" autoStart="true" startLevel="-1" />
+ </configurations>
+
+</product>
diff --git a/releng/org.eclipse.viatra.modelobfuscator.product/pom.xml b/releng/org.eclipse.viatra.modelobfuscator.product/pom.xml
new file mode 100644
index 0000000..7e24c92
--- /dev/null
+++ b/releng/org.eclipse.viatra.modelobfuscator.product/pom.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>org.eclipse.viatra.modelobfuscator.parent</artifactId>
+ <groupId>org.eclipse.viatra</groupId>
+ <version>0.7.0-SNAPSHOT</version>
+ <relativePath>../../releng/org.eclipse.viatra.modelobfuscator.parent/pom.xml</relativePath>
+ </parent>
+ <artifactId>org.eclipse.viatra.modelobfuscator.product</artifactId>
+ <packaging>eclipse-repository</packaging>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-p2-director-plugin</artifactId>
+ <version>${tycho.version}</version>
+ <configuration>
+ <formats>
+ <win32>zip</win32>
+ <linux>tar.gz</linux>
+ <macosx>zip</macosx>
+ </formats>
+ </configuration>
+ <executions>
+ <execution>
+ <id>materialize-products</id>
+ <goals>
+ <goal>materialize-products</goal>
+ </goals>
+ </execution>
+ <execution>
+ <id>archive-products</id>
+ <goals>
+ <goal>archive-products</goal>
+ </goals>
+
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
\ No newline at end of file
diff --git a/releng/org.eclipse.viatra.modelobfuscator.target/org.eclipse.viatra.modelobfuscator.target.target b/releng/org.eclipse.viatra.modelobfuscator.target/org.eclipse.viatra.modelobfuscator.target.target
index b038cbf..0ca1fea 100644
--- a/releng/org.eclipse.viatra.modelobfuscator.target/org.eclipse.viatra.modelobfuscator.target.target
+++ b/releng/org.eclipse.viatra.modelobfuscator.target/org.eclipse.viatra.modelobfuscator.target.target
@@ -16,6 +16,7 @@
<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
<unit id="org.eclipse.platform.sdk" version="3.7.2.M20120208-0800"/>
<unit id="org.eclipse.sdk.ide" version="3.7.2.M20120208-0800"/>
+ <unit id="org.eclipse.equinox.sdk.feature.group" version="3.7.1.R37x_v20110907-7M7W8i8eNV4WsRkue-4Vq4J6pCyW"/>
<repository location="http://download.eclipse.org/eclipse/updates/3.7"/>
</location>
<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">