/*
* 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.property;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.views.properties.IPropertyDescriptor;
import org.neo4j.neoclipse.property.PropertyTransform.PropertyHandler;
/**
* Describes a single property of a Neo node or relationship.
* @author Peter Hänsgen
* @author Anders Nawroth
*/
public class PropertyDescriptor implements IPropertyDescriptor
{
/**
* The key for identifying the value of the property.
*/
private Object key;
/**
* The name of the property.
*/
private String name;
/**
* The category of the property.
*/
private String category;
/**
* Class of property content.
*/
private Class<?> cls = null;
private PropertyHandler propertyHandler;
private final static ILabelProvider labelProvider = new PropertyLabelProvider();
private final static ILabelProvider containerLabelProvider = new ContainerLabelProvider();
/**
* A constant, empty array, to be used instead of a null array.
*/
private static final String[] EMPTY_ARRAY = new String[0];
/**
* Create a Neo property cell.
* @param key
* the key of the property
* @param name
* the name of the property
* @param category
* the category of the property
* @param allowEdit
* choose if this cell should be possible to edit
*/
public PropertyDescriptor( Object key, String name, String category,
Class<?> cls )
{
this.key = key;
this.name = name;
this.category = category;
this.cls = cls;
this.propertyHandler = PropertyTransform.getHandler( cls );
}
/**
* Create a Neo property cell without editing capabilities. Use this for id
* and relationship types "fake properties".
* @param key
* the key of the property
* @param name
* the name of the property
* @param category
* the category of the property
* @param allowEdit
* choose if this cell should be possible to edit
*/
public PropertyDescriptor( Object key, String name, String category )
{
this.key = key;
this.name = name;
this.category = category;
}
public CellEditor createPropertyEditor( Composite parent )
{
if ( propertyHandler != null )
{
return propertyHandler.getEditor( parent );
}
return null;
}
public String getCategory()
{
return category;
}
public String getDescription()
{
if ( cls != null )
{
return "The property '" + key + "' is of type "
+ cls.getSimpleName();
}
return "";
}
public String getDisplayName()
{
return name;
}
public String[] getFilterFlags()
{
return EMPTY_ARRAY;
}
public Object getHelpContextIds()
{
return null;
}
public Object getId()
{
return key;
}
public ILabelProvider getLabelProvider()
{
if ( NodePropertySource.NODE_CATEGORY == category
|| RelationshipPropertySource.RELATIONSHIP_CATEGORY == category )
{
return containerLabelProvider;
}
return labelProvider;
}
public boolean isCompatibleWith( IPropertyDescriptor anotherProperty )
{
return false;
}
}