/*
* 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.reltype;
import org.neo4j.graphdb.Direction;
import org.neo4j.graphdb.RelationshipType;
import org.neo4j.neoclipse.event.NeoclipseEvent;
import org.neo4j.neoclipse.event.NeoclipseEventListener;
import org.neo4j.neoclipse.event.NeoclipseListenerList;
/**
* This is a single item in the relationship type view, wrapping a relationship
* type.
*
* @author anders
*/
public class RelationshipTypeControl implements DirectedRelationship
{
private final NeoclipseListenerList listeners = new NeoclipseListenerList();
private final RelationshipType relType;
private boolean in = true;
private boolean out = true;
/**
* Wrap a relationship type for display in the table viewer.
*
* @param relType
*/
RelationshipTypeControl( final RelationshipType relType )
{
this.relType = relType;
}
/**
* Is incoming relationships selected?
*
* @return
*/
public boolean isIn()
{
return in;
}
/**
* Set if incoming relationships are selected.
*
* @param in
*/
public void setIn( final boolean in )
{
if ( this.in != in )
{
this.in = in;
notifyListeners();
}
}
/**
* Is outgoing realtionships selected?
*
* @return
*/
public boolean isOut()
{
return out;
}
/**
* Set if outgoing relationships are selected.
*
* @param in
*/
public void setOut( final boolean out )
{
if ( this.out != out )
{
this.out = out;
notifyListeners();
}
}
/* (non-Javadoc)
* @see org.neo4j.neoclipse.reltype.DirectedRelationship#getRelType()
*/
public RelationshipType getRelType()
{
return relType;
}
/**
* True if either incoming or outgoing or both exists.
*
* @return
*/
public boolean hasDirection()
{
return in || out;
}
/* (non-Javadoc)
* @see org.neo4j.neoclipse.reltype.DirectedRelationship#getDirection()
*/
public Direction getDirection()
{
if ( in && out )
{
return Direction.BOTH;
}
if ( in )
{
return Direction.INCOMING;
}
if ( out )
{
return Direction.OUTGOING;
}
throw new RuntimeException(
"There is no direction set for RelationshipType: "
+ relType.name() );
}
/**
* Notify listeners in/out attributes changed.
*/
private void notifyListeners()
{
NeoclipseEvent event = new NeoclipseEvent( this );
listeners.notifyListeners( event );
}
/**
* Add a new listener to changes.
*
* @param newListener
*/
public void addChangeListener( final NeoclipseEventListener newListener )
{
listeners.add( newListener );
}
@Override
public String toString()
{
return relType.name() + in + out;
}
@Override
public boolean equals( final Object obj )
{
if ( this == obj )
{
return true;
}
if ( obj instanceof RelationshipTypeControl )
{
return this.getRelType().name().equals(
( (DirectedRelationship) obj ).getRelType().name() );
}
return false;
}
@Override
public int hashCode()
{
return this.getRelType().name().hashCode();
}
}