Update of /cvsroot/squirrel-sql/sql12/plugins/hibernate/src/net/sourceforge/squirrel_sql/plugins/hibernate/viewobjects
In directory sfp-cvsdas-3.v30.ch3.sourceforge.com:/tmp/cvs-serv20151/plugins/hibernate/src/net/sourceforge/squirrel_sql/plugins/hibernate/viewobjects
Added Files:
WaitPanel.java TupelType.java TupelResultController.java
SingleResult.java RootResultController.java
PropertyAccessor.java ResultDataSet.java IType.java
I18NStrings.properties SingleResultController.java
HibernatePropertyReader.java IResult.java ObjectResultTab.java
ResultsController.java ObjectResultTabControllerListener.java
PrimitiveValue.java QueryListCreator.java TupelResult.java
ViewObjectsUtil.java ObjectResultTabController.java
RootType.java PersistentCollectionType.java
ObjectResultController.java CommandLineOutput.java
SingleType.java QueryListCreatorListener.java
PersistentCollectionResult.java
Log Message:
Hibernate Plugin:
- Results of HQL Queries can be displayed as objects
- Hibernate logs can be seen in SQuirreL logs when Hibernate logging is configured for console output.
--- NEW FILE: I18NStrings.properties ---
ObjectResultTabController.queryInfo=Count: {0}; {1}
ObjectResultTabController.queryInfoLimited=LIMITED count:{0}; {1}
ObjectResultController.hqlReadObjectsSuccess=Read {0} objects in {1} milliseconds
QueryResultNode.objectTree=Object tree
RootResultController.MutibleTypesMessage=\n\n\nThe HQL result consists of arrays that contain the following types:\n{0}Please click the child node for detailed result display.
PersistentCollectionResult.uninitialized={0}: uninitialzed collection of type {1}
PersistentCollectionResult.initialized={0}: initialzed collection of type {1}
PersistentCollectionType.uninitialized=uninitialzed collection of type {0}
PersistentCollectionType.initialized=initialzed collection of type {0}
WaitPanel.title=Executing HQL
WaitPanel.hqlLabel=Executing HQL:
SingleResultController.data=Data
SingleResultController.metaData=Meta data
ResultsController.resultDescription=The tree on the left is a meta data view of the query result.\
It allows to navigate through the query result. The meta data root node named "Object tree" provides a tree representation of the query result.\
Childern of this node display data of a mapped class in a table.\
The rows of a table match the tree nodes in the tree representation with respect to the tree hierarchy.\n\n\
Note: To redisplay this message hold ctrl and click the selected node of the meta data tree.\n\n\
HQL query:\n{0}
--- NEW FILE: TupelResult.java ---
package net.sourceforge.squirrel_sql.plugins.hibernate.viewobjects;
import net.sourceforge.squirrel_sql.plugins.hibernate.mapping.MappedClassInfo;
import java.lang.reflect.Array;
import java.util.ArrayList;
public class TupelResult implements IResult
{
private ArrayList<SingleResult> _singleResults = new ArrayList<SingleResult>();
private String _toString = "";
public TupelResult(ArrayList<MappedClassInfo> mappedClassInfos, Object array)
{
for (int i = 0; i < mappedClassInfos.size(); i++)
{
MappedClassInfo mappedClassInfo = mappedClassInfos.get(i);
Object obj = Array.get(array, i);
_singleResults.add(new SingleResult(obj, mappedClassInfo));
_toString += mappedClassInfo.getClassName();
if(i < mappedClassInfos.size() - 1)
{
_toString += ";";
}
}
}
public ArrayList<SingleResult> getSingleResults()
{
return _singleResults;
}
@Override
public String toString()
{
return _toString;
}
}
--- NEW FILE: TupelType.java ---
package net.sourceforge.squirrel_sql.plugins.hibernate.viewobjects;
import net.sourceforge.squirrel_sql.plugins.hibernate.mapping.MappedClassInfo;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.List;
public class TupelType implements IType
{
ArrayList<SingleType> _singleTypes = new ArrayList<SingleType>();
ArrayList<TupelResult> _tupleResults = new ArrayList<TupelResult>();
private String _toString = "";
public TupelType(ArrayList<MappedClassInfo> myMappedClassInfos, ArrayList<MappedClassInfo> allMappedClassInfos, Class persistenCollectionClass, List arrays)
{
for (int i = 0; i < myMappedClassInfos.size(); i++)
{
_singleTypes.add(new SingleType(myMappedClassInfos.get(i), allMappedClassInfos, persistenCollectionClass, getAllArrayElementsWithIndex(i, arrays)));
_toString += myMappedClassInfos.get(i).getClassName();
if(myMappedClassInfos.size() - 1 > i)
{
_toString += ";";
}
}
for (Object array : arrays)
{
_tupleResults.add(new TupelResult(myMappedClassInfos, array));
}
}
private ArrayList getAllArrayElementsWithIndex(int index, List arrays)
{
ArrayList ret = new ArrayList();
for (Object array : arrays)
{
ret.add(Array.get(array, index));
}
return ret;
}
@Override
public ArrayList<? extends IType> getKidTypes()
{
return _singleTypes;
}
@Override
public ArrayList<TupelResult> getResults()
{
return _tupleResults;
}
@Override
public String toString()
{
return _toString;
}
}
--- NEW FILE: ObjectResultController.java ---
package net.sourceforge.squirrel_sql.plugins.hibernate.viewobjects;
import net.sourceforge.squirrel_sql.client.gui.builders.UIFactory;
import net.sourceforge.squirrel_sql.client.session.ISession;
import net.sourceforge.squirrel_sql.client.session.properties.SessionProperties;
import net.sourceforge.squirrel_sql.fw.util.StringManager;
import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
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.HibernateConnection;
import net.sourceforge.squirrel_sql.plugins.hibernate.HibernatePluginResources;
import javax.swing.*;
import java.util.List;
public class ObjectResultController
{
private static ILogger s_log = LoggerController.createLogger(ObjectResultController.class);
private static final StringManager s_stringMgr = StringManagerFactory.getStringManager(ObjectResultController.class);
private JTabbedPane _objectResultTabbedPane;
private ISession _session;
private HibernatePluginResources _resource;
public ObjectResultController(ISession session, HibernatePluginResources resource)
{
_session = session;
_resource = resource;
final SessionProperties props = session.getProperties();
_objectResultTabbedPane = UIFactory.getInstance().createTabbedPane(props.getSQLExecutionTabPlacement());
}
public JTabbedPane getPanel()
{
return _objectResultTabbedPane;
}
public void displayObjects(HibernateConnection con, String hqlQuery)
{
int maxNumResults = -1;
if (_session.getProperties().getSQLLimitRows())
{
maxNumResults = _session.getProperties().getSQLNbrRowsToShow();
}
QueryListCreatorListener queryListCreatorListener = new QueryListCreatorListener()
{
@Override
public void listRead(QueryListCreator queryListCreator)
{
onListRead(queryListCreator);
}
};
WaitPanel waitPanel = new WaitPanel(hqlQuery);
_objectResultTabbedPane.addTab(waitPanel.getTitle(), waitPanel);
_objectResultTabbedPane.setSelectedComponent(waitPanel);
new QueryListCreator(queryListCreatorListener, hqlQuery, maxNumResults, con, _session, waitPanel).execute();
}
private void onListRead(QueryListCreator queryListCreator)
{
for (int i = 0; i < _objectResultTabbedPane.getTabCount(); i++)
{
if(_objectResultTabbedPane.getComponentAt(i) == queryListCreator.getWaitPanel())
{
_objectResultTabbedPane.removeTabAt(i);
break;
}
}
List list = queryListCreator.getList();
if(null == list)
{
return;
}
ObjectResultTabControllerListener l = new ObjectResultTabControllerListener()
{
@Override
public void closeTab(ObjectResultTabController toClose)
{
onCloseTab(toClose);
}
};
String hqlQuery = queryListCreator.getHqlQuery();
int maxNumResults = queryListCreator.getMaxNumResults();
HibernateConnection con = queryListCreator.getConnection();
ObjectResultTabController ortc = new ObjectResultTabController(list, maxNumResults, con, hqlQuery, _resource, l, _session);
int titelLen = Math.min(hqlQuery.length(), 14);
String title = hqlQuery.trim().substring(0, titelLen).replaceAll("\n", " ");
_objectResultTabbedPane.addTab(title, ortc.getPanel());
_objectResultTabbedPane.setSelectedComponent(ortc.getPanel());
}
private void onCloseTab(ObjectResultTabController toClose)
{
for (int i = 0; i < _objectResultTabbedPane.getTabCount(); i++)
{
if(_objectResultTabbedPane.getComponentAt(i) == toClose.getPanel())
{
_objectResultTabbedPane.removeTabAt(i);
break;
}
}
}
}
--- NEW FILE: HibernatePropertyReader.java ---
package net.sourceforge.squirrel_sql.plugins.hibernate.viewobjects;
import net.sourceforge.squirrel_sql.plugins.hibernate.viewobjects.PropertyAccessor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class HibernatePropertyReader
{
private String _propertyName;
private Object _obj;
private PropertyAccessor _propertyAccessor;
public HibernatePropertyReader(String propertyName, Object obj)
{
_propertyName = propertyName;
_obj = obj;
_propertyAccessor = getAccessor(_obj.getClass());
}
public String getName()
{
return _propertyName;
}
public Object getValue()
{
try
{
return _propertyAccessor.get(_obj);
}
catch (Exception e)
{
throw new RuntimeException(e);
}
}
private PropertyAccessor getAccessor(Class<? extends Object> clazz)
{
if(null == clazz || clazz.equals(Object.class))
{
return null;
}
try
{
Field f = clazz.getDeclaredField(_propertyName);
return new PropertyAccessor(f);
}
catch (NoSuchFieldException nsfe)
{
try
{
Method m = clazz.getDeclaredMethod(toGetter(_propertyName, false));
return new PropertyAccessor(m);
}
catch (NoSuchMethodException nsme)
{
try
{
Method m = clazz.getDeclaredMethod(toGetter(_propertyName, true));
return new PropertyAccessor(m);
}
catch (NoSuchMethodException e)
{
return getAccessor(clazz.getSuperclass());
}
}
}
}
private String toGetter(String propertyName, boolean isBoolean)
{
String ret = Character.toUpperCase(propertyName.charAt(0)) + propertyName.substring(1);
if(isBoolean)
{
return "is" + ret;
}
else
{
return "get" + ret;
}
}
public String getTypeName()
{
return _propertyAccessor.getType().getName();
}
public Class getType()
{
return _propertyAccessor.getType();
}
}
--- NEW FILE: QueryListCreatorListener.java ---
package net.sourceforge.squirrel_sql.plugins.hibernate.viewobjects;
import java.util.List;
public interface QueryListCreatorListener
{
public void listRead(QueryListCreator queryListCreator);
}
--- NEW FILE: ObjectResultTabController.java ---
package net.sourceforge.squirrel_sql.plugins.hibernate.viewobjects;
import net.sourceforge.squirrel_sql.client.session.ISession;
import net.sourceforge.squirrel_sql.fw.util.StringManager;
import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
import net.sourceforge.squirrel_sql.plugins.hibernate.HibernateConnection;
import net.sourceforge.squirrel_sql.plugins.hibernate.HibernatePluginResources;
import net.sourceforge.squirrel_sql.plugins.hibernate.mapping.MappedClassInfo;
import javax.swing.event.TreeExpansionEvent;
import javax.swing.event.TreeExpansionListener;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
public class ObjectResultTabController
{
private static final StringManager s_stringMgr = StringManagerFactory.getStringManager(ObjectResultTabController.class);
private ObjectResultTab _tab;
private ResultsController _resultsController;
public ObjectResultTabController(List objects, int maxNumResults, HibernateConnection con, String hqlQuery, HibernatePluginResources resource, final ObjectResultTabControllerListener l, ISession session)
{
_tab = new ObjectResultTab(resource);
initHqlQueryLabel(objects, hqlQuery, objects.size(), maxNumResults);
_tab.btnClose.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
l.closeTab(ObjectResultTabController.this);
}
});
if(0 == objects.size())
{
return;
}
//String hql = "from Best";
//String hql = "from BestPos";
//String hql = "from pack.Kv";
//String hql = "from pack.KvPos";
//String hql = "from Best be inner join be.bestPosses bep"; --> two result types --> TupelType
//String hql = "select be from Best be inner join be.bestPosses bep";
//String hql = "select be from Best be inner join fetch be.bestPosses bep";
Class persistenCollectionClass = con.getPersistenCollectionClass();
ArrayList<MappedClassInfo> mappedClassInfos = con.getMappedClassInfos();
_resultsController = new ResultsController(_tab.pnlResults, hqlQuery, persistenCollectionClass, mappedClassInfos, session);
RootType qrmr = new RootType(objects, con.getMappedClassInfos(), persistenCollectionClass);
DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode(qrmr);
_tab.treeTypes.setModel(new DefaultTreeModel(rootNode));
_tab.treeTypes.addTreeExpansionListener(new TreeExpansionListener()
{
@Override
public void treeExpanded(TreeExpansionEvent event)
{
onTreeExpanded(event);
}
@Override
public void treeCollapsed(TreeExpansionEvent event) {}
});
_tab.treeTypes.addTreeSelectionListener(new TreeSelectionListener()
{
@Override
public void valueChanged(TreeSelectionEvent e)
{
onTreeSelectionChanged(e);
}
});
initRoot(rootNode);
//CommandLineOutput.displayObjects(mappedClassInfos, qrmr, con.getPersistenCollectionClass());
}
private void initHqlQueryLabel(List objects, String hqlQuery, int numResults, int maxNumResults)
{
if (numResults == maxNumResults)
{
_tab.lblHqlQuery.setText(s_stringMgr.getString("ObjectResultTabController.queryInfoLimited", objects.size(), hqlQuery) );
}
else
{
_tab.lblHqlQuery.setText(s_stringMgr.getString("ObjectResultTabController.queryInfo", objects.size(), hqlQuery) );
}
}
private void onTreeSelectionChanged(TreeSelectionEvent e)
{
TreePath path = e.getNewLeadSelectionPath();
if(null == path)
{
_resultsController.clear();
return;
}
DefaultMutableTreeNode n = (DefaultMutableTreeNode) path.getLastPathComponent();
if(null != n && null != n.getUserObject())
{
_resultsController.typeChanged(n.getUserObject());
}
else
{
_resultsController.clear();
}
}
private void onTreeExpanded(TreeExpansionEvent event)
{
DefaultMutableTreeNode node = (DefaultMutableTreeNode) event.getPath().getLastPathComponent();
for (int i = 0; i < node.getChildCount(); i++)
{
DefaultMutableTreeNode kidNode = (DefaultMutableTreeNode) node.getChildAt(i);
if(0 < kidNode.getChildCount())
{
continue;
}
IType type = (IType) kidNode.getUserObject();
for (IType kidType : type.getKidTypes())
{
kidNode.add(new DefaultMutableTreeNode(kidType));
}
}
ViewObjectsUtil.nodeStructurChanged(node, _tab.treeTypes);
}
private void initRoot(DefaultMutableTreeNode rootNode)
{
RootType rootType = (RootType) rootNode.getUserObject();
IType resultType = rootType.getResultType();
DefaultMutableTreeNode kidNode = new DefaultMutableTreeNode(resultType);
rootNode.add(kidNode);
for (IType kidResultType : resultType.getKidTypes())
{
kidNode.add(new DefaultMutableTreeNode(kidResultType));
}
ViewObjectsUtil.nodeStructurChanged(rootNode, _tab.treeTypes);
}
public ObjectResultTab getPanel()
{
return _tab;
}
}
--- NEW FILE: QueryListCreator.java ---
package net.sourceforge.squirrel_sql.plugins.hibernate.viewobjects;
import net.sourceforge.squirrel_sql.client.session.ISession;
import net.sourceforge.squirrel_sql.fw.util.ExceptionFormatter;
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.log.ILogger;
import net.sourceforge.squirrel_sql.fw.util.log.LoggerController;
import net.sourceforge.squirrel_sql.plugins.hibernate.HibernateConnection;
import javax.swing.*;
import java.awt.*;
import java.util.List;
public class QueryListCreator extends SwingWorker
{
private static ILogger s_log = LoggerController.createLogger(ObjectResultController.class);
private static final StringManager s_stringMgr = StringManagerFactory.getStringManager(QueryListCreator.class);
private QueryListCreatorListener _queryListCreatorListener;
private String _hqlQuery;
private int _maxNumResults;
private HibernateConnection _con;
private ISession _session;
private WaitPanel _waitPanel;
private volatile long _duration;
private List _list;
public QueryListCreator(QueryListCreatorListener queryListCreatorListener,
String hqlQuery,
int maxNumResults,
HibernateConnection con,
ISession session,
WaitPanel waitPanel)
{
_queryListCreatorListener = queryListCreatorListener;
_hqlQuery = hqlQuery;
_maxNumResults = maxNumResults;
_con = con;
_session = session;
_waitPanel = waitPanel;
}
@Override
protected Object doInBackground() throws Exception
{
long begin = System.currentTimeMillis();
List ret = _con.createQueryList(_hqlQuery, _maxNumResults);
_duration = System.currentTimeMillis() - begin;
return ret;
}
@Override
protected void done()
{
try
{
_list = (List) get();
_session.getApplication().getMessageHandler().showMessage(s_stringMgr.getString("ObjectResultController.hqlReadObjectsSuccess", _list.size(), _duration));
}
catch (Exception e)
{
Throwable t = Utilities.getDeepestThrowable(e);
ExceptionFormatter formatter = _session.getExceptionFormatter();
try
{
String message = formatter.format(t);
_session.showErrorMessage(message);
}
catch (Exception e1)
{
_session.showErrorMessage(e1);
_session.showErrorMessage(t);
}
if (_session.getProperties().getWriteSQLErrorsToLog() ||
(-1 == t.getClass().getName().toLowerCase().indexOf("hibernate") && -1 == t.getClass().getName().toLowerCase().indexOf("antlr")))
{
// If this is not a hibernate error we write a log entry
s_log.error(t);
}
}
_queryListCreatorListener.listRead(this);
}
public List getList()
{
return _list;
}
public int getMaxNumResults()
{
return _maxNumResults;
}
public HibernateConnection getConnection()
{
return _con;
}
public String getHqlQuery()
{
return _hqlQuery;
}
public WaitPanel getWaitPanel()
{
return _waitPanel;
}
// private List readObjects(HibernateConnection con, String hqlQuery, int sqlLimitRows)
// {
// long begin = System.currentTimeMillis();
// long duration;
// try
// {
// List objects;
//
// objects = con.createQueryList(hqlQuery, sqlLimitRows);
//
// duration = System.currentTimeMillis() - begin;
//
//
// _session.getApplication().getMessageHandler().showMessage(s_stringMgr.getString("ObjectResultController.hqlReadObjectsSuccess", objects.size(), duration));
//
// return objects;
// }
// catch (Exception e)
// {
// Throwable t = Utilities.getDeepestThrowable(e);
// ExceptionFormatter formatter = _session.getExceptionFormatter();
// try
// {
// String message = formatter.format(t);
// _session.showErrorMessage(message);
// }
// catch (Exception e1)
// {
// _session.showErrorMessage(e1);
// _session.showErrorMessage(t);
// }
//
// if (_session.getProperties().getWriteSQLErrorsToLog() ||
// (-1 == t.getClass().getName().toLowerCase().indexOf("hibernate") && -1 == t.getClass().getName().toLowerCase().indexOf("antlr")))
// {
// // If this is not a hibernate error we write a log entry
// s_log.error(t);
// }
//
// return null;
// }
// }
}
--- NEW FILE: RootResultController.java ---
package net.sourceforge.squirrel_sql.plugins.hibernate.viewobjects;
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 net.sourceforge.squirrel_sql.plugins.hibernate.mapping.MappedClassInfo;
import javax.swing.*;
import javax.swing.event.TreeExpansionEvent;
import javax.swing.event.TreeExpansionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import java.util.ArrayList;
public class RootResultController
{
private static final StringManager s_stringMgr = StringManagerFactory.getStringManager(RootResultController.class);
private Class _persistenCollectionClass;
private ArrayList<MappedClassInfo> _mappedClassInfos;
private JTree _resultTree;
public RootResultController(RootType rootType, JPanel pnlResults, Class persistenCollectionClass, ArrayList<MappedClassInfo> mappedClassInfos)
{
RootType rootType1 = rootType;
_persistenCollectionClass = persistenCollectionClass;
_mappedClassInfos = mappedClassInfos;
if(rootType1.getResultType() instanceof TupelType)
{
String msg = s_stringMgr.getString("RootResultController.MutibleTypesMessage", getClassNames((TupelType) rootType1.getResultType()));
pnlResults.removeAll();
pnlResults.add(new MultipleLineLabel(msg));
return;
}
_resultTree = new JTree();
DefaultMutableTreeNode root = new DefaultMutableTreeNode("DumyNode");
DefaultTreeModel model = new DefaultTreeModel(root);
_resultTree.setModel(model);
_resultTree.setRootVisible(false);
initRoot((SingleType) rootType1.getResultType(), root);
_resultTree.addTreeExpansionListener(new TreeExpansionListener()
{
@Override
public void treeExpanded(TreeExpansionEvent event)
{
onTreeExpanded(event);
}
@Override
public void treeCollapsed(TreeExpansionEvent event) {}
});
pnlResults.removeAll();
pnlResults.add(new JScrollPane(_resultTree));
}
private void onTreeExpanded(TreeExpansionEvent event)
{
DefaultMutableTreeNode node = (DefaultMutableTreeNode) event.getPath().getLastPathComponent();
for (int i = 0; i < node.getChildCount(); i++)
{
DefaultMutableTreeNode kidNode = (DefaultMutableTreeNode) node.getChildAt(i);
if(0 < kidNode.getChildCount())
{
continue;
}
if(kidNode.getUserObject() instanceof PersistentCollectionResult)
{
ViewObjectsUtil.addPersistentCollectionKids(kidNode);
}
else if(kidNode.getUserObject() instanceof SingleResult)
{
ViewObjectsUtil.addSingleResultKids(kidNode, (SingleResult) kidNode.getUserObject(), _persistenCollectionClass, _mappedClassInfos);
}
}
ViewObjectsUtil.nodeStructurChanged(node, _resultTree);
}
private void initRoot(SingleType singleType, DefaultMutableTreeNode root)
{
for (SingleResult singleResult : singleType.getResults())
{
DefaultMutableTreeNode singleResultNode = new DefaultMutableTreeNode(singleResult);
root.add(singleResultNode);
ViewObjectsUtil.addSingleResultKids(singleResultNode, singleResult, _persistenCollectionClass, _mappedClassInfos);
}
ViewObjectsUtil.nodeStructurChanged(root, _resultTree);
}
private String getClassNames(TupelType tupelType)
{
String ret = "";
for (IType type : tupelType.getKidTypes())
{
SingleType singleType = (SingleType) type;
ret += singleType.getMappedClassInfo().getClassName() + "\n";
}
return ret;
}
}
--- NEW FILE: ResultDataSet.java ---
package net.sourceforge.squirrel_sql.plugins.hibernate.viewobjects;
import net.sourceforge.squirrel_sql.fw.datasetviewer.ColumnDisplayDefinition;
import net.sourceforge.squirrel_sql.fw.datasetviewer.DataSetDefinition;
import net.sourceforge.squirrel_sql.fw.datasetviewer.DataSetException;
import net.sourceforge.squirrel_sql.fw.datasetviewer.IDataSet;
import net.sourceforge.squirrel_sql.fw.util.IMessageHandler;
import net.sourceforge.squirrel_sql.plugins.hibernate.ReflectionCaller;
import net.sourceforge.squirrel_sql.plugins.hibernate.mapping.PropertyInfo;
import java.util.ArrayList;
public class ResultDataSet implements IDataSet
{
private static final int DISPLAY_WIDTH = 20;
private int _curIx = -1;
private ColumnDisplayDefinition[] _columnDisplayDefinitions;
private SingleType _singleType;
public ResultDataSet(SingleType singleType)
{
_singleType = singleType;
ArrayList<ColumnDisplayDefinition> columnDisplayDefinitions = new ArrayList<ColumnDisplayDefinition>();
for (PropertyInfo propertyInfo : singleType.getMappedClassInfo().getAttributes())
{
String propertyName = propertyInfo.getHibernatePropertyInfo().getPropertyName();
columnDisplayDefinitions.add(new ColumnDisplayDefinition(DISPLAY_WIDTH, propertyName));
}
_columnDisplayDefinitions = columnDisplayDefinitions.toArray(new ColumnDisplayDefinition[columnDisplayDefinitions.size()]);
}
public int getColumnCount() throws DataSetException
{
return _columnDisplayDefinitions.length;
}
public DataSetDefinition getDataSetDefinition() throws DataSetException
{
return new DataSetDefinition(_columnDisplayDefinitions);
}
public boolean next(IMessageHandler msgHandler) throws DataSetException
{
return ++_curIx < _singleType.getResults().size();
}
public Object get(int columnIndex) throws DataSetException
{
Object obj = _singleType.getResults().get(_curIx).getObject();
HibernatePropertyReader hpr = new HibernatePropertyReader(_columnDisplayDefinitions[columnIndex].getColumnName(), obj);
Object value = hpr.getValue();
if(null == value)
{
return "<null>";
}
if (_singleType.getPersistenCollectionClass().isAssignableFrom(value.getClass()))
{
boolean wasInitialized = (Boolean) new ReflectionCaller(value).callMethod("wasInitialized").getCallee();
if(false == wasInitialized)
{
return "<unitialized persistent collection>";
}
}
return hpr.getValue();
}
}
--- NEW FILE: ObjectResultTab.java ---
package net.sourceforge.squirrel_sql.plugins.hibernate.viewobjects;
import net.sourceforge.squirrel_sql.plugins.hibernate.HibernatePluginResources;
import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeSelectionModel;
import java.awt.*;
public class ObjectResultTab extends JPanel
{
JLabel lblHqlQuery;
JButton btnClose;
JTree treeTypes;
JPanel pnlResults;
public ObjectResultTab(HibernatePluginResources resource)
{
setLayout(new BorderLayout());
add(createTopPanel(resource), BorderLayout.NORTH);
add(createSplitPane(), BorderLayout.CENTER);
}
private JSplitPane createSplitPane()
{
treeTypes = new JTree(new DefaultMutableTreeNode());
treeTypes.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
pnlResults = new JPanel(new GridLayout(1,1));
final JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, new JScrollPane(treeTypes), pnlResults);
Runnable runnable = new Runnable()
{
public void run()
{
splitPane.setLastDividerLocation(getWidth() / 2 );
}
};
SwingUtilities.invokeLater(runnable);
return splitPane;
}
private JPanel createTopPanel(HibernatePluginResources resource)
{
JPanel ret = new JPanel(new BorderLayout());
lblHqlQuery = new JLabel();
ret.add(lblHqlQuery, BorderLayout.CENTER);
btnClose = new JButton(resource.getIcon(HibernatePluginResources.IKeys.CLOSE_IMAGE));
btnClose.setMargin(new Insets(0, 0, 0, 0));
btnClose.setBorderPainted(false);
ret.add(btnClose, BorderLayout.EAST);
return ret;
}
}
--- NEW FILE: SingleResult.java ---
package net.sourceforge.squirrel_sql.plugins.hibernate.viewobjects;
import net.sourceforge.squirrel_sql.plugins.hibernate.mapping.MappedClassInfo;
import net.sourceforge.squirrel_sql.plugins.hibernate.mapping.PropertyInfo;
public class SingleResult implements IResult
{
private Object _object;
private MappedClassInfo _mappedClassInfo;
private String _toString;
public SingleResult(Object object, MappedClassInfo mappedClassInfo)
{
_object = object;
_mappedClassInfo = mappedClassInfo;
_toString = _mappedClassInfo.getClassName();
if (null == _object)
{
_toString += " <null>";
return;
}
for (PropertyInfo propertyInfo : _mappedClassInfo.getAttributes())
{
if(propertyInfo.getHibernatePropertyInfo().isIdentifier())
{
String propertyName = propertyInfo.getHibernatePropertyInfo().getPropertyName();
HibernatePropertyReader hpr = new HibernatePropertyReader(propertyName, _object);
_toString += " [" + propertyName + "=" + hpr.getValue() + "; toString=\"" + _object + "\"]";
break;
}
}
}
public Object getObject()
{
return _object;
}
public MappedClassInfo getMappedClassInfo()
{
return _mappedClassInfo;
}
@Override
public String toString()
{
return _toString;
}
}
--- NEW FILE: RootType.java ---
package net.sourceforge.squirrel_sql.plugins.hibernate.viewobjects;
import net.sourceforge.squirrel_sql.fw.util.StringManager;
import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
import net.sourceforge.squirrel_sql.plugins.hibernate.mapping.MappedClassInfo;
import java.lang.reflect.Array;
import java.util.*;
public class RootType
{
private static final StringManager s_stringMgr = StringManagerFactory.getStringManager(RootType.class);
private IType _type;
public RootType(List objects, ArrayList<MappedClassInfo> allMappedClassInfos, Class persistenCollectionClass)
{
_type = createResultType(objects.get(0), allMappedClassInfos, persistenCollectionClass, objects);
}
private IType createResultType(Object object, ArrayList<MappedClassInfo> allMappedClassInfos, Class persistenCollectionClass, List objects)
{
if(object.getClass().isArray())
{
ArrayList<String> mappedClassNames = new ArrayList<String>();
for(int i=0; i < Array.getLength(object); ++i)
{
Object buf = Array.get(object, i);
String mappedClassName = buf.getClass().getName();
mappedClassNames.add(mappedClassName);
}
return createResultTupelType(mappedClassNames, allMappedClassInfos, persistenCollectionClass, objects);
}
else
{
String mappedClassName = object.getClass().getName();
return createSingleTypeResultType(mappedClassName, allMappedClassInfos, persistenCollectionClass, objects);
}
}
private SingleType createSingleTypeResultType(String mappedClassName, ArrayList<MappedClassInfo> allMappedClassInfos, Class persistenCollectionClass, List objects)
{
MappedClassInfo mappedClassInfo = ViewObjectsUtil.findMappedClassInfo(mappedClassName, allMappedClassInfos, false);
return new SingleType(mappedClassInfo, allMappedClassInfos, persistenCollectionClass, objects);
}
private TupelType createResultTupelType(ArrayList<String> mappedClassNames, ArrayList<MappedClassInfo> allMappedClassInfos, Class persistenCollectionClass, List objects)
{
ArrayList<MappedClassInfo> mappedClassInfos = new ArrayList<MappedClassInfo>();
for (String mappedClassName : mappedClassNames)
{
mappedClassInfos.add(ViewObjectsUtil.findMappedClassInfo(mappedClassName, allMappedClassInfos, false));
}
return new TupelType(mappedClassInfos, allMappedClassInfos, persistenCollectionClass, objects);
}
public IType getResultType()
{
return _type;
}
@Override
public String toString()
{
return s_stringMgr.getString("QueryResultNode.objectTree");
}
}
--- NEW FILE: PropertyAccessor.java ---
package net.sourceforge.squirrel_sql.plugins.hibernate.viewobjects;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class PropertyAccessor
{
private Field _field;
private Method _method;
public PropertyAccessor(Field field)
{
_field = field;
_field.setAccessible(true);
}
public PropertyAccessor(Method method)
{
_method = method;
_method.setAccessible(true);
}
public Object get(Object obj)
{
try
{
if(null != _field)
{
return _field.get(obj);
}
else
{
return _method.invoke(obj, new Object[0]);
}
}
catch (Exception e)
{
throw new RuntimeException(e);
}
}
public Class getType()
{
if(null != _field)
{
return _field.getType();
}
else
{
return _method.getReturnType();
}
}
}
--- NEW FILE: IResult.java ---
package net.sourceforge.squirrel_sql.plugins.hibernate.viewobjects;
public interface IResult
{
}
--- NEW FILE: WaitPanel.java ---
package net.sourceforge.squirrel_sql.plugins.hibernate.viewobjects;
import net.sourceforge.squirrel_sql.fw.util.StringManager;
import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
import javax.swing.*;
import java.awt.*;
public class WaitPanel extends JPanel
{
private static final StringManager s_stringMgr = StringManagerFactory.getStringManager(ObjectResultController.class);
public WaitPanel(String hqlQuery)
{
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.anchor = GridBagConstraints.WEST;
gbc.insets = new Insets(5, 10, 5, 10);
gbc.gridx = 0;
gbc.gridy = 0;
add(new JLabel(s_stringMgr.getString("WaitPanel.hqlLabel")), gbc);
gbc.weightx = 1;
++gbc.gridx;
add(new JLabel(hqlQuery), gbc);
}
public String getTitle()
{
return s_stringMgr.getString("WaitPanel.title");
}
}
--- NEW FILE: SingleResultController.java ---
package net.sourceforge.squirrel_sql.plugins.hibernate.viewobjects;
import net.sourceforge.squirrel_sql.client.gui.builders.UIFactory;
import net.sourceforge.squirrel_sql.client.session.ISession;
import net.sourceforge.squirrel_sql.client.session.properties.SessionProperties;
import net.sourceforge.squirrel_sql.fw.datasetviewer.DataSetException;
import net.sourceforge.squirrel_sql.fw.datasetviewer.DataSetViewerTablePanel;
import net.sourceforge.squirrel_sql.fw.util.StringManager;
import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
import net.sourceforge.squirrel_sql.plugins.hibernate.mapping.DetailAttribute;
import net.sourceforge.squirrel_sql.plugins.hibernate.mapping.DetailAttributeDataSet;
import javax.swing.*;
public class SingleResultController
{
private static final StringManager s_stringMgr = StringManagerFactory.getStringManager(SingleResultController.class);
private SingleType _singleType;
private DataSetViewerTablePanel _tblDetailsMetaData = new DataSetViewerTablePanel();
private DataSetViewerTablePanel _tblDetailsData = new DataSetViewerTablePanel();
private JPanel _pnlResults;
public SingleResultController(SingleType singleType, JPanel pnlResults, ISession session)
{
_pnlResults = pnlResults;
try
{
_singleType = singleType;
DetailAttribute[] attributes = DetailAttribute.createDetailtAttributes(singleType.getMappedClassInfo().getAttributes());
_tblDetailsData.init(null);
_tblDetailsData.show(new ResultDataSet(singleType));
_tblDetailsMetaData.init(null);
_tblDetailsMetaData.show(new DetailAttributeDataSet(attributes));
pnlResults.removeAll();
pnlResults.add(createTabbedPane(_tblDetailsData, _tblDetailsMetaData, session));
//_scrollPanelResults.setViewportView(new JLabel("Diplaying table for " + singleType.getMappedClassInfo().getClassName()));
}
catch (DataSetException e)
{
throw new RuntimeException(e);
}
}
private JTabbedPane createTabbedPane(DataSetViewerTablePanel tblDetails, DataSetViewerTablePanel tblDetailsMetaData, ISession session)
{
SessionProperties props = session.getProperties();
JTabbedPane ret = UIFactory.getInstance().createTabbedPane(props.getSQLExecutionTabPlacement());
ret.addTab(s_stringMgr.getString("SingleResultController.data"), new JScrollPane(tblDetails.getComponent()));
ret.addTab(s_stringMgr.getString("SingleResultController.metaData"), new JScrollPane(tblDetailsMetaData.getComponent()));
ret.setSelectedIndex(0);
return ret;
}
}
--- NEW FILE: TupelResultController.java ---
package net.sourceforge.squirrel_sql.plugins.hibernate.viewobjects;
import net.sourceforge.squirrel_sql.plugins.hibernate.mapping.MappedClassInfo;
import javax.swing.*;
import javax.swing.event.TreeExpansionEvent;
import javax.swing.event.TreeExpansionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import java.util.ArrayList;
public class TupelResultController
{
private JTree _resultTree;
private Class _persistenCollectionClass;
private ArrayList<MappedClassInfo> _allMappedClassInfos;
public TupelResultController(TupelType tupelType, JPanel pnlResults, Class persistenCollectionClass, ArrayList<MappedClassInfo> allMappedClassInfos)
{
_persistenCollectionClass = persistenCollectionClass;
_allMappedClassInfos = allMappedClassInfos;
_resultTree = new JTree();
DefaultMutableTreeNode root = new DefaultMutableTreeNode("DumyNode");
DefaultTreeModel model = new DefaultTreeModel(root);
_resultTree.setModel(model);
_resultTree.setRootVisible(false);
initRoot(tupelType, root);
_resultTree.addTreeExpansionListener(new TreeExpansionListener()
{
@Override
public void treeExpanded(TreeExpansionEvent event)
{
onTreeExpanded(event);
}
@Override
public void treeCollapsed(TreeExpansionEvent event) {}
});
pnlResults.removeAll();
pnlResults.add(new JScrollPane(_resultTree));
}
private void onTreeExpanded(TreeExpansionEvent event)
{
DefaultMutableTreeNode node = (DefaultMutableTreeNode) event.getPath().getLastPathComponent();
for (int i = 0; i < node.getChildCount(); i++)
{
DefaultMutableTreeNode kidNode = (DefaultMutableTreeNode) node.getChildAt(i);
if(0 < kidNode.getChildCount())
{
continue;
}
if(kidNode.getUserObject() instanceof PersistentCollectionResult)
{
ViewObjectsUtil.addPersistentCollectionKids(kidNode);
}
else if(kidNode.getUserObject() instanceof SingleResult)
{
ViewObjectsUtil.addSingleResultKids(kidNode, (SingleResult) kidNode.getUserObject(), _persistenCollectionClass, _allMappedClassInfos);
}
}
ViewObjectsUtil.nodeStructurChanged(node, _resultTree);
}
private void initRoot(TupelType tupelType, DefaultMutableTreeNode root)
{
for (TupelResult tupelResult : tupelType.getResults())
{
DefaultMutableTreeNode tupelNode = new DefaultMutableTreeNode(tupelResult);
root.add(tupelNode);
for (SingleResult singleResult : tupelResult.getSingleResults())
{
tupelNode.add(new DefaultMutableTreeNode(singleResult));
}
}
ViewObjectsUtil.nodeStructurChanged(root, _resultTree);
}
}
--- NEW FILE: PersistentCollectionResult.java ---
package net.sourceforge.squirrel_sql.plugins.hibernate.viewobjects;
import net.sourceforge.squirrel_sql.fw.util.StringManager;
import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
import net.sourceforge.squirrel_sql.plugins.hibernate.ReflectionCaller;
import net.sourceforge.squirrel_sql.plugins.hibernate.mapping.MappedClassInfo;
import net.sourceforge.squirrel_sql.plugins.hibernate.mapping.PropertyInfo;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class PersistentCollectionResult
{
private static final StringManager s_stringMgr = StringManagerFactory.getStringManager(PersistentCollectionResult.class);
private Object _persistentCollection;
private PropertyInfo _propertyInfo;
private String _toString;
private Boolean _initialized;
private ArrayList<SingleResult> _kidResults = new ArrayList<SingleResult>();
public PersistentCollectionResult(Object persistentCollection, PropertyInfo propertyInfo, ArrayList<MappedClassInfo> mappedClassInfos)
{
_persistentCollection = persistentCollection;
_propertyInfo = propertyInfo;
ReflectionCaller rc = new ReflectionCaller(persistentCollection);
_initialized = (Boolean)rc.callMethod("wasInitialized").getCallee();
String propertyName = _propertyInfo.getHibernatePropertyInfo().getPropertyName();
String className = _propertyInfo.getMappedClassInfo().getClassName();
if(_initialized)
{
_toString = s_stringMgr.getString("PersistentCollectionResult.initialized", propertyName, className);
Iterator iterator = ((Collection) new ReflectionCaller(_persistentCollection).getCallee()).iterator();
MappedClassInfo mci = null;
while(iterator.hasNext())
{
Object obj = iterator.next();
if(null == mci)
{
mci =ViewObjectsUtil.findMappedClassInfo(obj.getClass().getName(), mappedClassInfos, false);
}
_kidResults.add(new SingleResult(obj, mci));
}
}
else
{
_toString = s_stringMgr.getString("PersistentCollectionResult.uninitialized", propertyName, className);
}
}
public Boolean isInitialized()
{
return _initialized;
}
public ArrayList<SingleResult> getKidResults()
{
return _kidResults;
}
@Override
public String toString()
{
return _toString;
}
}
--- NEW FILE: ObjectResultTabControllerListener.java ---
package net.sourceforge.squirrel_sql.plugins.hibernate.viewobjects;
public interface ObjectResultTabControllerListener
{
void closeTab(ObjectResultTabController toClose);
}
--- NEW FILE: ResultsController.java ---
package net.sourceforge.squirrel_sql.plugins.hibernate.viewobjects;
import net.sourceforge.squirrel_sql.client.session.ISession;
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 net.sourceforge.squirrel_sql.plugins.hibernate.mapping.MappedClassInfo;
import javax.swing.*;
import java.awt.*;
import java.util.ArrayList;
public class ResultsController
{
private static final StringManager s_stringMgr = StringManagerFactory.getStringManager(ResultsController.class);
private JPanel _pnlResults;
private Class _persistenCollectionClass;
private ArrayList<MappedClassInfo> _allMappedClassInfos;
private ISession _session;
private MultipleLineLabel _lblClear;
public ResultsController(JPanel pnlResults, String hqlQuery, Class persistenCollectionClass, ArrayList<MappedClassInfo> allMappedClassInfos, ISession session)
{
_pnlResults = pnlResults;
_persistenCollectionClass = persistenCollectionClass;
_allMappedClassInfos = allMappedClassInfos;
_session = session;
_lblClear = createClearLabel(hqlQuery);
clear();
}
private MultipleLineLabel createClearLabel(String hqlQuery)
{
MultipleLineLabel ret = new MultipleLineLabel(s_stringMgr.getString("ResultsController.resultDescription", hqlQuery));
return ret;
}
public void typeChanged(Object type)
{
if(type instanceof RootType)
{
new RootResultController((RootType)type, _pnlResults, _persistenCollectionClass, _allMappedClassInfos);
}
else if(type instanceof TupelType)
{
new TupelResultController((TupelType) type, _pnlResults, _persistenCollectionClass, _allMappedClassInfos);
}
else if(type instanceof SingleType)
{
new SingleResultController((SingleType) type, _pnlResults, _session);
}
else if(type instanceof PersistentCollectionType)
{
PersistentCollectionType persistentCollectionType = (PersistentCollectionType) type;
new SingleResultController(persistentCollectionType.getSingleType(), _pnlResults, _session);
}
}
public void clear()
{
_pnlResults.removeAll();
_pnlResults.add(new JScrollPane(_lblClear));
_lblClear.scrollRectToVisible(new Rectangle(0,0,1,1));
_pnlResults.repaint();
}
}
--- NEW FILE: IType.java ---
package net.sourceforge.squirrel_sql.plugins.hibernate.viewobjects;
import java.util.ArrayList;
public interface IType
{
ArrayList<? extends IType> getKidTypes();
/**
*
* @return null if this Type does not have results
*/
ArrayList<? extends IResult> getResults();
}
--- NEW FILE: PersistentCollectionType.java ---
package net.sourceforge.squirrel_sql.plugins.hibernate.viewobjects;
import net.sourceforge.squirrel_sql.fw.util.StringManager;
import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
import java.util.ArrayList;
public class PersistentCollectionType implements IType
{
private static final StringManager s_stringMgr = StringManagerFactory.getStringManager(PersistentCollectionType.class);
private SingleType _singleType;
private boolean _wasInitalized;
private String _toString;
public PersistentCollectionType(SingleType singleType, boolean wasInitalized)
{
_singleType = singleType;
_wasInitalized = wasInitalized;
if(_wasInitalized)
{
_toString = s_stringMgr.getString("PersistentCollectionType.initialized", _singleType.getMappedClassInfo().getClassName());
}
else
{
_toString = s_stringMgr.getString("PersistentCollectionType.uninitialized", _singleType.getMappedClassInfo().getClassName());
}
}
@Override
public ArrayList<? extends IType> getKidTypes()
{
return _singleType.getKidTypes();
}
@Override
public ArrayList<? extends IResult> getResults()
{
return _singleType.getResults();
}
@Override
public String toString()
{
return _toString;
}
public SingleType getSingleType()
{
return _singleType;
}
public boolean isInitalized()
{
return _wasInitalized;
}
}
--- NEW FILE: PrimitiveValue.java ---
package net.sourceforge.squirrel_sql.plugins.hibernate.viewobjects;
public class PrimitiveValue
{
private HibernatePropertyReader _hpr;
private Object _value;
private String _toString = "";
public PrimitiveValue(HibernatePropertyReader hpr, Object value)
{
_hpr = hpr;
_value = value;
_toString += _hpr.getName() + "=" + getValue(_value) + "; Type:" + _hpr.getTypeName();
}
private Object getValue(Object value)
{
if(null == value)
{
return "<null>";
}
return value;
}
@Override
public String toString()
{
return _toString;
}
}
--- NEW FILE: CommandLineOutput.java ---
package net.sourceforge.squirrel_sql.plugins.hibernate.viewobjects;
import net.sourceforge.squirrel_sql.plugins.hibernate.ReflectionCaller;
import net.sourceforge.squirrel_sql.plugins.hibernate.mapping.MappedClassInfo;
import net.sourceforge.squirrel_sql.plugins.hibernate.mapping.PropertyInfo;
import java.util.ArrayList;
public class CommandLineOutput
{
public static void displayObjects(ArrayList<MappedClassInfo> mappedClassInfos, RootType root, Class persistenCollectionClass)
{
if(root.getResultType() instanceof SingleType)
{
SingleType type = (SingleType) root.getResultType();
MappedClassInfo mci = type.getMappedClassInfo();
System.out.println("##\nRoot-Result consists of only one mapped class: " + mci.getClassName() + "\n##");
for (SingleResult result : type.getResults())
{
Object firstObject = result.getObject();
displayMappedObject(mappedClassInfos, mci, firstObject, persistenCollectionClass);
}
}
else
{
System.out.println("##\nRoot-Result consists more than one mapped class\n##");
System.out.println("##Displaying result ordered by type:");
for (IType kidType : root.getResultType().getKidTypes())
{
SingleType type = (SingleType) kidType;
System.out.println("*Results for class: " + type.getMappedClassInfo().getClassName());
for (SingleResult queryResult : type.getResults())
{
MappedClassInfo mci = queryResult.getMappedClassInfo();
Object obj = queryResult.getObject();
displayMappedObject(mappedClassInfos, mci, obj, persistenCollectionClass);
}
}
System.out.println("##Displaying result ordered as read:\n");
ArrayList<? extends IResult> results = root.getResultType().getResults();
for (IResult result : results)
{
ArrayList<SingleResult> singleResults = ((TupelResult) result).getSingleResults();
System.out.println("##Displaying result block:");
for (SingleResult singleResult : singleResults)
{
MappedClassInfo mci = singleResult.getMappedClassInfo();
Object obj = singleResult.getObject();
displayMappedObject(mappedClassInfos, mci, obj, persistenCollectionClass);
}
}
}
}
static void displayMappedObject(ArrayList<MappedClassInfo> mappedClassInfos, MappedClassInfo mci, Object obj, Class persistenCollectionClass)
{
PropertyInfo[] propertyInfos = mci.getAttributes();
System.out.println(" New object:");
for (PropertyInfo propertyInfo : propertyInfos)
{
String propertyName = propertyInfo.getHibernatePropertyInfo().getPropertyName();
HibernatePropertyReader hpr = new HibernatePropertyReader(propertyName, obj);
Object value = hpr.getValue();
if (null != value && persistenCollectionClass.isAssignableFrom(value.getClass()))
{
ReflectionCaller rc = new ReflectionCaller(value);
System.out.println(" PersistentCollection: " + hpr.getName() + "; wasInitialized=" + rc.callMethod("wasInitialized").getCallee());
}
else if (null != ViewObjectsUtil.findMappedClassInfo(hpr.getTypeName(), mappedClassInfos, true))
{
System.out.println(" " + hpr.getName() + " instance of mapped class: " + hpr.getTypeName());
}
else
{
System.out.println(" " + hpr.getName() + "=" + value + "; Type:" + hpr.getTypeName());
}
}
}
}
--- NEW FILE: ViewObjectsUtil.java ---
package net.sourceforge.squirrel_sql.plugins.hibernate.viewobjects;
import net.sourceforge.squirrel_sql.plugins.hibernate.mapping.MappedClassInfo;
import net.sourceforge.squirrel_sql.plugins.hibernate.mapping.PropertyInfo;
import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import java.util.ArrayList;
/**
* Created by IntelliJ IDEA.
* User: gerd
* Date: 22.02.2010
* Time: 23:02:54
* To change this template use File | Settings | File Templates.
*/
public class ViewObjectsUtil
{
public static MappedClassInfo findMappedClassInfo(String className, ArrayList<MappedClassInfo> mappedClassInfos, boolean allowNotFound)
{
for (MappedClassInfo mappedClassInfo : mappedClassInfos)
{
if(mappedClassInfo.getClassName().equals(className))
{
return mappedClassInfo;
}
}
if(allowNotFound)
{
return null;
}
throw new IllegalArgumentException("No mapping information found for class: " + className);
}
static void addSingleResultKids(DefaultMutableTreeNode parent, SingleResult singleResult, Class persistenCollectionClass, ArrayList<MappedClassInfo> allMappedClassInfos)
{
PropertyInfo[] propertyInfos = singleResult.getMappedClassInfo().getAttributes();
for (PropertyInfo propertyInfo : propertyInfos)
{
String propertyName = propertyInfo.getHibernatePropertyInfo().getPropertyName();
HibernatePropertyReader hpr = new HibernatePropertyReader(propertyName, singleResult.getObject());
Object value = hpr.getValue();
if (null != value && persistenCollectionClass.isAssignableFrom(value.getClass()))
{
parent.add(new DefaultMutableTreeNode(new PersistentCollectionResult(value, propertyInfo, allMappedClassInfos)));
}
else if (null != findMappedClassInfo(hpr.getTypeName(), allMappedClassInfos, true))
{
SingleResult buf = new SingleResult(hpr.getValue(), findMappedClassInfo(hpr.getTypeName(), allMappedClassInfos, false));
parent.add(new DefaultMutableTreeNode(buf));
}
else
{
parent.add(new DefaultMutableTreeNode(new PrimitiveValue(hpr, value)));
}
}
}
static void nodeStructurChanged(DefaultMutableTreeNode node, JTree tree)
{
((DefaultTreeModel) tree.getModel()).nodeStructureChanged(node);
}
static void addPersistentCollectionKids(DefaultMutableTreeNode kidNode)
{
PersistentCollectionResult pcr = (PersistentCollectionResult) kidNode.getUserObject();
ArrayList<SingleResult> singleResults = pcr.getKidResults();
for (SingleResult singleResult : singleResults)
{
kidNode.add(new DefaultMutableTreeNode(singleResult));
}
}
}
--- NEW FILE: SingleType.java ---
package net.sourceforge.squirrel_sql.plugins.hibernate.viewobjects;
import net.sourceforge.squirrel_sql.plugins.hibernate.ReflectionCaller;
import net.sourceforge.squirrel_sql.plugins.hibernate.mapping.MappedClassInfo;
import net.sourceforge.squirrel_sql.plugins.hibernate.mapping.PropertyInfo;
import javax.swing.tree.DefaultMutableTreeNode;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
public class SingleType implements IType
{
private MappedClassInfo _mappedClassInfo;
private ArrayList<MappedClassInfo> _allMappedClassInfos;
private Class _persistenCollectionClass;
private ArrayList<SingleResult> _results = new ArrayList<SingleResult>();
private ArrayList<IType> _kidTypes;
public SingleType(MappedClassInfo mappedClassInfo, ArrayList<MappedClassInfo> allMappedClassInfos, Class persistenCollectionClass, List objects)
{
_mappedClassInfo = mappedClassInfo;
_allMappedClassInfos = allMappedClassInfos;
_persistenCollectionClass = persistenCollectionClass;
for (Object object : objects)
{
_results.add(new SingleResult(object, mappedClassInfo));
}
}
@Override
public ArrayList<? extends IType> getKidTypes()
{
initKidTypes();
return _kidTypes;
}
private void initKidTypes()
{
if(null != _kidTypes)
{
return;
}
PropertyInfo[] propertyInfos = _mappedClassInfo.getAttributes();
_kidTypes = new ArrayList<IType>();
for (PropertyInfo propertyInfo : propertyInfos)
{
String propertyName = propertyInfo.getHibernatePropertyInfo().getPropertyName();
MappedClassInfo mci = null;
ArrayList objects = new ArrayList();
boolean persistentCollection = false;
boolean persistentCollectionInitialized = false;
for (SingleResult singleResult : _results)
{
HibernatePropertyReader hpr = new HibernatePropertyReader(propertyName, singleResult.getObject());
Object value = hpr.getValue();
if (null != value && _persistenCollectionClass.isAssignableFrom(value.getClass()))
{
persistentCollection = true;
persistentCollectionInitialized = isPersistentCollectionIsInitialize(value);
if(null == mci)
{
mci = propertyInfo.getMappedClassInfo();
}
if (persistentCollectionInitialized)
{
objects.addAll(getObjectsFromPersistentCollection(value));
}
}
else if (null != ViewObjectsUtil.findMappedClassInfo(hpr.getTypeName(), _allMappedClassInfos, true))
{
if(null == mci)
{
mci = ViewObjectsUtil.findMappedClassInfo(hpr.getTypeName(), _allMappedClassInfos, false);
}
objects.add(value);
}
}
if(null != mci)
{
SingleType singleType = new SingleType(mci, _allMappedClassInfos, _persistenCollectionClass, objects);
if(persistentCollection)
{
_kidTypes.add(new PersistentCollectionType(singleType, persistentCollectionInitialized));
}
else
{
_kidTypes.add(singleType);
}
}
}
}
private ArrayList getObjectsFromPersistentCollection(Object persistentCollection)
{
Iterator iterator = ((Collection) new ReflectionCaller(persistentCollection).getCallee()).iterator();
ArrayList ret = new ArrayList();
while(iterator.hasNext())
{
ret.add(iterator.next());
}
return ret;
}
private boolean isPersistentCollectionIsInitialize(Object persistentCollection)
{
ReflectionCaller rc = new Ref...
[truncated message content] |