/******************************************************************************* * Copyright (c) 2007-2009 Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is 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 * * Contributor: * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.hibernate.ui.view; import org.hibernate.console.ConsoleConfiguration; import org.hibernate.eclipse.console.workbench.ValueTypeNameHelper; import org.jboss.tools.hibernate.runtime.spi.IColumn; import org.jboss.tools.hibernate.runtime.spi.IPersistentClass; import org.jboss.tools.hibernate.runtime.spi.IProperty; import org.jboss.tools.hibernate.runtime.spi.ITable; import org.jboss.tools.hibernate.runtime.spi.IType; import org.jboss.tools.hibernate.runtime.spi.IValue; import org.jboss.tools.hibernate.ui.diagram.editors.model.UtilTypeExtract; import org.jboss.tools.hibernate.ui.diagram.editors.model.Utils; /** * Map: ORM object -> label * @author some modifications from Vitali */ public class OrmLabelMap { static private String SPACE = " "; //$NON-NLS-1$ static private String POINTER = " -> "; //$NON-NLS-1$ private OrmLabelMap() {} public static String getLabel(final Object obj, final ConsoleConfiguration cfg) { String label = null; if (obj instanceof ITable) { label = getParticularLabel((ITable)obj); } else if (obj instanceof IColumn) { label = getParticularLabel((IColumn)obj); } else if (obj instanceof IProperty) { label = getParticularLabel((IProperty)obj, cfg); } else if (obj instanceof IProperty) { label = getParticularLabel((IProperty)obj, cfg); } else if (obj instanceof IValue && (((IValue)obj).isSimpleValue() || ((IValue)obj).isOneToMany())) { label = getParticularLabel((IValue)obj); } else if (obj instanceof IPersistentClass) { label = getParticularLabel((IPersistentClass)obj); } else if (obj instanceof String) { label = (String)obj; } else { throw unknownElement(obj); } if (label == null) { label = UIViewMessages.OrmLabelProvider_orm_element; } return label; } public static String getParticularLabel(ITable table) { return Utils.getTableName(table); } public static String getParticularLabel(IColumn column) { final String sqlType = column.getSqlType(); StringBuffer name = new StringBuffer(); name.append(column.getName()); if (sqlType != null) { name.append(" ["); //$NON-NLS-1$ name.append(sqlType.toUpperCase()); name.append(column.isNullable() ? " Nullable" : ""); //$NON-NLS-1$ //$NON-NLS-2$ name.append(HibernateUtils.getTable(column) != null && HibernateUtils.isPrimaryKey(column) ? " PK" : ""); //$NON-NLS-1$ //$NON-NLS-2$ name.append(HibernateUtils.getTable(column) != null && HibernateUtils.isForeignKey(column) ? " FK" : ""); //$NON-NLS-1$ //$NON-NLS-2$ name.append("]"); //$NON-NLS-1$ } return name.toString(); } public static String getParticularLabel(IProperty field, final ConsoleConfiguration cfg) { StringBuffer name = new StringBuffer(); name.append(field.getName()); name.append(" :"); //$NON-NLS-1$ String typeString = null; IValue v = field.getValue(); IType type = UtilTypeExtract.getTypeUsingExecContext(v, cfg); if (type != null && type.getAssociatedEntityName() != null) { typeString = type.getAssociatedEntityName(); } else { IValue fieldValue = field.getValue(); if (fieldValue != null && fieldValue.isComponent()) { typeString = fieldValue.getComponentClassName(); } else if (fieldValue != null && fieldValue.isSimpleValue()) { typeString = fieldValue.getTypeName(); } } if (typeString != null) { typeString = correctTypeString(typeString); name.append(SPACE); name.append(typeString); return name.toString(); } IValue value = field.getValue(); String typeName = null; if (value != null) { typeName = (String) new ValueTypeNameHelper(false).getTypeName(value); if (typeName != null) { return field.getName() + " : " + typeName; //$NON-NLS-1$ } } return field.getName(); } /** * the label for hierarchy: * SimpleValue * |-- Any * |-- Component * |-- DependantValue * |-- ToOne * |-- ManyToOne * |-- OneToOne * @param field * @return */ public static String getParticularLabel(IValue value) { String label = UIViewMessages.OrmLabelProvider_element; if (value.isDependantValue()) { label = "key"; //$NON-NLS-1$ } else if (value.isComponent()) { label = "element"; //$NON-NLS-1$ } else if (value.isOneToMany()) { label = UIViewMessages.OrmLabelProvider_element; } return label; } /** * the label for hierarchy: * PersistentClass * |-- RootClass * | |-- SpecialRootClass * | * |-- Subclass * |-- JoinedSubclass * |-- SingleTableSubclass * |-- UnionSubclass * @param persistentClass * @return */ public static String getParticularLabel(IPersistentClass persistentClass) { StringBuffer name = new StringBuffer(); name.append(persistentClass.getEntityName() != null ? persistentClass.getEntityName() : persistentClass.getClassName()); ITable table = persistentClass.getTable(); if (table != null) { final String tableName = Utils.getTableName(table); if (tableName != null) { name.append(POINTER); name.append(tableName); } } return name.toString(); } private static String correctTypeString(String str) { String ret = str; while (ret.startsWith("[")) { //$NON-NLS-1$ ret = ret.substring(1).concat("[]"); //$NON-NLS-1$ } switch (ret.toCharArray()[0]) { case 'Z': ret = "boolean".concat(ret.substring(1));break; //$NON-NLS-1$ case 'B': ret = "byte".concat(ret.substring(1));break; //$NON-NLS-1$ case 'C': ret = "char".concat(ret.substring(1));break; //$NON-NLS-1$ case 'L': ret = ret.substring(1);break; case 'D': ret = "double".concat(ret.substring(1));break; //$NON-NLS-1$ case 'F': ret = "float".concat(ret.substring(1));break; //$NON-NLS-1$ case 'I': ret = "int".concat(ret.substring(1));break; //$NON-NLS-1$ case 'J': ret = "long".concat(ret.substring(1));break; //$NON-NLS-1$ case 'S': ret = "short".concat(ret.substring(1));break; //$NON-NLS-1$ } return ret; } private static RuntimeException unknownElement(Object element) { String msg = UIViewMessages.OrmLabelProvider_unknown_type_of_element_in_tree_of_type; if (element != null && element.getClass() != null ) { msg = msg + element.getClass().getName(); } else { msg = msg + element; } return new RuntimeException(msg); } }