/*
* Licensed to "Neo Technology," Network Engine for Objects in Lund AB
* (http://neotechnology.com) under one or more contributor license agreements.
* See the NOTICE file distributed with this work for additional information
* regarding copyright ownership. Neo Technology licenses this file to you under
* the Apache License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of the License
* at (http://www.apache.org/licenses/LICENSE-2.0). Unless required by
* applicable law or agreed to in writing, software distributed under the
* License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
* OF ANY KIND, either express or implied. See the License for the specific
* language governing permissions and limitations under the License.
*/
package org.neo4j.neoclipse.action.reltype;
import org.eclipse.jface.dialogs.InputDialog;
import org.neo4j.graphdb.RelationshipType;
import org.neo4j.neoclipse.action.AbstractBaseAction;
import org.neo4j.neoclipse.action.Actions;
import org.neo4j.neoclipse.graphdb.GraphDbUtil;
import org.neo4j.neoclipse.reltype.RelationshipTypesProvider;
import org.neo4j.neoclipse.view.NeoGraphViewPart;
/**
* Action to create a new RelationshipType. The new type will be persisted upon
* use in a relationship. By using a different constructor you can also ad an
* extra action that changes the node space, using the new relationship type.
* @author Anders Nawroth
*/
public class NewRelationshipTypeAction extends AbstractBaseAction
{
/**
* Node space actions. NONE: do nothing, RELATIONSHIP: add a relationship
* between two nodes, OUTGOING_NODE: add a new node as end node,
* INCOMING_NODE: add a new node as start node.
*/
public enum NodeSpaceAction
{
NONE, RELATIONSHIP, OUTGOING_NODE, INCOMING_NODE
}
private static final String NEW_RELTYPE_DIALOG_TEXT = "Please enter the name of the new relationship type";
private static final String NEW_RELTYPE_DIALOG_TITLE = "New relationship type entry";
protected static final int OK = 0;
private final RelationshipTypesProvider provider;
private NodeSpaceAction extraAction = NodeSpaceAction.NONE;
private NeoGraphViewPart graphView;
/**
* Create new relationship type the standard way.
* @param provider
*/
public NewRelationshipTypeAction( final RelationshipTypesProvider provider )
{
super( Actions.NEW_RELATIONSHIP_TYPE );
this.provider = provider;
}
/**
* Create a relationship and add an node space action as well.
* @param provider
* @param nodeSpaceAction
* @param graphView
*/
public NewRelationshipTypeAction( final RelationshipTypesProvider provider,
final NodeSpaceAction nodeSpaceAction, final NeoGraphViewPart graphView )
{
this( provider );
this.extraAction = nodeSpaceAction;
this.graphView = graphView;
}
@Override
public void run()
{
InputDialog input = new InputDialog( null, NEW_RELTYPE_DIALOG_TITLE,
NEW_RELTYPE_DIALOG_TEXT, null, null );
if ( input.open() == OK && input.getReturnCode() == OK )
{
RelationshipType relType = provider.addFakeType( input.getValue() );
switch ( extraAction )
{
case NONE:
return;
case RELATIONSHIP:
GraphDbUtil.addRelationshipAction( relType, graphView );
break;
case OUTGOING_NODE:
GraphDbUtil.addOutgoingNodeAction( relType, graphView );
break;
case INCOMING_NODE:
GraphDbUtil.addIncomingNodeAction( relType, graphView );
break;
}
}
}
}