blob: cf557401e464061f8be0757c129ba37987090d03 [file] [log] [blame]
/*
* Copyright (c) 2015 Eike Stepper (Berlin, Germany) and others.
* 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:
* Eike Stepper - initial API and implementation
* Victor Roldan Betancort - maintenance
*/
package org.eclipse.emf.cdo.internal.ui.actions;
import org.eclipse.emf.cdo.eresource.CDOResource;
import org.eclipse.emf.cdo.eresource.CDOResourceFolder;
import org.eclipse.emf.cdo.eresource.CDOResourceNode;
import org.eclipse.emf.cdo.eresource.EresourceFactory;
import org.eclipse.emf.cdo.internal.ui.messages.Messages;
import org.eclipse.emf.cdo.transaction.CDOTransaction;
import org.eclipse.emf.cdo.ui.CDOEditorUtil;
import org.eclipse.emf.cdo.ui.CDOItemProvider;
import org.eclipse.emf.cdo.ui.shared.SharedIcons;
import org.eclipse.emf.cdo.view.CDOView;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.IWorkbenchPage;
/**
* @author Eike Stepper
*/
public class NewTopLevelResourceNodeAction extends AbstractViewAction
{
private CDOItemProvider itemProvider;
private CDOResourceNode selectedNode;
private Type type;
private String resourceNodeName;
public NewTopLevelResourceNodeAction(CDOItemProvider itemProvider, IWorkbenchPage page, CDOView view,
CDOResourceNode node, Type type)
{
super(page, type.getTitle() + INTERACTIVE, type.getTooltip(), type.getImageDescriptor(), view);
selectedNode = node;
this.itemProvider = itemProvider;
this.type = type;
}
@Override
protected void preRun() throws Exception
{
String initialValue = (type == Type.FOLDER ? "folder" : "resource") + (AbstractViewAction.lastResourceNumber + 1);
InputDialog dialog = new InputDialog(getShell(), getText(), Messages.getString("NewResourceNodeAction.8"),
initialValue, new ResourceNodeNameInputValidator(selectedNode));
if (dialog.open() == InputDialog.OK)
{
++AbstractViewAction.lastResourceNumber;
resourceNodeName = dialog.getValue();
}
else
{
cancel();
}
}
@Override
protected void doRun(IProgressMonitor progressMonitor) throws Exception
{
CDOTransaction transaction = getTransaction();
CDOResourceNode node = null;
switch (type)
{
case FOLDER:
node = EresourceFactory.eINSTANCE.createCDOResourceFolder();
node.setName(resourceNodeName);
if (selectedNode instanceof CDOResourceFolder)
{
((CDOResourceFolder)selectedNode).getNodes().add(node);
}
else
{
((CDOResource)selectedNode).getContents().add(node); // selectedNode is root resource
}
break;
case MODEL:
if (selectedNode instanceof CDOResourceFolder)
{
node = transaction.createResource(selectedNode.getPath() + "/" + resourceNodeName); //$NON-NLS-1$
}
else
{
node = transaction.createResource(resourceNodeName);
}
break;
case TEXT:
if (selectedNode instanceof CDOResourceFolder)
{
node = transaction.createTextResource(selectedNode.getPath() + "/" + resourceNodeName); //$NON-NLS-1$
}
else
{
node = transaction.createTextResource(resourceNodeName);
}
break;
case BINARY:
if (selectedNode instanceof CDOResourceFolder)
{
node = transaction.createBinaryResource(selectedNode.getPath() + "/" + resourceNodeName); //$NON-NLS-1$
}
else
{
node = transaction.createBinaryResource(resourceNodeName);
}
break;
}
transaction.commit();
itemProvider.refreshViewer(true);
itemProvider.selectElement(node, true);
if (type == Type.MODEL)
{
String resourcePath = node.getPath();
CDOEditorUtil.openEditor(getPage(), transaction, resourcePath);
}
}
/**
* @author Eike Stepper
*/
public static enum Type
{
FOLDER(Messages.getString("Title.Folder"), Messages.getString("Tooltip.Folder"),
SharedIcons.getDescriptor(SharedIcons.ETOOL_NEW_RESOURCE_FOLDER)),
MODEL(Messages.getString("Title.Model"), Messages.getString("Tooltip.Model"),
SharedIcons.getDescriptor(SharedIcons.ETOOL_NEW_RESOURCE)),
TEXT(Messages.getString("Title.Text"), Messages.getString("Tooltip.Text"),
SharedIcons.getDescriptor(SharedIcons.ETOOL_NEW_TEXT_RESOURCE)),
BINARY(Messages.getString("Title.Binary"), Messages.getString("Tooltip.Binary"),
SharedIcons.getDescriptor(SharedIcons.ETOOL_NEW_BINARY_RESOURCE));
private String title;
private String tooltip;
private ImageDescriptor imageDescriptor;
private Type(String title, String tooltip, ImageDescriptor imageDescriptor)
{
this.title = title;
this.tooltip = tooltip;
this.imageDescriptor = imageDescriptor;
}
public String getTitle()
{
return title;
}
public String getTooltip()
{
return tooltip;
}
public ImageDescriptor getImageDescriptor()
{
return imageDescriptor;
}
}
}