/**
 ********************************************************************************
 * Copyright (c) 2017-2020 Robert Bosch GmbH.
 * 
 * This program and the accompanying materials are made
 * available under the terms of the Eclipse Public License 2.0
 * which is available at https://www.eclipse.org/legal/epl-2.0/
 * 
 * SPDX-License-Identifier: EPL-2.0
 * 
 * Contributors:
 *     Robert Bosch GmbH - initial API and implementation
 ********************************************************************************
 */

package org.eclipse.app4mc.emf.viewer.plantuml.handlers;

import javax.inject.Named;

import org.eclipse.app4mc.emf.viewer.plantuml.builders.AbstractPlantUMLBuilder;
import org.eclipse.app4mc.emf.viewer.plantuml.builders.EClassContentsFromReferenceBuilder;
import org.eclipse.app4mc.emf.viewer.plantuml.preferences.PreferenceConstants;
import org.eclipse.app4mc.emf.viewer.plantuml.utils.ExecutionCategory;
import org.eclipse.e4.core.di.annotations.Execute;
import org.eclipse.e4.core.di.annotations.Optional;
import org.eclipse.e4.core.di.extensions.Preference;
import org.eclipse.e4.ui.di.UISynchronize;
import org.eclipse.e4.ui.services.IServiceConstants;
import org.eclipse.e4.ui.workbench.modeling.EPartService;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.widgets.Shell;

import net.sourceforge.plantuml.eclipse.utils.PlantumlConstants;

@SuppressWarnings("restriction")
public class EClassContentsFromReferenceHandler extends AbstractPlantUMLHandler {
	
	@Override
	protected AbstractPlantUMLBuilder createPlantUMLBuilder(UISynchronize sync) {
		return new EClassContentsFromReferenceBuilder(); 
	}
	
	@Override
	protected ExecutionCategory getExecutionCategory() {
		return ExecutionCategory.eClassContentsFromReference;
	}
	
	@Override
	public String getFileNamePrefix(Object eObject) {
		if (eObject instanceof EObject) {
			return ((EObject)eObject).eClass().getName() + "__reference_type_Hierarchy";
		}
		return eObject.getClass().getName() + "__reference_type_Hierarchy";
	}
	
	@Override
	@Execute
	public void execute(
			Shell shell,
			UISynchronize sync,
			@Optional
			@Preference(
					nodePath = "net.sourceforge.plantuml.eclipse", 
					value = PlantumlConstants.GRAPHVIZ_PATH) 
			String dotPath,
			@Optional
			@Preference(
					nodePath = "org.eclipse.app4mc.emf.viewer.plantuml", 
					value = PreferenceConstants.P_FOLDER_PATH) 
			String genFolderPath,
			@Named(IServiceConstants.ACTIVE_SELECTION) IStructuredSelection selection,
			EPartService partService) {
		
		super.execute(shell, sync, dotPath, genFolderPath, selection, partService);
	}
}
