Lines 53-72
Link Here
|
53 |
import java.awt.event.InputEvent; |
53 |
import java.awt.event.InputEvent; |
54 |
import java.awt.event.KeyEvent; |
54 |
import java.awt.event.KeyEvent; |
55 |
import java.awt.event.MouseEvent; |
55 |
import java.awt.event.MouseEvent; |
|
|
56 |
import java.beans.IntrospectionException; |
56 |
import java.beans.PropertyChangeEvent; |
57 |
import java.beans.PropertyChangeEvent; |
57 |
import java.beans.PropertyChangeListener; |
58 |
import java.beans.PropertyChangeListener; |
58 |
import java.io.IOException; |
59 |
import java.io.IOException; |
59 |
import java.io.PrintWriter; |
60 |
import java.io.PrintWriter; |
60 |
import java.io.StringWriter; |
61 |
import java.io.StringWriter; |
61 |
import java.lang.reflect.Field; |
|
|
62 |
import java.lang.reflect.InvocationTargetException; |
63 |
import java.net.URL; |
62 |
import java.net.URL; |
64 |
import java.util.ArrayList; |
63 |
import java.util.ArrayList; |
65 |
import java.util.Arrays; |
|
|
66 |
import java.util.HashMap; |
64 |
import java.util.HashMap; |
67 |
import java.util.List; |
65 |
import java.util.List; |
68 |
import java.util.StringTokenizer; |
66 |
import java.util.StringTokenizer; |
69 |
import java.util.Vector; |
|
|
70 |
import java.util.logging.Level; |
67 |
import java.util.logging.Level; |
71 |
import java.util.logging.Logger; |
68 |
import java.util.logging.Logger; |
72 |
import javax.swing.DefaultComboBoxModel; |
69 |
import javax.swing.DefaultComboBoxModel; |
Lines 77-92
Link Here
|
77 |
import javax.swing.event.DocumentEvent; |
74 |
import javax.swing.event.DocumentEvent; |
78 |
import javax.swing.event.DocumentListener; |
75 |
import javax.swing.event.DocumentListener; |
79 |
import javax.swing.table.DefaultTableModel; |
76 |
import javax.swing.table.DefaultTableModel; |
|
|
77 |
import javax.swing.table.TableModel; |
80 |
import org.netbeans.api.db.explorer.ConnectionManager; |
78 |
import org.netbeans.api.db.explorer.ConnectionManager; |
81 |
import org.netbeans.api.db.explorer.DatabaseConnection; |
79 |
import org.netbeans.api.db.explorer.DatabaseConnection; |
82 |
import org.netbeans.api.db.explorer.JDBCDriver; |
|
|
83 |
import org.netbeans.api.db.explorer.JDBCDriverManager; |
84 |
import org.netbeans.api.java.classpath.ClassPath; |
85 |
import org.netbeans.api.progress.ProgressHandle; |
80 |
import org.netbeans.api.progress.ProgressHandle; |
86 |
import org.netbeans.api.progress.ProgressHandleFactory; |
81 |
import org.netbeans.api.progress.ProgressHandleFactory; |
87 |
import org.netbeans.api.project.FileOwnerQuery; |
82 |
import org.netbeans.api.project.FileOwnerQuery; |
88 |
import org.netbeans.api.project.Project; |
83 |
import org.netbeans.api.project.Project; |
89 |
import org.netbeans.api.project.libraries.Library; |
|
|
90 |
import org.netbeans.modules.editor.NbEditorDocument; |
84 |
import org.netbeans.modules.editor.NbEditorDocument; |
91 |
import org.netbeans.modules.j2ee.persistence.api.PersistenceEnvironment; |
85 |
import org.netbeans.modules.j2ee.persistence.api.PersistenceEnvironment; |
92 |
import org.netbeans.modules.j2ee.persistence.dd.common.Persistence; |
86 |
import org.netbeans.modules.j2ee.persistence.dd.common.Persistence; |
Lines 100-107
Link Here
|
100 |
import org.netbeans.modules.j2ee.persistence.provider.ProviderUtil; |
94 |
import org.netbeans.modules.j2ee.persistence.provider.ProviderUtil; |
101 |
import org.netbeans.modules.j2ee.persistence.unit.PUDataObject; |
95 |
import org.netbeans.modules.j2ee.persistence.unit.PUDataObject; |
102 |
import org.netbeans.modules.j2ee.persistence.wizard.Util; |
96 |
import org.netbeans.modules.j2ee.persistence.wizard.Util; |
103 |
import org.netbeans.modules.j2ee.persistence.wizard.jpacontroller.JpaControllerUtil; |
|
|
104 |
import org.netbeans.modules.j2ee.persistence.wizard.library.PersistenceLibrarySupport; |
105 |
import org.openide.awt.MouseUtils.PopupMouseAdapter; |
97 |
import org.openide.awt.MouseUtils.PopupMouseAdapter; |
106 |
import org.openide.filesystems.FileObject; |
98 |
import org.openide.filesystems.FileObject; |
107 |
import org.openide.filesystems.MIMEResolver; |
99 |
import org.openide.filesystems.MIMEResolver; |
Lines 182-187
Link Here
|
182 |
}); |
174 |
}); |
183 |
jpqlEditor.addMouseListener(new JPQLEditorPopupMouseAdapter()); |
175 |
jpqlEditor.addMouseListener(new JPQLEditorPopupMouseAdapter()); |
184 |
showSQL(NbBundle.getMessage(JPQLEditorTopComponent.class, "BuildHint")); |
176 |
showSQL(NbBundle.getMessage(JPQLEditorTopComponent.class, "BuildHint")); |
|
|
177 |
resultsTable.setDefaultRenderer(Object.class, new NullTableCellRenderer()); |
185 |
} |
178 |
} |
186 |
|
179 |
|
187 |
private class JPQLEditorPopupMouseAdapter extends PopupMouseAdapter { |
180 |
private class JPQLEditorPopupMouseAdapter extends PopupMouseAdapter { |
Lines 538-572
Link Here
|
538 |
|
531 |
|
539 |
setStatus(strBuffer.toString()); |
532 |
setStatus(strBuffer.toString()); |
540 |
|
533 |
|
541 |
Vector<String> tableHeaders = new Vector<String>(); |
534 |
TableModel tm = new DefaultTableModel(); |
542 |
Vector<Vector> tableData = new Vector<Vector>(); |
|
|
543 |
|
535 |
|
544 |
if (!result.getQueryResults().isEmpty()) { |
536 |
if (!result.getQueryResults().isEmpty()) { |
545 |
|
537 |
try { |
546 |
Object firstObject = result.getQueryResults().get(0); |
538 |
List<ReflectionInfo> info = ReflectionInfo.prepare(result.getQueryResults()); |
547 |
if (firstObject instanceof Object[]) { |
539 |
tm = new ReflectiveTableModel(info, result.getQueryResults()); |
548 |
// Join query result. |
540 |
} catch (IntrospectionException ex) { |
549 |
for (Object oneObject : (Object[]) firstObject) { |
541 |
logger.log(Level.WARNING, "Failed to reflect while building table model for JPA display", ex); |
550 |
createTableHeaders(tableHeaders, oneObject); |
|
|
551 |
} |
542 |
} |
552 |
|
|
|
553 |
for (Object row : result.getQueryResults()) { |
554 |
createTableData(tableData, (Object[]) row); |
555 |
} |
543 |
} |
556 |
|
|
|
557 |
} else { |
558 |
// Construct the table headers |
559 |
createTableHeaders(tableHeaders, firstObject); |
560 |
for (Object oneObject : result.getQueryResults()) { |
561 |
createTableData(tableData, oneObject); |
562 |
} |
563 |
} |
564 |
|
565 |
} else { |
566 |
|
567 |
} |
568 |
resultsTable.clearSelection(); |
544 |
resultsTable.clearSelection(); |
569 |
resultsTable.setModel(new JPQLEditorResultTableModel(tableData, tableHeaders)); //new DefaultTableModel(tableData, tableHeaders)); |
545 |
resultsTable.setModel(tm); |
570 |
|
546 |
|
571 |
|
547 |
|
572 |
} else { |
548 |
} else { |
Lines 596-685
Link Here
|
596 |
Thread.currentThread().setContextClassLoader(oldClassLoader); |
572 |
Thread.currentThread().setContextClassLoader(oldClassLoader); |
597 |
} |
573 |
} |
598 |
|
574 |
|
599 |
private void createTableHeaders(Vector<String> tableHeaders, Object oneObject) { |
|
|
600 |
if (oneObject == null || oneObject.getClass().getName().startsWith("java.lang") || oneObject.getClass().getName().startsWith("java.math")) {//NOI18N |
601 |
//case for Long, String etc |
602 |
tableHeaders.add(org.openide.util.NbBundle.getMessage(JPQLEditorTopComponent.class, "queryResultDefaultColumnName") + " " + (tableHeaders.size() + 1));//NOI18N |
603 |
} else { |
604 |
for (java.lang.reflect.Method m : oneObject.getClass().getDeclaredMethods()) { |
605 |
String methodName = m.getName(); |
606 |
if (methodName.startsWith("get")) { //NOI18N |
607 |
String head = JpaControllerUtil.getPropNameFromMethod(methodName); |
608 |
try { |
609 |
oneObject.getClass().getDeclaredField(head); |
610 |
tableHeaders.add(head); |
611 |
} catch (Exception ex) { |
612 |
String head2 = null; |
613 |
for(Field f:oneObject.getClass().getDeclaredFields()){ |
614 |
if(head.equalsIgnoreCase(f.getName())){ |
615 |
head2 = head; |
616 |
} |
617 |
} |
618 |
head2 = head2 == null ? methodName.substring(3) : head2; |
619 |
tableHeaders.add(head2); |
620 |
} |
621 |
|
622 |
} |
623 |
} |
624 |
} |
625 |
} |
626 |
|
627 |
private void createTableData(Vector<Vector> tableData, Object... rowObject) { |
628 |
Vector<Object> oneRow = new Vector<Object>(); |
629 |
for (Object oneObject : rowObject) { |
630 |
if (oneObject == null) { |
631 |
oneRow.add("NULL");//NOI18N |
632 |
} else if (oneObject.getClass().getName().startsWith("java.lang") || oneObject.getClass().getName().startsWith("java.math")) { |
633 |
//case for Long, String etc |
634 |
oneRow.add(oneObject.toString()); |
635 |
} else { |
636 |
for (java.lang.reflect.Method m : oneObject.getClass().getDeclaredMethods()) { |
637 |
String methodName = m.getName(); |
638 |
if (methodName.startsWith("get")) { //NOI18N |
639 |
try { |
640 |
Object methodReturnValue = m.invoke(oneObject, new Object[]{}); |
641 |
if (methodReturnValue == null) { |
642 |
oneRow.add("NULL"); //NOI18N |
643 |
continue; |
644 |
} |
645 |
if (methodReturnValue instanceof java.util.Collection) { |
646 |
oneRow.add(methodReturnValue.toString()); |
647 |
continue; |
648 |
} |
649 |
oneRow.add(methodReturnValue.toString()); |
650 |
} catch (IllegalAccessException ex) { |
651 |
//Exceptions.printStackTrace(ex); |
652 |
} catch (IllegalArgumentException ex) { |
653 |
//Exceptions.printStackTrace(ex); |
654 |
} catch (InvocationTargetException ex) { |
655 |
Exceptions.printStackTrace(ex); |
656 |
} |
657 |
} |
658 |
} |
659 |
} |
660 |
} |
661 |
tableData.add(oneRow); |
662 |
} |
663 |
|
664 |
private void setStatus(String message) { |
575 |
private void setStatus(String message) { |
665 |
statusLabel.setText(message); |
576 |
statusLabel.setText(message); |
666 |
} |
577 |
} |
667 |
|
578 |
|
668 |
/* |
|
|
669 |
* Creates custom table model with read only cell customization. |
670 |
*/ |
671 |
private class JPQLEditorResultTableModel extends DefaultTableModel { |
672 |
|
673 |
public JPQLEditorResultTableModel(Vector<Vector> tableData, Vector<String> tableHeaders) { |
674 |
super(tableData, tableHeaders); |
675 |
} |
676 |
|
677 |
@Override |
678 |
public boolean isCellEditable(int row, int column) { |
679 |
return false; |
680 |
} |
681 |
} |
682 |
|
683 |
private String removePersistenceModuleCodelines(String exceptionTrace) { |
579 |
private String removePersistenceModuleCodelines(String exceptionTrace) { |
684 |
StringTokenizer tokenizer = new StringTokenizer(exceptionTrace, "\n"); |
580 |
StringTokenizer tokenizer = new StringTokenizer(exceptionTrace, "\n"); |
685 |
StringBuilder filteredExceptionTrace = new StringBuilder(); |
581 |
StringBuilder filteredExceptionTrace = new StringBuilder(); |