/**
 *  Copyright (c)2020 CEA LIST, Committer Name, and others.
 * 
 *  All rights reserved. This program and the accompanying materials
 *  are made available under the terms of the Eclipse Public License 2.0
 *  which accompanies this distribution, and is available at
 *  https://www.eclipse.org/legal/epl-2.0/
 * 
 *  SPDX-License-Identifier: EPL-2.0
 * 
 *  Contributors:
 *  CEA LIST - Initial API and implementation
 *  Patrick Tessier (CEA LIST) Patrick.tessier@cea.fr 
 *  Gabriel Pedroza (CEA LIST) gabriel.pedroza@cea.fr 
 * 
 */
package org.eclipse.papyrus.pdp4eng.req.ui;

import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.papyrus.pdp4eng.req.gdprananalysis.api.IRequirementGenerator;
import org.eclipse.papyrus.pdp4eng.req.gdprananalysis.api.RequirementGenerator;
import org.eclipse.papyrus.pdp4eng.req.profile.constraints.TraceabilityIndexer;
import org.eclipse.papyrus.requirements.sysml14.common.PapyrusAbstractHandler;
import org.eclipse.uml2.uml.Element;
import org.eclipse.uml2.uml.Package;
/**
 * Executes the creation of a new SysML requirement based on the Papyrus Req
 * preferences page.
 *
 */
public class GenerateGDPRRequirementHandler extends PapyrusAbstractHandler {
		public Object execute(ExecutionEvent event) throws ExecutionException {
			super.execute(event);
			Element selectedElement = getSelection();
			if (selectedElement != null) {
				IRequirementGenerator generator= new RequirementGenerator();
				TraceabilityIndexer.getInstance().loadTraceability((Package)selectedElement);
				transactionalEditingDomain.getCommandStack().execute(generator.generateArticle51a(transactionalEditingDomain, (Package)selectedElement));
				transactionalEditingDomain.getCommandStack().execute(generator.generateArticle51b(transactionalEditingDomain, (Package)selectedElement));
				transactionalEditingDomain.getCommandStack().execute(generator.generateArticle51c(transactionalEditingDomain, (Package)selectedElement));
				transactionalEditingDomain.getCommandStack().execute(generator.generateArticle51d(transactionalEditingDomain, (Package)selectedElement));
				transactionalEditingDomain.getCommandStack().execute(generator.generateArticle51e(transactionalEditingDomain, (Package)selectedElement));
				transactionalEditingDomain.getCommandStack().execute(generator.generateArticle51f(transactionalEditingDomain, (Package)selectedElement));
				transactionalEditingDomain.getCommandStack().execute(generator.generateArticle61a(transactionalEditingDomain, (Package)selectedElement));
				transactionalEditingDomain.getCommandStack().execute(generator.generateArticle61b(transactionalEditingDomain, (Package)selectedElement));
				transactionalEditingDomain.getCommandStack().execute(generator.generateArticle61c(transactionalEditingDomain, (Package)selectedElement));
				transactionalEditingDomain.getCommandStack().execute(generator.generateArticle61d(transactionalEditingDomain, (Package)selectedElement));
				transactionalEditingDomain.getCommandStack().execute(generator.generateArticle61e(transactionalEditingDomain, (Package)selectedElement));
				transactionalEditingDomain.getCommandStack().execute(generator.generateArticle61f(transactionalEditingDomain, (Package)selectedElement));
				transactionalEditingDomain.getCommandStack().execute(generator.generateArticle64(transactionalEditingDomain, (Package)selectedElement));
				
			}
			return null;
		}

	/**
	 * 
	 * @see org.eclipse.core.commands.AbstractHandler#isEnabled()
	 * 
	 * @return true if the handler is possible
	 */
	@Override
	public boolean isEnabled() {
		Element selectedElement = getSelection();
		if (selectedElement instanceof Package) {
			return true;
		} else {
			return false;
		}
	}
}
