/*********************************************************************
* Copyright (c) 2005, 2019 SAP SE
*
* 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/
*
* Contributors:
*    SAP SE - initial API, implementation and documentation
*
* SPDX-License-Identifier: EPL-2.0
**********************************************************************/
package org.eclipse.graphiti.testtool.ecore.features.pack;

import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EcoreFactory;
import org.eclipse.graphiti.examples.common.ExampleUtil;
import org.eclipse.graphiti.features.IFeatureProvider;
import org.eclipse.graphiti.features.context.ICreateContext;
import org.eclipse.graphiti.features.impl.AbstractCreateFeature;
import org.eclipse.graphiti.mm.pictograms.Diagram;

/**
 * The Class TestCreatePackageFeature.
 */
public class TestCreatePackageFeature extends AbstractCreateFeature {

	private static final String TITLE = "Create Package";

	private static final String USER_QUESTION = "Enter new package name";

	/**
	 * Instantiates a new test create package feature.
	 * 
	 * @param fp
	 *            the fp
	 */
	public TestCreatePackageFeature(IFeatureProvider fp) {
		// set name and description of the creation feature
		super(fp, "Package", "Create Package");
	}

	public boolean canCreate(ICreateContext context) {
		return context.getTargetContainer() instanceof Diagram;
	}

	public Object[] create(ICreateContext context) {
		// ask user for package name
		String newPackageName = ExampleUtil.askString(TITLE, USER_QUESTION, "");
		if (newPackageName == null || newPackageName.trim().length() == 0) {
			return EMPTY;
		}

		// create new package
		EPackage newPackage = EcoreFactory.eINSTANCE.createEPackage();
		newPackage.setName(newPackageName);

		getDiagram().eResource().getContents().add(newPackage);

		// do the add
		addGraphicalRepresentation(context, newPackage);

		// return newly created business object(s)
		return new Object[] { newPackage };
	}
}
