/*******************************************************************************
 * Copyright (c) 2010-2014, Abel Hegedus, Istvan Rath and Daniel Varro
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0 which is available at
 * http://www.eclipse.org/legal/epl-v20.html.
 * 
 * SPDX-License-Identifier: EPL-2.0
 *******************************************************************************/
package org.eclipse.viatra.modelobfuscator.ui.handlers;

import java.util.HashMap;

import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.viatra.modelobfuscator.emf.simple.AbstractModelObfuscator;
import org.eclipse.viatra.modelobfuscator.emf.simple.EMFModelObfuscatorBuilder;
import org.eclipse.viatra.modelobfuscator.emf.simple.ResourceFilter;
import org.eclipse.viatra.modelobfuscator.emf.simple.SimpleEMFModelObfuscator;

/**
 * This command handler executes the model obfuscator in a way that only writable resources are modified in the resource
 * set of the editing domain provided by the editor.
 * 
 * <p/>The seed used for the obfuscator is displayed in a confirmation dialog and logged to the Eclips logger with Info
 * level.
 * 
 * <p/>The obfuscation is performed with a {@link SimpleEMFModelObfuscator} in an EMF command, therefore it supports undo/redo and correctly notifies the editor to
 * show a dirty state.
 * 
 * @author Abel Hegedus
 *
 */
public class EMFModelObfuscatorHandler extends AbstractModelObfuscatorHandler {

	@Override
	protected AbstractModelObfuscator createModelObfuscator(ResourceSet resourceSet, final EditingDomain editingDomain, ExecutionEvent event ) {
		return EMFModelObfuscatorBuilder.create().setInput(resourceSet)
		        .setTraceMap(new HashMap<String,String>())
                .setFilter(new ResourceFilter() {
                    @Override
                    public boolean avoidObfuscation(Resource resource) {
                        return editingDomain.isReadOnly(resource);
                    }
                }).build();
	}

}
