You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by sa...@apache.org on 2014/04/14 20:31:07 UTC
[65/90] [abbrv] AIRAVATA-1124
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/dialogs/descriptors/ApplicationDescriptionDialog.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/dialogs/descriptors/ApplicationDescriptionDialog.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/dialogs/descriptors/ApplicationDescriptionDialog.java
new file mode 100644
index 0000000..ca72e5f
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/dialogs/descriptors/ApplicationDescriptionDialog.java
@@ -0,0 +1,822 @@
+/*
+ *
+ * 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.airavata.xbaya.ui.dialogs.descriptors;
+
+import java.awt.Color;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.FocusAdapter;
+import java.awt.event.FocusEvent;
+import java.awt.event.KeyAdapter;
+import java.awt.event.KeyEvent;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.io.File;
+import java.util.List;
+
+import javax.swing.BorderFactory;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JDialog;
+import javax.swing.JFileChooser;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JSeparator;
+import javax.swing.JTextField;
+import javax.swing.ProgressMonitor;
+import javax.swing.SwingConstants;
+
+import org.apache.airavata.client.api.AiravataAPI;
+import org.apache.airavata.client.api.exception.AiravataAPIInvocationException;
+import org.apache.airavata.common.utils.SwingUtil;
+import org.apache.airavata.commons.gfac.type.ApplicationDescription;
+import org.apache.airavata.commons.gfac.type.HostDescription;
+import org.apache.airavata.commons.gfac.type.ServiceDescription;
+import org.apache.airavata.schemas.gfac.ApplicationDeploymentDescriptionType;
+import org.apache.airavata.schemas.gfac.GlobusHostType;
+import org.apache.airavata.schemas.gfac.GsisshHostType;
+import org.apache.airavata.schemas.gfac.HpcApplicationDeploymentType;
+import org.apache.airavata.schemas.gfac.SSHHostType;
+import org.apache.airavata.xbaya.XBayaEngine;
+import org.apache.airavata.xbaya.ui.menues.MenuIcons;
+import org.apache.airavata.xbaya.ui.widgets.GridPanel;
+import org.apache.airavata.xbaya.ui.widgets.XBayaLabel;
+import org.apache.airavata.xbaya.ui.widgets.XBayaLinkButton;
+import org.apache.airavata.xbaya.ui.widgets.XBayaTextField;
+import org.apache.xmlbeans.XmlException;
+//import org.apache.airavata.registry.api.AiravataRegistry2;
+
+public class ApplicationDescriptionDialog extends JDialog implements ActionListener {
+ /**
+ *
+ */
+ private static final long serialVersionUID = -2745085755585610025L;
+ private XBayaTextField txtExecPath;
+ private XBayaTextField txtAppName;
+ private XBayaTextField txtTempDir;
+
+ private AiravataAPI registry;
+ private ApplicationDescription shellApplicationDescription;
+ private JLabel lblError;
+ private boolean applcationDescCreated = false;
+ private JButton okButton;
+
+ private String serviceName;
+ private String hostName;
+ private JComboBox cmbHostName;
+
+ private XBayaEngine engine;
+ private JButton btnHostAdvanceOptions;
+ private boolean newDescritor;
+ private ApplicationDescription originalDescription;
+ private String originalHost;
+ private String originalService;
+ private ServiceDescription serviceDescription=null;
+ private JButton btnTmpDirBrowse;
+ private JButton btnExecBrowse;
+
+ /**
+ * Launch the application.
+ */
+ public static void main(String[] args) {
+ try {
+ ApplicationDescriptionDialog dialog = new ApplicationDescriptionDialog(null);
+ dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
+ dialog.setVisible(true);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ public ApplicationDescriptionDialog(XBayaEngine engine) {
+ this(engine,true,null,null,null);
+ }
+ /**
+ * Create the dialog.
+ */
+ public ApplicationDescriptionDialog(XBayaEngine engine, boolean newDescritor, ApplicationDescription originalDescription, String originalHost, String originalService) {
+ setNewDescritor(newDescritor);
+ setOriginalDescription(originalDescription);
+ setOriginalHost(originalHost);
+ setOriginalService(originalService);
+ setRegistry(engine.getConfiguration().getAiravataAPI());
+ addWindowListener(new WindowAdapter() {
+ @Override
+ public void windowOpened(WindowEvent arg0) {
+ if (isNewDescritor()) {
+ String baseName = "Application";
+ int i = 1;
+ String defaultName = baseName + i;
+ try {
+ ApplicationDescription applicationDescription = getRegistry()
+ .getApplicationManager().getApplicationDescription(getServiceName(),
+ getHostName());
+ while (true) {
+ boolean notFound = true;
+ if (applicationDescription.getType()
+ .getApplicationName().getStringValue()
+ .equals(defaultName)) {
+ notFound = false;
+ break;
+ }
+ if (notFound) {
+ break;
+ }
+ defaultName = baseName + (++i);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ txtAppName.setText(defaultName);
+ setApplicationName(txtAppName.getText());
+ }
+ }
+ });
+ this.engine=engine;
+ iniGUI();
+ if (originalService!=null){
+ try {
+ ServiceDescription disc = getRegistry().getApplicationManager().getServiceDescription(originalService);
+ if(disc!=null){
+ setServiceDescription(disc);
+ }
+ throw new AiravataAPIInvocationException(new Exception("Service Description not found in registry."));
+ } catch (AiravataAPIInvocationException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ public void open() {
+ setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
+ setVisible(true);
+ }
+
+ protected ApplicationDescriptionDialog getDialog() {
+ return this;
+ }
+
+ private void iniGUI() {
+ if (isNewDescritor()) {
+ setTitle("Application Description");
+ }else{
+ setTitle("Update Application Description: "+ getOriginalDescription().getType().getApplicationName().getStringValue());
+ }
+ setBounds(100, 100, 600, 620);
+ setModal(true);
+ setLocationRelativeTo(null);
+ GridPanel buttonPane = new GridPanel();
+// getContentPane().setLayout(new BorderLayout());
+ {
+
+// buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
+// getContentPane().add(buttonPane, BorderLayout.SOUTH);
+
+ lblError = new JLabel("");
+ lblError.setForeground(Color.RED);
+ buttonPane.add(lblError);
+ if (!isNewDescritor()){
+ JButton resetButton = new JButton("Reset");
+ resetButton.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ loadData();
+ }
+ });
+ buttonPane.add(resetButton);
+ }
+ {
+ okButton = new JButton("Save");
+ if (!isNewDescritor()){
+ okButton.setText("Update");
+ }
+ okButton.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ saveApplicationDescription();
+ close();
+ }
+ });
+ okButton.setEnabled(false);
+ okButton.setActionCommand("OK");
+ buttonPane.add(okButton);
+ getRootPane().setDefaultButton(okButton);
+ }
+ {
+ JButton cancelButton = new JButton("Cancel");
+ cancelButton.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ setApplicationDescCreated(false);
+ close();
+ }
+ });
+ cancelButton.setActionCommand("Cancel");
+ buttonPane.add(cancelButton);
+ }
+ }
+ {
+// JPanel panel = new JPanel();
+// getContentPane().add(panel, BorderLayout.CENTER);
+ JPanel execPath=new JPanel();
+ txtExecPath = new XBayaTextField();
+ txtExecPath.getTextField().addKeyListener(new KeyAdapter() {
+ @Override
+ public void keyReleased(KeyEvent e) {
+ setExecutablePath(txtExecPath.getText());
+ }
+ });
+ txtExecPath.getTextField().addFocusListener(new FocusAdapter() {
+ @Override
+ public void focusLost(FocusEvent e) {
+ super.focusLost(e);
+ updateTempDirWithExecPath(txtExecPath.getText());
+ }
+ });
+ txtExecPath.setColumns(10);
+ btnExecBrowse=new JButton(MenuIcons.OPEN_ICON);
+ btnExecBrowse.addActionListener(new ActionListener(){
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ JFileChooser c = new JFileChooser();
+ int rVal = c.showOpenDialog(null);
+ if (rVal == JFileChooser.APPROVE_OPTION) {
+ txtExecPath.setText(c.getSelectedFile().toString());
+ setExecutablePath(txtExecPath.getText());
+ }
+ }
+ });
+ execPath.add(txtExecPath.getSwingComponent());
+ execPath.add(btnExecBrowse);
+ JButton btnIOParameters = new JButton("IO Parameters...");
+ btnIOParameters.addActionListener(new ActionListener(){
+ @Override
+ public void actionPerformed(ActionEvent event) {
+ try {
+ ServiceDescriptionDialog serviceDescriptionDialog = new ServiceDescriptionDialog(getRegistry(),getServiceDescription()==null,getServiceDescription(),false,getApplicationName());
+ serviceDescriptionDialog.setLocationRelativeTo(getContentPane());
+ serviceDescriptionDialog.open();
+ if (serviceDescriptionDialog.isServiceCreated()) {
+ setServiceDescription(serviceDescriptionDialog.getServiceDescription());
+ }
+ } catch (Exception e1) {
+ e1.printStackTrace();
+ JOptionPane.showMessageDialog(null, e1.getLocalizedMessage());
+ }
+ }
+ });
+ execPath.add(new JLabel(" "));
+ execPath.add(btnIOParameters);
+
+ setupLayoutForBrowse(execPath,txtExecPath.getSwingComponent());
+
+ txtAppName = new XBayaTextField();
+ txtAppName.getTextField().addKeyListener(new KeyAdapter() {
+ @Override
+ public void keyReleased(KeyEvent arg0) {
+ setApplicationName(txtAppName.getText());
+ }
+ });
+ txtAppName.setColumns(10);
+ XBayaLabel lblApplicationName = new XBayaLabel("Application name",txtAppName);
+ JLabel lblExecutablePath = new JLabel("Executable path");
+ JPanel tmpDirPath=new JPanel();
+
+ txtTempDir = new XBayaTextField();
+ txtTempDir.getTextField().addKeyListener(new KeyAdapter() {
+ @Override
+ public void keyReleased(KeyEvent e) {
+ setTempDir(txtTempDir.getText());
+ }
+ });
+ txtTempDir.setColumns(10);
+ btnTmpDirBrowse=new JButton(MenuIcons.OPEN_DIR_ICON);
+ btnTmpDirBrowse.addActionListener(new ActionListener(){
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ JFileChooser c = new JFileChooser();
+ c.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
+ int rVal = c.showOpenDialog(null);
+ if (rVal == JFileChooser.APPROVE_OPTION) {
+ txtTempDir.setText(c.getSelectedFile().toString());
+ setTempDir(txtTempDir.getText());
+ }
+ }
+ });
+ JTextField component = txtTempDir.getSwingComponent();
+ tmpDirPath.add(component);
+ tmpDirPath.add(btnTmpDirBrowse);
+// tmpDirPath.layout(1, 2, 0, 0);
+
+ setupLayoutForBrowse(tmpDirPath, component);
+
+
+ JLabel lblTemporaryDirectory = new JLabel("Scratch working directory");
+
+ JButton btnAdvance = new JButton("Advanced application configurations...");
+ btnAdvance.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ try {
+ ApplicationDescriptionAdvancedOptionDialog serviceDescriptionDialog = new ApplicationDescriptionAdvancedOptionDialog(
+ getRegistry(), getShellApplicationDescription());
+ serviceDescriptionDialog.open();
+ } catch (Exception e1) {
+ e1.printStackTrace();
+ JOptionPane.showMessageDialog(null, e1.getLocalizedMessage());
+ }
+ }
+ });
+
+// cmbServiceName.setRenderer(new DefaultListCellRenderer());
+ cmbHostName = new JComboBox();
+ cmbHostName.addActionListener(this);
+
+ XBayaLabel lblHostName = new XBayaLabel("Application host",cmbHostName);
+// lblHostName.getSwingComponent().setFont(new Font("Tahoma", Font.ITALIC, 11));
+ XBayaLinkButton lnkNewHost = new XBayaLinkButton("New button");
+ lnkNewHost.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ try {
+ HostDescriptionDialog hostDescriptionDialog = new HostDescriptionDialog(engine.getConfiguration().getAiravataAPI(), null);
+ hostDescriptionDialog.setLocationRelativeTo(getContentPane());
+ hostDescriptionDialog.open();
+
+ if (hostDescriptionDialog.isHostCreated()) {
+ ProgressMonitor progressMonitor = new ProgressMonitor(getContentPane(), "Host Descriptions", "Refreshing host list..", 0, 200);
+ int progress=1;
+ progressMonitor.setProgress(progress++);
+ while(cmbHostName.getSelectedIndex()==-1 || !cmbHostName.getSelectedItem().toString().equals(hostDescriptionDialog.getHostLocation())){
+ loadHostDescriptions();
+ cmbHostName.setSelectedItem(hostDescriptionDialog.getHostLocation());
+ progressMonitor.setProgress(progress++);
+ Thread.sleep(50);
+ }
+ progressMonitor.setProgress(200);
+ }
+ } catch (Exception e1) {
+ e1.printStackTrace();
+ JOptionPane.showMessageDialog(null, e1.getLocalizedMessage());
+ }
+ }
+ });
+ lnkNewHost.setText("Create new host...");
+ lnkNewHost.setHorizontalAlignment(SwingConstants.TRAILING);
+
+// JLabel lblBindThisDeployment = new JLabel("Bind this deployment description to:");
+// lblBindThisDeployment.setFont(new Font("Tahoma", Font.BOLD, 11));
+
+ btnHostAdvanceOptions=new JButton("HPC Configuration...");
+ btnHostAdvanceOptions.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ try {
+ ApplicationDescriptionHostAdvancedOptionDialog hostAdvancedOptionsDialog = new ApplicationDescriptionHostAdvancedOptionDialog(getRegistry(),getShellApplicationDescription());
+ hostAdvancedOptionsDialog.open();
+ } catch (Exception e1) {
+ e1.printStackTrace();
+ JOptionPane.showMessageDialog(null, e1.getLocalizedMessage());
+ }
+ }
+ });
+ btnHostAdvanceOptions.setVisible(false);
+ GridPanel hostPanel=new GridPanel();
+ hostPanel.add(cmbHostName);
+ hostPanel.add(btnHostAdvanceOptions);
+
+ SwingUtil.layoutToGrid(hostPanel.getSwingComponent(), 1, 2, 0, 0);
+ GridPanel infoPanel0 = new GridPanel();
+
+ infoPanel0.add(lblApplicationName);
+ infoPanel0.add(txtAppName);
+
+ GridPanel infoPanel1 = new GridPanel();
+
+
+ infoPanel1.add(lblExecutablePath);
+ infoPanel1.add(execPath);
+// infoPanel1.add(new JLabel());
+// infoPanel1.add(btnIOParameters);
+ infoPanel1.add(lblTemporaryDirectory);
+ infoPanel1.add(tmpDirPath);
+// infoPanel1.add(new JLabel());
+// infoPanel1.add(btnAdvance);
+
+// GridPanel infoPanel2 = new GridPanel();
+// infoPanel2.add(new JSeparator());
+// infoPanel2.add(lblBindThisDeployment);
+
+ GridPanel infoPanel3 = new GridPanel();
+
+ infoPanel3.add(lblHostName);
+ infoPanel3.add(hostPanel);
+ infoPanel3.add(new JLabel());
+ infoPanel3.add(lnkNewHost);
+
+ GridPanel infoPanel4=new GridPanel();
+ infoPanel4.add(new JLabel());
+ infoPanel4.add(btnAdvance);
+ infoPanel4.layout(1, 2, 0, 0);
+
+ SwingUtil.layoutToGrid(infoPanel0.getSwingComponent(), 1, 2, SwingUtil.WEIGHT_NONE, 1);
+
+ SwingUtil.layoutToGrid(infoPanel1.getSwingComponent(), 4, 1, SwingUtil.WEIGHT_NONE, 0);
+// SwingUtil.layoutToGrid(infoPanel2.getSwingComponent(), 1, 1, SwingUtil.WEIGHT_NONE, 0);
+ SwingUtil.layoutToGrid(infoPanel3.getSwingComponent(), 2, 2, SwingUtil.WEIGHT_NONE, 1);
+
+ GridPanel infoPanel = new GridPanel();
+ infoPanel.add(infoPanel0);
+ infoPanel.add(new JSeparator());
+ infoPanel.add(infoPanel1);
+ infoPanel.add(new JSeparator());
+// infoPanel.add(infoPanel2);
+ infoPanel.add(infoPanel3);
+
+
+ infoPanel.add(new JSeparator());
+ infoPanel.add(infoPanel4);
+
+ SwingUtil.layoutToGrid(infoPanel.getSwingComponent(), 7, 1, SwingUtil.WEIGHT_NONE, 0);
+ SwingUtil.layoutToGrid(buttonPane.getSwingComponent(), 1, buttonPane.getContentPanel().getComponentCount(),SwingUtil.WEIGHT_NONE,0);
+ getContentPane().add(infoPanel.getSwingComponent());
+ getContentPane().add(buttonPane.getSwingComponent());
+
+ buttonPane.getSwingComponent().setBorder(BorderFactory.createEtchedBorder());
+ infoPanel.getSwingComponent().setBorder(BorderFactory.createEtchedBorder());
+
+ SwingUtil.layoutToGrid(getContentPane(), 2, 1, -1, 0);
+// loadServiceDescriptions();
+ loadHostDescriptions();
+ }
+ setResizable(true);
+ getRootPane().setDefaultButton(okButton);
+ if (!isNewDescritor()){
+ loadData();
+ }
+ pack();
+ if (getSize().getWidth()<500){
+ setSize(500, getSize().height);
+ }
+ }
+
+ private void setupLayoutForBrowse(JPanel tmpDirPath, JTextField component) {
+ GridBagLayout layout;
+ GridBagConstraints constraints;
+ layout = new GridBagLayout();
+ constraints = new GridBagConstraints();
+ constraints.fill = GridBagConstraints.BOTH;
+ constraints.weightx = 1;
+ layout.setConstraints(component, constraints);
+ tmpDirPath.setLayout(layout);
+ }
+
+// private void loadServiceDescriptions() {
+// cmbServiceName.removeAllItems();
+// setServiceName(null);
+// try {
+// List<ServiceDescription> serviceDescriptions = getRegistry().searchServiceDescription("");
+// for (ServiceDescription serviceDescription : serviceDescriptions) {
+// cmbServiceName.addItem(serviceDescription.getType().getName());
+// }
+// } catch (Exception e) {
+// setError(e.getLocalizedMessage());
+// }
+// updateServiceName();
+// }
+
+ private void loadData(){
+ txtAppName.setText(getOriginalDescription().getType().getApplicationName().getStringValue());
+ setApplicationName(txtAppName.getText());
+ txtExecPath.setText(getOriginalDescription().getType().getExecutableLocation());
+ setExecutablePath(txtExecPath.getText());
+ txtTempDir.setText(getOriginalDescription().getType().getScratchWorkingDirectory());
+ setTempDir(txtTempDir.getText());
+
+ cmbHostName.setSelectedItem(getOriginalHost());
+ setHostName(cmbHostName.getSelectedItem().toString());
+// cmbServiceName.setSelectedItem(getOriginalService());
+ setServiceName(null);
+ txtAppName.setEditable(isNewDescritor());
+ }
+
+ private void loadHostDescriptions() {
+ cmbHostName.removeAllItems();
+ setHostName(null);
+ try {
+ List<HostDescription> hostDescriptions = getRegistry().getApplicationManager().getAllHostDescriptions();
+ for (HostDescription hostDescription : hostDescriptions) {
+ if (hostDescription.getType().getHostName() == null) {
+ cmbHostName.addItem(hostDescription.getType().getHostName());
+ } else {
+ cmbHostName.addItem(hostDescription.getType().getHostName());
+ }
+ }
+ } catch (Exception e) {
+ setError(e.getLocalizedMessage());
+ }
+ updateHostName();
+ }
+
+ public ApplicationDescription getShellApplicationDescription() {
+ if(shellApplicationDescription == null){
+ if (isNewDescritor()) {
+ shellApplicationDescription = new ApplicationDescription();
+ }else{
+ try {
+ shellApplicationDescription= ApplicationDescription.fromXML(getOriginalDescription().toXML());
+ } catch (XmlException e) {
+ //shouldn't happen (hopefully)
+ }
+ }
+ }
+ return shellApplicationDescription;
+ }
+
+ public ApplicationDeploymentDescriptionType getApplicationDescriptionType() {
+ return getShellApplicationDescription().getType();
+ }
+
+ public String getApplicationName() {
+ return getApplicationDescriptionType().getApplicationName().getStringValue();
+ }
+
+ public void setApplicationName(String applicationName) {
+// ApplicationDeploymentDescriptionType.ApplicationName applicationName1 = getApplicationDescriptionType().addNewApplicationName();
+// applicationName1.setStringValue(applicationName);
+ if (getApplicationDescriptionType().getApplicationName()==null){
+ getApplicationDescriptionType().addNewApplicationName();
+ }
+ getApplicationDescriptionType().getApplicationName().setStringValue(applicationName);
+ updateDialogStatus();
+ }
+
+ public String getExecutablePath() {
+ return getApplicationDescriptionType().getExecutableLocation();
+ }
+
+ public void setExecutablePath(String executablePath) {
+ getApplicationDescriptionType().setExecutableLocation(executablePath);
+ updateTempDirWithExecPath(executablePath);
+ updateDialogStatus();
+ }
+
+ private void updateTempDirWithExecPath(String executablePath) {
+ if (!executablePath.trim().equals("") && (!txtExecPath.getSwingComponent().isFocusOwner()) &&
+ (getApplicationDescriptionType().getScratchWorkingDirectory()==null || getApplicationDescriptionType().getScratchWorkingDirectory().trim().equalsIgnoreCase(""))){
+ String temp_location = "workflow_runs";
+ String tempDir = new File(new File(executablePath).getParentFile(),temp_location).toString();
+ txtTempDir.setText(tempDir);
+ txtTempDir.getSwingComponent().setSelectionStart(tempDir.length()-temp_location.length());
+ txtTempDir.getSwingComponent().setSelectionEnd(tempDir.length());
+ setTempDir(txtTempDir.getText());
+ txtTempDir.getSwingComponent().requestFocus();
+ }
+ }
+
+ public String getTempDir() {
+ return getApplicationDescriptionType().getScratchWorkingDirectory();
+ }
+
+ public void setTempDir(String tempDir) {
+ getApplicationDescriptionType().setScratchWorkingDirectory(tempDir);
+ updateDialogStatus();
+ }
+
+ public void close() {
+ getDialog().setVisible(false);
+ }
+
+ public void saveApplicationDescription() {
+ try {
+ try {
+ getRegistry().getApplicationManager().saveApplicationDescription(getServiceName(), getHostName(), getShellApplicationDescription());
+ } catch (AiravataAPIInvocationException e) {
+ getRegistry().getApplicationManager().updateApplicationDescriptor(getServiceName(), getHostName(), getShellApplicationDescription());
+ }
+ if (!isNewDescritor() && (!getServiceName().equals(getOriginalService()) || !getHostName().equals(getOriginalHost()))) {
+ try {
+ getRegistry().getApplicationManager().deleteApplicationDescription(getOriginalService(),
+ getOriginalHost(), getOriginalDescription().getType()
+ .getApplicationName().getStringValue());
+ } catch (AiravataAPIInvocationException e) {
+ engine.getGUI().getErrorWindow().error(e);
+ }
+ }
+ setApplicationDescCreated(true);
+ } catch (AiravataAPIInvocationException e) {
+ engine.getGUI().getErrorWindow().error(e);
+ }
+ }
+
+ public boolean isApplicationDescCreated() {
+ return applcationDescCreated;
+ }
+
+ public void setApplicationDescCreated(boolean applicationDescCreated) {
+ this.applcationDescCreated = applicationDescCreated;
+ }
+
+ private void setError(String errorMessage) {
+ if (errorMessage == null || errorMessage.trim().equals("")) {
+ lblError.setText("");
+ } else {
+ lblError.setText(errorMessage.trim());
+ }
+ }
+
+ private void updateDialogStatus() {
+ String message = null;
+ try {
+ validateDialog();
+ } catch (Exception e) {
+ message = e.getLocalizedMessage();
+ }
+ okButton.setEnabled(message == null);
+ setError(message);
+ }
+
+ private void validateDialog() throws Exception {
+ if (getApplicationName() == null || getApplicationName().trim().equals("")) {
+ throw new Exception("Name of the application cannot be empty!!!");
+ }
+
+ ApplicationDescription descriptions = null;
+ try {
+ descriptions = getRegistry().getApplicationManager().getApplicationDescriptor(getServiceName(), getHostName(),
+ getApplicationName());
+ } catch (AiravataAPIInvocationException e) {
+ throw e;
+ }
+ if (descriptions !=null && (isNewDescritor() || (!getServiceName().equals(getOriginalService()) || !getHostName().equals(getOriginalHost())))) {
+ throw new Exception("Application name already exists for the selected service & host!!!");
+ }
+
+ if (getExecutablePath() == null || getExecutablePath().trim().equals("")) {
+ throw new Exception("Executable path cannot be empty!!!");
+ }
+
+ if (getTempDir() == null || getTempDir().trim().equals("")) {
+ throw new Exception("Temporary directory location cannot be empty!!!");
+ }
+
+ if (getServiceName() == null || getServiceName().trim().equals("")) {
+ throw new Exception("Click on IO Parameters... to define parameters for the application");
+ }
+
+ if (getHostName() == null || getHostName().trim().equals("")) {
+ throw new Exception("Please select/create host to bind to this deployment description");
+ }
+
+ }
+
+ public String getServiceName() {
+ return serviceName;
+ }
+
+ public void setServiceName(String serviceName) {
+ this.serviceName = serviceName;
+ updateDialogStatus();
+ }
+
+ public String getHostName() {
+ return hostName;
+ }
+
+ public void setHostName(String hostName) {
+ this.hostName = hostName;
+ if (hostName!=null) {
+ HostDescription hostDescription;
+ try {
+ hostDescription = registry.getApplicationManager().getHostDescription(hostName);
+ if (hostDescription.getType() instanceof GlobusHostType) {
+ getShellApplicationDescription().getType().changeType(
+ HpcApplicationDeploymentType.type);
+ } else if (hostDescription.getType() instanceof GsisshHostType) {
+ getShellApplicationDescription().getType().changeType(
+ HpcApplicationDeploymentType.type);
+ } else if (hostDescription.getType() instanceof SSHHostType && ((SSHHostType)hostDescription.getType()).getHpcResource()) {
+ getShellApplicationDescription().getType().changeType(
+ HpcApplicationDeploymentType.type);
+ } else {
+ getShellApplicationDescription().getType().changeType(
+ ApplicationDeploymentDescriptionType.type);
+ }
+ btnHostAdvanceOptions.setVisible(getShellApplicationDescription().getType() instanceof HpcApplicationDeploymentType);
+ String hostAddress = hostDescription.getType().getHostAddress();
+ boolean isLocal = isLocalAddress(hostAddress);
+ btnExecBrowse.setVisible(isLocal);
+ btnTmpDirBrowse.setVisible(isLocal);
+
+ } catch (AiravataAPIInvocationException e) {
+ //not there - ouch
+ }
+ }
+ updateDialogStatus();
+ }
+
+ private boolean isLocalAddress(String hostAddress) {
+ return hostAddress.equalsIgnoreCase("localhost") || hostAddress.equalsIgnoreCase("127.0.0.1");
+ }
+
+ private void updateServiceName() {
+ if (getServiceDescription() == null) {
+ setServiceName(null);
+ }else{
+ setServiceName(getServiceDescription().getType().getName());
+ }
+ }
+
+ private void updateHostName() {
+ if (cmbHostName.getSelectedItem() != null) {
+ setHostName(cmbHostName.getSelectedItem().toString());
+ }
+ }
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+// if (e.getSource() == cmbServiceName) {
+// updateServiceName();
+// }
+ if (e.getSource() == cmbHostName) {
+ updateHostName();
+ }
+ if (e.getSource() == txtAppName) {
+ setApplicationName(txtAppName.getText());
+ }
+ if (e.getSource() == txtExecPath) {
+ setExecutablePath(txtExecPath.getText());
+ }
+ if (e.getSource() == txtTempDir) {
+ setTempDir(txtTempDir.getText());
+ }
+ }
+
+ public AiravataAPI getRegistry() {
+ return registry;
+ }
+
+ public void setRegistry(AiravataAPI registry) {
+ this.registry = registry;
+ }
+
+ public boolean isNewDescritor() {
+ return newDescritor;
+ }
+
+ public void setNewDescritor(boolean newDescritor) {
+ this.newDescritor = newDescritor;
+ }
+
+ public ApplicationDescription getOriginalDescription() {
+ return originalDescription;
+ }
+
+ public void setOriginalDescription(
+ ApplicationDescription originalDescription) {
+ this.originalDescription = originalDescription;
+ }
+
+ public String getOriginalService() {
+ return originalService;
+ }
+
+ public void setOriginalService(String originalService) {
+ this.originalService = originalService;
+ }
+
+ public String getOriginalHost() {
+ return originalHost;
+ }
+
+ public void setOriginalHost(String originalHost) {
+ this.originalHost = originalHost;
+ }
+
+ public ServiceDescription getServiceDescription() {
+ return serviceDescription;
+ }
+
+ private void setServiceDescription(ServiceDescription serviceDescription) {
+ this.serviceDescription = serviceDescription;
+ updateServiceName();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/dialogs/descriptors/ApplicationDescriptionHostAdvancedOptionDialog.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/dialogs/descriptors/ApplicationDescriptionHostAdvancedOptionDialog.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/dialogs/descriptors/ApplicationDescriptionHostAdvancedOptionDialog.java
new file mode 100644
index 0000000..ac7d234
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/dialogs/descriptors/ApplicationDescriptionHostAdvancedOptionDialog.java
@@ -0,0 +1,459 @@
+/*
+ *
+ * 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.airavata.xbaya.ui.dialogs.descriptors;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.BorderFactory;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JOptionPane;
+import javax.swing.JScrollPane;
+
+import org.apache.airavata.client.api.AiravataAPI;
+import org.apache.airavata.common.utils.SwingUtil;
+import org.apache.airavata.commons.gfac.type.ApplicationDescription;
+import org.apache.airavata.schemas.gfac.HpcApplicationDeploymentType;
+import org.apache.airavata.schemas.gfac.JobTypeType;
+import org.apache.airavata.schemas.gfac.JobTypeType.Enum;
+import org.apache.airavata.schemas.gfac.ProjectAccountType;
+import org.apache.airavata.schemas.gfac.QueueType;
+import org.apache.airavata.xbaya.ui.widgets.GridPanel;
+import org.apache.airavata.xbaya.ui.widgets.XBayaComboBox;
+import org.apache.airavata.xbaya.ui.widgets.XBayaLabel;
+import org.apache.airavata.xbaya.ui.widgets.XBayaTextField;
+//import org.apache.airavata.registry.api.AiravataRegistry2;
+
+public class ApplicationDescriptionHostAdvancedOptionDialog extends JDialog {
+ private static final long serialVersionUID = 3920479739097405014L;
+ private XBayaComboBox cmbJobType;
+ private XBayaTextField txtProjectAccountNumber;
+ private XBayaTextField txtProjectAccountDescription;
+ private XBayaTextField txtQueueType;
+ private XBayaTextField txtMaxWallTime = new XBayaTextField();
+ private XBayaTextField txtMinMemory = new XBayaTextField();
+ private XBayaTextField txtMaxMemory = new XBayaTextField();
+ private XBayaTextField txtCpuCount = new XBayaTextField();
+ private XBayaTextField txtNodeCount = new XBayaTextField();
+ private XBayaTextField txtProcessorsPerNode = new XBayaTextField();
+ private JButton okButton;
+ private AiravataAPI registry;
+ private ApplicationDescription descriptor;
+ private XBayaLabel lblCpuCount;
+ private XBayaLabel lblProcessorPerNode;
+ private XBayaLabel lbNodeCount;
+ private XBayaTextField txtjobSubmitterCommand;
+ private XBayaTextField txtinstalledParentPath;
+
+ /**
+ * Create the dialog.
+ */
+ public ApplicationDescriptionHostAdvancedOptionDialog(AiravataAPI registry, ApplicationDescription descriptor) {
+ addWindowListener(new WindowAdapter() {
+ @Override
+ public void windowOpened(WindowEvent arg0) {
+ loadApplicationDescriptionAdvancedOptions();
+ }
+ });
+ setRegistry(registry);
+ setShellApplicationDescription(descriptor);
+ initGUI();
+ }
+
+ public void open() {
+ setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
+ setVisible(true);
+ }
+
+ protected ApplicationDescriptionHostAdvancedOptionDialog getDialog() {
+ return this;
+ }
+
+ public void close() {
+ getDialog().setVisible(false);
+ }
+
+ private void initGUI() {
+ setTitle("HPC Configuration Options");
+ setModal(true);
+ setBounds(100, 100, 500, 500);
+ setLocationRelativeTo(null);
+ GridPanel buttonPane = new GridPanel();
+ okButton = new JButton("Update");
+ okButton.setActionCommand("OK");
+ okButton.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ if (saveApplicationDescriptionAdvancedOptions()){
+ close();
+ }
+ }
+ });
+ getRootPane().setDefaultButton(okButton);
+
+ JButton cancelButton = new JButton("Cancel");
+ cancelButton.setActionCommand("Cancel");
+ cancelButton.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ close();
+ }
+ });
+
+
+ GridPanel panel = new GridPanel();
+ txtProjectAccountNumber = new XBayaTextField();
+ txtProjectAccountDescription = new XBayaTextField();
+
+ txtQueueType = new XBayaTextField();
+ txtMaxWallTime = new XBayaTextField();
+ txtMinMemory = new XBayaTextField();
+ txtMaxMemory = new XBayaTextField();
+ txtCpuCount = new XBayaTextField();
+ txtProcessorsPerNode = new XBayaTextField();
+ txtNodeCount = new XBayaTextField();
+ txtjobSubmitterCommand = new XBayaTextField();
+ txtinstalledParentPath = new XBayaTextField();
+
+
+ DefaultComboBoxModel cmbModelJobType = new DefaultComboBoxModel(getJobTypesAsStrings());
+ cmbJobType = new XBayaComboBox(cmbModelJobType);
+ cmbJobType.setEditable(false);
+ //FIXME:: Machines like trestles are mandating to have cpu and node types set. So better to have these enabled.
+// cmbJobType.getSwingComponent().addActionListener(new ActionListener(){
+// @Override
+// public void actionPerformed(ActionEvent arg0) {
+// boolean disabled=cmbJobType.getText().equalsIgnoreCase(JobTypeType.SERIAL.toString()) || cmbJobType.getText().equalsIgnoreCase(JobTypeType.SINGLE.toString());
+// txtCpuCount.setEnabled(!disabled);
+// txtProcessorsPerNode.setEnabled(!disabled);
+// lblCpuCount.getSwingComponent().setEnabled(!disabled);
+// lblProcessorPerNode.getSwingComponent().setEnabled(!disabled);
+// }
+// });
+
+ XBayaLabel lbljobType = new XBayaLabel("Job Type",cmbJobType);
+ XBayaLabel lblProjectAccountNumber = new XBayaLabel("Project Account Number *",txtProjectAccountNumber);
+ XBayaLabel lblProjectAccountDescription = new XBayaLabel("Project Account Description",txtProjectAccountDescription);
+ XBayaLabel lblQueueType = new XBayaLabel("Queue Type *",txtQueueType);
+ XBayaLabel lblMaxWallTime = new XBayaLabel("Max Wall Time",txtMaxWallTime);
+ lblCpuCount = new XBayaLabel("CPU Count",txtCpuCount);
+ lblProcessorPerNode = new XBayaLabel("Processor Per Node", txtProcessorsPerNode);
+ XBayaLabel lblMinMemory = new XBayaLabel("Min Memory",txtMinMemory);
+ XBayaLabel lblMaxMemory = new XBayaLabel("Max Memory",txtMaxMemory);
+ lbNodeCount = new XBayaLabel("Node Count", txtNodeCount);
+ XBayaLabel lbljobSubmitterCommand = new XBayaLabel("Job Submitter Command",txtjobSubmitterCommand);
+ XBayaLabel lblinstalledParentPath = new XBayaLabel("Installed Parent Path",txtinstalledParentPath);
+
+ panel.add(lbljobType);
+ panel.add(cmbJobType);
+ panel.add(lblProjectAccountNumber);
+ panel.add(txtProjectAccountNumber);
+ panel.add(lblProjectAccountDescription);
+ panel.add(txtProjectAccountDescription);
+ panel.add(lblQueueType);
+ panel.add(txtQueueType);
+ panel.add(lblMaxWallTime);
+ panel.add(txtMaxWallTime);
+ panel.add(lblCpuCount);
+ panel.add(txtCpuCount);
+ panel.add(lbNodeCount);
+ panel.add(txtNodeCount);
+ panel.add(lblProcessorPerNode);
+ panel.add(txtProcessorsPerNode);
+ panel.add(lblMinMemory);
+ panel.add(txtMinMemory);
+ panel.add(lblMaxMemory);
+ panel.add(txtMaxMemory);
+ panel.add(lbljobSubmitterCommand);
+ panel.add(txtjobSubmitterCommand);
+ panel.add(lblinstalledParentPath);
+ panel.add(txtinstalledParentPath);
+ panel.getSwingComponent().setBorder(BorderFactory.createEtchedBorder());
+ buttonPane.getSwingComponent().setBorder(BorderFactory.createEtchedBorder());
+
+ SwingUtil.layoutToGrid(panel.getSwingComponent(), 12, 2, SwingUtil.WEIGHT_NONE, 1);
+
+ buttonPane.add(okButton);
+ buttonPane.add(cancelButton);
+
+ JScrollPane thePane = new JScrollPane(panel.getSwingComponent());
+
+ getContentPane().add(thePane);
+ getContentPane().add(buttonPane.getSwingComponent());
+ SwingUtil.layoutToGrid(getContentPane(), 2, 1, 0, 0);
+ setResizable(true);
+ getRootPane().setDefaultButton(okButton);
+ }
+
+ private static List<JobTypeType.Enum> jobTypes;
+
+ private List<JobTypeType.Enum> getJobTypes() {
+ if (jobTypes==null){
+ jobTypes = new ArrayList<Enum>();
+ jobTypes.add(JobTypeType.SERIAL);
+ jobTypes.add(JobTypeType.OPEN_MP);
+ jobTypes.add(JobTypeType.MPI);
+// jobTypes.add(JobTypeType.SINGLE);
+ }
+ return jobTypes;
+ }
+
+ private String[] getJobTypesAsStrings() {
+ List<String> typeList=new ArrayList<String>();
+ for (Enum jtype : getJobTypes()) {
+ typeList.add(jtype.toString());
+ }
+ return typeList.toArray(new String[]{});
+ }
+
+ private Enum getJobTypeEnum(String jobTypeString){
+ for (Enum jtype : getJobTypes()) {
+ if (jtype.toString().equalsIgnoreCase(jobTypeString)){
+ return jtype;
+ }
+ }
+ return null;
+ }
+
+ public ApplicationDescription getApplicationDescription() {
+ return descriptor;
+ }
+
+ public HpcApplicationDeploymentType getHPCApplicationDescriptionType() {
+ return (HpcApplicationDeploymentType)descriptor.getType();
+ }
+
+ public void setShellApplicationDescription(ApplicationDescription shellApplicationDescription) {
+ this.descriptor = shellApplicationDescription;
+ }
+
+ private boolean isValueNotEmpty(String s){
+ return !s.trim().isEmpty();
+ }
+
+ private void showError(String message, String title){
+ JOptionPane.showMessageDialog(null, message, title, JOptionPane.ERROR_MESSAGE);
+ }
+ private boolean saveApplicationDescriptionAdvancedOptions() {
+ if (isValueNotEmpty(cmbJobType.getText())) {
+ getHPCApplicationDescriptionType().setJobType(
+ getJobTypeEnum(cmbJobType.getText()));
+ }
+ try {
+ if (isValueNotEmpty(txtMaxWallTime.getText())) {
+ getHPCApplicationDescriptionType().setMaxWallTime(
+ Integer.parseInt(txtMaxWallTime.getText()));
+ }
+ } catch (NumberFormatException e) {
+ showError("Max wall time must be a number", "Invalid value");
+ return false;
+ }
+ try {
+ if (isValueNotEmpty(txtCpuCount.getText())) {
+ getHPCApplicationDescriptionType().setCpuCount(
+ Integer.parseInt(txtCpuCount.getText()));
+ }
+ } catch (NumberFormatException e) {
+ showError("CPU count must be a number", "Invalid value");
+ return false;
+ }
+ try {
+ if (isValueNotEmpty(txtProcessorsPerNode.getText())) {
+ getHPCApplicationDescriptionType().setProcessorsPerNode(
+ Integer.parseInt(txtProcessorsPerNode.getText()));
+ }
+ } catch (NumberFormatException e) {
+ showError("Processors per node must be a number", "Invalid value");
+ return false;
+ }
+ try {
+ if (isValueNotEmpty(txtNodeCount.getText())) {
+ getHPCApplicationDescriptionType().setNodeCount(
+ Integer.parseInt(txtNodeCount.getText()));
+ }
+ } catch (NumberFormatException e) {
+ showError("Node count must be a number", "Invalid value");
+ return false;
+ }
+ try {
+ if (isValueNotEmpty(txtMinMemory.getText())) {
+ getHPCApplicationDescriptionType().setMinMemory(
+ Integer.parseInt(txtMinMemory.getText()));
+ }
+ } catch (NumberFormatException e) {
+ showError("Minimum memory must be a number", "Invalid value");
+ return false;
+ }
+ try {
+ if (isValueNotEmpty(txtMaxMemory.getText())) {
+ getHPCApplicationDescriptionType().setMaxMemory(
+ Integer.parseInt(txtMaxMemory.getText()));
+ }
+ } catch (NumberFormatException e) {
+ showError("Maximum memory must be a number", "Invalid value");
+ return false;
+ }
+ try {
+ if (isValueNotEmpty(txtjobSubmitterCommand.getText())) {
+ getHPCApplicationDescriptionType().setJobSubmitterCommand(
+ txtjobSubmitterCommand.getText());
+ }else{
+ getHPCApplicationDescriptionType().setJobSubmitterCommand(null);
+ }
+ } catch (NumberFormatException e) {
+ showError("Maximum memory must be a number", "Invalid value");
+ return false;
+ }
+ try {
+ if (isValueNotEmpty(txtinstalledParentPath.getText())) {
+ getHPCApplicationDescriptionType().setInstalledParentPath(
+ txtinstalledParentPath.getText());
+ }else{
+ getHPCApplicationDescriptionType().setInstalledParentPath(null);
+ }
+ } catch (NumberFormatException e) {
+ showError("Maximum memory must be a number", "Invalid value");
+ return false;
+ }
+ ProjectAccountType projectAccount = getProjectAccountType();
+ if (isValueNotEmpty(txtProjectAccountNumber.getText())) {
+ projectAccount.setProjectAccountNumber(txtProjectAccountNumber
+ .getText());
+ }
+ if (isValueNotEmpty(txtProjectAccountDescription.getText())) {
+ projectAccount
+ .setProjectAccountDescription(txtProjectAccountDescription
+ .getText());
+ }
+ if (isValueNotEmpty(txtQueueType.getText())) {
+ QueueType queueName = getQueueName();
+ queueName.setQueueName(txtQueueType.getText());
+ }
+ return true;
+ }
+
+ private QueueType getQueueName() {
+ if (getHPCApplicationDescriptionType().getQueue()==null){
+ getHPCApplicationDescriptionType().addNewQueue();
+ }
+ return getHPCApplicationDescriptionType().getQueue();
+ }
+
+ private ProjectAccountType getProjectAccountType() {
+ if (getHPCApplicationDescriptionType().getProjectAccount()==null){
+ getHPCApplicationDescriptionType().addNewProjectAccount();
+ }
+ return getHPCApplicationDescriptionType().getProjectAccount();
+ }
+
+ private String getPropValue(int num){
+ if (num==0){
+ return "";
+ }else{
+ return String.valueOf(num);
+ }
+ }
+
+ private void loadApplicationDescriptionAdvancedOptions() {
+ HpcApplicationDeploymentType hpcAppType = getHPCApplicationDescriptionType();
+ if (hpcAppType.getJobType()!=null) {
+ cmbJobType.setSelectedItem(hpcAppType
+ .getJobType().toString());
+ }
+ txtMaxWallTime.setText(getPropValue(hpcAppType.getMaxWallTime()));
+ txtCpuCount.setText(getPropValue(hpcAppType.getCpuCount()));
+ txtNodeCount.setText(getPropValue(hpcAppType.getNodeCount()));
+ txtProcessorsPerNode.setText(getPropValue(hpcAppType.getProcessorsPerNode()));
+ txtMinMemory.setText(getPropValue(hpcAppType.getMinMemory()));
+ txtMaxMemory.setText(getPropValue(hpcAppType.getMaxMemory()));
+ txtNodeCount.setText(getPropValue(hpcAppType.getNodeCount()));
+ txtjobSubmitterCommand.setText(hpcAppType.getJobSubmitterCommand()==null?"":hpcAppType.getJobSubmitterCommand());
+ txtinstalledParentPath.setText(hpcAppType.getInstalledParentPath()==null?"":hpcAppType.getInstalledParentPath());
+ ProjectAccountType projectAccount = getProjectAccountType();
+
+ txtProjectAccountNumber.setText(projectAccount.getProjectAccountNumber()==null? "":projectAccount.getProjectAccountNumber());
+ txtProjectAccountDescription.setText(projectAccount.getProjectAccountDescription()==null? "":projectAccount.getProjectAccountDescription());
+
+ QueueType queueName = getQueueName();
+ txtQueueType.setText(queueName.getQueueName()==null?"":queueName.getQueueName());
+ }
+
+ public AiravataAPI getRegistry() {
+ return registry;
+ }
+
+ public void setRegistry(AiravataAPI registry) {
+ this.registry = registry;
+ }
+
+ // private void updateDialogStatus(){
+ // String message=null;
+ // try {
+ // validateDialog();
+ // } catch (Exception e) {
+ // message=e.getLocalizedMessage();
+ // }
+ // okButton.setEnabled(message==null);
+ // setError(message);
+ // }
+ //
+ // private void validateDialog() throws Exception{
+ // if (getApplicationName()==null || getApplicationName().trim().equals("")){
+ // throw new Exception("Name of the application cannot be empty!!!");
+ // }
+ //
+ // List<ApplicationDeploymentDescription> deploymentDescriptions=null;
+ // try {
+ // deploymentDescriptions = getJCRComponentRegistry().getRegistry().searchApplicationDescription(getServiceName(),
+ // getHostName(), Pattern.quote(getApplicationName()));
+ // } catch (PathNotFoundException e) {
+ // //what we want
+ // } catch (Exception e){
+ // throw e;
+ // }
+ // if (deploymentDescriptions.size()>0){
+ // throw new Exception("Application descriptor with the given name already exists!!!");
+ // }
+ //
+ // if (getExecutablePath()==null || getExecutablePath().trim().equals("")){
+ // throw new Exception("Executable path cannot be empty!!!");
+ // }
+ //
+ // if (getTempDir()==null || getTempDir().trim().equals("")){
+ // throw new Exception("Temporary directory location cannot be empty!!!");
+ // }
+ //
+ // if (getServiceName()==null || getServiceName().trim().equals("")){
+ // throw new Exception("Please select/create service to bind to this deployment description");
+ // }
+ //
+ // if (getHostName()==null || getHostName().trim().equals("")){
+ // throw new Exception("Please select/create host to bind to this deployment description");
+ // }
+ //
+ // }
+
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/dialogs/descriptors/DeploymentDescriptionDialog.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/dialogs/descriptors/DeploymentDescriptionDialog.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/dialogs/descriptors/DeploymentDescriptionDialog.java
new file mode 100644
index 0000000..8b52d01
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/dialogs/descriptors/DeploymentDescriptionDialog.java
@@ -0,0 +1,816 @@
+/*
+ *
+ * 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.airavata.xbaya.ui.dialogs.descriptors;
+
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyAdapter;
+import java.awt.event.KeyEvent;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.swing.*;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+import javax.swing.event.TableModelEvent;
+import javax.swing.event.TableModelListener;
+import javax.swing.table.DefaultTableModel;
+import javax.swing.table.TableColumn;
+import javax.xml.namespace.QName;
+
+import org.apache.airavata.client.api.AiravataAPI;
+import org.apache.airavata.client.api.exception.AiravataAPIInvocationException;
+import org.apache.airavata.commons.gfac.type.ApplicationDescription;
+import org.apache.airavata.common.utils.SwingUtil;
+import org.apache.airavata.commons.gfac.type.ServiceDescription;
+//import org.apache.airavata.registry.api.AiravataRegistry2;
+import org.apache.airavata.schemas.gfac.ApplicationDeploymentDescriptionType;
+import org.apache.airavata.schemas.gfac.DataType;
+import org.apache.airavata.schemas.gfac.HostDescriptionType;
+import org.apache.airavata.schemas.gfac.InputParameterType;
+import org.apache.airavata.schemas.gfac.OutputParameterType;
+import org.apache.airavata.schemas.gfac.ParameterType;
+import org.apache.airavata.schemas.gfac.ServiceDescriptionType;
+import org.apache.airavata.xbaya.ui.dialogs.descriptors.HostDeploymentDialog.HostDeployment;
+import org.apache.airavata.xbaya.ui.widgets.GridPanel;
+import org.apache.airavata.xbaya.ui.widgets.XBayaLabel;
+import org.apache.airavata.xbaya.ui.widgets.XBayaTextField;
+import org.apache.xmlbeans.XmlCursor;
+
+public class DeploymentDescriptionDialog extends JDialog {
+
+ private static final long serialVersionUID = 2705760838264284423L;
+ private final GridPanel contentPanel = new GridPanel();
+ private XBayaLabel lblServiceName;
+ private XBayaTextField txtApplicationServiceName;
+ private JTable tblParameters;
+ private boolean serviceCreated = false;
+ private JLabel lblError;
+ private ServiceDescription serviceDescription;
+ private ServiceDescription orginalServiceDescription;
+ private JButton okButton;
+ private JButton btnDeleteParameter;
+ private DefaultTableModel defaultTableModel;
+ private AiravataAPI registry;
+ private boolean newDescription;
+ private boolean ignoreTableChanges=false;
+ private JCheckBox chkForceFileStagingToWorkDir;
+ private String suggestedNamePrefix;
+ private String titlePrefix;
+ private Map<String,HostDeployment> deployments;
+ private JTable tblHosts;
+ private DefaultTableModel tblModelHosts;
+
+ /**
+ * Launch the application.
+ */
+ public static void main(String[] args) {
+ try {
+ DeploymentDescriptionDialog dialog = new DeploymentDescriptionDialog(null,true,null,null);
+ dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
+ dialog.setVisible(true);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ public DeploymentDescriptionDialog(JFrame parent, AiravataAPI registry) {
+ this(registry, true, null, parent);
+ }
+
+// public DeploymentDescriptionDialog(Frame parent) {
+// super(parent);
+// }
+
+ /**
+ * Create the dialog.
+ */
+ public DeploymentDescriptionDialog(AiravataAPI registry, boolean newDescription, ServiceDescription serviceDescription, JFrame parent) {
+ super(parent);
+ setNewDescription(newDescription);
+ this.setOrginalServiceDescription(serviceDescription);
+ setSuggestedNamePrefix(suggestedNamePrefix);
+
+ if (isNewDescription()) {
+ setTitlePrefix("Register Application");
+ }else{
+ setTitlePrefix("Update Application: "+getOrginalServiceDescription().getType().getName());
+ }
+ addWindowListener(new WindowAdapter() {
+ @Override
+ public void windowOpened(WindowEvent arg0) {
+// if (isNewDescription()) {
+// String baseName = "Application";
+// int i;
+// String defaultName;
+// i = 1;
+// defaultName = baseName+i;
+// try {
+// while (getRegistry().getServiceDescription(defaultName) != null) {
+// defaultName = baseName + (++i);
+// }
+// } catch (Exception e) {
+// }
+// txtApplicationServiceName.setText(defaultName);
+// setServiceName(txtApplicationServiceName.getText());
+// }
+ }
+ });
+ setRegistry(registry);
+ initGUI();
+
+ }
+
+ public void open() {
+// pack();
+// setAlwaysOnTop(true);
+ setLocationRelativeTo(getOwner());
+ setModal(true);
+ setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
+ setVisible(true);
+ }
+
+ protected DeploymentDescriptionDialog getDialog() {
+ return this;
+ }
+
+ private void initGUI() {
+ setTitle(getTitlePrefix());
+ setBounds(100, 100, 463, 459);
+ setModal(true);
+ setLocationRelativeTo(null);
+ BorderLayout borderLayout = new BorderLayout();
+ borderLayout.setVgap(5);
+ borderLayout.setHgap(5);
+ getContentPane().setLayout(borderLayout);
+
+ txtApplicationServiceName = new XBayaTextField();
+ txtApplicationServiceName.getSwingComponent().addKeyListener(new KeyAdapter() {
+ @Override
+ public void keyReleased(KeyEvent e) {
+ setServiceName(txtApplicationServiceName.getText());
+ }
+ });
+ txtApplicationServiceName.setColumns(10);
+ lblServiceName = new XBayaLabel("Application name",txtApplicationServiceName);
+ JLabel lblInputParameters = new JLabel("Application Parameters");
+ lblInputParameters.setFont(new Font("Tahoma", Font.BOLD, 11));
+
+ JScrollPane scrollPane = new JScrollPane();
+ tblParameters=createParameterTableControls();
+ scrollPane.setViewportView(tblParameters);
+
+ chkForceFileStagingToWorkDir=new JCheckBox("Advanced: Force input file staging to working directory");
+ chkForceFileStagingToWorkDir.addActionListener(new ActionListener(){
+
+ public void actionPerformed(ActionEvent arg0) {
+ setForceFileStagingToWorkDir(chkForceFileStagingToWorkDir.isSelected());
+ }
+
+ });
+ GridPanel buttonPane = new GridPanel();
+ {
+ GridBagLayout gbl_buttonPane = new GridBagLayout();
+ gbl_buttonPane.columnWidths = new int[] { 307, 136, 0 };
+ gbl_buttonPane.rowHeights = new int[] { 33, 0 };
+ gbl_buttonPane.columnWeights = new double[] { 0.0, 0.0, Double.MIN_VALUE };
+ gbl_buttonPane.rowWeights = new double[] { 0.0, Double.MIN_VALUE };
+
+
+ lblError = new JLabel("");
+ lblError.setForeground(Color.RED);
+ GridBagConstraints gbc_lblError = new GridBagConstraints();
+ gbc_lblError.insets = new Insets(0, 0, 0, 5);
+ gbc_lblError.gridx = 0;
+ gbc_lblError.gridy = 0;
+ buttonPane.add(lblError);
+ JPanel panel = new JPanel();
+ GridBagConstraints gbc_panel = new GridBagConstraints();
+ gbc_panel.anchor = GridBagConstraints.NORTHWEST;
+ gbc_panel.gridx = 1;
+ gbc_panel.gridy = 0;
+ buttonPane.add(panel);
+ {
+ JButton resetButton = new JButton("Reset");
+ resetButton.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ loadData();
+ }
+ });
+ panel.add(resetButton);
+ }
+ {
+ okButton = new JButton("Register");
+ if (!isNewDescription()){
+ okButton.setText("Update");
+ }
+ okButton.setEnabled(false);
+ okButton.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ try {
+ if ("Register".equals(okButton.getText())) {
+ saveServiceDescription(false);
+ } else {
+ saveServiceDescription(true);
+ }
+ close();
+ } catch (AiravataAPIInvocationException e1) {
+ e1.printStackTrace();
+ }
+ }
+ });
+ panel.add(okButton);
+ okButton.setActionCommand("OK");
+ getRootPane().setDefaultButton(okButton);
+ }
+ {
+ JButton cancelButton = new JButton("Cancel");
+ cancelButton.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ setServiceCreated(false);
+ close();
+ }
+ });
+ panel.add(cancelButton);
+ cancelButton.setActionCommand("Cancel");
+ }
+ }
+ contentPanel.add(lblServiceName);
+ contentPanel.add(txtApplicationServiceName);
+ GridPanel pnlTables=new GridPanel();
+
+ GridPanel parameterPanel=new GridPanel();
+ parameterPanel.add(lblInputParameters);
+ parameterPanel.add(scrollPane);
+ parameterPanel.add(btnDeleteParameter);
+ parameterPanel.add(chkForceFileStagingToWorkDir);
+
+ SwingUtil.layoutToGrid(contentPanel.getSwingComponent(), 1, 2, SwingUtil.WEIGHT_NONE, 1);
+ SwingUtil.layoutToGrid(parameterPanel.getSwingComponent(), 4, 1, 1, 0);
+
+ pnlTables.add(parameterPanel);
+ pnlTables.add(createHostDeploymentTable());
+
+ pnlTables.layout(2, 1, SwingUtil.WEIGHT_EQUALLY, 0);
+
+ GridPanel infoPanel = new GridPanel();
+ infoPanel.add(contentPanel);
+ infoPanel.add(pnlTables);
+ infoPanel.getSwingComponent().setBorder(BorderFactory.createEtchedBorder());
+ infoPanel.layout(2, 1, 1, 0);
+ getContentPane().add(infoPanel.getSwingComponent());
+ getContentPane().add(buttonPane.getSwingComponent());
+ buttonPane.getSwingComponent().setBorder(BorderFactory.createEtchedBorder());
+ SwingUtil.layoutToGrid(getContentPane(), 2, 1, 0, 0);
+ setResizable(true);
+ getRootPane().setDefaultButton(okButton);
+ if (!isNewDescription()){
+ loadData();
+ }
+ }
+
+ private GridPanel createHostDeploymentTable() {
+ tblHosts = new JTable();
+ tblHosts.setTableHeader(null);
+ tblHosts.setFillsViewportHeight(true);
+ tblModelHosts = new DefaultTableModel(new Object[][] {}, new String[] { "Host"}){
+ private static final long serialVersionUID = -5973463590447809117L;
+ @Override
+ public boolean isCellEditable(int row, int column) {
+ return false;
+ }
+ };
+ tblHosts.setModel(tblModelHosts);
+
+ ListSelectionModel selectionModel = tblHosts.getSelectionModel();
+ selectionModel.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
+
+ JButton btnNewDeployment = new JButton("New deployment");
+ btnNewDeployment.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ HostDeploymentDialog hostDeploymentDialog = new HostDeploymentDialog(getRegistry(),true,null,null,Arrays.asList(getDeployments().keySet().toArray(new String[]{})));
+ try {
+ HostDeployment deployDesc = hostDeploymentDialog.execute();
+ if (deployDesc!=null){
+ ApplicationDeploymentDescriptionType appType = deployDesc.getApplicationDescription().getType();
+ if (appType.getApplicationName()==null){
+ appType.addNewApplicationName();
+ }
+ HostDescriptionType hostType = deployDesc.getHostDescription().getType();
+ appType.getApplicationName().setStringValue(hostType.getHostName()+"_application");
+ getDeployments().put(hostType.getHostName(), deployDesc);
+ updateDeploymentTable();
+ }
+ } catch (AiravataAPIInvocationException e1) {
+ setError(e1.getLocalizedMessage());
+ e1.printStackTrace();
+ }
+ }
+ });
+
+ final JButton btnEditDeployment = new JButton("Edit deployment");
+ btnEditDeployment.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ editSelectedDeployment();
+ }
+ });
+
+ final JButton btnDeleteDeployment = new JButton("Delete deployment");
+ btnDeleteDeployment.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ String hostName = tblModelHosts.getValueAt(tblHosts.getSelectedRow(),0).toString();
+ int result = JOptionPane.showConfirmDialog(null, "Are you sure you want to remove the host deployment '"+hostName+"'?", "Remove Host Deployment",
+ JOptionPane.YES_NO_OPTION);
+ if (result==JOptionPane.YES_OPTION){
+ tblModelHosts.removeRow(tblHosts.getSelectedRow());
+ getDeployments().remove(hostName);
+ }
+ }
+ });
+
+ selectionModel.addListSelectionListener(new ListSelectionListener() {
+ public void valueChanged(ListSelectionEvent e) {
+ btnEditDeployment.setEnabled(tblHosts.getSelectedRows().length > 0);
+ btnDeleteDeployment.setEnabled(tblHosts.getSelectedRows().length > 0);
+ }
+
+ });
+ tblHosts.addMouseListener(new MouseAdapter(){
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ if (e.getClickCount()==2 && tblHosts.getSelectedRows().length>0){
+ editSelectedDeployment();
+ }
+ }
+ });
+ JScrollPane scrollPane = new JScrollPane();
+ scrollPane.setViewportView(tblHosts);
+
+ GridPanel pnlTableButtons = new GridPanel();
+ pnlTableButtons.add(btnNewDeployment);
+ pnlTableButtons.add(btnEditDeployment);
+ pnlTableButtons.add(btnDeleteDeployment);
+ pnlTableButtons.layout(1, 3,SwingUtil.WEIGHT_NONE,SwingUtil.WEIGHT_EQUALLY);
+
+ GridPanel pnlMainPanel = new GridPanel();
+ pnlMainPanel.add(scrollPane);
+
+ pnlMainPanel.add(pnlTableButtons);
+ pnlMainPanel.layout(2, 1, 0, 0);
+ btnEditDeployment.setEnabled(false);
+ btnDeleteDeployment.setEnabled(false);
+ return pnlMainPanel;
+ }
+
+ private void updateDeploymentTable(){
+ List<String> hosts=new ArrayList<String>();
+ for (int i = 0; i < tblModelHosts.getRowCount(); i++) {
+ hosts.add((String) tblModelHosts.getValueAt(i, 0));
+ }
+ for (String hostName : getDeployments().keySet()) {
+ if (!hosts.contains(hostName)){
+ tblModelHosts.addRow(new Object[] { hostName });
+ }
+ }
+ }
+
+ private JTable createParameterTableControls() {
+ final JTable tblParameters = new JTable();
+ tblParameters.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
+ tblParameters.setFillsViewportHeight(true);
+ defaultTableModel = new DefaultTableModel(new Object[][] { { null, null, null, null }, }, new String[] { "I/O",
+ "Parameter Name", "Type", "Description" });
+ tblParameters.setModel(defaultTableModel);
+ defaultTableModel.addTableModelListener(new TableModelListener() {
+
+ public void tableChanged(TableModelEvent arg0) {
+ if (!ignoreTableChanges) {
+ int selectedRow = tblParameters.getSelectedRow();
+ if (selectedRow != -1
+ && defaultTableModel.getRowCount() > 0) {
+ Object parameterIOType = defaultTableModel.getValueAt(
+ selectedRow, 0);
+ Object parameterDataType = defaultTableModel
+ .getValueAt(selectedRow, 2);
+ if (parameterIOType == null
+ || parameterIOType.equals("")) {
+ defaultTableModel.setValueAt(getIOStringList()[0],
+ selectedRow, 0);
+ }
+ if (parameterDataType == null
+ || parameterDataType.equals("")) {
+ defaultTableModel.setValueAt(getDataTypes()[0],
+ selectedRow, 2);
+ }
+ }
+ addNewRowIfLastIsNotEmpty();
+ }
+ }
+
+ });
+ TableColumn ioColumn = tblParameters.getColumnModel().getColumn(0);
+ String[] ioStringList = getIOStringList();
+ ioColumn.setCellEditor(new StringArrayComboBoxEditor(ioStringList));
+
+ TableColumn datatypeColumn = tblParameters.getColumnModel().getColumn(2);
+ String[] dataTypeStringList = getDataTypes();
+ datatypeColumn.setCellEditor(new StringArrayComboBoxEditor(dataTypeStringList));
+
+ TableColumn parameterNameCol = tblParameters.getColumnModel().getColumn(1);
+ parameterNameCol.setPreferredWidth(190);
+ ListSelectionModel selectionModel = tblParameters.getSelectionModel();
+ selectionModel.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
+
+ selectionModel.addListSelectionListener(new ListSelectionListener() {
+ public void valueChanged(ListSelectionEvent e) {
+ btnDeleteParameter.setEnabled(tblParameters.getSelectedRows().length > 0);
+ }
+
+ });
+
+ btnDeleteParameter = new JButton("Delete parameter");
+ btnDeleteParameter.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent arg0) {
+ deleteSelectedRows();
+ }
+ });
+ btnDeleteParameter.setEnabled(false);
+ return tblParameters;
+ }
+
+ private void loadData() {
+ ServiceDescriptionType descType = getOrginalServiceDescription().getType();
+ txtApplicationServiceName.setText(descType.getName());
+ setServiceName(txtApplicationServiceName.getText());
+
+ txtApplicationServiceName.setEditable(isNewDescription());
+ ignoreTableChanges=true;
+ updateIODataTable(descType);
+ getDeployments().clear();
+ try {
+ Map<String, ApplicationDescription> descs = getRegistry().getApplicationManager().getApplicationDescriptors(descType.getName());
+ for (String hostDescName : descs.keySet()) {
+ getDeployments().put(hostDescName, new HostDeployment(getRegistry().getApplicationManager().getHostDescription(hostDescName), descs.get(hostDescName)));
+ }
+
+ updateDeploymentTable();
+ Boolean selected = false;
+ if (descType.getPortType()!=null && descType.getPortType().getMethod()!=null) {
+ XmlCursor cursor = descType.getPortType().getMethod().newCursor();
+ String value = cursor.getAttributeText(new QName("forceFileStagingToWorkDir"));
+ cursor.dispose();
+ selected = false;
+ if (value != null) {
+ selected = Boolean.parseBoolean(value);
+ }
+ }
+ chkForceFileStagingToWorkDir.setSelected(selected);
+ setForceFileStagingToWorkDir(selected);
+ ignoreTableChanges=false;
+ } catch (AiravataAPIInvocationException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+
+ private void updateIODataTable(ServiceDescriptionType descType) {
+ while(defaultTableModel.getRowCount()>0){
+ defaultTableModel.removeRow(0);
+ }
+ InputParameterType[] iparameters = descType.getInputParametersArray();
+ for (InputParameterType parameter : iparameters) {
+ defaultTableModel.addRow(new Object[] { getIOStringList()[0], parameter.getParameterName(),parameter.getParameterType().getName(),parameter.getParameterDescription()});
+ }
+ OutputParameterType[] oparameters = descType.getOutputParametersArray();
+ for (OutputParameterType parameter : oparameters) {
+ defaultTableModel.addRow(new Object[] { getIOStringList()[1], parameter.getParameterName(), parameter.getParameterType().getName(),parameter.getParameterDescription()});
+ }
+ addNewRowIfLastIsNotEmpty();
+ }
+
+ private String[] getIOStringList() {
+ String[] ioStringList = new String[] { "Input", "Output" };
+ return ioStringList;
+ }
+
+ private String[] getDataTypes() {
+ String[] type = new String[DataType.Enum.table.lastInt()];
+ for (int i = 1; i <= DataType.Enum.table.lastInt(); i++) {
+ type[i - 1] = DataType.Enum.forInt(i).toString();
+ }
+ return type;
+ }
+
+ public boolean isServiceCreated() {
+ return serviceCreated;
+ }
+
+ public void setServiceCreated(boolean serviceCreated) {
+ this.serviceCreated = serviceCreated;
+ }
+
+ public ServiceDescription getServiceDescription() {
+ if (serviceDescription == null) {
+ serviceDescription = new ServiceDescription();
+ }
+ return serviceDescription;
+ }
+
+ public ServiceDescriptionType getServiceDescriptionType() {
+ return getServiceDescription().getType();
+ }
+
+ public String getServiceName() {
+ return getServiceDescription().getType().getName();
+ }
+
+ public void setServiceName(String serviceName) {
+ getServiceDescription().getType().setName(serviceName);
+ updateDialogStatus();
+ }
+
+ private void setupMethod(){
+ if (getServiceDescriptionType().getPortType()==null){
+ getServiceDescriptionType().setPortType(getServiceDescriptionType().addNewPortType());
+ }
+ if (getServiceDescriptionType().getPortType().getMethod()==null){
+ getServiceDescriptionType().getPortType().setMethod(getServiceDescriptionType().getPortType().addNewMethod());
+ }
+ }
+ public void setForceFileStagingToWorkDir(Boolean force){
+ setupMethod();
+ XmlCursor cursor = getServiceDescriptionType().getPortType().getMethod().newCursor();
+ cursor.toNextToken();
+ if (!cursor.setAttributeText(new QName("http://airavata.apache.org/schemas/gfac/2012/12","forceFileStagingToWorkDir"),force.toString())){
+ cursor.insertAttributeWithValue("forceFileStagingToWorkDir",force.toString());
+ }
+ cursor.dispose();
+ }
+
+ public Boolean getForceFileStagingToWorkDir(){
+ setupMethod();
+ XmlCursor cursor = getServiceDescriptionType().getPortType().getMethod().newCursor();
+ cursor.toNextToken();
+ String value = cursor.getAttributeText(new QName("forceFileStagingToWorkDir"));
+ cursor.dispose();
+ if (value==null){
+ return false;
+ }else{
+ return Boolean.parseBoolean(value);
+ }
+
+ }
+
+ private void updateDialogStatus() {
+ String message = null;
+ try {
+ validateDialog();
+ } catch (Exception e) {
+ message = e.getLocalizedMessage();
+ }
+ okButton.setEnabled(message == null);
+ setError(message);
+ }
+
+ private void validateDialog() throws Exception {
+ if (getServiceName() == null || getServiceName().trim().equals("")) {
+ throw new Exception("Name of the application cannot be empty!!!");
+ }
+ ServiceDescription serviceDescription2 = null;
+ serviceDescription2 = getRegistry().getApplicationManager().getServiceDescription(getServiceName());
+ if (isNewDescription() && serviceDescription2 != null) {
+ throw new Exception("Service descriptor with the given name already exists!!!");
+ }
+ }
+
+ public void saveServiceDescription(boolean update) throws AiravataAPIInvocationException {
+ List<InputParameterType> inputParameters = new ArrayList<InputParameterType>();
+ List<OutputParameterType> outputParameters = new ArrayList<OutputParameterType>();
+
+ for (int i = 0; i < defaultTableModel.getRowCount(); i++) {
+ String parameterName = (String) defaultTableModel.getValueAt(i, 1);
+ String paramType = (String) defaultTableModel.getValueAt(i, 2);
+ String parameterDescription = (String) defaultTableModel.getValueAt(i, 3);
+ if (parameterName != null && !parameterName.trim().equals("")) {
+ // todo how to handle Enum
+ if (getIOStringList()[0].equals(defaultTableModel.getValueAt(i, 0))) {
+ InputParameterType parameter = InputParameterType.Factory.newInstance();
+ parameter.setParameterName(parameterName);
+ parameter.setParameterDescription(parameterDescription);
+ ParameterType parameterType = parameter.addNewParameterType();
+ parameterType.setType(DataType.Enum.forString(paramType));
+ parameterType.setName(paramType);
+ inputParameters.add(parameter);
+
+ } else {
+ OutputParameterType parameter = OutputParameterType.Factory.newInstance();
+ parameter.setParameterName(parameterName);
+ parameter.setParameterDescription(parameterDescription);
+ ParameterType parameterType = parameter.addNewParameterType();
+ parameterType.setType(DataType.Enum.forString(paramType));
+ parameterType.setName(paramType);
+ outputParameters.add(parameter);
+ }
+ }
+ }
+ getServiceDescriptionType().setInputParametersArray(inputParameters.toArray(new InputParameterType[] {}));
+ getServiceDescriptionType().setOutputParametersArray(outputParameters.toArray(new OutputParameterType[] {}));
+ if (update) {
+ getRegistry().getApplicationManager().updateServiceDescriptor(getServiceDescription());
+ } else {
+ getRegistry().getApplicationManager().saveServiceDescription(getServiceDescription());
+ }
+ if (!isNewDescription()) {
+ Map<String, ApplicationDescription> descs = getRegistry().getApplicationManager().getApplicationDescriptors(getServiceName());
+ for (String hostDescName : descs.keySet()) {
+ getRegistry().getApplicationManager().deleteApplicationDescription(getServiceName(), hostDescName, descs.get(hostDescName).getType().getApplicationName().getStringValue());
+ }
+ }
+ for (String hostName : getDeployments().keySet()) {
+ getRegistry().getApplicationManager().saveApplicationDescription(getServiceName(), hostName, getDeployments().get(hostName).getApplicationDescription());
+ }
+ setServiceCreated(true);
+ JOptionPane.showMessageDialog(this, "Application '" + getServiceName() + "' is registered Successfully !");
+ }
+
+ public void saveServiceDescription() throws AiravataAPIInvocationException {
+ List<InputParameterType> inputParameters = new ArrayList<InputParameterType>();
+ List<OutputParameterType> outputParameters = new ArrayList<OutputParameterType>();
+
+ for (int i = 0; i < defaultTableModel.getRowCount(); i++) {
+ String parameterName = (String) defaultTableModel.getValueAt(i, 1);
+ String paramType = (String) defaultTableModel.getValueAt(i, 2);
+ String parameterDescription = (String) defaultTableModel.getValueAt(i, 3);
+ if (parameterName != null && !parameterName.trim().equals("")) {
+ // todo how to handle Enum
+ if (getIOStringList()[0].equals(defaultTableModel.getValueAt(i, 0))) {
+ InputParameterType parameter = InputParameterType.Factory.newInstance();
+ parameter.setParameterName(parameterName);
+ parameter.setParameterDescription(parameterDescription);
+ ParameterType parameterType = parameter.addNewParameterType();
+ parameterType.setType(DataType.Enum.forString(paramType));
+ parameterType.setName(paramType);
+ inputParameters.add(parameter);
+
+ } else {
+ OutputParameterType parameter = OutputParameterType.Factory.newInstance();
+ parameter.setParameterName(parameterName);
+ parameter.setParameterDescription(parameterDescription);
+ ParameterType parameterType = parameter.addNewParameterType();
+ parameterType.setType(DataType.Enum.forString(paramType));
+ parameterType.setName(paramType);
+ outputParameters.add(parameter);
+ }
+ }
+ }
+ getServiceDescriptionType().setInputParametersArray(inputParameters.toArray(new InputParameterType[] {}));
+ getServiceDescriptionType().setOutputParametersArray(outputParameters.toArray(new OutputParameterType[] {}));
+ getRegistry().getApplicationManager().saveServiceDescription(getServiceDescription());
+ if (!isNewDescription()) {
+ Map<String, ApplicationDescription> descs = getRegistry().getApplicationManager().getApplicationDescriptors(getServiceName());
+ for (String hostDescName : descs.keySet()) {
+ getRegistry().getApplicationManager().deleteApplicationDescription(getServiceName(), hostDescName, descs.get(hostDescName).getType().getApplicationName().getStringValue());
+ }
+ }
+ for (String hostName : getDeployments().keySet()) {
+ getRegistry().getApplicationManager().saveApplicationDescription(getServiceName(), hostName, getDeployments().get(hostName).getApplicationDescription());
+ }
+ setServiceCreated(true);
+ JOptionPane.showMessageDialog(this, "Application '" + getServiceName() + "' is registered Successfully !");
+ }
+ public void close() {
+ getDialog().setVisible(false);
+ }
+
+ private void setError(String errorMessage) {
+ if (errorMessage == null || errorMessage.trim().equals("")) {
+ lblError.setText("");
+ } else {
+ lblError.setText(errorMessage.trim());
+ }
+ }
+
+ private void deleteSelectedRows() {
+ // TODO confirm deletion of selected rows
+ int selectedRow = tblParameters.getSelectedRow();
+ while (selectedRow >= 0 && tblParameters.getRowCount()>0) {
+ defaultTableModel.removeRow(selectedRow);
+ selectedRow = tblParameters.getSelectedRow();
+ }
+ addNewRowIfLastIsNotEmpty();
+ }
+
+ private void addNewRowIfLastIsNotEmpty() {
+
+ if (defaultTableModel.getRowCount()>0) {
+ Object parameterName = defaultTableModel.getValueAt(
+ defaultTableModel.getRowCount() - 1, 1);
+ if (parameterName != null && !parameterName.equals("")) {
+ defaultTableModel
+ .addRow(new Object[] { null, null, null, null });
+ }
+ }else{
+ if (tblParameters.getSelectedRow()==-1){
+ defaultTableModel.addRow(new Object[] { null, null, null, null });
+ }
+
+ }
+ }
+
+ public AiravataAPI getRegistry() {
+ return registry;
+ }
+
+ public void setRegistry(AiravataAPI registry) {
+ this.registry = registry;
+ }
+
+ public boolean isNewDescription() {
+ return newDescription;
+ }
+
+ public void setNewDescription(boolean newDescription) {
+ this.newDescription = newDescription;
+ }
+
+ public ServiceDescription getOrginalServiceDescription() {
+ return orginalServiceDescription;
+ }
+
+ public void setOrginalServiceDescription(ServiceDescription orginalServiceDescription) {
+ this.orginalServiceDescription = orginalServiceDescription;
+ }
+
+ public String getSuggestedNamePrefix() {
+ return suggestedNamePrefix;
+ }
+
+ public void setSuggestedNamePrefix(String suggestedNamePrefix) {
+ this.suggestedNamePrefix = suggestedNamePrefix;
+ }
+
+ public String getTitlePrefix() {
+ return titlePrefix;
+ }
+
+ public void setTitlePrefix(String titlePrefix) {
+ this.titlePrefix = titlePrefix;
+ }
+
+ public Map<String,HostDeployment> getDeployments() {
+ if (deployments==null){
+ deployments=new HashMap<String, HostDeployment>();
+ }
+ return deployments;
+ }
+
+ private void editSelectedDeployment() {
+ String hostName = tblModelHosts.getValueAt(tblHosts.getSelectedRow(),0).toString();
+ HostDeploymentDialog hostDeploymentDialog = new HostDeploymentDialog(getRegistry(),false,getDeployments().get(hostName).getApplicationDescription(),hostName,Arrays.asList(getDeployments().keySet().toArray(new String[]{})));
+ try {
+ HostDeployment deployDesc = hostDeploymentDialog.execute();
+ if (deployDesc!=null){
+ getDeployments().put(deployDesc.getHostDescription().getType().getHostName(), deployDesc);
+ updateDeploymentTable();
+ }
+ } catch (AiravataAPIInvocationException e1) {
+ setError(e1.getLocalizedMessage());
+ e1.printStackTrace();
+ }
+ }
+
+ private class StringArrayComboBoxEditor extends DefaultCellEditor {
+ private static final long serialVersionUID = -304464739219209395L;
+
+ public StringArrayComboBoxEditor(Object[] items) {
+ super(new JComboBox(items));
+ }
+ }
+}