Author: snjeza
Date: 2008-05-15 16:38:12 -0400 (Thu, 15 May 2008)
New Revision: 8124
Added:
trunk/birt/plugins/org.hibernate.birt.oda.ui/.classpath
trunk/birt/plugins/org.hibernate.birt.oda.ui/.project
trunk/birt/plugins/org.hibernate.birt.oda.ui/META-INF/
trunk/birt/plugins/org.hibernate.birt.oda.ui/META-INF/MANIFEST.MF
trunk/birt/plugins/org.hibernate.birt.oda.ui/about.html
trunk/birt/plugins/org.hibernate.birt.oda.ui/about.ini
trunk/birt/plugins/org.hibernate.birt.oda.ui/about.mappings
trunk/birt/plugins/org.hibernate.birt.oda.ui/about.properties
trunk/birt/plugins/org.hibernate.birt.oda.ui/build.properties
trunk/birt/plugins/org.hibernate.birt.oda.ui/icons/
trunk/birt/plugins/org.hibernate.birt.oda.ui/icons/datasetpage.ico
trunk/birt/plugins/org.hibernate.birt.oda.ui/icons/new_oda_dswiz.ico
trunk/birt/plugins/org.hibernate.birt.oda.ui/icons/profile.gif
trunk/birt/plugins/org.hibernate.birt.oda.ui/plugin.properties
trunk/birt/plugins/org.hibernate.birt.oda.ui/plugin.xml
trunk/birt/plugins/org.hibernate.birt.oda.ui/rhds_wiz.png
trunk/birt/plugins/org.hibernate.birt.oda.ui/src/
trunk/birt/plugins/org.hibernate.birt.oda.ui/src/org/
trunk/birt/plugins/org.hibernate.birt.oda.ui/src/org/hibernate/
trunk/birt/plugins/org.hibernate.birt.oda.ui/src/org/hibernate/birt/
trunk/birt/plugins/org.hibernate.birt.oda.ui/src/org/hibernate/birt/oda/
trunk/birt/plugins/org.hibernate.birt.oda.ui/src/org/hibernate/birt/oda/ui/
trunk/birt/plugins/org.hibernate.birt.oda.ui/src/org/hibernate/birt/oda/ui/Activator.java
trunk/birt/plugins/org.hibernate.birt.oda.ui/src/org/hibernate/birt/oda/ui/impl/
trunk/birt/plugins/org.hibernate.birt.oda.ui/src/org/hibernate/birt/oda/ui/impl/CustomDataSetWizardPage.java
trunk/birt/plugins/org.hibernate.birt.oda.ui/src/org/hibernate/birt/oda/ui/impl/HibernateDSDragSource.java
trunk/birt/plugins/org.hibernate.birt.oda.ui/src/org/hibernate/birt/oda/ui/impl/HibernateDSDropSource.java
trunk/birt/plugins/org.hibernate.birt.oda.ui/src/org/hibernate/birt/oda/ui/impl/HibernateDataSourcePropertyPage.java
trunk/birt/plugins/org.hibernate.birt.oda.ui/src/org/hibernate/birt/oda/ui/impl/HibernateDataSourceWizardPage.java
trunk/birt/plugins/org.hibernate.birt.oda.ui/src/org/hibernate/birt/oda/ui/impl/HibernateSelectionPageHelper.java
trunk/birt/plugins/org.hibernate.birt.oda.ui/src/org/hibernate/birt/oda/ui/impl/TextMenuManager.java
Log:
Initial import.
Added: trunk/birt/plugins/org.hibernate.birt.oda.ui/.classpath
===================================================================
--- trunk/birt/plugins/org.hibernate.birt.oda.ui/.classpath (rev
0)
+++ trunk/birt/plugins/org.hibernate.birt.oda.ui/.classpath 2008-05-15 20:38:12 UTC (rev
8124)
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="con"
path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="con"
path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
Added: trunk/birt/plugins/org.hibernate.birt.oda.ui/.project
===================================================================
--- trunk/birt/plugins/org.hibernate.birt.oda.ui/.project (rev 0)
+++ trunk/birt/plugins/org.hibernate.birt.oda.ui/.project 2008-05-15 20:38:12 UTC (rev
8124)
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.hibernate.birt.oda.ui</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
Added: trunk/birt/plugins/org.hibernate.birt.oda.ui/META-INF/MANIFEST.MF
===================================================================
--- trunk/birt/plugins/org.hibernate.birt.oda.ui/META-INF/MANIFEST.MF
(rev 0)
+++ trunk/birt/plugins/org.hibernate.birt.oda.ui/META-INF/MANIFEST.MF 2008-05-15 20:38:12
UTC (rev 8124)
@@ -0,0 +1,16 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %plugin.name
+Bundle-SymbolicName: org.hibernate.birt.oda.ui; singleton:=true
+Bundle-Version: 1.0.0
+Bundle-Activator: org.hibernate.birt.oda.ui.Activator
+Bundle-Vendor: RedHat, Inc.
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+
org.eclipse.datatools.connectivity.oda.design.ui;bundle-version="[3.0.4,4.0.0)",
+ org.hibernate.birt.oda,
+ org.eclipse.jface.text,
+ org.eclipse.jdt.core,
+ org.eclipse.ui.workbench.texteditor
+Eclipse-LazyStart: true
Added: trunk/birt/plugins/org.hibernate.birt.oda.ui/about.html
===================================================================
--- trunk/birt/plugins/org.hibernate.birt.oda.ui/about.html (rev
0)
+++ trunk/birt/plugins/org.hibernate.birt.oda.ui/about.html 2008-05-15 20:38:12 UTC (rev
8124)
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html
xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html;
charset=ISO-8859-1" />
+<title>JBoss BIRT Integration</title>
+<style type="text/css" media="screen">
+<!--
+ body {
+ font-family: Sans-serif, Arial, Helvetica;
+ }
+
+-->
+</style>
+</head>
+<body>
+<h1>JBoss BIRT Integration</h1>
+
+<p>
+This plugin is part of the JBoss Tools developed by the <a
href="http://www.jboss.com">JBoss Inc.</a>
+</p>
+
+<p>Information about this plugin is available at <a
href="http://www.jboss.org/tools">JBoss Tools project
page</a></p>
+
+<p>
+This software is distributed under the terms of the Eclipse Public License - v 1.0
+(see <a
href="www.eclipse.org/legal/epl-v10.html">Eclipse Public License
- Version 1.0</a>).
+</p>
+</body>
+</html>
\ No newline at end of file
Added: trunk/birt/plugins/org.hibernate.birt.oda.ui/about.ini
===================================================================
--- trunk/birt/plugins/org.hibernate.birt.oda.ui/about.ini (rev
0)
+++ trunk/birt/plugins/org.hibernate.birt.oda.ui/about.ini 2008-05-15 20:38:12 UTC (rev
8124)
@@ -0,0 +1,27 @@
+# about.ini
+# contains information about a feature
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# "%key" are externalized strings defined in about.properties
+# This file does not need to be translated.
+# test
+# Property "aboutText" contains blurb for "About" dialog
(translated)
+aboutText=%blurb
+
+# Property "windowImage" contains path to window icon (16x16)
+# needed for primary features only
+
+# Property "featureImage" contains path to feature image (32x32)
+featureImage=rhds_wiz.png
+
+# Property "aboutImage" contains path to product image (500x330 or 115x164)
+# needed for primary features only
+
+# Property "appName" contains name of the application (not translated)
+# needed for primary features only
+
+# Property "welcomePerspective" contains the id of the perspective in which
the
+# welcome page is to be opened.
+# optional
+
+
+
Added: trunk/birt/plugins/org.hibernate.birt.oda.ui/about.mappings
===================================================================
--- trunk/birt/plugins/org.hibernate.birt.oda.ui/about.mappings
(rev 0)
+++ trunk/birt/plugins/org.hibernate.birt.oda.ui/about.mappings 2008-05-15 20:38:12 UTC
(rev 8124)
@@ -0,0 +1,5 @@
+# about.mappings
+# contains fill-ins for about.properties
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file does not need to be translated.
+
Added: trunk/birt/plugins/org.hibernate.birt.oda.ui/about.properties
===================================================================
--- trunk/birt/plugins/org.hibernate.birt.oda.ui/about.properties
(rev 0)
+++ trunk/birt/plugins/org.hibernate.birt.oda.ui/about.properties 2008-05-15 20:38:12 UTC
(rev 8124)
@@ -0,0 +1,7 @@
+blurb=JBoss BIRT Integration\n\
+\n\
+Version: {featureVersion}\n\
+\n\
+(c) Copyright JBoss Inc. contributors and others 2004 - 2008. All rights reserved.\n\
+Visit
http://jboss.org/tools
+
Added: trunk/birt/plugins/org.hibernate.birt.oda.ui/build.properties
===================================================================
--- trunk/birt/plugins/org.hibernate.birt.oda.ui/build.properties
(rev 0)
+++ trunk/birt/plugins/org.hibernate.birt.oda.ui/build.properties 2008-05-15 20:38:12 UTC
(rev 8124)
@@ -0,0 +1,12 @@
+source.. = src/
+output.. = bin/
+bin.includes = plugin.xml,\
+ META-INF/,\
+ .,\
+ plugin.properties,\
+ icons/,\
+ about.properties,\
+ about.mappings,\
+ about.ini,\
+ about.html,\
+ rhds_wiz.png
Added: trunk/birt/plugins/org.hibernate.birt.oda.ui/icons/datasetpage.ico
===================================================================
(Binary files differ)
Property changes on: trunk/birt/plugins/org.hibernate.birt.oda.ui/icons/datasetpage.ico
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/birt/plugins/org.hibernate.birt.oda.ui/icons/new_oda_dswiz.ico
===================================================================
(Binary files differ)
Property changes on: trunk/birt/plugins/org.hibernate.birt.oda.ui/icons/new_oda_dswiz.ico
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/birt/plugins/org.hibernate.birt.oda.ui/icons/profile.gif
===================================================================
(Binary files differ)
Property changes on: trunk/birt/plugins/org.hibernate.birt.oda.ui/icons/profile.gif
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/birt/plugins/org.hibernate.birt.oda.ui/plugin.properties
===================================================================
--- trunk/birt/plugins/org.hibernate.birt.oda.ui/plugin.properties
(rev 0)
+++ trunk/birt/plugins/org.hibernate.birt.oda.ui/plugin.properties 2008-05-15 20:38:12 UTC
(rev 8124)
@@ -0,0 +1,16 @@
+###############################################################################
+# Plug-in Configuration
+#
+oda.data.source.id=org.hibernate.birt.oda
+#
+###############################################################################
+# NLS strings
+#
+plugin.name=JBoss BIRT Integration
+newwizard.name=Hibernate Data Source
+newwizard.description=Create a Hibernate Data Source connection profile
+wizard.window.title=New Hibernate Data Source Profile
+wizard.data.source.page.title=Hibernate Data Source
+profile.propertypage.name=Hibernate Data Source Connection Properties
+wizard.data.set.window.title=New Hibernate Data Set
+wizard.data.set.page.title=Query
Added: trunk/birt/plugins/org.hibernate.birt.oda.ui/plugin.xml
===================================================================
--- trunk/birt/plugins/org.hibernate.birt.oda.ui/plugin.xml (rev
0)
+++ trunk/birt/plugins/org.hibernate.birt.oda.ui/plugin.xml 2008-05-15 20:38:12 UTC (rev
8124)
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+
+
+ <extension
+ point="org.eclipse.datatools.connectivity.connectionProfile">
+ <newWizard
+ name="%newwizard.name"
+ icon="icons/new_oda_dswiz.ico"
+ profile="%oda.data.source.id"
+ description="%newwizard.description"
+
class="org.eclipse.datatools.connectivity.oda.design.ui.wizards.NewDataSourceWizard"
+ id="%oda.data.source.id">
+ </newWizard>
+ </extension>
+ <extension
+ point="org.eclipse.ui.propertyPages">
+ <page
+
objectClass="org.eclipse.datatools.connectivity.IConnectionProfile"
+ name="%profile.propertypage.name"
+
class="org.hibernate.birt.oda.ui.impl.HibernateDataSourcePropertyPage"
+ id="%oda.data.source.id">
+ <filter
+ name="org.eclipse.datatools.profile.property.id"
+ value="%oda.data.source.id">
+ </filter>
+ </page>
+ </extension>
+
+ <extension
+
point="org.eclipse.datatools.connectivity.oda.design.ui.dataSource">
+ <dataSourceUI
+ id="%oda.data.source.id">
+ <newDataSourceWizard
+
pageClass="org.hibernate.birt.oda.ui.impl.HibernateDataSourceWizardPage"
+ includesProgressMonitor="false"
+ pageTitle="%wizard.data.source.page.title"
+ windowTitle="%wizard.window.title">
+ </newDataSourceWizard>
+ </dataSourceUI>
+ <dataSetUI
+ supportsOutParameters="false"
+ supportsInParameters="true"
+ initialPageId="org.hibernate.birt.oda.dataSet.page1"
+ id="org.hibernate.birt.oda.dataSet">
+ <dataSetWizard
+
class="org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSetWizard"
+ windowTitle="%wizard.data.set.window.title">
+ </dataSetWizard>
+ <dataSetPage
+ displayName="%wizard.data.set.page.title"
+ icon="icons/datasetpage.ico"
+
wizardPageClass="org.hibernate.birt.oda.ui.impl.CustomDataSetWizardPage"
+ path="/"
+ id="org.hibernate.birt.oda.dataSet.page1">
+ </dataSetPage>
+ </dataSetUI>
+ </extension>
+
+</plugin>
Added: trunk/birt/plugins/org.hibernate.birt.oda.ui/rhds_wiz.png
===================================================================
(Binary files differ)
Property changes on: trunk/birt/plugins/org.hibernate.birt.oda.ui/rhds_wiz.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added:
trunk/birt/plugins/org.hibernate.birt.oda.ui/src/org/hibernate/birt/oda/ui/Activator.java
===================================================================
---
trunk/birt/plugins/org.hibernate.birt.oda.ui/src/org/hibernate/birt/oda/ui/Activator.java
(rev 0)
+++
trunk/birt/plugins/org.hibernate.birt.oda.ui/src/org/hibernate/birt/oda/ui/Activator.java 2008-05-15
20:38:12 UTC (rev 8124)
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at
http://www.eclipse.org/legal/epl-v10.html
+ *
+ ******************************************************************************/
+package org.hibernate.birt.oda.ui;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ *
+ * @author snjeza
+ */
+public class Activator extends AbstractUIPlugin {
+
+ // The plug-in ID
+ public static final String PLUGIN_ID = "org.hibernate.birt.oda.ui";
+
+ // The shared instance
+ private static Activator plugin;
+
+ /**
+ * The constructor
+ */
+ public Activator() {
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+ */
+ public void start(BundleContext context) throws Exception {
+ super.start(context);
+ plugin = this;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+ */
+ public void stop(BundleContext context) throws Exception {
+ plugin = null;
+ super.stop(context);
+ }
+
+ /**
+ * Returns the shared instance
+ *
+ * @return the shared instance
+ */
+ public static Activator getDefault() {
+ return plugin;
+ }
+
+ /**
+ * Returns an image descriptor for the image file at the given
+ * plug-in relative path
+ *
+ * @param path the path
+ * @return the image descriptor
+ */
+ public static ImageDescriptor getImageDescriptor(String path) {
+ return imageDescriptorFromPlugin(PLUGIN_ID, path);
+ }
+}
Added:
trunk/birt/plugins/org.hibernate.birt.oda.ui/src/org/hibernate/birt/oda/ui/impl/CustomDataSetWizardPage.java
===================================================================
---
trunk/birt/plugins/org.hibernate.birt.oda.ui/src/org/hibernate/birt/oda/ui/impl/CustomDataSetWizardPage.java
(rev 0)
+++
trunk/birt/plugins/org.hibernate.birt.oda.ui/src/org/hibernate/birt/oda/ui/impl/CustomDataSetWizardPage.java 2008-05-15
20:38:12 UTC (rev 8124)
@@ -0,0 +1,722 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at
http://www.eclipse.org/legal/epl-v10.html
+ *
+ ******************************************************************************/
+
+package org.hibernate.birt.oda.ui.impl;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.IHandler;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.datatools.connectivity.oda.IConnection;
+import org.eclipse.datatools.connectivity.oda.IDriver;
+import org.eclipse.datatools.connectivity.oda.IParameterMetaData;
+import org.eclipse.datatools.connectivity.oda.IQuery;
+import org.eclipse.datatools.connectivity.oda.IResultSetMetaData;
+import org.eclipse.datatools.connectivity.oda.OdaException;
+import org.eclipse.datatools.connectivity.oda.design.DataSetDesign;
+import org.eclipse.datatools.connectivity.oda.design.DataSetParameters;
+import org.eclipse.datatools.connectivity.oda.design.DataSourceDesign;
+import org.eclipse.datatools.connectivity.oda.design.DesignFactory;
+import org.eclipse.datatools.connectivity.oda.design.NameValuePair;
+import org.eclipse.datatools.connectivity.oda.design.ParameterDefinition;
+import org.eclipse.datatools.connectivity.oda.design.Property;
+import org.eclipse.datatools.connectivity.oda.design.ResultSetColumns;
+import org.eclipse.datatools.connectivity.oda.design.ResultSetDefinition;
+import org.eclipse.datatools.connectivity.oda.design.ui.designsession.DesignSessionUtil;
+import org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSetWizardPage;
+import org.eclipse.datatools.connectivity.oda.design.util.DesignUtil;
+import org.eclipse.jface.dialogs.ErrorDialog;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.text.Document;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.ITextOperationTarget;
+import org.eclipse.jface.text.IUndoManager;
+import org.eclipse.jface.text.TextViewerUndoManager;
+import org.eclipse.jface.text.source.CompositeRuler;
+import org.eclipse.jface.text.source.ISourceViewer;
+import org.eclipse.jface.text.source.LineNumberRulerColumn;
+import org.eclipse.jface.text.source.SourceViewer;
+import org.eclipse.jface.text.source.SourceViewerConfiguration;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.StyledText;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.KeyListener;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Sash;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.handlers.IHandlerActivation;
+import org.eclipse.ui.handlers.IHandlerService;
+import org.eclipse.ui.texteditor.ITextEditorActionDefinitionIds;
+import org.hibernate.HibernateException;
+import org.hibernate.Query;
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.hibernate.birt.oda.impl.HibernateConnection;
+import org.hibernate.birt.oda.impl.HibernateDriver;
+import org.hibernate.birt.oda.ui.Activator;
+import org.hibernate.console.ConsoleConfiguration;
+import org.hibernate.console.KnownConfigurations;
+import org.hibernate.console.QueryInputModel;
+import org.hibernate.eclipse.console.QueryEditor;
+import org.hibernate.eclipse.console.viewers.xpl.MTreeViewer;
+import org.hibernate.eclipse.console.views.KnownConfigurationsProvider;
+import org.hibernate.eclipse.console.workbench.LazySessionFactory;
+import org.hibernate.eclipse.console.workbench.LazySessionFactoryAdapter;
+import org.hibernate.eclipse.console.workbench.xpl.AnyAdaptableLabelProvider;
+import org.hibernate.eclipse.hqleditor.HQLEditorDocumentSetupParticipant;
+import org.hibernate.eclipse.hqleditor.HQLSourceViewerConfiguration;
+
+/**
+ * Hibernate data set designer page
+ *
+ * @author snjeza
+ */
+public class CustomDataSetWizardPage extends DataSetWizardPage {
+
+ private static String DEFAULT_MESSAGE = "Define the query text for the data
set";
+
+ private StyledText styledText;
+
+ private SourceViewer sourceViewer;
+
+ private IHandlerService fService;
+
+ private IHandlerActivation fActivation;
+
+ private TreeViewer viewer;
+
+ private Button testButton;
+
+ /**
+ * Constructor
+ *
+ * @param pageName
+ */
+ public CustomDataSetWizardPage(String pageName) {
+ super(pageName);
+ setTitle(pageName);
+ setMessage(DEFAULT_MESSAGE);
+
+ setPageComplete(false);
+ }
+
+ /**
+ * Constructor
+ *
+ * @param pageName
+ * @param title
+ * @param titleImage
+ */
+ public CustomDataSetWizardPage(String pageName, String title,
+ ImageDescriptor titleImage) {
+ super(pageName, title, titleImage);
+ setMessage(DEFAULT_MESSAGE);
+ setPageComplete(false);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSetWizardPage#createPageCustomControl(org.eclipse.swt.widgets.Composite)
+ */
+ public void createPageCustomControl(Composite parent) {
+ setControl(createPageControl(parent));
+ validateData();
+ setMessage(DEFAULT_MESSAGE);
+ }
+
+ /**
+ * Creates custom control for user-defined query text.
+ */
+ private Control createPageControl(Composite parent) {
+ Composite composite = new Composite(parent, SWT.NONE);
+ GridLayout layout = new GridLayout();
+ layout.numColumns = 3;
+ layout.marginWidth = 0;
+ layout.marginHeight = 0;
+ layout.horizontalSpacing = 2;
+ composite.setLayout(layout);
+ composite.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ Control left = createTableSelectionComposite(composite);
+ GridData gridData = (GridData) left.getLayoutData();
+ gridData.widthHint=160;
+ //left.setLayoutData(gridData);
+
+ Sash sash = createSash(composite);
+ Control right = createQueryComposite(composite);
+ //setWidthHints(composite, left, right, sash);
+ addDragListerner(sash, composite, left, right);
+ initDragAndDrop();
+ return composite;
+ }
+
+ private void initDragAndDrop() {
+ new HibernateDSDragSource(viewer);
+ new HibernateDSDropSource(sourceViewer);
+ }
+
+ private void addDragListerner( final Sash sash, final Composite parent,
+ final Control left, final Control right )
+ {
+ sash.addListener( SWT.Selection, new Listener( ) {
+
+ public void handleEvent( Event event )
+ {
+ if ( event.detail == SWT.DRAG )
+ {
+ return;
+ }
+ Sash sash = (Sash) event.widget;
+ int shift = event.x - sash.getBounds( ).x;
+
+ left.setSize( left.getSize( ).x+shift, left.getSize( ).y );
+ right.setSize( right.getSize( ).x-shift, right.getSize( ).y );
+ right.setLocation( right.getLocation( ).x+shift, right.getLocation( ).y );
+ sash.setLocation( sash.getLocation( ).x+shift, sash.getLocation( ).y );
+ }
+ } );
+ }
+
+
+ private Control createQueryComposite(Composite parent) {
+
+ Composite composite = new Composite(parent, SWT.FILL
+ | SWT.LEFT_TO_RIGHT );
+ GridLayout layout = new GridLayout();
+ layout.numColumns = 1;
+ composite.setLayout(layout);
+ composite.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ CompositeRuler ruler = new CompositeRuler();
+ LineNumberRulerColumn lineNumbers = new LineNumberRulerColumn();
+ ruler.addDecorator(0, lineNumbers);
+
+ sourceViewer = new SourceViewer(composite, ruler, SWT.V_SCROLL
+ | SWT.H_SCROLL | SWT.BORDER);
+ sourceViewer.setInput(parent);
+ styledText = sourceViewer.getTextWidget();
+ styledText.addModifyListener(new ModifyListener() {
+
+ public void modifyText(ModifyEvent e) {
+ validateData();
+ }
+
+ });
+ styledText.setFont(JFaceResources.getTextFont());
+ Control control = sourceViewer.getControl();
+ GridData gd = new GridData(GridData.FILL_BOTH);
+ control.setLayoutData(gd);
+
+ IDocument document = new Document();
+ document.set(getInitialQueryString());
+ HQLEditorDocumentSetupParticipant docSetupParticipant = new
HQLEditorDocumentSetupParticipant();
+ docSetupParticipant.setup(document);
+ sourceViewer.setEditable(true);
+ sourceViewer.setDocument(document);
+ IUndoManager undoManager = new TextViewerUndoManager(10);
+ sourceViewer.setUndoManager(undoManager);
+ undoManager.connect(sourceViewer);
+
+ attachMenus(sourceViewer);
+ // add support of additional accelerated key
+ sourceViewer.getTextWidget( ).addKeyListener( new KeyListener( ) {
+
+ public void keyPressed( KeyEvent e )
+ {
+ if ( isUndoKeyPress( e ) )
+ {
+ sourceViewer.doOperation( ITextOperationTarget.UNDO );
+ }
+ else if ( isRedoKeyPress( e ) )
+ {
+ sourceViewer.doOperation( ITextOperationTarget.REDO );
+ }
+ validateData();
+ }
+
+ private boolean isUndoKeyPress( KeyEvent e )
+ {
+ // CTRL + z
+ return ( ( e.stateMask & SWT.CONTROL ) > 0 )
+ && ( ( e.keyCode == 'z' ) || ( e.keyCode == 'Z' ) );
+ }
+
+ private boolean isRedoKeyPress( KeyEvent e )
+ {
+ // CTRL + y
+ return ( ( e.stateMask & SWT.CONTROL ) > 0 )
+ && ( ( e.keyCode == 'y' ) || ( e.keyCode == 'Y' ) );
+ }
+
+ public void keyReleased( KeyEvent e )
+ {
+ // do nothing
+ }
+ } );
+
+ IHandler handler = new AbstractHandler() {
+ public Object execute(ExecutionEvent event)
+ throws org.eclipse.core.commands.ExecutionException {
+ sourceViewer.doOperation(ISourceViewer.CONTENTASSIST_PROPOSALS);
+ return null;
+ }
+ };
+ IWorkbench workbench = PlatformUI.getWorkbench();
+ fService = (IHandlerService) workbench
+ .getAdapter(IHandlerService.class);
+ fActivation = fService.activateHandler(
+ ITextEditorActionDefinitionIds.CONTENT_ASSIST_PROPOSALS,
+ handler);
+
+ QueryEditor editor = new QueryEditor() {
+
+ public boolean askUserForConfiguration(String name) {
+ return false;
+ }
+
+ public void executeQuery(ConsoleConfiguration cfg) {
+ }
+
+ public ConsoleConfiguration getConsoleConfiguration() {
+ return getInternalConsoleConfiguration();
+ }
+
+ public String getConsoleConfigurationName() {
+ return getConfigurationName();
+ }
+
+ public QueryInputModel getQueryInputModel() {
+ return null;
+ }
+
+ public String getQueryString() {
+ return null;
+ }
+
+ public void setConsoleConfigurationName(String text) {
+ }
+
+ };
+ SourceViewerConfiguration svc = new HQLSourceViewerConfiguration(
+ editor);
+ sourceViewer.configure(svc);
+ testButton = new Button(composite,SWT.NONE);
+ testButton.setText("Test query ...");
+ testButton.addSelectionListener(new SelectionAdapter() {
+
+ public void widgetSelected(SelectionEvent e) {
+ testQuery();
+ }
+
+ });
+ return composite;
+ }
+
+ private void testQuery() {
+ String title = "Test query";
+ ConsoleConfiguration configuration = getInternalConsoleConfiguration();
+ if (configuration == null || configuration.getSessionFactory() == null) {
+ MessageDialog.openConfirm(getShell(), title,
+ "Invalid configuration '" + getConfigurationName() +
"'.");
+ }
+ Session session = null;
+ try {
+ session = configuration.getSessionFactory().openSession();
+ Query q = session.createQuery(getQueryText());
+ q.setFirstResult(0);
+ q.setMaxResults(1);
+ q.list();
+ MessageDialog.openInformation(getShell(), title,
+ "The query is valid.");
+ } catch (Exception e) {
+ String message = "The query is not valid.";
+ IStatus status = new Status(Status.ERROR, Activator.PLUGIN_ID,
+ e.getLocalizedMessage(), e);
+ Activator.getDefault().getLog().log(status);
+ ErrorDialog.openError(getShell(), title, message, status);
+ } finally {
+ if (session != null) {
+ session.close();
+ }
+ }
+ }
+
+ private final void attachMenus( SourceViewer viewer )
+ {
+ StyledText widget = viewer.getTextWidget( );
+ TextMenuManager menuManager = new TextMenuManager( viewer );
+ widget.setMenu( menuManager.getContextMenu( widget ) );
+ }
+
+ private String getConfigurationName() {
+ DataSetDesign design = getInitializationDesign();
+ DataSourceDesign dsDesign = design.getDataSourceDesign();
+ Property property = dsDesign.getPublicProperties().findProperty(
+ HibernateConnection.CONFIGURATION);
+ NameValuePair propertyValue = property.getNameValue();
+ String name = propertyValue.getValue();
+ return name;
+ }
+
+ private ConsoleConfiguration getInternalConsoleConfiguration() {
+ return getConsoleConfiguration(getConfigurationName());
+ }
+
+ private Sash createSash(final Composite composite) {
+ final Sash sash = new Sash(composite, SWT.VERTICAL);
+ sash.setLayoutData(new GridData(GridData.FILL_VERTICAL));
+ return sash;
+ }
+
+ private Control createTableSelectionComposite(Composite parent) {
+
+ Composite composite = new Composite(parent, SWT.NONE);
+ GridLayout layout = new GridLayout();
+
+ composite.setLayout(layout);
+
+ GridData data = new GridData(GridData.FILL_VERTICAL);
+ data.grabExcessVerticalSpace = true;
+ composite.setLayoutData(data);
+
+ Label dataSourceLabel = new Label(composite, SWT.LEFT);
+ dataSourceLabel.setText("Available Items");
+ data = new GridData();
+ dataSourceLabel.setLayoutData(data);
+
+ viewer = new MTreeViewer(composite, SWT.MULTI | SWT.H_SCROLL
+ | SWT.V_SCROLL);
+ data = new GridData(GridData.FILL_BOTH);
+ data.grabExcessHorizontalSpace = true;
+ data.grabExcessVerticalSpace = true;
+
+ viewer.getControl().setLayoutData(data);
+
+ viewer.setLabelProvider(new AnyAdaptableLabelProvider());
+ viewer.setContentProvider(new KnownConfigurationsProvider());
+ ConsoleConfiguration configuration = getInternalConsoleConfiguration();
+ if (configuration != null) {
+ SessionFactory sessionFactory = configuration.getSessionFactory();
+ if (sessionFactory == null) {
+ configuration.build();
+ configuration.buildSessionFactory();
+ configuration.getSessionFactory();
+ }
+ viewer.setInput(new LazySessionFactory(configuration));
+ }
+ else
+ viewer.setInput(KnownConfigurations.getInstance());
+
+ return composite;
+ }
+
+ private ConsoleConfiguration getConsoleConfiguration(String name) {
+ ConsoleConfiguration[] configurations = KnownConfigurations
+ .getInstance().getConfigurations();
+ for (int i = 0; i < configurations.length; i++) {
+ if (configurations[i].getName().equals(name)) {
+ return configurations[i];
+ }
+ }
+ return null;
+ }
+
+ private void setWidthHints(Composite pageContainer, Control left,
+ Control right, Sash sash) {
+ int leftWidth = left.computeSize(SWT.DEFAULT, SWT.DEFAULT).x;
+ int totalWidth = pageContainer.computeSize(SWT.DEFAULT, SWT.DEFAULT).x;
+
+ if ((double) leftWidth / (double) totalWidth > 0.4) {
+ // if left side is too wide, set it to default value 40:60
+ leftWidth = totalWidth * 40 / 100;
+ leftWidth = leftWidth
+ - sash.computeSize(SWT.DEFAULT, SWT.DEFAULT).x;
+ GridData data = (GridData) left.getLayoutData();
+ data.widthHint = leftWidth;
+ data = (GridData) right.getLayoutData();
+ data.widthHint = totalWidth - leftWidth;
+ } else {
+ GridData data = (GridData) left.getLayoutData();
+ data.widthHint = leftWidth;
+ data = (GridData) right.getLayoutData();
+ data.widthHint = totalWidth - leftWidth;
+ }
+ }
+
+ /**
+ * Initializes the page control with the last edited data set design.
+ */
+ private String getInitialQueryString() {
+ DataSetDesign dataSetDesign = getInitializationDesign();
+ if (dataSetDesign == null)
+ return ""; // nothing to initialize
+
+ String queryText = dataSetDesign.getQueryText();
+ if (queryText == null) {
+ return "";
+ }
+ return queryText;
+ }
+
+ /**
+ * Obtains the user-defined query text of this data set from page control.
+ *
+ * @return query text
+ */
+ private String getQueryText() {
+ return styledText.getText();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSetWizardPage#collectDataSetDesign(org.eclipse.datatools.connectivity.oda.design.DataSetDesign)
+ */
+ protected DataSetDesign collectDataSetDesign(DataSetDesign design) {
+ if (!hasValidData())
+ return design;
+ savePage(design);
+ return design;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSetWizardPage#collectResponseState()
+ */
+ protected void collectResponseState() {
+ super.collectResponseState();
+ /*
+ * To optionally assign a custom response state, for inclusion in the
+ * ODA design session response, use setResponseSessionStatus(
+ * SessionStatus status ); setResponseDesignerState( DesignerState
+ * customState );
+ */
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSetWizardPage#canLeave()
+ */
+ protected boolean canLeave() {
+ return isPageComplete();
+ }
+
+ /**
+ * Validates the user-defined value in the page control exists and not a
+ * blank text. Set page message accordingly.
+ */
+ private void validateData() {
+ boolean isValid = (styledText != null && getQueryText() != null &&
getQueryText()
+ .trim().length() > 0);
+
+ if (isValid)
+ setMessage(DEFAULT_MESSAGE);
+ else
+ setMessage("Requires input value.", ERROR);
+
+ if (testButton != null) {
+ testButton.setEnabled(isValid);
+ }
+ setPageComplete(isValid);
+ }
+
+ /**
+ * Indicates whether the custom page has valid data to proceed with defining
+ * a data set.
+ */
+ private boolean hasValidData() {
+ validateData();
+
+ return canLeave();
+ }
+
+ /**
+ * Saves the user-defined value in this page, and updates the specified
+ * dataSetDesign with the latest design definition.
+ */
+ private void savePage(DataSetDesign dataSetDesign) {
+ // save user-defined query text
+ String queryText = getQueryText();
+ dataSetDesign.setQueryText(queryText);
+
+ // obtain query's current runtime metadata, and maps it to the
+ // dataSetDesign
+ IConnection customConn = null;
+ try {
+ // instantiate your custom ODA runtime driver class
+ /*
+ * Note: You may need to manually update your ODA runtime
+ * extension's plug-in manifest to export its package for visibility
+ * here.
+ */
+ IDriver customDriver = new HibernateDriver();
+
+ // obtain and open a live connection
+ customConn = customDriver.getConnection(null);
+ java.util.Properties connProps = DesignUtil
+ .convertDataSourceProperties(getInitializationDesign()
+ .getDataSourceDesign());
+ customConn.open(connProps);
+
+ // update the data set design with the
+ // query's current runtime metadata
+ updateDesign(dataSetDesign, customConn, queryText);
+ } catch (OdaException e) {
+ // not able to get current metadata, reset previous derived metadata
+ dataSetDesign.setResultSets(null);
+ dataSetDesign.setParameters(null);
+
+ e.printStackTrace();
+ } finally {
+ closeConnection(customConn);
+ }
+ }
+
+ /**
+ * Updates the given dataSetDesign with the queryText and its derived
+ * metadata obtained from the ODA runtime connection.
+ */
+ private void updateDesign(DataSetDesign dataSetDesign, IConnection conn,
+ String queryText) throws OdaException {
+ IQuery query = conn.newQuery(null);
+ query.prepare(queryText);
+
+ try {
+ IResultSetMetaData md = query.getMetaData();
+ updateResultSetDesign(md, dataSetDesign);
+ } catch (OdaException e) {
+ // no result set definition available, reset previous derived
+ // metadata
+ dataSetDesign.setResultSets(null);
+ e.printStackTrace();
+ }
+
+ // proceed to get parameter design definition
+ try {
+ IParameterMetaData paramMd = query.getParameterMetaData();
+ updateParameterDesign(paramMd, dataSetDesign);
+ } catch (OdaException ex) {
+ // no parameter definition available, reset previous derived
+ // metadata
+ dataSetDesign.setParameters(null);
+ ex.printStackTrace();
+ }
+
+ /*
+ * See DesignSessionUtil for more convenience methods to define a data
+ * set design instance.
+ */
+ }
+
+ /**
+ * Updates the specified data set design's result set definition based on
+ * the specified runtime metadata.
+ *
+ * @param md
+ * runtime result set metadata instance
+ * @param dataSetDesign
+ * data set design instance to update
+ * @throws OdaException
+ */
+ private void updateResultSetDesign(IResultSetMetaData md,
+ DataSetDesign dataSetDesign) throws OdaException {
+ ResultSetColumns columns = DesignSessionUtil
+ .toResultSetColumnsDesign(md);
+
+ ResultSetDefinition resultSetDefn = DesignFactory.eINSTANCE
+ .createResultSetDefinition();
+ // resultSetDefn.setName( value ); // result set name
+ resultSetDefn.setResultSetColumns(columns);
+
+ // no exception in conversion; go ahead and assign to specified
+ // dataSetDesign
+ dataSetDesign.setPrimaryResultSet(resultSetDefn);
+ dataSetDesign.getResultSets().setDerivedMetaData(true);
+ }
+
+ /**
+ * Updates the specified data set design's parameter definition based on the
+ * specified runtime metadata.
+ *
+ * @param paramMd
+ * runtime parameter metadata instance
+ * @param dataSetDesign
+ * data set design instance to update
+ * @throws OdaException
+ */
+ private void updateParameterDesign(IParameterMetaData paramMd,
+ DataSetDesign dataSetDesign) throws OdaException {
+ DataSetParameters paramDesign = DesignSessionUtil
+ .toDataSetParametersDesign(
+ paramMd,
+ DesignSessionUtil
+ .toParameterModeDesign(IParameterMetaData.parameterModeIn));
+
+ // no exception in conversion; go ahead and assign to specified
+ // dataSetDesign
+ if (paramDesign == null)
+ return;
+ paramDesign.setDerivedMetaData(true);
+ dataSetDesign.setParameters(paramDesign);
+
+ // TODO replace below with data source specific implementation;
+ // hard-coded parameter's default value for demo purpose
+ if (paramDesign.getParameterDefinitions().size() > 0) {
+ ParameterDefinition paramDef = (ParameterDefinition) paramDesign
+ .getParameterDefinitions().get(0);
+ if (paramDef != null)
+ paramDef.setDefaultScalarValue("dummy default value");
+ }
+ }
+
+ /**
+ * Attempts to close given ODA connection.
+ */
+ private void closeConnection(IConnection conn) {
+ try {
+ if (conn != null && conn.isOpen())
+ conn.close();
+ } catch (OdaException e) {
+ // ignore
+ e.printStackTrace();
+ }
+ }
+
+ public void dispose() {
+ if (fActivation != null) {
+ fService.deactivateHandler(fActivation);
+ }
+ if (sourceViewer != null) {
+ sourceViewer.getTextWidget().dispose();
+ sourceViewer = null;
+ }
+
+ super.dispose();
+ }
+
+}
Added:
trunk/birt/plugins/org.hibernate.birt.oda.ui/src/org/hibernate/birt/oda/ui/impl/HibernateDSDragSource.java
===================================================================
---
trunk/birt/plugins/org.hibernate.birt.oda.ui/src/org/hibernate/birt/oda/ui/impl/HibernateDSDragSource.java
(rev 0)
+++
trunk/birt/plugins/org.hibernate.birt.oda.ui/src/org/hibernate/birt/oda/ui/impl/HibernateDSDragSource.java 2008-05-15
20:38:12 UTC (rev 8124)
@@ -0,0 +1,54 @@
+package org.hibernate.birt.oda.ui.impl;
+
+import org.eclipse.jface.util.LocalSelectionTransfer;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.DragSource;
+import org.eclipse.swt.dnd.DragSourceEvent;
+import org.eclipse.swt.dnd.DragSourceListener;
+import org.eclipse.swt.dnd.Transfer;
+import org.hibernate.console.node.BaseNode;
+import org.hibernate.mapping.Property;
+import org.hibernate.mapping.RootClass;
+
+public class HibernateDSDragSource implements DragSourceListener {
+
+ private TreeViewer viewer;
+
+ public HibernateDSDragSource(TreeViewer viewer) {
+ this.viewer = viewer;
+ DragSource source = new DragSource(viewer.getControl(),DND.DROP_COPY | DND.DROP_MOVE);
+ source.setTransfer(new Transfer[] { LocalSelectionTransfer.getTransfer()});
+ source.addDragListener(this);
+ }
+
+ public void dragFinished(DragSourceEvent event) {
+ }
+
+ public void dragSetData(DragSourceEvent event) {
+ if (LocalSelectionTransfer.getTransfer()
+ .isSupportedType(event.dataType)) {
+ LocalSelectionTransfer.getTransfer().setSelection(
+ viewer.getSelection());
+ }
+ }
+
+ public void dragStart(DragSourceEvent event) {
+ ISelection sel = viewer.getSelection();
+ if (sel instanceof IStructuredSelection) {
+ IStructuredSelection selection = (IStructuredSelection) sel;
+ if (selection.size() == 1) {
+ Object object = selection.getFirstElement();
+ if (object instanceof RootClass
+ || object instanceof Property || object instanceof BaseNode) {
+ event.doit = true;
+ return;
+ }
+ }
+ }
+ event.doit = false;
+ }
+
+}
Added:
trunk/birt/plugins/org.hibernate.birt.oda.ui/src/org/hibernate/birt/oda/ui/impl/HibernateDSDropSource.java
===================================================================
---
trunk/birt/plugins/org.hibernate.birt.oda.ui/src/org/hibernate/birt/oda/ui/impl/HibernateDSDropSource.java
(rev 0)
+++
trunk/birt/plugins/org.hibernate.birt.oda.ui/src/org/hibernate/birt/oda/ui/impl/HibernateDSDropSource.java 2008-05-15
20:38:12 UTC (rev 8124)
@@ -0,0 +1,89 @@
+package org.hibernate.birt.oda.ui.impl;
+
+import org.eclipse.jface.text.source.SourceViewer;
+import org.eclipse.jface.util.LocalSelectionTransfer;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.custom.StyledText;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.DropTarget;
+import org.eclipse.swt.dnd.DropTargetEvent;
+import org.eclipse.swt.dnd.DropTargetListener;
+import org.eclipse.swt.dnd.Transfer;
+import org.hibernate.console.node.BaseNode;
+import org.hibernate.mapping.Property;
+import org.hibernate.mapping.RootClass;
+
+public class HibernateDSDropSource implements DropTargetListener {
+
+ private SourceViewer viewer;
+
+ public HibernateDSDropSource(SourceViewer viewer) {
+ this.viewer = viewer;
+ int operations = DND.DROP_COPY | DND.DROP_DEFAULT;
+ DropTarget target = new DropTarget(viewer.getTextWidget(), operations);
+ Transfer[] types = new Transfer[] { LocalSelectionTransfer
+ .getTransfer() };
+ target.setTransfer(types);
+ target.addDropListener(this);
+ }
+
+ public void dragEnter(DropTargetEvent event) {
+ viewer.getTextWidget().setFocus( );
+ if ( event.detail == DND.DROP_DEFAULT )
+ event.detail = DND.DROP_COPY;
+ if ( event.detail != DND.DROP_COPY )
+ event.detail = DND.DROP_NONE;
+
+ }
+
+ public void dragLeave(DropTargetEvent event) {
+ }
+
+ public void dragOperationChanged(DropTargetEvent event) {
+ dragEnter(event);
+ }
+
+ public void dragOver(DropTargetEvent event) {
+ event.feedback = DND.FEEDBACK_SCROLL | DND.FEEDBACK_SELECT;
+ }
+
+ public void drop(DropTargetEvent event) {
+ if (LocalSelectionTransfer.getTransfer().isSupportedType(
+ event.currentDataType)) {
+
+ Object data = LocalSelectionTransfer.getTransfer().getSelection();
+ if (data instanceof IStructuredSelection) {
+ IStructuredSelection selection = (IStructuredSelection) event.data;
+ Object source = selection.getFirstElement();
+ String text = null;
+ if (source instanceof RootClass) {
+ RootClass table = (RootClass) source;
+ text = getShortName(table.getEntityName());
+ } else if (source instanceof Property) {
+ Property property = (Property) source;
+ text = property.getName();
+ } else if (source instanceof BaseNode) {
+ BaseNode node = (BaseNode) source;
+ text = getShortName(node.getName());
+ }
+ if (text == null)
+ return;
+ StyledText textWidget = viewer.getTextWidget();
+ int selectionStart = textWidget.getSelection().x;
+ textWidget.insert(text);
+ textWidget.setSelection(selectionStart + text.length());
+ textWidget.setFocus();
+ }
+ }
+ }
+
+ private String getShortName(String name) {
+ while (name.indexOf(".") > -1)
+ name = name.substring(name.indexOf(".") + 1);
+ return name;
+ }
+
+ public void dropAccept(DropTargetEvent event) {
+ }
+
+}
Added:
trunk/birt/plugins/org.hibernate.birt.oda.ui/src/org/hibernate/birt/oda/ui/impl/HibernateDataSourcePropertyPage.java
===================================================================
---
trunk/birt/plugins/org.hibernate.birt.oda.ui/src/org/hibernate/birt/oda/ui/impl/HibernateDataSourcePropertyPage.java
(rev 0)
+++
trunk/birt/plugins/org.hibernate.birt.oda.ui/src/org/hibernate/birt/oda/ui/impl/HibernateDataSourcePropertyPage.java 2008-05-15
20:38:12 UTC (rev 8124)
@@ -0,0 +1,49 @@
+package org.hibernate.birt.oda.ui.impl;
+/*******************************************************************************
+ * Copyright (c) 2007 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at
http://www.eclipse.org/legal/epl-v10.html
+ *
+ ******************************************************************************/
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSourceEditorPage;
+import org.eclipse.swt.widgets.Composite;
+import org.hibernate.birt.oda.impl.HibernateConnection;
+
+/**
+ * Hibernate property page
+ *
+ * @author snjeza
+ **/
+public class HibernateDataSourcePropertyPage extends DataSourceEditorPage {
+
+ private HibernateSelectionPageHelper helper;
+
+ public HibernateDataSourcePropertyPage() {
+ super();
+ }
+
+ public Properties collectCustomProperties(Properties dataSourceProps) {
+ Properties props = dataSourceProps;
+ if (dataSourceProps == null) {
+ props = new Properties();
+ }
+ props.setProperty(HibernateConnection.CONFIGURATION, helper.getConfiguration());
+ props.setProperty(HibernateConnection.MAX_ROWS, helper.getMaxRows());
+ return props;
+ }
+
+ protected void createAndInitCustomControl(Composite parent,
+ Properties profileProps) {
+ if ( helper == null )
+ helper = new HibernateSelectionPageHelper( this );
+
+ helper.createCustomControl( parent );
+ setPingButtonVisible( false );
+ helper.initCustomControl( profileProps );
+ }
+
+}
Added:
trunk/birt/plugins/org.hibernate.birt.oda.ui/src/org/hibernate/birt/oda/ui/impl/HibernateDataSourceWizardPage.java
===================================================================
---
trunk/birt/plugins/org.hibernate.birt.oda.ui/src/org/hibernate/birt/oda/ui/impl/HibernateDataSourceWizardPage.java
(rev 0)
+++
trunk/birt/plugins/org.hibernate.birt.oda.ui/src/org/hibernate/birt/oda/ui/impl/HibernateDataSourceWizardPage.java 2008-05-15
20:38:12 UTC (rev 8124)
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at
http://www.eclipse.org/legal/epl-v10.html
+ *
+ ******************************************************************************/
+package org.hibernate.birt.oda.ui.impl;
+
+import java.util.Properties;
+
+import org.eclipse.datatools.connectivity.oda.design.ui.wizards.DataSourceWizardPage;
+import org.eclipse.swt.widgets.Composite;
+/**
+ * Hibernate wizard page
+ *
+ * @author snjeza
+ **/
+public class HibernateDataSourceWizardPage extends DataSourceWizardPage {
+
+ private HibernateSelectionPageHelper helper;
+ private Properties folderProperties;
+
+ public HibernateDataSourceWizardPage(String pageName) {
+ super(pageName);
+ }
+
+ public Properties collectCustomProperties() {
+ if( helper != null )
+ return helper.collectCustomProperties( folderProperties );
+
+ return ( folderProperties != null ) ?
+ folderProperties : new Properties();
+ }
+
+ public void createPageCustomControl(Composite parent) {
+ if( helper == null )
+ helper = new HibernateSelectionPageHelper( this );
+ helper.createCustomControl( parent );
+ helper.initCustomControl( folderProperties );
+ this.setPingButtonVisible( false );
+ }
+
+ public void setInitialProperties(Properties dataSourceProps) {
+ folderProperties = dataSourceProps;
+ if( helper == null )
+ return;
+ helper.initCustomControl( folderProperties );
+ }
+
+
+}
Added:
trunk/birt/plugins/org.hibernate.birt.oda.ui/src/org/hibernate/birt/oda/ui/impl/HibernateSelectionPageHelper.java
===================================================================
---
trunk/birt/plugins/org.hibernate.birt.oda.ui/src/org/hibernate/birt/oda/ui/impl/HibernateSelectionPageHelper.java
(rev 0)
+++
trunk/birt/plugins/org.hibernate.birt.oda.ui/src/org/hibernate/birt/oda/ui/impl/HibernateSelectionPageHelper.java 2008-05-15
20:38:12 UTC (rev 8124)
@@ -0,0 +1,239 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at
http://www.eclipse.org/legal/epl-v10.html
+ *
+ ******************************************************************************/
+package org.hibernate.birt.oda.ui.impl;
+
+import java.util.Properties;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.dialogs.ErrorDialog;
+import org.eclipse.jface.dialogs.IMessageProvider;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.hibernate.HibernateException;
+import org.hibernate.SessionFactory;
+import org.hibernate.birt.oda.impl.HibernateConnection;
+import org.hibernate.birt.oda.ui.Activator;
+import org.hibernate.console.ConsoleConfiguration;
+import org.hibernate.console.KnownConfigurations;
+
+/**
+ * Helper class for Hibernate wizard and property page
+ *
+ * @author snjeza
+ *
+ */
+public class HibernateSelectionPageHelper {
+
+ private static final String DEFAULT_MAX_ROWS = "100";
+ private WizardPage wizardPage;
+ private PreferencePage propertyPage;
+ private Combo configurationCombo;
+ private Text maxRows;
+ private Button testButton;
+
+ public HibernateSelectionPageHelper(WizardPage page) {
+ this.wizardPage = page;
+ }
+
+ public HibernateSelectionPageHelper(PreferencePage page) {
+ propertyPage = page;
+ }
+
+ void createCustomControl(Composite parent) {
+ Composite composite = new Composite(parent, SWT.NONE);
+
+ GridLayout layout = new GridLayout();
+ layout.numColumns = 3;
+ layout.verticalSpacing = 10;
+ layout.marginBottom = 10;
+ composite.setLayout(layout);
+
+ GridData gridData;
+
+ Label configurationLabel = new Label(composite, SWT.RIGHT);
+ configurationLabel.setText("Configuration:");
+
+ configurationCombo = new Combo(composite, SWT.NONE);
+ gridData = new GridData();
+ gridData.horizontalSpan = 2;
+ gridData.horizontalAlignment = SWT.FILL;
+ gridData.grabExcessHorizontalSpace = true;
+ configurationCombo.setLayoutData(gridData);
+
+ ConsoleConfiguration[] configurations = KnownConfigurations
+ .getInstance().getConfigurations();
+ String[] configurationNames = new String[configurations.length];
+ for (int i = 0; i < configurations.length; i++) {
+ configurationNames[i] = configurations[i].getName();
+ }
+ configurationCombo.setItems(configurationNames);
+
+ Label maxFetchLabel = new Label(composite, SWT.NONE);
+ maxFetchLabel.setText("Max results:");
+
+ maxRows = new Text(composite, SWT.BORDER);
+ maxRows.setLayoutData(gridData);
+
+ configurationCombo.addModifyListener(new ModifyListener() {
+
+ public void modifyText(ModifyEvent e) {
+ validateData();
+ }
+
+ });
+
+ new Label(composite, SWT.NONE);
+ testButton = new Button(composite, SWT.PUSH);
+ testButton.setText("Test Connection...");
+
+ testButton.setLayoutData(new GridData(GridData.CENTER));
+ testButton.addSelectionListener(new SelectionAdapter() {
+
+ public void widgetSelected(SelectionEvent e) {
+ testConnection();
+ }
+
+ });
+
+ validateData();
+
+ }
+
+ private void setMessage(String message, int type) {
+ if (wizardPage != null)
+ wizardPage.setMessage(message, type);
+ else if (propertyPage != null)
+ propertyPage.setMessage(message, type);
+ }
+
+ private void setMessage(String message) {
+ if (wizardPage != null)
+ wizardPage.setMessage(message);
+ else if (propertyPage != null)
+ propertyPage.setMessage(message);
+ }
+
+ private void validateData() {
+ if (configurationCombo.getText().trim().length() > 0) {
+ setMessage("Edit the selected data source");
+ testButton.setEnabled(true);
+ setPageComplete(true);
+ } else {
+ setMessage("Configuration must not be empty",
+ IMessageProvider.ERROR);
+ testButton.setEnabled(false);
+ setPageComplete(false);
+ }
+ }
+
+ public void initCustomControl(Properties profileProps) {
+ if (profileProps != null) {
+ String confName = profileProps
+ .getProperty(HibernateConnection.CONFIGURATION);
+ if (confName != null) {
+ configurationCombo.setText(confName);
+ }
+ String maxResult = profileProps
+ .getProperty(HibernateConnection.MAX_ROWS);
+ maxRows.setText(maxResult);
+ } else {
+ if (configurationCombo.getItemCount() > 0) {
+ configurationCombo.select(0);
+ }
+ maxRows.setText(DEFAULT_MAX_ROWS);
+ }
+ }
+
+ protected void testConnection() {
+ String configurationName = configurationCombo.getText();
+ ConsoleConfiguration[] configurations = KnownConfigurations
+ .getInstance().getConfigurations();
+ ConsoleConfiguration consoleConfiguration = null;
+ String title = "Test connection";
+ for (int i = 0; i < configurations.length; i++) {
+ if (configurations[i].getName().equals(configurationName)) {
+ consoleConfiguration = configurations[i];
+ break;
+ }
+ }
+ if (consoleConfiguration != null) {
+ try {
+ SessionFactory sessionFactory = consoleConfiguration
+ .getSessionFactory();
+ if (sessionFactory == null) {
+ consoleConfiguration.build();
+ consoleConfiguration.buildSessionFactory();
+ sessionFactory = consoleConfiguration.getSessionFactory();
+ }
+ MessageDialog.openInformation(getShell(), title,
+ "Connection successfull.");
+ } catch (HibernateException e) {
+ String message = e.getLocalizedMessage();
+ IStatus status = new Status(Status.ERROR, Activator.PLUGIN_ID,
+ message, e);
+ Activator.getDefault().getLog().log(status);
+ ErrorDialog.openError(getShell(), title, message, status);
+ }
+ } else {
+ MessageDialog.openConfirm(getShell(), title,
+ "Invalid configuration '" + configurationName + "'.");
+
+ }
+
+ }
+
+ private Shell getShell() {
+ if (wizardPage != null)
+ return wizardPage.getShell();
+ if (propertyPage != null)
+ return propertyPage.getShell();
+ return null;
+ }
+
+ public String getConfiguration() {
+ return configurationCombo.getText();
+ }
+
+ public String getMaxRows() {
+ return maxRows.getText();
+ }
+
+ Properties collectCustomProperties(Properties props) {
+ if (props == null)
+ props = new Properties();
+
+ props
+ .setProperty(HibernateConnection.CONFIGURATION,
+ getConfiguration());
+ props.setProperty(HibernateConnection.MAX_ROWS, getMaxRows());
+ return props;
+ }
+
+ private void setPageComplete(boolean complete) {
+ if (wizardPage != null)
+ wizardPage.setPageComplete(complete);
+ else if (propertyPage != null)
+ propertyPage.setValid(complete);
+ }
+}
Added:
trunk/birt/plugins/org.hibernate.birt.oda.ui/src/org/hibernate/birt/oda/ui/impl/TextMenuManager.java
===================================================================
---
trunk/birt/plugins/org.hibernate.birt.oda.ui/src/org/hibernate/birt/oda/ui/impl/TextMenuManager.java
(rev 0)
+++
trunk/birt/plugins/org.hibernate.birt.oda.ui/src/org/hibernate/birt/oda/ui/impl/TextMenuManager.java 2008-05-15
20:38:12 UTC (rev 8124)
@@ -0,0 +1,134 @@
+package org.hibernate.birt.oda.ui.impl;
+
+import java.util.Enumeration;
+import java.util.Hashtable;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.text.ITextOperationTarget;
+import org.eclipse.jface.text.TextViewer;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Menu;
+
+
+/**
+ * Text menu manager contains 'undo,redo,cut,copy,paste,select all' menuItem. It
+ * displays on textVeiwer.
+ *
+ */
+class TextMenuManager
+{
+
+ private Hashtable htActions = new Hashtable( );
+ private MenuManager manager;
+
+ /**
+ * Constructor to specify the textMenuManager for a text viewer.
+ *
+ * @param viewer
+ */
+ TextMenuManager( TextViewer viewer )
+ {
+ manager = new MenuManager( );
+ Separator separator = new Separator( "undo" );//$NON-NLS-1$
+ manager.add( separator );
+ separator = new Separator( "copy" );//$NON-NLS-1$
+ manager.add( separator );
+ separator = new Separator( "select" );//$NON-NLS-1$
+ manager.add( separator );
+ manager.appendToGroup( "undo", getAction( "undo", viewer,
"Undo", ITextOperationTarget.UNDO ) );
+ manager.appendToGroup( "undo", getAction( "redo", viewer,
"Redo", ITextOperationTarget.REDO ) );
+ manager.appendToGroup( "copy", getAction( "cut", viewer,
"Cut", ITextOperationTarget.CUT ) );
+ manager.appendToGroup( "copy", getAction( "copy", viewer,
"Copy", ITextOperationTarget.COPY ) );//$NON-NLS-1$
+ manager.appendToGroup( "copy", getAction( "paste", viewer,
"Paste", ITextOperationTarget.PASTE ) );//$NON-NLS-1$
+ manager.appendToGroup( "select", getAction( "selectall", viewer,
"Select all", ITextOperationTarget.SELECT_ALL ) );//$NON-NLS-1$
+
+ manager.add( new Separator("hql") );
+ manager.appendToGroup( "hql", getAction("contentAssist", viewer,
"Content Assist",13));
+ manager.appendToGroup( "hql", getAction("contentTip", viewer,
"Content Tip",14));
+ manager.appendToGroup( "hql", getAction("format", viewer,
"Format HQL source",15));
+
+ manager.addMenuListener( new IMenuListener( ) {
+
+ public void menuAboutToShow( IMenuManager manager )
+ {
+ Enumeration elements = htActions.elements( );
+ while ( elements.hasMoreElements( ) )
+ {
+ SourceViewerAction action = (SourceViewerAction) elements.nextElement( );
+ action.update( );
+ }
+ }
+ } );
+ }
+
+ /**
+ *
+ * @param control
+ * @return
+ */
+ public Menu getContextMenu( Control control )
+ {
+ return manager.createContextMenu( control );
+ }
+
+ /**
+ *
+ * @param id
+ * @param viewer
+ * @param name
+ * @param operation
+ * @return
+ */
+ private final SourceViewerAction getAction( String id, TextViewer viewer,
+ String name, int operation )
+ {
+ SourceViewerAction action = (SourceViewerAction) htActions.get( id );
+ if ( action == null )
+ {
+ action = new SourceViewerAction( viewer, name, operation );
+ htActions.put( id, action );
+ }
+ return action;
+ }
+
+
+ class SourceViewerAction extends Action
+ {
+
+ private int operationCode = -1;
+ private TextViewer viewer = null;
+
+ public SourceViewerAction( TextViewer viewer, String text,
+ int operationCode )
+ {
+ super( text );
+ this.operationCode = operationCode;
+ this.viewer = viewer;
+ }
+
+ /*
+ *
+ * @see org.eclipse.jface.action.IAction#run()
+ */
+ public void run( )
+ {
+ viewer.doOperation( operationCode );
+ }
+
+ /**
+ * update the operation
+ *
+ */
+ public void update( )
+ {
+ setEnabled( viewer.canDoOperation( operationCode ) );
+ }
+
+ }
+
+}
\ No newline at end of file