/*******************************************************************************
* Copyright (c) 1998, 2015 Oracle and/or its affiliates. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* Oracle - initial API and implementation from Oracle TopLink
******************************************************************************/
package org.eclipse.persistence.tools.workbench.mappingsplugin.ui.db;
import java.awt.Component;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.Document;
import org.eclipse.persistence.tools.workbench.framework.context.WorkbenchContext;
import org.eclipse.persistence.tools.workbench.framework.ui.dialog.AbstractValidatingDialog;
import org.eclipse.persistence.tools.workbench.framework.uitools.RegexpDocument;
import org.eclipse.persistence.tools.workbench.framework.uitools.Spacer;
import org.eclipse.persistence.tools.workbench.framework.uitools.SwingComponentFactory;
import org.eclipse.persistence.tools.workbench.mappingsmodel.project.relational.MWRelationalProject;
import org.eclipse.persistence.tools.workbench.utility.NameTools;
final class DescriptorGenerationDialog extends AbstractValidatingDialog {
private MWRelationalProject project;
private JTextField packageNameTextField;
private JCheckBox generateAccessorsCheckBox;
public DescriptorGenerationDialog(MWRelationalProject project, WorkbenchContext workbenchContext) {
super(workbenchContext);
this.project = project;
initializeDialog();
}
public boolean getGenerateAccessors() {
return this.generateAccessorsCheckBox.isSelected();
}
public String getPackageName() {
return this.packageNameTextField.getText();
}
protected String helpTopicId() {
return "dialog.descriptorGeneration";
}
private void initializeDialog() {
// Set help and title string
String titleString = null;
titleString = "DescriptorGenerationDialog_class.title";
setResizable(true);
setTitle(resourceRepository().getString(titleString));
}
protected Component buildMainPanel() {
GridBagConstraints constraints = new GridBagConstraints();
JPanel mainPanel = new JPanel(new GridBagLayout());
// Create the package name label and text field
JLabel packageNameLabel = SwingComponentFactory.buildLabel("DescriptorGenerationDialog_packageName", resourceRepository());
constraints.gridx = 0;
constraints.gridy = 0;
constraints.gridwidth = 1;
constraints.gridheight = 1;
constraints.weightx = 0;
constraints.weighty = 0;
constraints.fill = GridBagConstraints.NONE;
constraints.anchor = GridBagConstraints.LINE_START;
constraints.insets = new Insets(0, 0, 0, 0);
mainPanel.add(packageNameLabel, constraints);
this.packageNameTextField = new JTextField();
this.packageNameTextField.setColumns(30);
Document packageNameDocument = new RegexpDocument(RegexpDocument.RE_PACKAGE);
packageNameDocument.addDocumentListener(this.buildPackageNameDocumentListener());
this.packageNameTextField.setDocument(packageNameDocument);
constraints.gridx = 1;
constraints.gridy = 0;
constraints.gridwidth = 1;
constraints.gridheight = 1;
constraints.weightx = 1;
constraints.weighty = 0;
constraints.fill = GridBagConstraints.HORIZONTAL;
constraints.anchor = GridBagConstraints.CENTER;
constraints.insets = new Insets(0, 5, 0, 0);
mainPanel.add(this.packageNameTextField, constraints);
packageNameLabel.setLabelFor(this.packageNameTextField);
this.generateAccessorsCheckBox = new JCheckBox(resourceRepository().getString("DescriptorGenerationDialog_generateAccessingMethods"), true);
constraints.gridx = 0;
constraints.gridy = 1;
constraints.gridwidth = 2;
constraints.gridheight = 1;
constraints.weightx = 0;
constraints.weighty = 0;
constraints.fill = GridBagConstraints.NONE;
constraints.anchor = GridBagConstraints.LINE_START;
constraints.insets = new Insets(5, 0, 0, 0);
mainPanel.add(this.generateAccessorsCheckBox, constraints);
// Push everything to the top
Spacer spacer = new Spacer();
constraints.gridx = 0;
constraints.gridy = 3;
constraints.gridwidth = 1;
constraints.gridheight = 1;
constraints.weightx = 0;
constraints.weighty = 1;
constraints.fill = GridBagConstraints.BOTH;
constraints.anchor = GridBagConstraints.CENTER;
constraints.insets = new Insets(0, 0, 0, 0);
mainPanel.add(spacer, constraints);
return mainPanel;
}
void showNoRelationshipSupportDialog() {
JOptionPane.showMessageDialog(
this,
resourceRepository().getString("DescriptorGenerationDialog_noRelationshipSupport.message"),
resourceRepository().getString("DescriptorGenerationDialog_noRelationshipSupport.title"),
JOptionPane.WARNING_MESSAGE
);
}
protected DocumentListener buildPackageNameDocumentListener() {
return new DocumentListener() {
public void removeUpdate(DocumentEvent e) {
DescriptorGenerationDialog.this.packageNameDocumentChanged();
}
public void insertUpdate(DocumentEvent e) {
DescriptorGenerationDialog.this.packageNameDocumentChanged();
}
public void changedUpdate(DocumentEvent e) {
// this probably will never happen...
}
};
}
void packageNameDocumentChanged() {
if (this.isVisible()) {
this.validatePackageName();
}
}
private void validatePackageName() {
String pkgName = this.packageNameTextField.getText();
if (this.packageNameIsIllegal(pkgName)) {
this.setErrorMessageKey("NEW_NAME_DIALOG.ILLEGAL_VALUE");
return;
}
// no problems...
this.clearErrorMessage();
}
private boolean packageNameIsIllegal(String name) {
String[] segments = name.split("\\.");
for (int i = 0; i < segments.length; i++) {
if (NameTools.javaReservedWordsContains(segments[i])) {
return true;
}
}
return false;
}
protected void setErrorMessageKey(String key) {
super.setErrorMessageKey(key);
this.getOKAction().setEnabled(false);
}
protected void clearErrorMessage() {
super.clearErrorMessage();
this.getOKAction().setEnabled(true);
}
}