http://git-wip-us.apache.org/repos/asf/empire-db/blob/83302f08/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/ui/ConfigurationDialog.java ---------------------------------------------------------------------- diff --git a/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/ui/ConfigurationDialog.java b/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/ui/ConfigurationDialog.java new file mode 100644 index 0000000..8670e51 --- /dev/null +++ b/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/ui/ConfigurationDialog.java @@ -0,0 +1,293 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.empire.db.eclipse.ui; + +import org.apache.empire.db.eclipse.Plugin; +import org.apache.empire.db.eclipse.PluginConsts; +import org.apache.empire.db.eclipse.model.ConfigFile; +import org.apache.empire.db.eclipse.util.SWTResourceManager; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.dialogs.TitleAreaDialog; +import org.eclipse.jface.window.Window; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.events.SelectionListener; +import org.eclipse.swt.graphics.Point; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Combo; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Shell; + +public class ConfigurationDialog extends TitleAreaDialog +{ + private Navigator navigator; + + private Page visiblePage; + + private Button btnNextPage; + + private Button btnPreviousPage; + + private Button btnOk; + + private Button btnCancel; + + public ConfigurationDialog(Shell shell) + { + super(shell); + } + + @Override + public void create() + { + super.create(); + UpdateControls(); + } + + // overriding this methods allows you to set the + // title of the custom dialog + @Override + protected void configureShell(Shell newShell) + { + super.configureShell(newShell); + newShell.setText(Plugin.getInstance().getMessageService().resolveMessageKey("dialog.title")); + } + + @Override + protected Point getInitialSize() + { + return new Point(470, 685); + } + + @Override + protected void createButtonsForButtonBar(Composite parent) + { + parent.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); + this.btnPreviousPage = createButton(parent, PluginConsts.BUTTON_PREVIOUS_ID, Plugin.getInstance().getMessageService() + .resolveMessageKey("dialog.back"), true); + this.btnPreviousPage.addSelectionListener(new SelectionListener() + { + public void widgetSelected(SelectionEvent e) + { + ConfigurationDialog.this.navigator.showPreviousPage(); + UpdateControls(); + } + + public void widgetDefaultSelected(SelectionEvent e) + { + } + }); + this.btnNextPage = createButton(parent, PluginConsts.BUTTON_NEXT_ID, + Plugin.getInstance().getMessageService().resolveMessageKey("dialog.next"), true); + this.btnNextPage.addSelectionListener(new SelectionListener() + { + public void widgetSelected(SelectionEvent e) + { + ConfigurationDialog.this.navigator.showNextPage(); + UpdateControls(); + } + + public void widgetDefaultSelected(SelectionEvent e) + { + } + }); + + this.btnOk = createButton(parent, PluginConsts.BUTTON_OK, Plugin.getInstance().getMessageService().resolveMessageKey("dialog.ok"), + false); + this.btnOk.addSelectionListener(new SelectionListener() + { + public void widgetSelected(SelectionEvent arg0) + { + if (checkRequiredFields()) + { + saveAction(); + setReturnCode(Window.OK); + close(); + } + } + + public void widgetDefaultSelected(SelectionEvent arg0) + { + } + }); + this.btnCancel = createButton(parent, PluginConsts.BUTTON_CANCEL, + Plugin.getInstance().getMessageService().resolveMessageKey("dialog.close"), false); + this.btnCancel.addSelectionListener(new SelectionListener() + { + public void widgetSelected(SelectionEvent arg0) + { + save(); + setReturnCode(Window.CANCEL); + close(); + } + + public void widgetDefaultSelected(SelectionEvent arg0) + { + } + }); + } + + @Override + protected Control createDialogArea(Composite parent) + { + setTitleImage(SWTResourceManager.getImage(ConfigurationDialog.class, "/icons/empire-db-logo.gif")); + Composite area = (Composite) super.createDialogArea(parent); + area.setLayout(null); + final MainPage mainPage = new MainPage(area, SWT.NONE); + mainPage.addExistingConfigsListener(new SelectionListener() + { + public void widgetSelected(SelectionEvent event) + { + if (event.widget instanceof Combo) + { + Combo combo = (Combo) event.widget; + save(); + load(Plugin.getInstance().getConfigFileService().getConfig(combo.getText())); + } + } + + public void widgetDefaultSelected(SelectionEvent arg0) + { + } + }); + + mainPage.addBtnAddListener(new SelectionListener() + { + public void widgetSelected(SelectionEvent arg0) + { + save(); + load(Plugin.getInstance().getConfigFileService().getDefaultConfig()); + } + + public void widgetDefaultSelected(SelectionEvent arg0) + { + + } + }); + mainPage.addBtnSaveListener(new SelectionListener() + { + public void widgetSelected(SelectionEvent arg0) + { + saveAction(); + mainPage.setConfigTitleList(Plugin.getInstance().getConfigFileService().getConfigTitles()); + } + + public void widgetDefaultSelected(SelectionEvent arg0) + { + } + }); + mainPage.addBtnDeleteListener(new SelectionListener() + { + + public void widgetSelected(SelectionEvent arg0) + { + if (MessageDialog.openConfirm(getShell(), Plugin.getInstance().getMessageService().resolveMessageKey("dialog.delete"), + Plugin.getInstance().getMessageService().resolveMessageKey("dialog.delete.msg"))) + { + deleteConfig(); + } + } + + public void widgetDefaultSelected(SelectionEvent arg0) + { + } + }); + this.visiblePage = mainPage; + this.navigator = new Navigator(); + this.navigator.addPage(this.visiblePage); + final SchemaOptionsPage schemaOptions = new SchemaOptionsPage(area, SWT.NONE); + schemaOptions.addBtnTableDialogListener(new SelectionListener() + { + public void widgetSelected(SelectionEvent arg0) + { + ConfigurationDialog.this.navigator.save(); + DBTablesDialog dbTablesDialog = new DBTablesDialog(getShell(), ConfigurationDialog.this.navigator.getCurrentConfig() + .getCodeGenConfig()); + if (dbTablesDialog.open() == Window.OK) + { + schemaOptions.getCtlDbTablePattern().setText(dbTablesDialog.getSelectedTables()); + } + } + + public void widgetDefaultSelected(SelectionEvent arg0) + { + } + }); + this.navigator.addPage(schemaOptions); + ClassParameterPage classParameterPage = new ClassParameterPage(area, SWT.NONE); + this.navigator.addPage(classParameterPage); + this.navigator.setPagesEnabled(false); + + setHelpAvailable(false); + return area; + } + + private void UpdateControls() + { + this.btnPreviousPage.setVisible(this.navigator.hasPreviousPage()); + this.btnNextPage.setVisible(this.navigator.hasNextPage()); + } + + public void save() + { + if (ConfigurationDialog.this.navigator.getCurrentConfig() != null + && MessageDialog.openQuestion(getShell(), Plugin.getInstance().getMessageService().resolveMessageKey("dialog.save"), + Plugin.getInstance().getMessageService().resolveMessageKey("dialog.save.msg"))) + { + saveAction(); + } + } + + public void saveAction() + { + ConfigFile configFile = this.navigator.save(); + if (configFile != null) + { + Plugin.getInstance().getConfigFileService().saveConfig(configFile); + } + } + + public void load(ConfigFile config) + { + this.navigator.load(config); + } + + public void deleteConfig() + { + Plugin.getInstance().getConfigFileService().deleteConfig(this.navigator.getCurrentConfig().getUuid()); + this.navigator.load(null); + } + + public boolean hasConfig() + { + return this.navigator.getCurrentConfig() != null; + } + + public String getConfigFileAbsolutPath() + { + return Plugin.getInstance().getConfigFileService().getConfigFilePath(this.navigator.getCurrentConfig().getUuid()); + } + + private boolean checkRequiredFields() + { + return this.navigator.checkRequiredFields(); + } +}
http://git-wip-us.apache.org/repos/asf/empire-db/blob/83302f08/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/ui/DBTablesDialog.java ---------------------------------------------------------------------- diff --git a/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/ui/DBTablesDialog.java b/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/ui/DBTablesDialog.java new file mode 100644 index 0000000..585f1d9 --- /dev/null +++ b/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/ui/DBTablesDialog.java @@ -0,0 +1,350 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.empire.db.eclipse.ui; + +import java.sql.Connection; +import java.sql.DatabaseMetaData; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; + +import org.apache.empire.db.codegen.util.DBUtil; +import org.apache.empire.db.eclipse.CodeGenConfig; +import org.apache.empire.db.eclipse.Plugin; +import org.apache.empire.db.eclipse.PluginConsts; +import org.apache.empire.db.eclipse.util.SWTResourceManager; +import org.eclipse.jface.dialogs.TitleAreaDialog; +import org.eclipse.jface.viewers.CheckboxTableViewer; +import org.eclipse.jface.viewers.ILabelProvider; +import org.eclipse.jface.viewers.ILabelProviderListener; +import org.eclipse.jface.viewers.IStructuredContentProvider; +import org.eclipse.jface.viewers.Viewer; +import org.eclipse.jface.window.Window; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.events.SelectionListener; +import org.eclipse.swt.graphics.Color; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.graphics.Point; +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.Label; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.swt.widgets.Table; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class DBTablesDialog extends TitleAreaDialog +{ + private CheckboxTableViewer checkboxTableViewer; + private Button btnConnect; + + private final CodeGenConfig config; + private Label lblConnection; + private Button btnOk; + private Button btnSpaceholder; + + private String selectedTables; + + public DBTablesDialog(Shell parentShell, CodeGenConfig config) + { + super(parentShell); + this.config = config; + } + + @Override + public void create() + { + super.create(); + setTitle(Plugin.getInstance().getMessageService().resolveMessageKey("dialog.tables.discription")); + } + + @Override + protected Point getInitialSize() + { + return new Point(343, 473); + } + + // overriding this methods allows you to set the + // title of the custom dialog + @Override + protected void configureShell(Shell newShell) + { + super.configureShell(newShell); + newShell.setText(Plugin.getInstance().getMessageService().resolveMessageKey("dialog.tables.title")); + } + + @Override + protected void createButtonsForButtonBar(Composite parent) + { + parent.setLayoutData(new GridData(SWT.FILL, SWT.RIGHT, true, true)); + + this.btnSpaceholder = createButton(parent, PluginConsts.BUTTON_PREVIOUS_ID, " ", true); + this.btnSpaceholder.setText("################"); + this.btnSpaceholder.setVisible(false); + + // Update layout of the parent composite to count the spacer + GridLayout layout = (GridLayout) parent.getLayout(); + layout.makeColumnsEqualWidth = false; + + this.btnOk = createButton(parent, PluginConsts.BUTTON_OK, + Plugin.getInstance().getMessageService().resolveMessageKey("dialog.tables.finish"), false); + this.btnOk.addSelectionListener(new SelectionListener() + { + public void widgetSelected(SelectionEvent arg0) + { + StringBuilder sb = new StringBuilder(); + Object[] tables = DBTablesDialog.this.checkboxTableViewer.getCheckedElements(); + for (Object table : tables) + { + sb.append(table).append(","); + } + DBTablesDialog.this.selectedTables = sb.toString().substring(0, sb.length() - 1); + setReturnCode(Window.OK); + close(); + } + + public void widgetDefaultSelected(SelectionEvent arg0) + { + } + }); + createButton(parent, Window.CANCEL, Plugin.getInstance().getMessageService().resolveMessageKey("dialog.close"), false); + + } + + @Override + protected Control createDialogArea(Composite parent) + { + setTitleImage(SWTResourceManager.getImage(ConfigurationDialog.class, "/icons/logo.png")); + Composite composite = (Composite) super.createDialogArea(parent); + composite.setLayout(null); + + this.btnConnect = new Button(composite, SWT.NONE); + this.btnConnect.setBounds(5, 5, 145, 25); + this.btnConnect.setText(Plugin.getInstance().getMessageService().resolveMessageKey("dialog.tables.connect")); + this.btnConnect.setImage(SWTResourceManager.getImage(ConfigurationDialog.class, "/icons/testConnection.gif")); + this.btnConnect.addSelectionListener(new SelectionListener() + { + public void widgetSelected(SelectionEvent arg0) + { + try + { + Connection con = Plugin.getInstance().getJDBCConnection(DBTablesDialog.this.config.getJdbcType(), + DBTablesDialog.this.config.getJdbcServer(), + DBTablesDialog.this.config.getJdbcPort(), + DBTablesDialog.this.config.getJdbcSID(), + DBTablesDialog.this.config.getJdbcUser(), + DBTablesDialog.this.config.getJdbcPwd()); + if (con != null) + { + DBTablesDialog.this.lblConnection.setText(Plugin.getInstance().getMessageService() + .resolveMessageKey("connectionSuccess")); + DBTablesDialog.this.lblConnection.setForeground(new Color(getShell().getDisplay(), 0, 255, 0)); + DBTablesDialog.this.checkboxTableViewer.setInput(con); + if (DBTablesDialog.this.config.getDbTablePattern() != null) + { + String[] tablePatterns = DBTablesDialog.this.config.getDbTablePattern().split(","); + for (String pattern : tablePatterns) + { + DBTablesDialog.this.checkboxTableViewer.setChecked(pattern, true); + } + } + } + con.close(); + } + catch (Exception e) + { + DBTablesDialog.this.lblConnection.setText(Plugin.getInstance().getMessageService() + .resolveMessageKey("connectionFailed")); + DBTablesDialog.this.lblConnection.setForeground(new Color(getShell().getDisplay(), 255, 0, 0)); + } + } + + public void widgetDefaultSelected(SelectionEvent arg0) + { + } + }); + + this.checkboxTableViewer = CheckboxTableViewer.newCheckList(composite, SWT.BORDER); + final Table table = this.checkboxTableViewer.getTable(); + table.setBounds(5, 35, 290, 231); + table.setLinesVisible(true); + + final Button btnCheckAll = new Button(composite, SWT.NONE); + btnCheckAll.setBounds(301, 35, 26, 26); + btnCheckAll.setImage(SWTResourceManager.getImage(ConfigurationDialog.class, "/icons/check_all.gif")); + btnCheckAll.addSelectionListener(new SelectionListener() + { + public void widgetSelected(SelectionEvent arg0) + { + Table table = DBTablesDialog.this.checkboxTableViewer.getTable(); + for (int i = 0; i < table.getItemCount(); i++) + { + table.getItem(i).setChecked(true); + } + } + + public void widgetDefaultSelected(SelectionEvent arg0) + { + } + }); + + final Button btnUncheckAll = new Button(composite, SWT.NONE); + btnUncheckAll.setBounds(301, 67, 26, 26); + btnUncheckAll.setImage(SWTResourceManager.getImage(ConfigurationDialog.class, "/icons/uncheck_all.gif")); + btnUncheckAll.addSelectionListener(new SelectionListener() + { + public void widgetSelected(SelectionEvent arg0) + { + Table table = DBTablesDialog.this.checkboxTableViewer.getTable(); + for (int i = 0; i < table.getItemCount(); i++) + { + table.getItem(i).setChecked(false); + } + } + + public void widgetDefaultSelected(SelectionEvent arg0) + { + } + }); + + this.lblConnection = new Label(composite, SWT.NONE); + this.lblConnection.setBounds(156, 10, 139, 15); + this.checkboxTableViewer.setContentProvider(new DBTablesContentProvider(this.config)); + this.checkboxTableViewer.setLabelProvider(new DBTablesLabelProvider()); + + setHelpAvailable(false); + return composite; + } + + public String getSelectedTables() + { + return this.selectedTables; + } + + public void setSelectedTables(String selectedTables) + { + this.selectedTables = selectedTables; + } +} + +class DBTablesContentProvider implements IStructuredContentProvider +{ + private static final Logger log = LoggerFactory.getLogger(DBTablesContentProvider.class); + + private static final Object[] EMPTY = new Object[] {}; + + private final CodeGenConfig config; + + public DBTablesContentProvider(CodeGenConfig config) + { + this.config = config; + } + + public Object[] getElements(Object arg0) + { + Connection con = (Connection) arg0; + ResultSet tables = null; + ArrayList<String> tableNames = new ArrayList<String>(); + try + { + DatabaseMetaData dbMeta = con.getMetaData(); + // Get table metadata + tables = dbMeta.getTables(this.config.getDbCatalog(), this.config.getDbSchema(), "%", new String[] { "TABLE", "VIEW" }); + // Add all tables and views + while (tables.next()) + { + String tableName = tables.getString("TABLE_NAME"); + String tableType = tables.getString("TABLE_TYPE"); + // Ignore system tables containing a '$' symbol (required for + // Oracle!) + if (tableName.indexOf('$') >= 0) + { + DBTablesContentProvider.log.info("Ignoring system table " + tableName); + continue; + } + DBTablesContentProvider.log.info(tableType + ": " + tableName); + tableNames.add(tableName); + } + return tableNames.toArray(); + } + catch (SQLException e) + { + DBTablesContentProvider.log.info("Error loading meta data: " + e.getMessage()); + } + finally + { + DBUtil.close(tables, DBTablesContentProvider.log); + } + return DBTablesContentProvider.EMPTY; + } + + public void dispose() + { + // Nothing to dispose + } + + public void inputChanged(Viewer arg0, Object arg1, Object arg2) + { + // Nothing to do + } +} + +class DBTablesLabelProvider implements ILabelProvider +{ + public Image getImage(Object arg0) + { + return null; + } + + /** + * Returns the name of the file + * + * @param arg0 + * the name of the file + * @return String + */ + public String getText(Object arg0) + { + return (String) arg0; + } + + public void addListener(ILabelProviderListener arg0) + { + // Throw it away + } + + public void dispose() + { + // Nothing to dispose + } + + public boolean isLabelProperty(Object arg0, String arg1) + { + return false; + } + + public void removeListener(ILabelProviderListener arg0) + { + // Ignore + } +} http://git-wip-us.apache.org/repos/asf/empire-db/blob/83302f08/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/ui/INavigator.java ---------------------------------------------------------------------- diff --git a/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/ui/INavigator.java b/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/ui/INavigator.java new file mode 100644 index 0000000..ca366a2 --- /dev/null +++ b/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/ui/INavigator.java @@ -0,0 +1,46 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.empire.db.eclipse.ui; + +import org.apache.empire.db.eclipse.model.ConfigFile; + +public interface INavigator +{ + public void addPage(Page page); + + public boolean removePage(Page page); + + public boolean showNextPage(); + + public boolean showPreviousPage(); + + public boolean hasNextPage(); + + public boolean hasPreviousPage(); + + public ConfigFile save(); + + public void load(ConfigFile config); + + public ConfigFile getCurrentConfig(); + + public void setPagesEnabled(boolean enabled); + + public boolean checkRequiredFields(); +} http://git-wip-us.apache.org/repos/asf/empire-db/blob/83302f08/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/ui/IPage.java ---------------------------------------------------------------------- diff --git a/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/ui/IPage.java b/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/ui/IPage.java new file mode 100644 index 0000000..550d675 --- /dev/null +++ b/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/ui/IPage.java @@ -0,0 +1,30 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.empire.db.eclipse.ui; + +import org.apache.empire.db.eclipse.CodeGenConfig; + +public interface IPage +{ + public void save(CodeGenConfig config); + + public void load(CodeGenConfig config); + + public boolean checkRequiredFields(); +} http://git-wip-us.apache.org/repos/asf/empire-db/blob/83302f08/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/ui/MainPage.java ---------------------------------------------------------------------- diff --git a/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/ui/MainPage.java b/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/ui/MainPage.java new file mode 100644 index 0000000..7edeefb --- /dev/null +++ b/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/ui/MainPage.java @@ -0,0 +1,305 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.empire.db.eclipse.ui; + +import java.sql.Connection; + +import org.apache.empire.commons.StringUtils; +import org.apache.empire.db.eclipse.CodeGenConfig; +import org.apache.empire.db.eclipse.Plugin; +import org.apache.empire.db.eclipse.util.SWTResourceManager; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.events.SelectionListener; +import org.eclipse.swt.graphics.Color; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Combo; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Group; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Text; + +public class MainPage extends Page +{ + private final Text ctlConfigTitle; + private final Text ctlServerUrl; + private final Text ctlServerPort; + private final Text ctlUser; + private final Text ctlPassword; + private final Text ctlPasswordConfirm; + private final Text ctlSID; + + private final Combo ctlExistingConfigs; + private final Combo ctlDatabaseType; + + private final Group groupJdbc; + + private final Button btnAdd; + private final Button btnSave; + private final Button btnDelete; + private final Label lblDatabaseType; + private final Label lblServerAddress; + private final Label lblServerPort; + private final Label lblUser; + private final Label lblPassword; + private final Label lblPasswordConfirm; + private final Label lblSid; + private final Label lblConfigurationTitle; + private final Button btnTestConnection; + private final Label lblTestConResult; + + /** + * Create the composite. + * + * @param parent + * @param style + */ + public MainPage(Composite parent, int style) + { + super(parent, style); + setLayout(null); + + Label lblExistingConfigurations = new Label(this, SWT.NONE); + lblExistingConfigurations.setFont(SWTResourceManager.getFont("Segoe UI", 9, SWT.BOLD)); + lblExistingConfigurations.setBounds(6, 31, 154, 15); + lblExistingConfigurations.setText(Plugin.getInstance().getMessageService().resolveMessageKey("existingConfigs")); + + this.ctlExistingConfigs = new Combo(this, SWT.READ_ONLY); + this.ctlExistingConfigs.setItems(Plugin.getInstance().getConfigFileService().getConfigTitles()); + this.ctlExistingConfigs.setBounds(165, 27, 248, 23); + this.btnAdd = new Button(this, SWT.NONE); + this.btnAdd.setBounds(419, 25, 26, 26); + this.btnAdd.setImage(SWTResourceManager.getImage(MainPage.class, "/icons/addButton.png")); + + this.lblConfigurationTitle = new Label(this, SWT.NONE); + this.lblConfigurationTitle.setFont(SWTResourceManager.getFont("Segoe UI", 9, SWT.BOLD)); + this.lblConfigurationTitle.setBounds(6, 62, 154, 15); + this.lblConfigurationTitle.setText(Plugin.getInstance().getMessageService().resolveMessageKey("configTitle")); + + this.ctlConfigTitle = new Text(this, SWT.BORDER); + this.ctlConfigTitle.setBounds(165, 59, 216, 21); + + this.btnSave = new Button(this, SWT.NONE); + this.btnSave.setImage(SWTResourceManager.getImage(MainPage.class, "/icons/save.png")); + this.btnSave.setBounds(387, 56, 26, 26); + + this.btnDelete = new Button(this, SWT.NONE); + this.btnDelete.setBounds(419, 56, 26, 26); + this.btnDelete.setImage(SWTResourceManager.getImage(MainPage.class, "/icons/deleteButton.png")); + + this.groupJdbc = new Group(this, SWT.NONE); + this.groupJdbc.setFont(SWTResourceManager.getFont("Segoe UI", 10, SWT.BOLD)); + this.groupJdbc.setText(Plugin.getInstance().getMessageService().resolveMessageKey("dbConnection")); + this.groupJdbc.setBounds(5, 110, 440, 243); + + this.lblDatabaseType = new Label(this.groupJdbc, SWT.NONE); + this.lblDatabaseType.setBounds(10, 21, 154, 15); + this.lblDatabaseType.setText(Plugin.getInstance().getMessageService().resolveMessageKey("dbConnectionType")); + + this.ctlDatabaseType = new Combo(this.groupJdbc, SWT.READ_ONLY); + this.ctlDatabaseType.setBounds(180, 18, 250, 23); + this.ctlDatabaseType.setItems(Plugin.getInstance().getDriverClassNames()); + + this.lblServerAddress = new Label(this.groupJdbc, SWT.NONE); + this.lblServerAddress.setBounds(10, 49, 154, 17); + this.lblServerAddress.setText(Plugin.getInstance().getMessageService().resolveMessageKey("dbServer")); + + this.ctlServerUrl = new Text(this.groupJdbc, SWT.BORDER); + this.ctlServerUrl.setBounds(180, 46, 250, 21); + + this.lblServerPort = new Label(this.groupJdbc, SWT.NONE); + this.lblServerPort.setBounds(10, 75, 154, 15); + this.lblServerPort.setText(Plugin.getInstance().getMessageService().resolveMessageKey("dbPort")); + + this.ctlServerPort = new Text(this.groupJdbc, SWT.BORDER); + this.ctlServerPort.setBounds(180, 72, 78, 21); + + this.ctlSID = new Text(this.groupJdbc, SWT.BORDER); + this.ctlSID.setBounds(180, 99, 250, 21); + + this.lblSid = new Label(this.groupJdbc, SWT.NONE); + this.lblSid.setBounds(10, 102, 154, 15); + this.lblSid.setText(Plugin.getInstance().getMessageService().resolveMessageKey("dbSid")); + + this.lblUser = new Label(this.groupJdbc, SWT.NONE); + this.lblUser.setBounds(10, 129, 154, 15); + this.lblUser.setText(Plugin.getInstance().getMessageService().resolveMessageKey("jdbcUser")); + + this.ctlUser = new Text(this.groupJdbc, SWT.BORDER); + this.ctlUser.setBounds(180, 126, 250, 21); + + this.lblPassword = new Label(this.groupJdbc, SWT.NONE); + this.lblPassword.setBounds(10, 156, 154, 15); + this.lblPassword.setText(Plugin.getInstance().getMessageService().resolveMessageKey("jdbcPassword")); + + this.ctlPassword = new Text(this.groupJdbc, SWT.BORDER | SWT.PASSWORD); + this.ctlPassword.setBounds(180, 153, 250, 21); + + this.lblPasswordConfirm = new Label(this.groupJdbc, SWT.NONE); + this.lblPasswordConfirm.setBounds(10, 183, 154, 15); + this.lblPasswordConfirm.setText(Plugin.getInstance().getMessageService().resolveMessageKey("jdbcPasswordConfirm")); + + this.ctlPasswordConfirm = new Text(this.groupJdbc, SWT.BORDER | SWT.PASSWORD); + this.ctlPasswordConfirm.setBounds(180, 180, 250, 21); + + this.btnTestConnection = new Button(this.groupJdbc, SWT.NONE); + this.btnTestConnection.setImage(SWTResourceManager.getImage(MainPage.class, "/icons/testConnection.gif")); + this.btnTestConnection.setText(Plugin.getInstance().getMessageService().resolveMessageKey("testConnection")); + this.btnTestConnection.setToolTipText(Plugin.getInstance().getMessageService().resolveMessageKey("tooltip.testConnection")); + this.btnTestConnection.setBounds(10, 207, 166, 26); + + this.lblTestConResult = new Label(this.groupJdbc, SWT.NONE); + this.lblTestConResult.setBounds(180, 213, 250, 15); + this.btnTestConnection.addSelectionListener(new SelectionListener() + { + public void widgetSelected(SelectionEvent arg0) + { + try + { + if (!MainPage.this.ctlPassword.getText().equals(MainPage.this.ctlPasswordConfirm.getText())) + { + MessageDialog.openError(getShell(), + Plugin.getInstance().getMessageService().resolveMessageKey("dialog.passwordMismatch"), + Plugin.getInstance().getMessageService() + .resolveMessageKey("dialog.passwordMismatch.msg")); + return; + } + Connection con = Plugin.getInstance().getJDBCConnection(MainPage.this.ctlDatabaseType.getText(), + MainPage.this.ctlServerUrl.getText(), + MainPage.this.ctlServerPort.getText(), + MainPage.this.ctlSID.getText(), + MainPage.this.ctlUser.getText(), + MainPage.this.ctlPassword.getText()); + if (con != null && !con.isClosed()) + { + MainPage.this.lblTestConResult.setText(Plugin.getInstance().getMessageService() + .resolveMessageKey("connectionSuccess")); + MainPage.this.lblTestConResult.setForeground(new Color(getDisplay(), 0, 255, 0)); + } + else + { + MainPage.this.lblTestConResult.setText(Plugin.getInstance().getMessageService() + .resolveMessageKey("connectionFailed")); + MainPage.this.lblTestConResult.setForeground(new Color(getDisplay(), 255, 0, 0)); + } + if (con != null) + { + con.close(); + } + } + catch (Exception e) + { + MainPage.this.lblTestConResult.setText(Plugin.getInstance().getMessageService() + .resolveMessageKey("connectionFailed")); + MainPage.this.lblTestConResult.setForeground(new Color(getDisplay(), 255, 0, 0)); + } + } + + public void widgetDefaultSelected(SelectionEvent arg0) + { + } + }); + } + + public void save(CodeGenConfig config) + { + config.setConfigTitle(this.ctlConfigTitle.getText()); + config.setJdbcServer(this.ctlServerUrl.getText()); + config.setJdbcPort(this.ctlServerPort.getText()); + config.setJdbcSID(this.ctlSID.getText()); + config.setJdbcUser(this.ctlUser.getText()); + config.setJdbcPwd(this.ctlPassword.getText()); + config.setJdbcType(this.ctlDatabaseType.getText()); + } + + public void load(CodeGenConfig config) + { + setControlText(this.ctlConfigTitle, config.getConfigTitle()); + setControlText(this.ctlServerUrl, config.getJdbcServer()); + setControlText(this.ctlServerPort, config.getJdbcPort()); + setControlText(this.ctlSID, config.getJdbcSID()); + setControlText(this.ctlUser, config.getJdbcUser()); + setControlText(this.ctlPassword, config.getJdbcPwd()); + this.ctlDatabaseType.setText(!StringUtils.isEmpty(config.getJdbcType()) ? config.getJdbcType() : " "); + this.lblTestConResult.setText(" "); + } + + @Override + public void setEnabled(boolean enabled) + { + this.ctlConfigTitle.setEnabled(enabled); + this.ctlServerUrl.setEnabled(enabled); + this.ctlServerPort.setEnabled(enabled); + this.ctlUser.setEnabled(enabled); + this.ctlPassword.setEnabled(enabled); + this.ctlPasswordConfirm.setEnabled(enabled); + this.ctlSID.setEnabled(enabled); + this.ctlDatabaseType.setEnabled(enabled); + this.btnTestConnection.setEnabled(enabled); + } + + public boolean checkRequiredFields() + { + if (!this.ctlPassword.getText().equals(this.ctlPasswordConfirm.getText())) + { + MessageDialog.openError(getShell(), Plugin.getInstance().getMessageService().resolveMessageKey("dialog.passwordMismatch"), + Plugin.getInstance().getMessageService().resolveMessageKey("dialog.passwordMismatch.msg")); + return false; + } + return checkControlFilled(this.ctlConfigTitle, this.lblConfigurationTitle.getText()) + && checkControlFilled(this.ctlServerUrl, this.lblServerAddress.getText()) + && checkControlFilled(this.ctlServerPort, this.lblServerPort.getText()) + && checkControlFilled(this.ctlUser, this.lblUser.getText()) + && checkControlFilled(this.ctlPassword, this.lblPassword.getText()) + && checkControlFilled(this.ctlPasswordConfirm, this.lblPasswordConfirm.getText()) + && checkControlFilled(this.ctlSID, this.lblSid.getText()); + } + + public void addExistingConfigsListener(SelectionListener listener) + { + this.ctlExistingConfigs.addSelectionListener(listener); + } + + public void addBtnAddListener(SelectionListener listener) + { + this.btnAdd.addSelectionListener(listener); + } + + public void addBtnSaveListener(SelectionListener listener) + { + this.btnSave.addSelectionListener(listener); + } + + public void addBtnDeleteListener(SelectionListener listener) + { + this.btnDelete.addSelectionListener(listener); + } + + public void setConfigTitleList(String[] configTitleList) + { + this.ctlExistingConfigs.setItems(configTitleList); + } + + @Override + protected void checkSubclass() + { + // Disable the check that prevents subclassing of SWT components + } +} http://git-wip-us.apache.org/repos/asf/empire-db/blob/83302f08/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/ui/Navigator.java ---------------------------------------------------------------------- diff --git a/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/ui/Navigator.java b/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/ui/Navigator.java new file mode 100644 index 0000000..28534d7 --- /dev/null +++ b/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/ui/Navigator.java @@ -0,0 +1,145 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.empire.db.eclipse.ui; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.empire.db.eclipse.CodeGenConfig; +import org.apache.empire.db.eclipse.model.ConfigFile; + +public class Navigator implements INavigator +{ + private final List<Page> pages; + + private int currentPage; + + private ConfigFile currentConfig; + + public Navigator() + { + this.pages = new ArrayList<Page>(); + this.currentPage = 0; + } + + public void addPage(Page page) + { + if (this.pages.size() > 0) + { + page.setVisible(false); + } + this.pages.add(page); + } + + public boolean removePage(Page page) + { + if (!this.pages.contains(page)) + { + return false; + } + return this.pages.remove(page); + } + + public boolean showNextPage() + { + if (!hasNextPage()) + { + return false; + } + this.pages.get(this.currentPage).setVisible(false); + this.currentPage++; + this.pages.get(this.currentPage).setVisible(true); + return true; + } + + public boolean showPreviousPage() + { + if (!hasPreviousPage()) + { + return false; + } + this.pages.get(this.currentPage).setVisible(false); + this.currentPage--; + this.pages.get(this.currentPage).setVisible(true); + return true; + } + + public boolean hasNextPage() + { + return this.currentPage < this.pages.size() - 1; + } + + public boolean hasPreviousPage() + { + return this.currentPage > 0; + } + + public ConfigFile save() + { + if (this.currentConfig == null) + { + return null; + } + for (Page page : this.pages) + { + page.save(this.currentConfig.getCodeGenConfig()); + } + return this.currentConfig; + } + + public void load(ConfigFile config) + { + setCurrentConfig(config); + for (Page page : this.pages) + { + page.load(config != null ? config.getCodeGenConfig() : new CodeGenConfig()); + } + } + + public ConfigFile getCurrentConfig() + { + return this.currentConfig; + } + + private void setCurrentConfig(ConfigFile currentConfig) + { + setPagesEnabled(currentConfig != null); + this.currentConfig = currentConfig; + } + + public void setPagesEnabled(boolean enabled) + { + for (Page page : this.pages) + { + page.setEnabled(enabled); + } + } + + public boolean checkRequiredFields() + { + for (Page page : this.pages) + { + if (!page.checkRequiredFields()) + { + return false; + } + } + return true; + } +} http://git-wip-us.apache.org/repos/asf/empire-db/blob/83302f08/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/ui/Page.java ---------------------------------------------------------------------- diff --git a/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/ui/Page.java b/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/ui/Page.java new file mode 100644 index 0000000..badca1a --- /dev/null +++ b/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/ui/Page.java @@ -0,0 +1,51 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.empire.db.eclipse.ui; + +import org.apache.empire.commons.StringUtils; +import org.apache.empire.db.eclipse.Plugin; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Text; + +public abstract class Page extends Composite implements IPage +{ + public Page(Composite parent, int style) + { + super(parent, style); + this.setSize(450, 500); + this.setBounds(10, 0, 450, 500); + } + + protected void setControlText(Text ctlText, String value) + { + ctlText.setText(value != null ? value : ""); + } + + protected boolean checkControlFilled(Text ctlText, String field) + { + if (StringUtils.isNotEmpty(ctlText.getText())) + { + return true; + } + MessageDialog.openError(getShell(), Plugin.getInstance().getMessageService().resolveMessageKey("dialog.errorFieldRequired"), + Plugin.getInstance().getMessageService().resolveMessageKey("dialog.errorFieldRequired.msg", field)); + return false; + } +} http://git-wip-us.apache.org/repos/asf/empire-db/blob/83302f08/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/ui/SchemaOptionsPage.java ---------------------------------------------------------------------- diff --git a/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/ui/SchemaOptionsPage.java b/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/ui/SchemaOptionsPage.java new file mode 100644 index 0000000..69ce3c3 --- /dev/null +++ b/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/ui/SchemaOptionsPage.java @@ -0,0 +1,241 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.empire.db.eclipse.ui; + +import org.apache.empire.db.eclipse.CodeGenConfig; +import org.apache.empire.db.eclipse.Plugin; +import org.apache.empire.db.eclipse.util.SWTResourceManager; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.events.SelectionListener; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.DirectoryDialog; +import org.eclipse.swt.widgets.Group; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Text; + +public class SchemaOptionsPage extends Page +{ + private final Text ctlDbCatalog; + private final Text ctlDbSchema; + private final Text ctlTimestampCol; + private final Text ctlDbTablePattern; + + private final Text ctlTargetFolder; + private final Text ctlPackageName; + private final Text ctlTablePackageName; + private final Text ctlViewPackageName; + private final Text ctlRecordPackageName; + + private final Group groupRequired; + + private final Label lblTargetFolder; + private final Label lblPackageName; + private final Label lblTablePackageName; + private final Label lblViewPackageName; + private final Label lblRecordPackageName; + private final Button btnDirectoryDialog; + private final Button btnOpenTableDialog; + + public SchemaOptionsPage(Composite parent, int style) + { + super(parent, style); + setLayout(null); + + Group grpSchemaOptions = new Group(this, SWT.NONE); + grpSchemaOptions.setFont(SWTResourceManager.getFont("Segoe UI", 10, SWT.BOLD)); + grpSchemaOptions.setText(Plugin.getInstance().getMessageService().resolveMessageKey("schemaOptions")); + grpSchemaOptions.setBounds(5, 30, 440, 128); + + Label lblDbCatalog = new Label(grpSchemaOptions, SWT.NONE); + lblDbCatalog.setBounds(10, 23, 154, 17); + lblDbCatalog.setText(Plugin.getInstance().getMessageService().resolveMessageKey("dbCatalog")); + lblDbCatalog.setToolTipText(Plugin.getInstance().getMessageService().resolveMessageKey("tooltip.dbCatalog")); + + this.ctlDbCatalog = new Text(grpSchemaOptions, SWT.BORDER); + this.ctlDbCatalog.setBounds(180, 20, 250, 21); + this.ctlDbCatalog.setToolTipText(Plugin.getInstance().getMessageService().resolveMessageKey("tooltip.dbCatalog")); + + Label lblDbSchema = new Label(grpSchemaOptions, SWT.NONE); + lblDbSchema.setText(Plugin.getInstance().getMessageService().resolveMessageKey("dbSchema")); + lblDbSchema.setToolTipText(Plugin.getInstance().getMessageService().resolveMessageKey("tooltip.dbSchema")); + lblDbSchema.setBounds(10, 49, 154, 17); + + this.ctlDbSchema = new Text(grpSchemaOptions, SWT.BORDER); + this.ctlDbSchema.setBounds(180, 46, 250, 21); + this.ctlDbSchema.setToolTipText(Plugin.getInstance().getMessageService().resolveMessageKey("tooltip.dbSchema")); + + Label lblDbTablePattern = new Label(grpSchemaOptions, SWT.NONE); + lblDbTablePattern.setText(Plugin.getInstance().getMessageService().resolveMessageKey("dbTablePattern")); + lblDbTablePattern.setToolTipText(Plugin.getInstance().getMessageService().resolveMessageKey("tooltip.dbTablePattern")); + lblDbTablePattern.setBounds(10, 75, 154, 17); + + this.ctlDbTablePattern = new Text(grpSchemaOptions, SWT.BORDER); + this.ctlDbTablePattern.setToolTipText(Plugin.getInstance().getMessageService().resolveMessageKey("tooltip.dbTablePattern")); + this.getCtlDbTablePattern().setBounds(180, 72, 218, 21); + + Label lblTimestampCol = new Label(grpSchemaOptions, SWT.NONE); + lblTimestampCol.setText(Plugin.getInstance().getMessageService().resolveMessageKey("timestampColumn")); + lblTimestampCol.setToolTipText(Plugin.getInstance().getMessageService().resolveMessageKey("tooltip.timestampColumn")); + lblTimestampCol.setBounds(10, 98, 154, 17); + + this.ctlTimestampCol = new Text(grpSchemaOptions, SWT.BORDER); + this.ctlTimestampCol.setToolTipText(Plugin.getInstance().getMessageService().resolveMessageKey("tooltip.timestampColumn")); + this.ctlTimestampCol.setBounds(180, 98, 250, 21); + + this.btnOpenTableDialog = new Button(grpSchemaOptions, SWT.NONE); + this.btnOpenTableDialog.setBounds(404, 69, 26, 26); + this.btnOpenTableDialog.setImage(SWTResourceManager.getImage(SchemaOptionsPage.class, "/icons/db_element.gif")); + + this.groupRequired = new Group(this, SWT.NONE); + this.groupRequired.setText(Plugin.getInstance().getMessageService().resolveMessageKey("requiredParams")); + this.groupRequired.setFont(SWTResourceManager.getFont("Segoe UI", 10, SWT.BOLD)); + this.groupRequired.setBounds(5, 180, 440, 149); + + this.lblTargetFolder = new Label(this.groupRequired, SWT.NONE); + this.lblTargetFolder.setBounds(10, 18, 154, 15); + this.lblTargetFolder.setText(Plugin.getInstance().getMessageService().resolveMessageKey("targetFolder")); + this.lblTargetFolder.setToolTipText(Plugin.getInstance().getMessageService().resolveMessageKey("tooltip.targetFolder")); + + this.ctlTargetFolder = new Text(this.groupRequired, SWT.BORDER); + this.ctlTargetFolder.setToolTipText(Plugin.getInstance().getMessageService().resolveMessageKey("tooltip.targetFolder")); + this.ctlTargetFolder.setBounds(180, 15, 218, 21); + + + this.btnDirectoryDialog = new Button(this.groupRequired, SWT.NONE); + this.btnDirectoryDialog.setImage(SWTResourceManager.getImage(SchemaOptionsPage.class, "/icons/folder.gif")); + this.btnDirectoryDialog.setBounds(404, 12, 26, 26); + this.btnDirectoryDialog.addSelectionListener(new SelectionListener() + { + public void widgetSelected(SelectionEvent arg0) + { + DirectoryDialog directoryDialog = new DirectoryDialog(getShell()); + directoryDialog.setFilterPath(SchemaOptionsPage.this.ctlTargetFolder.getText()); + String path = directoryDialog.open(); + if (path != null) + { + SchemaOptionsPage.this.ctlTargetFolder.setText(path); + } + } + + public void widgetDefaultSelected(SelectionEvent arg0) + { + } + }); + + this.lblPackageName = new Label(this.groupRequired, SWT.NONE); + this.lblPackageName.setBounds(10, 45, 154, 15); + this.lblPackageName.setText(Plugin.getInstance().getMessageService().resolveMessageKey("packageName")); + this.lblPackageName.setToolTipText(Plugin.getInstance().getMessageService().resolveMessageKey("tooltip.packageName")); + + this.ctlPackageName = new Text(this.groupRequired, SWT.BORDER); + this.ctlPackageName.setBounds(180, 42, 250, 21); + this.ctlPackageName.setToolTipText(Plugin.getInstance().getMessageService().resolveMessageKey("tooltip.packageName")); + + this.lblTablePackageName = new Label(this.groupRequired, SWT.NONE); + this.lblTablePackageName.setBounds(10, 72, 154, 15); + this.lblTablePackageName.setText(Plugin.getInstance().getMessageService().resolveMessageKey("tablePackageName")); + this.lblTablePackageName.setToolTipText(Plugin.getInstance().getMessageService().resolveMessageKey("tooltip.tablePackageName")); + + this.ctlTablePackageName = new Text(this.groupRequired, SWT.BORDER); + this.ctlTablePackageName.setBounds(180, 69, 250, 21); + this.ctlTablePackageName.setToolTipText(Plugin.getInstance().getMessageService().resolveMessageKey("tooltip.tablePackageName")); + + this.lblViewPackageName = new Label(this.groupRequired, SWT.NONE); + this.lblViewPackageName.setBounds(10, 99, 154, 15); + this.lblViewPackageName.setText(Plugin.getInstance().getMessageService().resolveMessageKey("viewPackageName")); + this.lblViewPackageName.setToolTipText(Plugin.getInstance().getMessageService().resolveMessageKey("tooltip.viewPackageName")); + + this.ctlViewPackageName = new Text(this.groupRequired, SWT.BORDER); + this.ctlViewPackageName.setBounds(180, 96, 250, 21); + this.ctlViewPackageName.setToolTipText(Plugin.getInstance().getMessageService().resolveMessageKey("tooltip.viewPackageName")); + + this.lblRecordPackageName = new Label(this.groupRequired, SWT.NONE); + this.lblRecordPackageName.setBounds(10, 126, 154, 15); + this.lblRecordPackageName.setText(Plugin.getInstance().getMessageService().resolveMessageKey("recordPackageName")); + this.lblRecordPackageName.setToolTipText(Plugin.getInstance().getMessageService().resolveMessageKey("tooltip.recordPackageName")); + + this.ctlRecordPackageName = new Text(this.groupRequired, SWT.BORDER); + this.ctlRecordPackageName.setBounds(180, 123, 250, 21); + this.ctlRecordPackageName.setToolTipText(Plugin.getInstance().getMessageService().resolveMessageKey("tooltip.recordPackageName")); + } + + public void save(CodeGenConfig config) + { + config.setDbCatalog(this.ctlDbCatalog.getText()); + config.setDbSchema(this.ctlDbSchema.getText()); + config.setTimestampColumn(this.ctlTimestampCol.getText()); + config.setDbTablePattern(this.getCtlDbTablePattern().getText()); + config.setTargetFolder(this.ctlTargetFolder.getText()); + config.setPackageName(this.ctlPackageName.getText()); + config.setTablePackageName(this.ctlTablePackageName.getText()); + config.setViewPackageName(this.ctlViewPackageName.getText()); + config.setRecordPackageName(this.ctlRecordPackageName.getText()); + } + + public void load(CodeGenConfig config) + { + setControlText(this.ctlDbCatalog, config.getDbCatalog()); + setControlText(this.ctlDbSchema, config.getDbSchema()); + setControlText(this.ctlTimestampCol, config.getTimestampColumn()); + setControlText(this.getCtlDbTablePattern(), config.getDbTablePattern()); + setControlText(this.ctlTargetFolder, config.getTargetFolder()); + setControlText(this.ctlPackageName, config.getPackageName()); + setControlText(this.ctlTablePackageName, config.getTablePackageName()); + setControlText(this.ctlViewPackageName, config.getViewPackageName()); + setControlText(this.ctlRecordPackageName, config.getRecordPackageName()); + + } + + @Override + public void setEnabled(boolean enabled) + { + this.ctlDbCatalog.setEnabled(enabled); + this.ctlDbSchema.setEnabled(enabled); + this.ctlTimestampCol.setEnabled(enabled); + this.getCtlDbTablePattern().setEnabled(enabled); + this.ctlTargetFolder.setEnabled(enabled); + this.ctlPackageName.setEnabled(enabled); + this.ctlTablePackageName.setEnabled(enabled); + this.ctlViewPackageName.setEnabled(enabled); + this.ctlRecordPackageName.setEnabled(enabled); + this.btnDirectoryDialog.setEnabled(enabled); + this.btnOpenTableDialog.setEnabled(enabled); + } + + public boolean checkRequiredFields() + { + return checkControlFilled(this.ctlTargetFolder, this.lblTargetFolder.getText()) + && checkControlFilled(this.ctlPackageName, this.lblPackageName.getText()) + && checkControlFilled(this.ctlTablePackageName, this.lblTablePackageName.getText()) + && checkControlFilled(this.ctlViewPackageName, this.lblViewPackageName.getText()) + && checkControlFilled(this.ctlRecordPackageName, this.lblRecordPackageName.getText()); + } + + public void addBtnTableDialogListener(SelectionListener selectionListener) + { + this.btnOpenTableDialog.addSelectionListener(selectionListener); + } + + public Text getCtlDbTablePattern() + { + return this.ctlDbTablePattern; + } +} http://git-wip-us.apache.org/repos/asf/empire-db/blob/83302f08/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/util/SWTResourceManager.java ---------------------------------------------------------------------- diff --git a/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/util/SWTResourceManager.java b/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/util/SWTResourceManager.java new file mode 100644 index 0000000..8217af2 --- /dev/null +++ b/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/util/SWTResourceManager.java @@ -0,0 +1,455 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.empire.db.eclipse.util; + +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.HashMap; +import java.util.Map; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.graphics.Color; +import org.eclipse.swt.graphics.Cursor; +import org.eclipse.swt.graphics.Font; +import org.eclipse.swt.graphics.FontData; +import org.eclipse.swt.graphics.GC; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.graphics.ImageData; +import org.eclipse.swt.graphics.RGB; +import org.eclipse.swt.graphics.Rectangle; +import org.eclipse.swt.widgets.Display; + +/** + * Utility class for managing OS resources associated with SWT controls such as colors, fonts, images, etc. + * <p> + * !!! IMPORTANT !!! Application code must explicitly invoke the <code>dispose()</code> method to release the + * operating system resources managed by cached objects when those objects and OS resources are no longer + * needed (e.g. on application shutdown) + * <p> + * This class may be freely distributed as part of any application or plugin. + * <p> + * @author scheglov_ke + * @author Dan Rubel + */ +public class SWTResourceManager { + //////////////////////////////////////////////////////////////////////////// + // + // Color + // + //////////////////////////////////////////////////////////////////////////// + private static Map<RGB, Color> m_colorMap = new HashMap<RGB, Color>(); + /** + * Returns the system {@link Color} matching the specific ID. + * + * @param systemColorID + * the ID value for the color + * @return the system {@link Color} matching the specific ID + */ + public static Color getColor(int systemColorID) { + Display display = Display.getCurrent(); + return display.getSystemColor(systemColorID); + } + /** + * Returns a {@link Color} given its red, green and blue component values. + * + * @param r + * the red component of the color + * @param g + * the green component of the color + * @param b + * the blue component of the color + * @return the {@link Color} matching the given red, green and blue component values + */ + public static Color getColor(int r, int g, int b) { + return getColor(new RGB(r, g, b)); + } + /** + * Returns a {@link Color} given its RGB value. + * + * @param rgb + * the {@link RGB} value of the color + * @return the {@link Color} matching the RGB value + */ + public static Color getColor(RGB rgb) { + Color color = m_colorMap.get(rgb); + if (color == null) { + Display display = Display.getCurrent(); + color = new Color(display, rgb); + m_colorMap.put(rgb, color); + } + return color; + } + /** + * Dispose of all the cached {@link Color}'s. + */ + public static void disposeColors() { + for (Color color : m_colorMap.values()) { + color.dispose(); + } + m_colorMap.clear(); + } + //////////////////////////////////////////////////////////////////////////// + // + // Image + // + //////////////////////////////////////////////////////////////////////////// + /** + * Maps image paths to images. + */ + private static Map<String, Image> m_imageMap = new HashMap<String, Image>(); + /** + * Returns an {@link Image} encoded by the specified {@link InputStream}. + * + * @param stream + * the {@link InputStream} encoding the image data + * @return the {@link Image} encoded by the specified input stream + */ + protected static Image getImage(InputStream stream) throws IOException { + try { + Display display = Display.getCurrent(); + ImageData data = new ImageData(stream); + if (data.transparentPixel > 0) { + return new Image(display, data, data.getTransparencyMask()); + } + return new Image(display, data); + } finally { + stream.close(); + } + } + /** + * Returns an {@link Image} stored in the file at the specified path. + * + * @param path + * the path to the image file + * @return the {@link Image} stored in the file at the specified path + */ + public static Image getImage(String path) { + Image image = m_imageMap.get(path); + if (image == null) { + try { + image = getImage(new FileInputStream(path)); + m_imageMap.put(path, image); + } catch (Exception e) { + image = getMissingImage(); + m_imageMap.put(path, image); + } + } + return image; + } + /** + * Returns an {@link Image} stored in the file at the specified path relative to the specified class. + * + * @param clazz + * the {@link Class} relative to which to find the image + * @param path + * the path to the image file, if starts with <code>'/'</code> + * @return the {@link Image} stored in the file at the specified path + */ + public static Image getImage(Class<?> clazz, String path) { + String key = clazz.getName() + '|' + path; + Image image = m_imageMap.get(key); + if (image == null) { + try { + image = getImage(clazz.getResourceAsStream(path)); + m_imageMap.put(key, image); + } catch (Exception e) { + image = getMissingImage(); + m_imageMap.put(key, image); + } + } + return image; + } + private static final int MISSING_IMAGE_SIZE = 10; + /** + * @return the small {@link Image} that can be used as placeholder for missing image. + */ + private static Image getMissingImage() { + Image image = new Image(Display.getCurrent(), MISSING_IMAGE_SIZE, MISSING_IMAGE_SIZE); + // + GC gc = new GC(image); + gc.setBackground(getColor(SWT.COLOR_RED)); + gc.fillRectangle(0, 0, MISSING_IMAGE_SIZE, MISSING_IMAGE_SIZE); + gc.dispose(); + // + return image; + } + /** + * Style constant for placing decorator image in top left corner of base image. + */ + public static final int TOP_LEFT = 1; + /** + * Style constant for placing decorator image in top right corner of base image. + */ + public static final int TOP_RIGHT = 2; + /** + * Style constant for placing decorator image in bottom left corner of base image. + */ + public static final int BOTTOM_LEFT = 3; + /** + * Style constant for placing decorator image in bottom right corner of base image. + */ + public static final int BOTTOM_RIGHT = 4; + /** + * Internal value. + */ + protected static final int LAST_CORNER_KEY = 5; + /** + * Maps images to decorated images. + */ + @SuppressWarnings("unchecked") + private static Map<Image, Map<Image, Image>>[] m_decoratedImageMap = new Map[LAST_CORNER_KEY]; + /** + * Returns an {@link Image} composed of a base image decorated by another image. + * + * @param baseImage + * the base {@link Image} that should be decorated + * @param decorator + * the {@link Image} to decorate the base image + * @return {@link Image} The resulting decorated image + */ + public static Image decorateImage(Image baseImage, Image decorator) { + return decorateImage(baseImage, decorator, BOTTOM_RIGHT); + } + /** + * Returns an {@link Image} composed of a base image decorated by another image. + * + * @param baseImage + * the base {@link Image} that should be decorated + * @param decorator + * the {@link Image} to decorate the base image + * @param corner + * the corner to place decorator image + * @return the resulting decorated {@link Image} + */ + public static Image decorateImage(final Image baseImage, final Image decorator, final int corner) { + if (corner <= 0 || corner >= LAST_CORNER_KEY) { + throw new IllegalArgumentException("Wrong decorate corner"); + } + Map<Image, Map<Image, Image>> cornerDecoratedImageMap = m_decoratedImageMap[corner]; + if (cornerDecoratedImageMap == null) { + cornerDecoratedImageMap = new HashMap<Image, Map<Image, Image>>(); + m_decoratedImageMap[corner] = cornerDecoratedImageMap; + } + Map<Image, Image> decoratedMap = cornerDecoratedImageMap.get(baseImage); + if (decoratedMap == null) { + decoratedMap = new HashMap<Image, Image>(); + cornerDecoratedImageMap.put(baseImage, decoratedMap); + } + // + Image result = decoratedMap.get(decorator); + if (result == null) { + Rectangle bib = baseImage.getBounds(); + Rectangle dib = decorator.getBounds(); + // + result = new Image(Display.getCurrent(), bib.width, bib.height); + // + GC gc = new GC(result); + gc.drawImage(baseImage, 0, 0); + if (corner == TOP_LEFT) { + gc.drawImage(decorator, 0, 0); + } else if (corner == TOP_RIGHT) { + gc.drawImage(decorator, bib.width - dib.width, 0); + } else if (corner == BOTTOM_LEFT) { + gc.drawImage(decorator, 0, bib.height - dib.height); + } else if (corner == BOTTOM_RIGHT) { + gc.drawImage(decorator, bib.width - dib.width, bib.height - dib.height); + } + gc.dispose(); + // + decoratedMap.put(decorator, result); + } + return result; + } + /** + * Dispose all of the cached {@link Image}'s. + */ + public static void disposeImages() { + // dispose loaded images + { + for (Image image : m_imageMap.values()) { + image.dispose(); + } + m_imageMap.clear(); + } + // dispose decorated images + for (int i = 0; i < m_decoratedImageMap.length; i++) { + Map<Image, Map<Image, Image>> cornerDecoratedImageMap = m_decoratedImageMap[i]; + if (cornerDecoratedImageMap != null) { + for (Map<Image, Image> decoratedMap : cornerDecoratedImageMap.values()) { + for (Image image : decoratedMap.values()) { + image.dispose(); + } + decoratedMap.clear(); + } + cornerDecoratedImageMap.clear(); + } + } + } + //////////////////////////////////////////////////////////////////////////// + // + // Font + // + //////////////////////////////////////////////////////////////////////////// + /** + * Maps font names to fonts. + */ + private static Map<String, Font> m_fontMap = new HashMap<String, Font>(); + /** + * Maps fonts to their bold versions. + */ + private static Map<Font, Font> m_fontToBoldFontMap = new HashMap<Font, Font>(); + /** + * Returns a {@link Font} based on its name, height and style. + * + * @param name + * the name of the font + * @param height + * the height of the font + * @param style + * the style of the font + * @return {@link Font} The font matching the name, height and style + */ + public static Font getFont(String name, int height, int style) { + return getFont(name, height, style, false, false); + } + /** + * Returns a {@link Font} based on its name, height and style. Windows-specific strikeout and underline + * flags are also supported. + * + * @param name + * the name of the font + * @param size + * the size of the font + * @param style + * the style of the font + * @param strikeout + * the strikeout flag (warning: Windows only) + * @param underline + * the underline flag (warning: Windows only) + * @return {@link Font} The font matching the name, height, style, strikeout and underline + */ + public static Font getFont(String name, int size, int style, boolean strikeout, boolean underline) { + String fontName = name + '|' + size + '|' + style + '|' + strikeout + '|' + underline; + Font font = m_fontMap.get(fontName); + if (font == null) { + FontData fontData = new FontData(name, size, style); + if (strikeout || underline) { + try { + Class<?> logFontClass = Class.forName("org.eclipse.swt.internal.win32.LOGFONT"); //$NON-NLS-1$ + Object logFont = FontData.class.getField("data").get(fontData); //$NON-NLS-1$ + if (logFont != null && logFontClass != null) { + if (strikeout) { + logFontClass.getField("lfStrikeOut").set(logFont, Byte.valueOf((byte) 1)); //$NON-NLS-1$ + } + if (underline) { + logFontClass.getField("lfUnderline").set(logFont, Byte.valueOf((byte) 1)); //$NON-NLS-1$ + } + } + } catch (Throwable e) { + System.err.println("Unable to set underline or strikeout" + " (probably on a non-Windows platform). " + e); //$NON-NLS-1$ //$NON-NLS-2$ + } + } + font = new Font(Display.getCurrent(), fontData); + m_fontMap.put(fontName, font); + } + return font; + } + /** + * Returns a bold version of the given {@link Font}. + * + * @param baseFont + * the {@link Font} for which a bold version is desired + * @return the bold version of the given {@link Font} + */ + public static Font getBoldFont(Font baseFont) { + Font font = m_fontToBoldFontMap.get(baseFont); + if (font == null) { + FontData fontDatas[] = baseFont.getFontData(); + FontData data = fontDatas[0]; + font = new Font(Display.getCurrent(), data.getName(), data.getHeight(), SWT.BOLD); + m_fontToBoldFontMap.put(baseFont, font); + } + return font; + } + /** + * Dispose all of the cached {@link Font}'s. + */ + public static void disposeFonts() { + // clear fonts + for (Font font : m_fontMap.values()) { + font.dispose(); + } + m_fontMap.clear(); + // clear bold fonts + for (Font font : m_fontToBoldFontMap.values()) { + font.dispose(); + } + m_fontToBoldFontMap.clear(); + } + //////////////////////////////////////////////////////////////////////////// + // + // Cursor + // + //////////////////////////////////////////////////////////////////////////// + /** + * Maps IDs to cursors. + */ + private static Map<Integer, Cursor> m_idToCursorMap = new HashMap<Integer, Cursor>(); + /** + * Returns the system cursor matching the specific ID. + * + * @param id + * int The ID value for the cursor + * @return Cursor The system cursor matching the specific ID + */ + public static Cursor getCursor(int id) { + Integer key = Integer.valueOf(id); + Cursor cursor = m_idToCursorMap.get(key); + if (cursor == null) { + cursor = new Cursor(Display.getDefault(), id); + m_idToCursorMap.put(key, cursor); + } + return cursor; + } + /** + * Dispose all of the cached cursors. + */ + public static void disposeCursors() { + for (Cursor cursor : m_idToCursorMap.values()) { + cursor.dispose(); + } + m_idToCursorMap.clear(); + } + //////////////////////////////////////////////////////////////////////////// + // + // General + // + //////////////////////////////////////////////////////////////////////////// + /** + * Dispose of cached objects and their underlying OS resources. This should only be called when the cached + * objects are no longer needed (e.g. on application shutdown). + */ + public static void dispose() { + disposeColors(); + disposeImages(); + disposeFonts(); + disposeCursors(); + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/empire-db/blob/83302f08/empire-db-eclipse-codegen/src/main/resources/defaultConfig.xml ---------------------------------------------------------------------- diff --git a/empire-db-eclipse-codegen/src/main/resources/defaultConfig.xml b/empire-db-eclipse-codegen/src/main/resources/defaultConfig.xml new file mode 100644 index 0000000..33c77bf --- /dev/null +++ b/empire-db-eclipse-codegen/src/main/resources/defaultConfig.xml @@ -0,0 +1,84 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +--> +<config> + <properties> + <!-- provider name must match the property-section containing the connection data --> + <jdbcClass></jdbcClass> + <jdbcURL></jdbcURL> + <jdbcServer></jdbcServer> + <jdbcPort></jdbcPort> + <jdbcSID></jdbcSID> + <jdbcUser></jdbcUser> + <jdbcPwd></jdbcPwd> + + <!-- Schema options --> + <dbCatalog></dbCatalog> + <dbSchema></dbSchema> + <dbTablePattern></dbTablePattern> + <timestampColumn>CREATIONDATE</timestampColumn> + + <!-- generation options --> + <targetFolder></targetFolder> + <packageName>org.apache.empire.db</packageName> + <tablePackageName>org.apache.empire.db.table</tablePackageName> + <viewPackageName>org.apache.empire.db.view</viewPackageName> + <recordPackageName>org.apache.empire.db.record</recordPackageName> + <dbClassName>EmpireDB</dbClassName> + <tableBaseName>BaseTable</tableBaseName> + <viewBaseName>BaseView</viewBaseName> + <recordBaseName>BaseRecord</recordBaseName> + <tableNamePrefix></tableNamePrefix> + <tableClassPrefix>T_</tableClassPrefix> + <tableClassSuffix></tableClassSuffix> + <viewNamePrefix></viewNamePrefix> + <viewClassPrefix>V_</viewClassPrefix> + <viewClassSuffix></viewClassSuffix> + <columnNamePrefix></columnNamePrefix> + <nestTables>true</nestTables> + <nestViews>false</nestViews> + <createRecordProperties>true</createRecordProperties> + <preserverCharacterCase>false</preserverCharacterCase> + <preserveRelationNames>false</preserveRelationNames> + </properties> + + <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> + + <appender name="default" class="org.apache.log4j.ConsoleAppender"> + <!-- layout class="org.apache.log4j.TTCCLayout"/ --> + <layout class="org.apache.log4j.PatternLayout"> + <!-- param name="ConversionPattern" value="NSB(%c) %-5p %m at %l%n"/ --> + <param name="ConversionPattern" value="%-5p [%d{yyyy/MM/dd HH:mm}]: %m at %l %n"/> + </layout> + </appender> + + <!-- log detail configuration --> + <logger name="org.apache.empire.commons" additivity="false"> + <level value="warn"/> + <appender-ref ref="default"/> + </logger> + + <root> + <priority value="info"/> + <appender-ref ref="default"/> + </root> + + </log4j:configuration> + +</config> http://git-wip-us.apache.org/repos/asf/empire-db/blob/83302f08/empire-db-eclipse-codegen/src/main/resources/icons/addButton.png ---------------------------------------------------------------------- diff --git a/empire-db-eclipse-codegen/src/main/resources/icons/addButton.png b/empire-db-eclipse-codegen/src/main/resources/icons/addButton.png new file mode 100644 index 0000000..c6aeae4 Binary files /dev/null and b/empire-db-eclipse-codegen/src/main/resources/icons/addButton.png differ http://git-wip-us.apache.org/repos/asf/empire-db/blob/83302f08/empire-db-eclipse-codegen/src/main/resources/icons/check_all.gif ---------------------------------------------------------------------- diff --git a/empire-db-eclipse-codegen/src/main/resources/icons/check_all.gif b/empire-db-eclipse-codegen/src/main/resources/icons/check_all.gif new file mode 100644 index 0000000..4370bf1 Binary files /dev/null and b/empire-db-eclipse-codegen/src/main/resources/icons/check_all.gif differ http://git-wip-us.apache.org/repos/asf/empire-db/blob/83302f08/empire-db-eclipse-codegen/src/main/resources/icons/db_element.gif ---------------------------------------------------------------------- diff --git a/empire-db-eclipse-codegen/src/main/resources/icons/db_element.gif b/empire-db-eclipse-codegen/src/main/resources/icons/db_element.gif new file mode 100644 index 0000000..1d459ce Binary files /dev/null and b/empire-db-eclipse-codegen/src/main/resources/icons/db_element.gif differ http://git-wip-us.apache.org/repos/asf/empire-db/blob/83302f08/empire-db-eclipse-codegen/src/main/resources/icons/deleteButton.png ---------------------------------------------------------------------- diff --git a/empire-db-eclipse-codegen/src/main/resources/icons/deleteButton.png b/empire-db-eclipse-codegen/src/main/resources/icons/deleteButton.png new file mode 100644 index 0000000..5f00385 Binary files /dev/null and b/empire-db-eclipse-codegen/src/main/resources/icons/deleteButton.png differ http://git-wip-us.apache.org/repos/asf/empire-db/blob/83302f08/empire-db-eclipse-codegen/src/main/resources/icons/empire-db-logo.gif ---------------------------------------------------------------------- diff --git a/empire-db-eclipse-codegen/src/main/resources/icons/empire-db-logo.gif b/empire-db-eclipse-codegen/src/main/resources/icons/empire-db-logo.gif new file mode 100644 index 0000000..3d60d76 Binary files /dev/null and b/empire-db-eclipse-codegen/src/main/resources/icons/empire-db-logo.gif differ http://git-wip-us.apache.org/repos/asf/empire-db/blob/83302f08/empire-db-eclipse-codegen/src/main/resources/icons/empire_db_icon.png ---------------------------------------------------------------------- diff --git a/empire-db-eclipse-codegen/src/main/resources/icons/empire_db_icon.png b/empire-db-eclipse-codegen/src/main/resources/icons/empire_db_icon.png new file mode 100644 index 0000000..30ac6e9 Binary files /dev/null and b/empire-db-eclipse-codegen/src/main/resources/icons/empire_db_icon.png differ http://git-wip-us.apache.org/repos/asf/empire-db/blob/83302f08/empire-db-eclipse-codegen/src/main/resources/icons/folder.gif ---------------------------------------------------------------------- diff --git a/empire-db-eclipse-codegen/src/main/resources/icons/folder.gif b/empire-db-eclipse-codegen/src/main/resources/icons/folder.gif new file mode 100644 index 0000000..42e027c Binary files /dev/null and b/empire-db-eclipse-codegen/src/main/resources/icons/folder.gif differ
