/*******************************************************************************
* 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.test.scplugin.model;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.GridLayout;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JPanel;
import org.eclipse.persistence.tools.workbench.test.scplugin.app.swing.SCAbstractUITest;
import org.eclipse.persistence.tools.workbench.framework.uitools.AddRemoveListPanel;
import org.eclipse.persistence.tools.workbench.scplugin.model.adapter.DataSource;
import org.eclipse.persistence.tools.workbench.scplugin.model.adapter.SessionAdapter;
import org.eclipse.persistence.tools.workbench.scplugin.model.adapter.TopLinkSessionsAdapter;
import org.eclipse.persistence.tools.workbench.uitools.app.CollectionAspectAdapter;
import org.eclipse.persistence.tools.workbench.uitools.app.CollectionListValueModelAdapter;
import org.eclipse.persistence.tools.workbench.uitools.app.CollectionValueModel;
import org.eclipse.persistence.tools.workbench.uitools.app.ListValueModel;
import org.eclipse.persistence.tools.workbench.uitools.app.PropertyValueModel;
import org.eclipse.persistence.tools.workbench.uitools.app.SimplePropertyValueModel;
import org.eclipse.persistence.tools.workbench.uitools.app.swing.ObjectListSelectionModel;
import org.eclipse.persistence.tools.workbench.uitools.cell.SimpleListCellRenderer;
/**
* Test Adding and Removing Sessions using an AddRemoveListPanel
* @author Tran Le
*/
public class SCToplinkSessionsUITest extends SCAbstractUITest {
private TopLinkSessionsAdapter subject;
private PropertyValueModel subjectHolder;
private TextField textField;
public static void main( String[] args) throws Exception {
new SCToplinkSessionsUITest().exec( args);
}
public SCToplinkSessionsUITest() {
super();
}
protected String windowTitle() {
return "Enter a Database Session Name:";
}
private void exec( String[] args) throws Exception {
setUp();
this.openWindow();
}
protected Component buildPropertyTestingPanel() {
JPanel propertyTestingPanel = new JPanel( new BorderLayout());
propertyTestingPanel.add( this. buildProjectClassPanel(), BorderLayout.NORTH);
propertyTestingPanel.add( this.buildPropertyEntryPanel());
return propertyTestingPanel;
}
private AddRemoveListPanel buildProjectClassPanel() {
return this.buildAddRemoveListPanel(
buildAddRemoveListPanelAdapter(), this.buildProjectClassListAdapter());
}
private Component buildPropertyEntryPanel() {
JPanel addRemoveTaskPanel = new JPanel( new GridLayout( 1, 0));
addRemoveTaskPanel.add( this.buildTextField());
return addRemoveTaskPanel;
}
private TextField buildTextField() {
this.textField = new TextField( 50);
return this.textField;
}
private AddRemoveListPanel buildAddRemoveListPanel( AddRemoveListPanel.Adapter panelAdapter, ListValueModel listAdapter) {
AddRemoveListPanel addRemoveListPanel = new AddRemoveListPanel(
workbenchContext().getApplicationContext(),
panelAdapter,
listAdapter,
AddRemoveListPanel.RIGHT
);
addRemoveListPanel.setCellRenderer( new SimpleListCellRenderer());
return addRemoveListPanel;
}
private ListValueModel buildProjectClassListAdapter() {
return new CollectionListValueModelAdapter( buildClassCollectionAdapter());
}
// - - - - - - - - -
private CollectionValueModel buildClassCollectionAdapter() {
return new CollectionAspectAdapter( subjectHolder(), TopLinkSessionsAdapter.SESSIONS_COLLECTION) {
protected Iterator getValueFromSubject() {
return (( TopLinkSessionsAdapter)subject).sessions();
}
protected int sizeFromSubject() {
return (( TopLinkSessionsAdapter)subject).sessionsSize();
}
};
}
private AddRemoveListPanel.Adapter buildAddRemoveListPanelAdapter()
{
return new AddRemoveListPanel.Adapter() {
public void addNewItem( ObjectListSelectionModel listSelectionModel) {
String text = SCToplinkSessionsUITest.this.textField().getText();
if( text.length() > 0) {
DataSource ds = new DataSource( "EISPlatform");
subject().addDatabaseSessionNamed( text, noServerPlatform(), ds);
}
}
public void removeSelectedItems( ObjectListSelectionModel listSelectionModel) {
Object[] selectedValues = listSelectionModel.getSelectedValues();
for (int index = 0; index < selectedValues.length; index++) {
subject().removeSessionNamed((( SessionAdapter)selectedValues[index]).getName());
}
}
};
}
// - - - - - - - - -
private TopLinkSessionsAdapter subject() {
return this.subject;
}
private PropertyValueModel subjectHolder() {
return this.subjectHolder;
}
protected void setUp() {
super.setUp();
this.subject = getTopLinkSessions();
this.subjectHolder = new SimplePropertyValueModel( this.subject);
}
protected TextField textField() {
return this.textField;
}
protected void initialize() {
super.initialize();
windowH = 200;
windowW = 500;
}
protected void printModel() {
System.out.println( this.subject.toString());
}
protected void resetProperty() {}
protected void clearModel() {}
protected void restoreModel() {}
protected void saveModel() {
try {
getTopLinkSessions().save();
}
catch( IOException e) {
// TODO - exeception handling
e.printStackTrace();
}
}
private File promptForSaveDirectory() {
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileSelectionMode( JFileChooser.DIRECTORIES_ONLY);
fileChooser.setDialogTitle( "Save " + getTopLinkSessions().displayString());
int buttonChoice = fileChooser.showDialog( window, "Select");
if (buttonChoice != JFileChooser.APPROVE_OPTION) {
return null;
}
// if( isValidSaveDirectory(fileChooser.getSelectedFile())) {
// return fileChooser.getSelectedFile();
// }
// else {
// showNeedEmptyDirectoryDialog();
// return promptForSaveDirectory();
// }
return fileChooser.getSelectedFile();
}
/**
* Re-Use Restore button for Saving
*/
protected JButton buildRestoreModelButton() {
return new JButton( this.buildSaveAction());
}
private Action buildSaveAction() {
Action action = new AbstractAction("Save...") {
public void actionPerformed( ActionEvent event) {
SCToplinkSessionsUITest.this.saveModel();
}
};
action.setEnabled(true);
return action;
}
// public File saveLocation() {
// return getProject().getSaveDirectory();
// }
}