[Squirrel-sql-commits] SF.net SVN: squirrel-sql:[5902] trunk/sql12
A Java SQL client for any JDBC compliant database
Brought to you by:
colbell,
gerdwagner
From: <ger...@us...> - 2010-09-28 22:15:41
|
Revision: 5902 http://squirrel-sql.svn.sourceforge.net/squirrel-sql/?rev=5902&view=rev Author: gerdwagner Date: 2010-09-28 22:15:31 +0000 (Tue, 28 Sep 2010) Log Message: ----------- Hibernate Plugin: - New handling of limiting object count for HQL queries. - Hibernate session can now be started in an external process. This can keep SQuirreL from running into memory problems when working with the Hibernate Plugin. See Hibernate configuration panel for details. Modified Paths: -------------- trunk/sql12/doc/src/main/resources/changes.txt trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/ConnectionListener.java trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/HQLPanelController.java trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/HibernatePrefsListener.java trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/HibernateSQLPanel.java trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/HibernateTabController.java trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/HibnerateConnector.java trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/HibnerateConnectorListener.java trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/IHibernateConnectionProvider.java trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/IHibernateTabController.java trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/SQLPanelManager.java trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/completion/AliasFinderListener.java trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/completion/AliasInfo.java trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/completion/HQLCodeCompletorModel.java trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/configuration/HibernateConfigController.java trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/configuration/HibernateConfigPanel.java trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/mapping/DetailAttribute.java trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/mapping/MappedObjectPanelManager.java trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/mapping/MappingRoot.java trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/util/HibernateUtil.java trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/viewobjects/CommandLineOutput.java trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/viewobjects/ObjectResultController.java trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/viewobjects/ObjectResultTabController.java trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/viewobjects/PersistentCollectionResult.java trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/viewobjects/QueryListCreator.java trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/viewobjects/ResultDataSet.java trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/viewobjects/SingleType.java trunk/sql12/plugins/hibernate/src/main/resources/net/sourceforge/squirrel_sql/plugins/hibernate/I18NStrings.properties trunk/sql12/plugins/hibernate/src/main/resources/net/sourceforge/squirrel_sql/plugins/hibernate/configuration/I18NStrings.properties Added Paths: ----------- trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/HibernateConnection.java trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/HibernateConnectionFactory.java trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/LimitObjectCountDialog.java trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/configuration/ProcessDetails.java trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/configuration/ProcessDetailsController.java trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/configuration/ProcessDetailsDialog.java trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/mapping/MappedClassInfo.java trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/mapping/PropertyInfo.java trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/server/ trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/server/HibernateConfiguration.java trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/server/HibernatePropertyInfo.java trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/server/HibernateServerConnection.java trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/server/HibernateServerConnectionImpl.java trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/server/HibernateSqlConnectionData.java trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/server/IntraVmConnectionFactory.java trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/server/MappedClassInfoData.java trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/server/RCParam.java trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/server/ReflectionCaller.java trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/server/ServerMain.java trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/server/ServerMainImpl.java Removed Paths: ------------- trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/HibernateConnection.java trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/RCParam.java trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/ReflectionCaller.java trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/configuration/HibernateConfiguration.java trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/mapping/HibernatePropertyInfo.java trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/mapping/MappedClassInfo.java trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/mapping/MappingUtils.java trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/mapping/PropertyInfo.java Modified: trunk/sql12/doc/src/main/resources/changes.txt =================================================================== --- trunk/sql12/doc/src/main/resources/changes.txt 2010-09-28 17:26:38 UTC (rev 5901) +++ trunk/sql12/doc/src/main/resources/changes.txt 2010-09-28 22:15:31 UTC (rev 5902) @@ -6,6 +6,12 @@ Enhancements: +Hibernate Plugin: + - New handling of limiting object count for HQL queries. + - Hibernate session can now be started in an external process. + This can keep SQuirreL from running into memory problems when working with the Hibernate Plugin. + See Hibernate configuration panel for details. + Introduced a new general data type property 'Use column labels instead of column names in result headers'. See Global Preferences --> Tab 'Data Type Controls'. Will be useful e.g. for MySQL if Aliases are used in Select clauses. Modified: trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/ConnectionListener.java =================================================================== --- trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/ConnectionListener.java 2010-09-28 17:26:38 UTC (rev 5901) +++ trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/ConnectionListener.java 2010-09-28 22:15:31 UTC (rev 5902) @@ -1,6 +1,6 @@ package net.sourceforge.squirrel_sql.plugins.hibernate; -import net.sourceforge.squirrel_sql.plugins.hibernate.configuration.HibernateConfiguration; +import net.sourceforge.squirrel_sql.plugins.hibernate.server.HibernateConfiguration; public interface ConnectionListener { Modified: trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/HQLPanelController.java =================================================================== --- trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/HQLPanelController.java 2010-09-28 17:26:38 UTC (rev 5901) +++ trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/HQLPanelController.java 2010-09-28 22:15:31 UTC (rev 5902) @@ -15,7 +15,6 @@ import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; import java.util.ArrayList; -import java.util.List; public class HQLPanelController { Deleted: trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/HibernateConnection.java =================================================================== --- trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/HibernateConnection.java 2010-09-28 17:26:38 UTC (rev 5901) +++ trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/HibernateConnection.java 2010-09-28 22:15:31 UTC (rev 5902) @@ -1,205 +0,0 @@ -package net.sourceforge.squirrel_sql.plugins.hibernate; - -import java.net.URLClassLoader; -import java.sql.Connection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.Map; - -import net.sourceforge.squirrel_sql.fw.util.Utilities; -import net.sourceforge.squirrel_sql.fw.util.log.ILogger; -import net.sourceforge.squirrel_sql.fw.util.log.LoggerController; -import net.sourceforge.squirrel_sql.plugins.hibernate.mapping.HibernatePropertyInfo; -import net.sourceforge.squirrel_sql.plugins.hibernate.mapping.MappedClassInfo; - -public class HibernateConnection -{ - private static ILogger s_log = LoggerController.createLogger(HibernateConnection.class); - private Object _sessionFactoryImpl; - private URLClassLoader _cl; - private ArrayList<MappedClassInfo> _mappedClassInfos; - private ReflectionCaller m_rcHibernateSession; - - - public HibernateConnection(Object sessionFactoryImpl, URLClassLoader cl) - { - _sessionFactoryImpl = sessionFactoryImpl; - _cl = cl; - } - - - public ArrayList<String> generateSQL(String hqlQuery) - { - try - { - - - Class sessionFactoryImplementorClass = (Class) new ReflectionCaller().getClass("org.hibernate.engine.SessionFactoryImplementor", _cl).getCallee(); - - List<ReflectionCaller> translators = - new ReflectionCaller(_cl) - .getClass("org.hibernate.engine.query.HQLQueryPlan", _cl) - .callConstructor(new Class[]{String.class, Boolean.TYPE, Map.class, sessionFactoryImplementorClass}, new Object[]{hqlQuery, false, Collections.EMPTY_MAP, _sessionFactoryImpl}) - .callArrayMethod("getTranslators"); - - ArrayList<String> ret = new ArrayList<String>(); - - - for (ReflectionCaller translator : translators) - { - List sqls = (List) translator.callMethod("collectSqlStrings").getCallee(); - - for (Object sql : sqls) - { - ret.add(sql.toString()); - } - } - return ret; - } - catch (Exception e) - { - throw new RuntimeException(e); - } - } - - - - public void close() - { - try - { - new ReflectionCaller(_sessionFactoryImpl).callMethod("close"); - } - catch (Throwable t) - { - s_log.error(t); - } - _sessionFactoryImpl = null; - _cl = null; - _mappedClassInfos = null; - System.gc(); - - } - - public ArrayList<MappedClassInfo> getMappedClassInfos() - { - initMappedClassInfos(); - return _mappedClassInfos; - } - - public Class getPersistenCollectionClass() - { - try - { - return _cl.loadClass("org.hibernate.collection.PersistentCollection"); - } - catch (ClassNotFoundException e) - { - throw new RuntimeException(e); - } - } - - private void initMappedClassInfos() - { - if(null != _mappedClassInfos) - { - return; - } - - - _mappedClassInfos = new ArrayList<MappedClassInfo>(); - - ReflectionCaller sessionFactoryImplcaller = new ReflectionCaller(_sessionFactoryImpl); - Collection<ReflectionCaller> persisters = sessionFactoryImplcaller.callMethod("getAllClassMetadata").callCollectionMethod("values"); - - for (ReflectionCaller persister : persisters) - { - Object entityMode_POJO = persister.getClass("org.hibernate.EntityMode", _cl).getField("POJO").getCallee(); - Class mappedClass = (Class) persister.callMethod("getMappedClass", new Object[]{entityMode_POJO}).getCallee(); - - String identifierPropertyName = (String) persister.callMethod("getIdentifierPropertyName").getCallee(); - - Class identifierPropertyClass = persister.callMethod("getIdentifierType").callMethod("getReturnedClass").getCalleeClass(); - - String identifierPropertyClassName = identifierPropertyClass.getName(); - - - String tableName = (String) persister.callMethod("getTableName").getCallee(); - String[] identifierColumnNames = (String[]) persister.callMethod("getIdentifierColumnNames").getCallee(); - - - HibernatePropertyInfo identifierPropInfo = - new HibernatePropertyInfo(identifierPropertyName, identifierPropertyClassName, tableName, identifierColumnNames); - - identifierPropInfo.setIdentifier(true); - - - String[] propertyNames = (String[]) persister.callMethod("getPropertyNames").getCallee(); - - HibernatePropertyInfo[] infos = new HibernatePropertyInfo[propertyNames.length]; - for (int i = 0; i < propertyNames.length; i++) - { - ReflectionCaller propertyTypeCaller = persister.callMethod("getPropertyType", propertyNames[i]); - String mayBeCollectionTypeName = propertyTypeCaller.callMethod("getReturnedClass").getCalleeClass().getName(); - - String propTableName = (String) persister.callMethod("getPropertyTableName", propertyNames[i]).getCallee(); - String[] propertyColumnNames = (String[]) persister.callMethod("getPropertyColumnNames", propertyNames[i]).getCallee(); - - try - { - // If this isn't instanceof org.hibernate.type.CollectionType a NoSuchMethodException will be thrown - String role = (String) propertyTypeCaller.callMethod("getRole").getCallee(); - - ReflectionCaller collectionMetaDataCaller = sessionFactoryImplcaller.callMethod("getCollectionMetadata", role); - String typeName = collectionMetaDataCaller.callMethod("getElementType").callMethod("getReturnedClass").getCalleeClass().getName(); - - infos[i] = new HibernatePropertyInfo(propertyNames[i], typeName, propTableName, propertyColumnNames); - infos[i].setCollectionClassName(mayBeCollectionTypeName); - } - catch(RuntimeException e) - { - if(Utilities.getDeepestThrowable(e) instanceof NoSuchMethodException) - { - infos[i] = new HibernatePropertyInfo(propertyNames[i], mayBeCollectionTypeName, propTableName, propertyColumnNames); - } - else - { - throw e; - } - } - } - - _mappedClassInfos.add(new MappedClassInfo(mappedClass.getName(), tableName, identifierPropInfo, infos)); - } - } - - - public Connection getSqlConnection() - { - return (Connection) getRcHibernateSession().callMethod("getJDBCContext").callMethod("getConnectionManager").callMethod("getConnection").getCallee(); - } - - public List createQueryList(String hqlQuery, int sqlNbrRowsToShow) - { - ReflectionCaller rc = getRcHibernateSession().callMethod("createQuery", hqlQuery); - - if (0 <= sqlNbrRowsToShow) - { - rc = rc.callMethod("setMaxResults", new RCParam().add(sqlNbrRowsToShow, Integer.TYPE)); - } - - return (List) rc.callMethod("list").getCallee(); - } - - private ReflectionCaller getRcHibernateSession() - { - if(null == m_rcHibernateSession) - { - m_rcHibernateSession = new ReflectionCaller(_sessionFactoryImpl).callMethod("openSession"); - } - - return m_rcHibernateSession; - } -} Added: trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/HibernateConnection.java =================================================================== --- trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/HibernateConnection.java (rev 0) +++ trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/HibernateConnection.java 2010-09-28 22:15:31 UTC (rev 5902) @@ -0,0 +1,173 @@ +package net.sourceforge.squirrel_sql.plugins.hibernate; + +import net.sourceforge.squirrel_sql.fw.util.log.ILogger; +import net.sourceforge.squirrel_sql.fw.util.log.LoggerController; +import net.sourceforge.squirrel_sql.plugins.hibernate.mapping.MappedClassInfo; +import net.sourceforge.squirrel_sql.plugins.hibernate.server.HibernateServerConnection; +import net.sourceforge.squirrel_sql.plugins.hibernate.server.HibernateSqlConnectionData; +import net.sourceforge.squirrel_sql.plugins.hibernate.server.MappedClassInfoData; +import net.sourceforge.squirrel_sql.plugins.hibernate.server.ServerMain; + +import java.rmi.RMISecurityManager; +import java.rmi.RemoteException; +import java.security.Permission; +import java.util.ArrayList; +import java.util.List; + +public class HibernateConnection +{ + private static ILogger s_log = LoggerController.createLogger(HibernateConnection.class); + + private HibernateServerConnection _hibernateServerConnection; + private boolean _process; + private ServerMain _serverMain; + private boolean _endProcessOnDisconnect; + private ArrayList<MappedClassInfo> _mappedClassInfos; + + + private RMISecurityManager _rmiSecurityManager = + new RMISecurityManager() + { + @Override + public void checkPermission(Permission perm) + { + } + }; + + + public HibernateConnection(HibernateServerConnection hibernateServerConnection, boolean process, ServerMain serverMain, boolean endProcessOnDisconnect) + { + _hibernateServerConnection = hibernateServerConnection; + _process = process; + _serverMain = serverMain; + _endProcessOnDisconnect = endProcessOnDisconnect; + } + + public ArrayList<String> generateSQL(String hqlQuery) + { + try + { + return _hibernateServerConnection.generateSQL(hqlQuery); + } + catch (RemoteException e) + { + throw new RuntimeException(e); + } + } + + public void close() + { + if (_process) + { + if(_endProcessOnDisconnect) + { + try + { + _hibernateServerConnection.closeConnection(); + } + catch (Throwable t) + { + s_log.error("Error closing Hibernate connection.", t); + } + + try + { + _serverMain.exit(); + } + catch (Throwable t) + { + // This call will result in failure because the process VM exits during this call and will not return. + } + } + } + else + { + try + { + _hibernateServerConnection.closeConnection(); + } + catch (Throwable t) + { + s_log.error("Error closing Hibernate connection.", t); + } + } + } + + public ArrayList<MappedClassInfo> getMappedClassInfos() + { + try + { + if(null == _mappedClassInfos) + { + _mappedClassInfos = new ArrayList<MappedClassInfo>(); + ArrayList<MappedClassInfoData> mappedClassInfoData = _hibernateServerConnection.getMappedClassInfoData(); + + for (MappedClassInfoData aMappedClassInfoData : mappedClassInfoData) + { + _mappedClassInfos.add(new MappedClassInfo(aMappedClassInfoData)); + } + } + + return _mappedClassInfos; + } + catch (Exception e) + { + throw new RuntimeException(e); + } + + } + + public Class getPersistenCollectionClass() + { + try + { + return _hibernateServerConnection.getPersistenCollectionClass(); + } + catch (Exception e) + { + throw new RuntimeException(e); + + } + } + + public HibernateSqlConnectionData getHibernateSqlConnectionData() + { + try + { + return _hibernateServerConnection.getHibernateSqlConnectionData(); + } + catch (Exception e) + { + throw new RuntimeException(e); + } + } + + public List createQueryList(String hqlQuery, int sqlNbrRowsToShow) + { + try + { + if (_process) + { + SecurityManager old =System.getSecurityManager(); + + try + { + System.setSecurityManager(_rmiSecurityManager); + return _hibernateServerConnection.createQueryList(hqlQuery, sqlNbrRowsToShow); + } + finally + { + System.setSecurityManager(old); + } + } + else + { + return _hibernateServerConnection.createQueryList(hqlQuery, sqlNbrRowsToShow); + } + } + catch (Exception e) + { + throw new RuntimeException(e); + } + } +} Added: trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/HibernateConnectionFactory.java =================================================================== --- trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/HibernateConnectionFactory.java (rev 0) +++ trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/HibernateConnectionFactory.java 2010-09-28 22:15:31 UTC (rev 5902) @@ -0,0 +1,132 @@ +package net.sourceforge.squirrel_sql.plugins.hibernate; + +import net.sourceforge.squirrel_sql.fw.util.IMessageHandler; +import net.sourceforge.squirrel_sql.fw.util.log.ILogger; +import net.sourceforge.squirrel_sql.fw.util.log.LoggerController; +import net.sourceforge.squirrel_sql.plugins.hibernate.server.*; + +import java.io.IOException; +import java.rmi.RemoteException; +import java.rmi.registry.LocateRegistry; +import java.rmi.registry.Registry; + +public class HibernateConnectionFactory +{ + private static ILogger s_log = LoggerController.createLogger(HibernateConnectionFactory.class); + + public static HibernateConnection createHibernateConnection(HibernateConfiguration cfg, HibernatePlugin plugin) + throws Exception + { + if(cfg.isUseProcess()) + { + ServerMain serverMain = createProcessAndDoLookup(cfg, plugin); + return new HibernateConnection(serverMain.createHibernateServerConnection(cfg), cfg.isUseProcess(), serverMain, cfg.isEndProcessOnDisconnect()); + } + else + { + final IntraVmConnectionFactory intraVmConnectionFactory = new IntraVmConnectionFactory(); + return new HibernateConnection(intraVmConnectionFactory.createHibernateConnection(cfg), false, null, cfg.isEndProcessOnDisconnect()); + } + } + + private static ServerMain createProcessAndDoLookup(HibernateConfiguration cfg, HibernatePlugin plugin) + { + try + { + IMessageHandler mh = plugin.getApplication().getMessageHandler(); + + ServerMain stub; + if (cfg.isEndProcessOnDisconnect()) + { + mh.showMessage("Launching Hibernate process ..."); + try + { + launchProcess(cfg); + } + catch (Throwable e) + { + s_log.error("Error launching process. Maybe port is in use. Tryin to connect and kill existing process:", e); + try + { + stub = attachToProcess(cfg, mh, true); + if (null != stub) + { + stub.exit(); + } + } + catch (Throwable e1) + { + // Nothing + } + + launchProcess(cfg); + } + + stub = attachToProcess(cfg, mh, false); + } + else + { + stub = attachToProcess(cfg, mh, false); + if(null == stub) + { + mh.showMessage("Attaching to existing Hibernate process failed. Now will launch new process ..."); + launchProcess(cfg); + stub = attachToProcess(cfg, mh, false); + } + } + + + if (null == stub) + { + throw new IllegalStateException("Could not attach to Hibernate process"); + } + + mh.showMessage("Successfully attached to Hibernate process. Now creating Hibernate session."); + return stub; + } + catch (IOException e) + { + throw new RuntimeException(e); + } + } + + private static void launchProcess(HibernateConfiguration cfg) + throws IOException + { + String command = cfg.getCommand().trim(); + Runtime.getRuntime().exec(command); + } + + private static ServerMain attachToProcess(HibernateConfiguration cfg, IMessageHandler mh, boolean silent) + { + ServerMain stub = null; + Throwable reThrow = null; + + Object sync = new Object(); + synchronized (sync) + { + for(int i=0; i < 10; ++i) + { + try + { + sync.wait(150); + Registry registry = LocateRegistry.getRegistry("localhost", cfg.getProcessPort()); + stub = (ServerMain) registry.lookup(ServerMain.class.getName()); + + break; + } + catch (Throwable t) + { + reThrow = t; + } + } + } + + if(false == silent && null == stub) + { + mh.showErrorMessage("Failed to attach to Hibernate process: " + reThrow); + s_log.debug("Failed to attach to Hibernate process: " + reThrow, reThrow); + } + return stub; + } +} Modified: trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/HibernatePrefsListener.java =================================================================== --- trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/HibernatePrefsListener.java 2010-09-28 17:26:38 UTC (rev 5901) +++ trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/HibernatePrefsListener.java 2010-09-28 22:15:31 UTC (rev 5902) @@ -1,6 +1,6 @@ package net.sourceforge.squirrel_sql.plugins.hibernate; -import net.sourceforge.squirrel_sql.plugins.hibernate.configuration.HibernateConfiguration; +import net.sourceforge.squirrel_sql.plugins.hibernate.server.HibernateConfiguration; import java.util.ArrayList; Modified: trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/HibernateSQLPanel.java =================================================================== --- trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/HibernateSQLPanel.java 2010-09-28 17:26:38 UTC (rev 5901) +++ trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/HibernateSQLPanel.java 2010-09-28 22:15:31 UTC (rev 5902) @@ -1,5 +1,6 @@ package net.sourceforge.squirrel_sql.plugins.hibernate; +import net.sourceforge.squirrel_sql.fw.gui.IntegerField; import net.sourceforge.squirrel_sql.fw.util.StringManager; import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory; import net.sourceforge.squirrel_sql.client.session.mainpanel.SQLResultExecuterPanel; @@ -17,6 +18,8 @@ JCheckBox _chkAlwaysFormatSql; JCheckBox _chkAlwaysExecuteSql; JCheckBox _chkAlwaysViewObjects; + JCheckBox _chkLimitObjectCount; + IntegerField _nbrLimitRows; JTabbedPane _tabResult_code; @@ -73,13 +76,26 @@ _chkAlwaysExecuteSql = new JCheckBox(s_stringMgr.getString("HibernateSQLPanel.Execute")); ret.add(_chkAlwaysExecuteSql, gbc); - gbc = new GridBagConstraints(5,0,1,1,0,0,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5,5,5,5),0,0); - // i18n[HibernateSQLPanel.Execute=Execute SQL] + gbc = new GridBagConstraints(5,0,1,1,0,0,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5,15,5,5),0,0); + // i18n[HibernateSQLPanel.ObjectSection=Objects:] + ret.add(new JLabel(s_stringMgr.getString("HibernateSQLPanel.ObjectSection")), gbc); + + + gbc = new GridBagConstraints(6,0,1,1,0,0,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5,5,5,5),0,0); _chkAlwaysViewObjects = new JCheckBox(s_stringMgr.getString("HibernateSQLPanel.ViewObjects")); ret.add(_chkAlwaysViewObjects, gbc); + gbc = new GridBagConstraints(7,0,1,1,0,0,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5,5,5,5),0,0); + _chkLimitObjectCount = new JCheckBox(s_stringMgr.getString("HibernateSQLPanel.LimitRows")); + ret.add(_chkLimitObjectCount, gbc); - gbc = new GridBagConstraints(6,0,1,1,1,0,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5,5,5,5),0,0); + gbc = new GridBagConstraints(8,0,1,1,0,0,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5,5,5,5),0,0); + _nbrLimitRows = new IntegerField(); + ret.add(_nbrLimitRows, gbc); + _nbrLimitRows.setColumns(8); + + + gbc = new GridBagConstraints(9,0,1,1,1,0,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5,5,5,5),0,0); ret.add(new JPanel(), gbc); Modified: trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/HibernateTabController.java =================================================================== --- trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/HibernateTabController.java 2010-09-28 17:26:38 UTC (rev 5901) +++ trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/HibernateTabController.java 2010-09-28 22:15:31 UTC (rev 5902) @@ -3,23 +3,23 @@ import net.sourceforge.squirrel_sql.client.preferences.GlobalPreferencesSheet; import net.sourceforge.squirrel_sql.client.session.ISession; import net.sourceforge.squirrel_sql.client.session.mainpanel.IMainPanelTab; -import net.sourceforge.squirrel_sql.fw.util.StringManager; -import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory; -import net.sourceforge.squirrel_sql.fw.util.Utilities; +import net.sourceforge.squirrel_sql.fw.util.*; import net.sourceforge.squirrel_sql.fw.util.log.ILogger; import net.sourceforge.squirrel_sql.fw.util.log.LoggerController; import net.sourceforge.squirrel_sql.fw.xml.XMLBeanReader; import net.sourceforge.squirrel_sql.fw.xml.XMLException; -import net.sourceforge.squirrel_sql.plugins.hibernate.configuration.HibernateConfiguration; +import net.sourceforge.squirrel_sql.plugins.hibernate.server.HibernateConfiguration; import net.sourceforge.squirrel_sql.plugins.hibernate.configuration.HibernateConfigController; import net.sourceforge.squirrel_sql.plugins.hibernate.configuration.HibernateConfigPanel; import net.sourceforge.squirrel_sql.plugins.hibernate.mapping.MappedObjectPanelManager; +import net.sourceforge.squirrel_sql.plugins.hibernate.util.HibernateUtil; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; +import java.io.FileNotFoundException; import java.io.IOException; import java.util.*; import java.util.prefs.Preferences; @@ -60,8 +60,8 @@ _panel = new HibernateTabPanel(_mappedObjectsPanelManager.getComponent(), _hqlPanelController.getComponent(), _sqlPanelManager.getComponent(), _resource); _panel.btnConnected.setIcon(resource.getIcon(HibernatePluginResources.IKeys.DISCONNECTED_IMAGE)); - - _hibnerateConnector = new HibnerateConnector(new HibnerateConnectorListener() + + HibnerateConnectorListener hibnerateConnectorListener = new HibnerateConnectorListener() { public void connected(HibernateConnection con, HibernateConfiguration cfg) { @@ -72,10 +72,12 @@ { onConnectFailed(t); } - }); + }; + _hibnerateConnector = new HibnerateConnector(_plugin, hibnerateConnectorListener); + _panel.btnConnected.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) @@ -145,14 +147,11 @@ private void loadConfigsFromXml() throws IOException, XMLException { - XMLBeanReader reader = new XMLBeanReader(); - File pluginUserSettingsFolder = _plugin.getPluginUserSettingsFolder(); - File xmlFile = new File(pluginUserSettingsFolder.getPath(), HibernateConfigController.HIBERNATE_CONFIGS_XML_FILE); + XMLBeanReader reader = HibernateUtil.createHibernateConfigsReader(_plugin); - if (xmlFile.exists()) + if (null != reader) { - reader.load(xmlFile, _plugin.getClass().getClassLoader()); loadConfigs(reader, Preferences.userRoot().get(PREF_KEY_LAST_SELECTED_CONFIG, null)); } } Modified: trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/HibnerateConnector.java =================================================================== --- trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/HibnerateConnector.java 2010-09-28 17:26:38 UTC (rev 5901) +++ trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/HibnerateConnector.java 2010-09-28 22:15:31 UTC (rev 5902) @@ -1,20 +1,18 @@ package net.sourceforge.squirrel_sql.plugins.hibernate; import net.sourceforge.squirrel_sql.client.session.ISession; -import net.sourceforge.squirrel_sql.plugins.hibernate.configuration.HibernateConfiguration; +import net.sourceforge.squirrel_sql.plugins.hibernate.server.HibernateConfiguration; import javax.swing.*; -import java.io.File; -import java.lang.reflect.Method; -import java.net.URL; -import java.net.URLClassLoader; public class HibnerateConnector { + private HibernatePlugin _plugin; private HibnerateConnectorListener _hibnerateConnectorListener; - public HibnerateConnector(HibnerateConnectorListener hibnerateConnectorListener) + public HibnerateConnector(HibernatePlugin plugin, HibnerateConnectorListener hibnerateConnectorListener) { + _plugin = plugin; _hibnerateConnectorListener = hibnerateConnectorListener; } @@ -46,44 +44,8 @@ { try { - URLClassLoader cl = getClassLoader(cfg); - Thread.currentThread().setContextClassLoader(cl); - - Object sessionFactoryImpl = null; - - if (cfg.isUserDefinedProvider()) - { - String provider = cfg.getProvider(); - Class<?> providerClass = cl.loadClass(provider); - - Object sessionFactoryProviderImpl = providerClass.newInstance(); - - sessionFactoryImpl = - new ReflectionCaller(sessionFactoryProviderImpl).callMethod("getSessionFactoryImpl").getCallee(); - } - else if (cfg.isJPA()) - { - String persistenceUnitName = cfg.getPersistenceUnitName(); - Class<?> persistenceClass = cl.loadClass("javax.persistence.Persistence"); - - Method createMeth = persistenceClass.getMethod("createEntityManagerFactory", String.class); - Object hibernateEntityManagerFactory = createMeth.invoke(persistenceClass, persistenceUnitName); - ReflectionCaller rc = new ReflectionCaller(hibernateEntityManagerFactory); - sessionFactoryImpl = rc.callMethod("getSessionFactory").getCallee(); - } - else - { - Class<?> confiugrationClass = cl.loadClass("org.hibernate.cfg.Configuration"); - ReflectionCaller rc = new ReflectionCaller(confiugrationClass.newInstance()); - - sessionFactoryImpl = rc.callMethod("configure").callMethod("buildSessionFactory").getCallee(); - } - - HibernateConnection con = new HibernateConnection(sessionFactoryImpl, cl); + HibernateConnection con = HibernateConnectionFactory.createHibernateConnection(cfg, _plugin); sendConnection(con, cfg); - - Thread.currentThread().setContextClassLoader(null); - } catch (final Throwable t) { @@ -96,7 +58,7 @@ }); } } - + private void sendConnection(final HibernateConnection con, final HibernateConfiguration cfg) { SwingUtilities.invokeLater(new Runnable() @@ -108,20 +70,4 @@ }); } - private URLClassLoader getClassLoader(HibernateConfiguration cfg) - throws Exception - { - String[] classpath = cfg.getClassPathEntries(); - - URL[] classpathUrls = new URL[classpath.length]; - - for (int i = 0; i < classpathUrls.length; i++) - { - classpathUrls[i] = new File(classpath[i]).toURI().toURL(); - } - - URLClassLoader cl = new URLClassLoader(classpathUrls, null); - - return cl; - } } Modified: trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/HibnerateConnectorListener.java =================================================================== --- trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/HibnerateConnectorListener.java 2010-09-28 17:26:38 UTC (rev 5901) +++ trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/HibnerateConnectorListener.java 2010-09-28 22:15:31 UTC (rev 5902) @@ -1,6 +1,6 @@ package net.sourceforge.squirrel_sql.plugins.hibernate; -import net.sourceforge.squirrel_sql.plugins.hibernate.configuration.HibernateConfiguration; +import net.sourceforge.squirrel_sql.plugins.hibernate.server.HibernateConfiguration; public interface HibnerateConnectorListener { Modified: trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/IHibernateConnectionProvider.java =================================================================== --- trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/IHibernateConnectionProvider.java 2010-09-28 17:26:38 UTC (rev 5901) +++ trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/IHibernateConnectionProvider.java 2010-09-28 22:15:31 UTC (rev 5902) @@ -1,5 +1,6 @@ package net.sourceforge.squirrel_sql.plugins.hibernate; + public interface IHibernateConnectionProvider { HibernateConnection getHibernateConnection(); Modified: trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/IHibernateTabController.java =================================================================== --- trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/IHibernateTabController.java 2010-09-28 17:26:38 UTC (rev 5901) +++ trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/IHibernateTabController.java 2010-09-28 22:15:31 UTC (rev 5902) @@ -1,8 +1,8 @@ package net.sourceforge.squirrel_sql.plugins.hibernate; + import javax.swing.*; import java.util.ArrayList; -import java.util.List; public interface IHibernateTabController { Added: trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/LimitObjectCountDialog.java =================================================================== --- trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/LimitObjectCountDialog.java (rev 0) +++ trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/LimitObjectCountDialog.java 2010-09-28 22:15:31 UTC (rev 5902) @@ -0,0 +1,134 @@ +package net.sourceforge.squirrel_sql.plugins.hibernate; + +import net.sourceforge.squirrel_sql.client.gui.mainframe.MainFrame; +import net.sourceforge.squirrel_sql.fw.gui.GUIUtils; +import net.sourceforge.squirrel_sql.fw.gui.MultipleLineLabel; +import net.sourceforge.squirrel_sql.fw.util.StringManager; +import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.KeyEvent; + +public class LimitObjectCountDialog extends JDialog +{ + private static final StringManager s_stringMgr = StringManagerFactory.getStringManager(LimitObjectCountDialog.class); + + private JButton _btnCheck; + private JButton _btnCheckAndRemember; + private JButton _btnCancel; + private boolean _check; + private boolean _checkAndRemember; + + + public LimitObjectCountDialog(MainFrame mainFrame) + { + super(mainFrame, s_stringMgr.getString("LimitObjectCountDialog.title"), true); + + getContentPane().setLayout(new GridBagLayout()); + + GridBagConstraints gbc; + + gbc = new GridBagConstraints(0,0,1,1,1,1, GridBagConstraints.NORTHWEST, GridBagConstraints.BOTH, new Insets(5,5,5,5),0,0); + getContentPane().add(new MultipleLineLabel(s_stringMgr.getString("LimitObjectCountDialog.text")), gbc); + + gbc = new GridBagConstraints(0,1,1,1,0,0, GridBagConstraints.NORTHWEST, GridBagConstraints.BOTH, new Insets(5,5,5,5),0,0); + getContentPane().add(createButtonPanel(), gbc); + + + _btnCheck.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + _check = true; + close(); + } + }); + + _btnCheckAndRemember.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + _check = true; + _checkAndRemember = true; + close(); + } + }); + + + _btnCancel.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + close(); + } + }); + + + setSize(350,200); + + GUIUtils.centerWithinParent(this); + + setVisible(true); + + + AbstractAction closeAction = new AbstractAction() + { + public void actionPerformed(ActionEvent actionEvent) + { + close(); + } + }; + KeyStroke escapeStroke = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0); + getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(escapeStroke, "CloseAction"); + getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(escapeStroke, "CloseAction"); + getRootPane().getInputMap(JComponent.WHEN_FOCUSED).put(escapeStroke, "CloseAction"); + getRootPane().getActionMap().put("CloseAction", closeAction); + + } + + private JPanel createButtonPanel() + { + JPanel ret = new JPanel(new GridBagLayout()); + GridBagConstraints gbc; + + gbc = new GridBagConstraints(0,0,1,1,0,0, GridBagConstraints.NORTHWEST, GridBagConstraints.NONE, new Insets(5,5,5,5),0,0); + _btnCheck = new JButton(s_stringMgr.getString("LimitObjectCountDialog.select")); + ret.add(_btnCheck, gbc); + + gbc = new GridBagConstraints(1,0,1,1,0,0, GridBagConstraints.NORTHWEST, GridBagConstraints.NONE, new Insets(5,5,5,5),0,0); + _btnCheckAndRemember = new JButton(s_stringMgr.getString("LimitObjectCountDialog.selectAndRemember")); + ret.add(_btnCheckAndRemember, gbc); + + gbc = new GridBagConstraints(2,0,1,1,0,0, GridBagConstraints.NORTHWEST, GridBagConstraints.NONE, new Insets(5,5,5,5),0,0); + _btnCancel = new JButton(s_stringMgr.getString("LimitObjectCountDialog.cancel")); + ret.add(_btnCancel, gbc); + +// gbc = new GridBagConstraints(3,0,1,1,1,1, GridBagConstraints.NORTHWEST, GridBagConstraints.BOTH, new Insets(5,5,5,5),0,0); +// ret.add(new JPanel(), gbc); + + return ret; + + } + + private void close() + { + setVisible(false); + dispose(); + } + + public boolean check() + { + return _check; + } + + public boolean checkAndRemember() + { + return _checkAndRemember; + } +} Deleted: trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/RCParam.java =================================================================== --- trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/RCParam.java 2010-09-28 17:26:38 UTC (rev 5901) +++ trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/RCParam.java 2010-09-28 22:15:31 UTC (rev 5902) @@ -1,46 +0,0 @@ -package net.sourceforge.squirrel_sql.plugins.hibernate; - -import java.util.ArrayList; - -public class RCParam -{ - private ArrayList<Class> _types = new ArrayList<Class>(); - private ArrayList<Object> _values = new ArrayList<Object>(); - - public RCParam() - { - } - - public RCParam(Object[] params) - { - for (int i = 0; i < params.length; i++) - { - _types.add(params[i].getClass()); - _values.add(params[i]); - } - } - - - public RCParam add(Object paramValue, Class type) - { - _types.add(type); - _values.add(paramValue); - - return this; - } - - public int size() - { - return _values.size(); - } - - public Class getType(int i) - { - return _types.get(i); - } - - public Object getValue(int i) - { - return _values.get(i); - } -} Deleted: trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/ReflectionCaller.java =================================================================== --- trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/ReflectionCaller.java 2010-09-28 17:26:38 UTC (rev 5901) +++ trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/ReflectionCaller.java 2010-09-28 22:15:31 UTC (rev 5902) @@ -1,213 +0,0 @@ -package net.sourceforge.squirrel_sql.plugins.hibernate; - -import org.hibernate.engine.SubselectFetch; - -import java.lang.reflect.InvocationHandler; -import java.lang.reflect.Method; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Constructor; -import java.net.URLClassLoader; -import java.util.List; -import java.util.ArrayList; -import java.util.Collection; - -public class ReflectionCaller -{ - private Object _callee; - - - public ReflectionCaller(Object callee) - { - _callee = callee; - } - - public ReflectionCaller() - { - this(null); - } - - - public ReflectionCaller getClass(String className, ClassLoader cl) - { - try - { - return new ReflectionCaller(cl.loadClass(className)); - } - catch (ClassNotFoundException e) - { - throw new RuntimeException(e); - } - } - - public ReflectionCaller callConstructor(Class[] paramTypes, Object[] params) - { - try - { - Constructor constr = getCalleeClass().getDeclaredConstructor(paramTypes); - return new ReflectionCaller(constr.newInstance(params)); - } - catch (Exception e) - { - throw new RuntimeException(e); - } - - } - - public List<ReflectionCaller> callArrayMethod(String methodName) - { - try - { - Method meth = getDeclaredMethodIncludingSuper(methodName); - - Object[] callees = (Object[]) meth.invoke(_callee); - - List<ReflectionCaller> ret = new ArrayList<ReflectionCaller>(); - - for (Object callee : callees) - { - ret.add(new ReflectionCaller(callee)); - } - - return ret; - - } - catch (Exception e) - { - throw new RuntimeException(e); - } - } - - - public Object getCallee() - { - return _callee; - } - - public Collection<ReflectionCaller> callCollectionMethod(String methodName) - { - try - { - Method meth = getDeclaredMethodIncludingSuper(methodName); - meth.setAccessible(true); - - Collection callees = (Collection) meth.invoke(_callee); - - List<ReflectionCaller> ret = new ArrayList<ReflectionCaller>(); - - for (Object callee : callees) - { - ret.add(new ReflectionCaller(callee)); - } - - return ret; - - } - catch (Exception e) - { - throw new RuntimeException(e); - } - } - - public ReflectionCaller getField(String fieldName) - { - try - { - return new ReflectionCaller(getCalleeClass().getDeclaredField(fieldName).get(_callee)); - } - catch (Exception e) - { - throw new RuntimeException(e); - } - } - - public Class getCalleeClass() - { - if(_callee instanceof Class) - { - return (Class) _callee; - } - else - { - return _callee.getClass(); - } - - } - - /** - * Though this method should normaly be redundant with - * callMethod(String methodName, Object... params) - * NoSuchMethodErrors occur if it isn't there. - */ - public ReflectionCaller callMethod(String methodName) - { - return callMethod(methodName, new RCParam(new Object[0])); - } - - public ReflectionCaller callMethod(String methodName, Object... params) - { - return callMethod(methodName, new RCParam(params)); - } - - - public ReflectionCaller callMethod(String methodName, RCParam param) - { - try - { - Class[] paramTypes = new Class[param.size()]; - Object[] paramValues = new Object[param.size()]; - - for (int i = 0; i < paramTypes.length; i++) - { - paramTypes[i] = param.getType(i); - paramValues[i] = param.getValue(i); - } - - Method meth = getDeclaredMethodIncludingSuper(methodName, paramTypes); - meth.setAccessible(true); - - return new ReflectionCaller(meth.invoke(_callee, paramValues)); - } - catch (Exception e) - { - throw new RuntimeException(e); - } - } - - - - private Method getDeclaredMethodIncludingSuper(String methodName, Class... paramTypes) - throws NoSuchMethodException - { - Class clazz = getCalleeClass(); - - NoSuchMethodException throwBuf = new NoSuchMethodException(methodName); - - while(null != clazz) - { - try - { - Method ret = clazz.getDeclaredMethod(methodName, paramTypes); - ret.setAccessible(true); - return ret; - } - catch (NoSuchMethodException e) - { - throwBuf = e; - } - clazz = clazz.getSuperclass(); - } - - throw throwBuf; - - } - - public static void main(String[] args) - { - ReflectionCaller c = new ReflectionCaller(Integer.class); - - System.out.println(c.getCalleeClass().getName()); - - - } - -} Modified: trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/SQLPanelManager.java =================================================================== --- trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/SQLPanelManager.java 2010-09-28 17:26:38 UTC (rev 5901) +++ trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/SQLPanelManager.java 2010-09-28 22:15:31 UTC (rev 5902) @@ -21,6 +21,8 @@ private static final String PREF_KEY_FORMAT_SQL = "SquirrelSQL.hibernate.sqlFormatSql"; private static final String PREF_KEY_EXECUTE_SQL = "SquirrelSQL.hibernate.sqlExecuteSql"; private static final String PREF_KEY_VIEW_OBJECTS = "SquirrelSQL.hibernate.objViewObjects"; + private static final String PREF_KEY_VIEW_LIMIT_OBJECT_COUNT = "SquirrelSQL.hibernate.limitObjectsCount"; + private static final String PREF_KEY_VIEW_LIMIT_OBJECT_COUNT_VAL = "SquirrelSQL.hibernate.limitObjectsCountVal"; private HibernateSQLPanel _hibernateSQLPanel; private SQLResultExecuterPanel _resultExecuterPanel; @@ -62,9 +64,61 @@ _hibernateSQLPanel._chkAlwaysFormatSql.setSelected(Preferences.userRoot().getBoolean(PREF_KEY_FORMAT_SQL, false)); _hibernateSQLPanel._chkAlwaysExecuteSql.setSelected(Preferences.userRoot().getBoolean(PREF_KEY_EXECUTE_SQL, false)); _hibernateSQLPanel._chkAlwaysViewObjects.setSelected(Preferences.userRoot().getBoolean(PREF_KEY_VIEW_OBJECTS, false)); + _hibernateSQLPanel._chkLimitObjectCount.setSelected(Preferences.userRoot().getBoolean(PREF_KEY_VIEW_LIMIT_OBJECT_COUNT, false)); + + _hibernateSQLPanel._nbrLimitRows.setInt(Preferences.userRoot().getInt(PREF_KEY_VIEW_LIMIT_OBJECT_COUNT_VAL, 100)); + _hibernateSQLPanel._nbrLimitRows.setEnabled(_hibernateSQLPanel._chkLimitObjectCount.isSelected()); + + + _hibernateSQLPanel._chkAlwaysViewObjects.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + onViewObjectsChanged(); + } + }); + onViewObjectsChanged(); + + + _hibernateSQLPanel._chkLimitObjectCount.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + onLimitRowsChanged(); + } + }); } + private void onViewObjectsChanged() + { + boolean b = _hibernateSQLPanel._chkAlwaysViewObjects.isSelected(); + _hibernateSQLPanel._chkLimitObjectCount.setEnabled(b); + _hibernateSQLPanel._nbrLimitRows.setEnabled(b && _hibernateSQLPanel._chkLimitObjectCount.isSelected()); + } + private void onLimitRowsChanged() + { + if(_hibernateSQLPanel._chkLimitObjectCount.isSelected()) + { + LimitObjectCountDialog locc = new LimitObjectCountDialog(getSession().getApplication().getMainFrame()); + _hibernateSQLPanel._chkLimitObjectCount.setSelected(locc.check()); + + if(locc.checkAndRemember()) + { + Preferences.userRoot().putBoolean(PREF_KEY_VIEW_LIMIT_OBJECT_COUNT, true); + } + } + else + { + Preferences.userRoot().putBoolean(PREF_KEY_VIEW_LIMIT_OBJECT_COUNT, false); + } + + _hibernateSQLPanel._nbrLimitRows.setEnabled(_hibernateSQLPanel._chkLimitObjectCount.isSelected()); + } + + private void onFormatSql() { if (null != getEntryPanel().getText()) @@ -79,6 +133,11 @@ Preferences.userRoot().putBoolean(PREF_KEY_FORMAT_SQL, _hibernateSQLPanel._chkAlwaysFormatSql.isSelected()); Preferences.userRoot().putBoolean(PREF_KEY_EXECUTE_SQL, _hibernateSQLPanel._chkAlwaysExecuteSql.isSelected()); Preferences.userRoot().putBoolean(PREF_KEY_VIEW_OBJECTS, _hibernateSQLPanel._chkAlwaysViewObjects.isSelected()); + + // Omitted intentionally + //Preferences.userRoot().putBoolean(PREF_KEY_VIEW_LIMIT_OBJECT_COUNT, _hibernateSQLPanel._chkLimitObjectCount.isSelected()); + + Preferences.userRoot().putInt(PREF_KEY_VIEW_LIMIT_OBJECT_COUNT_VAL, _hibernateSQLPanel._nbrLimitRows.getInt()); } @@ -108,7 +167,10 @@ { if (_hibernateSQLPanel._chkAlwaysViewObjects.isSelected()) { - _objectResultController.displayObjects(con, hqlQuery); + boolean limitObjectCount = _hibernateSQLPanel._chkLimitObjectCount.isSelected(); + int limitObjectCountVal = _hibernateSQLPanel._nbrLimitRows.getInt(); + + _objectResultController.displayObjects(con, hqlQuery, limitObjectCount, limitObjectCountVal); _hibernateSQLPanel._tabResult_code.setSelectedComponent(_objectResultController.getPanel()); } } Modified: trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/completion/AliasFinderListener.java =================================================================== --- trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/completion/AliasFinderListener.java 2010-09-28 17:26:38 UTC (rev 5901) +++ trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/completion/AliasFinderListener.java 2010-09-28 22:15:31 UTC (rev 5902) @@ -1,7 +1,5 @@ package net.sourceforge.squirrel_sql.plugins.hibernate.completion; -import net.sourceforge.squirrel_sql.plugins.hibernate.mapping.MappedClassInfo; - import java.util.ArrayList; public interface AliasFinderListener Modified: trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/completion/AliasInfo.java =================================================================== --- trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/completion/AliasInfo.java 2010-09-28 17:26:38 UTC (rev 5901) +++ trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/completion/AliasInfo.java 2010-09-28 22:15:31 UTC (rev 5902) @@ -5,9 +5,6 @@ import net.sourceforge.squirrel_sql.fw.completion.util.CompletionParser; import net.sourceforge.squirrel_sql.fw.completion.CompletionInfo; -import java.util.Collection; -import java.util.List; -import java.util.Collections; import java.util.ArrayList; public class AliasInfo extends CompletionInfo Modified: trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/completion/HQLCodeCompletorModel.java =================================================================== --- trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/completion/HQLCodeCompletorModel.java 2010-09-28 17:26:38 UTC (rev 5901) +++ trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/completion/HQLCodeCompletorModel.java 2010-09-28 22:15:31 UTC (rev 5902) @@ -4,11 +4,11 @@ import net.sourceforge.squirrel_sql.fw.completion.CompletionCandidates; import net.sourceforge.squirrel_sql.fw.completion.ICompletorModel; import net.sourceforge.squirrel_sql.fw.completion.util.CompletionParser; +import net.sourceforge.squirrel_sql.plugins.hibernate.HibernateConnection; import net.sourceforge.squirrel_sql.plugins.hibernate.IHibernateConnectionProvider; import net.sourceforge.squirrel_sql.plugins.hibernate.ConnectionListener; import net.sourceforge.squirrel_sql.plugins.hibernate.HqlSyntaxHighlightTokenMatcherProxy; -import net.sourceforge.squirrel_sql.plugins.h... [truncated message content] |