/*****************************************************************
* 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.cayenne.modeler.editor.datanode;
import java.awt.BorderLayout;
import java.awt.Component;
import java.util.Map;
import java.util.TreeMap;
import javax.swing.DefaultComboBoxModel;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JTextField;
import org.apache.cayenne.configuration.PasswordEncoding;
import org.apache.cayenne.conn.DataSourceInfo;
import org.apache.cayenne.modeler.Application;
import org.apache.cayenne.modeler.util.JTextFieldUndoable;
import com.jgoodies.forms.builder.PanelBuilder;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;
public class PasswordEncoderView extends JPanel {
protected JComboBox passwordEncoder;
protected JComboBox passwordLocation;
protected JTextField passwordKey;
protected JTextField passwordSource;
protected JLabel passwordSourceLabel;
private static final String PASSWORD_CLASSPATH = "Classpath Search (File System)";
private static final String PASSWORD_EXECUTABLE = "Executable Program";
private static final String PASSWORD_MODEL = "Cayenne Model";
private static final String PASSWORD_URL = "URL (file:, http:, etc)";
private static final Object[] PASSWORD_LOCATIONS = new Object[] {
DataSourceInfo.PASSWORD_LOCATION_MODEL,
DataSourceInfo.PASSWORD_LOCATION_CLASSPATH,
DataSourceInfo.PASSWORD_LOCATION_EXECUTABLE,
DataSourceInfo.PASSWORD_LOCATION_URL
};
private static final Map<String, String> passwordSourceLabels = new TreeMap<String, String>();
static {
passwordSourceLabels.put(DataSourceInfo.PASSWORD_LOCATION_MODEL, PASSWORD_MODEL);
passwordSourceLabels.put(
DataSourceInfo.PASSWORD_LOCATION_CLASSPATH,
PASSWORD_CLASSPATH);
passwordSourceLabels.put(
DataSourceInfo.PASSWORD_LOCATION_EXECUTABLE,
PASSWORD_EXECUTABLE);
passwordSourceLabels.put(DataSourceInfo.PASSWORD_LOCATION_URL, PASSWORD_URL);
}
final class PasswordLocationRenderer extends DefaultListCellRenderer {
public Component getListCellRendererComponent(
JList list,
Object object,
int arg2,
boolean arg3,
boolean arg4) {
if (object != null)
object = passwordSourceLabels.get(object);
else
object = PASSWORD_MODEL;
return super.getListCellRendererComponent(list, object, arg2, arg3, arg4);
}
}
public PasswordEncoderView() {
this.passwordEncoder = Application.getWidgetFactory().createUndoableComboBox();
this.passwordLocation = Application.getWidgetFactory().createUndoableComboBox();
this.passwordSource = new JTextFieldUndoable();
this.passwordKey = new JTextFieldUndoable();
// init combo box choices
passwordEncoder.setModel(new DefaultComboBoxModel(
PasswordEncoding.standardEncoders));
passwordEncoder.setEditable(true);
passwordLocation = Application.getWidgetFactory().createUndoableComboBox();
passwordLocation.setRenderer(new PasswordLocationRenderer());
DefaultComboBoxModel passwordLocationModel = new DefaultComboBoxModel(
PASSWORD_LOCATIONS);
passwordLocation.setModel(passwordLocationModel);
CellConstraints cc = new CellConstraints();
FormLayout layout = new FormLayout(
"right:80dlu, 3dlu, fill:50dlu, 3dlu, fill:74dlu, 3dlu, fill:70dlu", // Columns
"p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p"); // Rows
PanelBuilder builder = new PanelBuilder(layout);
builder.setDefaultDialogBorder();
builder.addSeparator("Encoder", cc.xywh(1, 1, 7, 1));
builder.addLabel("Password Encoder:", cc.xy(1, 11));
builder.add(passwordEncoder, cc.xywh(3, 11, 5, 1));
builder.addLabel("Password Encoder Key:", cc.xy(1, 13));
builder.add(passwordKey, cc.xywh(3, 13, 5, 1));
builder.addLabel("Note: Cayenne supplied encoders do not use a key.", cc.xywh(
3,
15,
5,
1));
builder.addLabel("Password Location:", cc.xy(1, 17));
builder.add(passwordLocation, cc.xywh(3, 17, 5, 1));
passwordSourceLabel = builder.addLabel("Password Source:", cc.xy(1, 19));
builder.add(passwordSource, cc.xywh(3, 19, 5, 1));
this.setLayout(new BorderLayout());
this.add(builder.getPanel(), BorderLayout.CENTER);
}
/**
* @return the passwordEncoder
*/
public JComboBox getPasswordEncoder() {
return passwordEncoder;
}
/**
* @return the passwordLocation
*/
public JComboBox getPasswordLocation() {
return passwordLocation;
}
/**
* @return the passwordKey
*/
public JTextField getPasswordKey() {
return passwordKey;
}
/**
* @return the passwordSource
*/
public JTextField getPasswordSource() {
return passwordSource;
}
/**
* @return the passwordLocationLabel
*/
public JLabel getPasswordSourceLabel() {
return passwordSourceLabel;
}
}