/* * JBoss, Home of Professional Open Source * Copyright 2005, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.hibernate.console.node; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.hibernate.console.ConsoleConfiguration; import org.hibernate.console.ConsoleMessages; import org.hibernate.console.ImageConstants; import org.jboss.tools.hibernate.runtime.spi.HibernateException; import org.jboss.tools.hibernate.runtime.spi.IClassMetadata; import org.jboss.tools.hibernate.runtime.spi.ICollectionMetadata; import org.jboss.tools.hibernate.runtime.spi.IService; import org.jboss.tools.hibernate.runtime.spi.ISession; import org.jboss.tools.hibernate.runtime.spi.ISessionFactory; import org.jboss.tools.hibernate.runtime.spi.ITable; import org.jboss.tools.hibernate.runtime.spi.IType; /** * @author MAX */ public class NodeFactory { private Map<String, IClassMetadata> classMetaData; private List<String> classes; private Map<String, ICollectionMetadata> collectionMetaData; private ConsoleConfiguration consoleConfiguration; /** * @param c */ public NodeFactory(ConsoleConfiguration c) throws HibernateException { setConsoleConfiguration(c); } private void setConsoleConfiguration(ConsoleConfiguration c) { consoleConfiguration = c; ISessionFactory sf = c.getSessionFactory(); classMetaData = sf.getAllClassMetadata(); collectionMetaData = sf.getAllCollectionMetadata(); classes = new ArrayList<String>(); classes.addAll(classMetaData.keySet()); } public ConfigurationEntitiesNode createConfigurationEntitiesNode(String name) { // Enhancer e = ProxyFactory.createEnhancer(ConfigurationEntitiesNode.class); // // return (ConfigurationEntitiesNode) e.create(new Class[] { String.class, NodeFactory.class, List.class }, // new Object[] { name, this, classes }); return new ConfigurationEntitiesNode(name, this, classes); } public BaseNode createObjectNode(ISession session, Object o) throws Exception { IClassMetadata md = getMetaData(session.getEntityName(o) ); // return internalCreateClassNode(null, md.getEntityName(), md, o, false); return new ClassNode(this,null,md.getEntityName(),md,o,true); } public ClassNode createClassNode(BaseNode node, String clazz) { // return internalCreateClassNode(node, clazz, getMetaData(clazz), null, false); return new ClassNode(this, node, clazz, getMetaData(clazz),null,false); } // private ClassNode internalCreateClassNode(BaseNode node, String clazz,IClassMetadata md, Object o, boolean objectGraph) { // // Enhancer e = ProxyFactory.createEnhancer(ClassNode.class); // // return (ClassNode) e.create(new Class[] { NodeFactory.class, BaseNode.class, String.class, IClassMetadata.class, Object.class, boolean.class}, // new Object[] { this, node, clazz, md,o, Boolean.valueOf(objectGraph) } ); // } public IClassMetadata getMetaData(String clazz) { return classMetaData.get(clazz); } public IClassMetadata getMetaData(Class<?> clazz) { return getMetaData(clazz.getName() ); } public ICollectionMetadata getCollectionMetaData(String role) { return collectionMetaData.get(role); } public BaseNode createPropertyNode(BaseNode parent, int idx, IClassMetadata metadata) { return createPropertyNode(parent, idx, metadata, null,false); } public BaseNode createPropertyNode(BaseNode node, int i, IClassMetadata md, Object baseObject, boolean objectGraph) { // Enhancer e = ProxyFactory.createEnhancer(PropertyNode.class); // // return (BaseNode) e.create(new Class[] { NodeFactory.class, BaseNode.class, int.class, IClassMetadata.class, Object.class, boolean.class}, // new Object[] { this, node, Integer.valueOf(i),md,baseObject,Boolean.valueOf(objectGraph) } ); return new PropertyNode(this, node, i, md, baseObject, objectGraph); } /** * @param node * @param md * @return */ public IdentifierNode createIdentifierNode(BaseNode parent, IClassMetadata md) { // Enhancer e = ProxyFactory.createEnhancer(IdentifierNode.class); // // return (IdentifierNode) e.create(new Class[] { NodeFactory.class, BaseNode.class, IClassMetadata.class}, // new Object[] { this, parent, md } ); return new IdentifierNode(this, parent, md); } public BaseNode createNode(BaseNode parent, final Class<?> clazz) { IClassMetadata metadata = getMetaData(clazz); if(metadata!=null) { return createClassNode(parent, clazz.getName() ); } return new BaseNode(this, parent) { public String getHQL() { return null; } public String getName() { return ConsoleMessages.NodeFactory_unknown + clazz; } protected void checkChildren() { // TODO Auto-generated method stub } }; } public PersistentCollectionNode createPersistentCollectionNode(ClassNode node, String name, IClassMetadata md, IType type, Object baseObject, boolean objectGraph) { // Enhancer e = ProxyFactory.createEnhancer(PersistentCollectionNode.class); // return (PersistentCollectionNode) e.create( // new Class[] { NodeFactory.class, BaseNode.class, String.class, IType.class, IClassMetadata.class, ICollectionMetadata.class, Object.class, boolean.class}, // new Object[] { this, node, name, type, md, getCollectionMetaData(type.getRole() ), baseObject, Boolean.valueOf(objectGraph) } ); return new PersistentCollectionNode(this, node, name, type, md, getCollectionMetaData(type.getRole() ), baseObject, objectGraph); } public String getIconNameForType(IType type) { String result = ImageConstants.UNKNOWNPROPERTY; if(type.isEntityType() ) { if(!type.isOneToOne() ) { result = ImageConstants.MANYTOONE; } else { result = ImageConstants.ONETOONE; } } else if (type.isAnyType() ) { result = ImageConstants.ANY; } else if (type.isComponentType() ) { result = ImageConstants.COMPONENT; } else if (type.isCollectionType() ) { //CollectionType pct = (CollectionType)type; result = ImageConstants.ONETOMANY; //could also be values/collecionts? } else { result = ImageConstants.PROPERTY; } return result; } public ConsoleConfiguration getConsoleConfiguration() { return consoleConfiguration; } public static TableNode createTableNode(BaseNode parent, ITable table) { return new TableNode(parent, table); } public IService getService() { return getConsoleConfiguration().getHibernateExtension().getHibernateService(); } }