blob: 3f3e2c17d5b5df879d53689d18444767e8d51185 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010-2015, Abel Hegedus, Tamas Borbas, 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
* Tamas Borbas - adapting
*******************************************************************************/
package org.eclipse.viatra.modelobfuscator.ui.handlers;
import java.util.Map;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.runtime.ILog;
import org.eclipse.core.runtime.Status;
import org.eclipse.emf.common.command.AbstractCommand;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.emf.edit.domain.IEditingDomainProvider;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.handlers.HandlerUtil;
import org.eclipse.viatra.modelobfuscator.api.ModelObfuscator;
import org.eclipse.viatra.modelobfuscator.ui.ModelObfuscatorUIPlugin;
public abstract class AbstractModelObfuscatorHandler extends AbstractHandler {
protected abstract ModelObfuscator createModelObfuscator(ResourceSet resourceSet, final EditingDomain editingDomain, ExecutionEvent event);
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
IEditorPart editorPart = HandlerUtil.getActiveEditor(event);
ResourceSet resourceSet = null;
if (editorPart instanceof IEditingDomainProvider) {
IEditingDomainProvider editingDomainProvider = (IEditingDomainProvider) editorPart;
final EditingDomain editingDomain = editingDomainProvider.getEditingDomain();
resourceSet = editingDomain.getResourceSet();
if (resourceSet != null) {
ILog logger = ModelObfuscatorUIPlugin.getDefault().getLog();
final ModelObfuscator obfuscator = createModelObfuscator(resourceSet, editingDomain, event);
if(obfuscator==null) {
System.out.println("No obfuscator.");
return null;
}
final String seed = obfuscator.getStringObfuscator().getSeed();
boolean confirmed = MessageDialog
.openConfirm(
HandlerUtil.getActiveShell(event),
"Model obfuscation",
"This tool replaces all string attribute values with obfuscated values.\n"
+ " You can Undo the operation or restore the original values with this seed:\n"
+ seed + "\n(logged also as an Info level event)"
+ "Do you want to perform model obuscation?");
if (confirmed) {
logger.log(new Status(Status.INFO, ModelObfuscatorUIPlugin.PLUGIN_ID, "Obfuscating with seed: "
+ seed));
AbstractCommand obfuscationCommand = new AbstractCommand("Obfuscate model") {
@Override
public void redo() {
// obfuscation with the same seed is deterministic
obfuscator.obfuscate();
}
@Override
public void undo() {
obfuscator.restore();
}
@Override
public void execute() {
obfuscator.obfuscate();
Map<String,String> oMap = obfuscator.getObfuscationMap();
printout(oMap, seed);
}
@Override
protected boolean prepare() {
super.prepare();
return true;
}
private void printout(Map<String,String> oMap, String seed) {
if(oMap!=null) {
StringBuffer mapContent = new StringBuffer("Original;Modified;Obfuscation seed: "+seed+";");
for (String key : oMap.keySet()) {
mapContent.append("\n"+key+";"+oMap.get(key)+";");
}
print(mapContent.toString());
}
}
};
editingDomain.getCommandStack().execute(obfuscationCommand);
}
}
}
return null;
}
protected void print(String content) {
System.out.println(content);
}
}