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:06 UTC

[64/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/DescriptorEditorDialog.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/dialogs/descriptors/DescriptorEditorDialog.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/dialogs/descriptors/DescriptorEditorDialog.java
new file mode 100644
index 0000000..340ab65
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/dialogs/descriptors/DescriptorEditorDialog.java
@@ -0,0 +1,424 @@
+/*
+ *
+ * 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.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+import javax.swing.AbstractButton;
+import javax.swing.BorderFactory;
+import javax.swing.DefaultListCellRenderer;
+import javax.swing.DefaultListModel;
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JOptionPane;
+import javax.swing.JScrollPane;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+
+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.xbaya.XBayaEngine;
+import org.apache.airavata.xbaya.component.registry.ComponentRegistryLoader;
+import org.apache.airavata.xbaya.registrybrowser.nodes.JCRBrowserIcons;
+import org.apache.airavata.xbaya.ui.dialogs.XBayaDialog;
+import org.apache.airavata.xbaya.ui.widgets.GridPanel;
+import org.apache.airavata.xbaya.util.RegistryConstants;
+//import org.apache.airavata.registry.api.AiravataRegistry2;
+
+public class DescriptorEditorDialog extends JDialog {
+
+	private static final long serialVersionUID = 478151437279682576L;
+
+	private XBayaEngine engine;
+
+    private XBayaDialog dialog;
+
+    private AiravataAPI registry;
+
+	private JList descriptorList;
+
+	private Map<ApplicationDescription,String> dlist;
+
+	private JButton editButton;
+
+	private AbstractButton removeButton;
+	
+	private boolean descriptorChanged=false;
+	
+	public enum DescriptorType{
+		HOST,
+		SERVICE,
+		APPLICATION
+	};
+
+	public DescriptorType descriptorType;
+	
+    /**
+     * @param engine XBaya workflow engine
+     */
+    public DescriptorEditorDialog(XBayaEngine engine, DescriptorType descriptorType) {
+        this.engine = engine;
+        this.descriptorType=descriptorType;
+        setRegistry(engine.getConfiguration().getAiravataAPI());
+        initGUI();
+    }
+
+    /**
+     * Displays the dialog.
+     */
+    public void show() {
+        this.dialog.show();
+    }
+
+    public void hide() {
+        this.dialog.hide();
+    }
+
+    /**
+     * Initializes the GUI.
+     */
+    private void initGUI() {
+    	descriptorList= new JList(new DefaultListModel());
+    	descriptorList.setCellRenderer(new DescriptorListCellRenderer(descriptorType));
+    	JScrollPane pane = new JScrollPane(descriptorList);
+    	
+    	descriptorList.addMouseListener(new MouseAdapter(){
+    		@Override
+    		public void mouseClicked(MouseEvent e) {
+    			if (e.getClickCount()==2){
+    				try {
+						editDescriptor();
+    				} catch (AiravataAPIInvocationException e1) {
+    					engine.getGUI().getErrorWindow().error("Error while editing descriptor", e1);
+    					e1.printStackTrace();
+    				}
+				}
+    		}
+    	});
+    	GridPanel infoPanel=new GridPanel();
+        infoPanel.add(pane);
+        infoPanel.getSwingComponent().setBorder(BorderFactory.createEtchedBorder());
+        SwingUtil.layoutToGrid(infoPanel.getSwingComponent(), 1, 1, 0, 0);
+
+        JButton newButton = new JButton("New...");
+        newButton.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+            	try {
+					newDescriptor();
+        		} catch (AiravataAPIInvocationException e1) {
+        			engine.getGUI().getErrorWindow().error("Error while creating descriptors", e1);
+        			e1.printStackTrace();
+        		}
+            }
+        });
+        descriptorList.addListSelectionListener(new ListSelectionListener(){
+			public void valueChanged(ListSelectionEvent e) {
+				boolean isSelected=descriptorList.getSelectedIndex()!=-1;
+				editButton.setEnabled(isSelected);
+				removeButton.setEnabled(isSelected);
+			}
+        	
+        });
+        editButton = new JButton("Edit...");
+        editButton.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+            	try {
+					editDescriptor();
+        		} catch (AiravataAPIInvocationException e1) {
+        			engine.getGUI().getErrorWindow().error("Error while editing descriptor", e1);
+        			e1.printStackTrace();
+        		}
+            }
+
+        });
+        removeButton = new JButton("Remove");
+        removeButton.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+            	try {
+					deleteDescriptor();
+        		} catch (AiravataAPIInvocationException e1) {
+        			engine.getGUI().getErrorWindow().error("Error while removing descriptor", e1);
+        			e1.printStackTrace();
+        		}
+            }
+        });
+        JButton closeButton = new JButton("Close");
+        closeButton.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                hide();
+            }
+        });
+        
+
+        GridPanel buttonPanel = new GridPanel();
+        buttonPanel.add(newButton);
+        buttonPanel.add(editButton);
+        buttonPanel.add(removeButton);
+        buttonPanel.add(closeButton);
+        buttonPanel.getSwingComponent().setBorder(BorderFactory.createEtchedBorder());
+        String title=null; 
+        switch (descriptorType){
+        	case HOST:
+        		title="Host Descriptions";
+        		break;
+        	case SERVICE:
+        		title="Applications";
+        		break;
+        	case APPLICATION:
+        		title="Application Descriptions";
+        		break;
+        }
+		this.dialog = new XBayaDialog(this.engine.getGUI(), title, infoPanel, buttonPanel);
+        this.dialog.setDefaultButton(editButton);
+        editButton.setEnabled(false);
+        removeButton.setEnabled(false);
+        try {
+			loadDescriptors();
+		} catch (AiravataAPIInvocationException e1) {
+			engine.getGUI().getErrorWindow().error("Error while loading descriptors", e1);
+			e1.printStackTrace();
+		}
+    }
+    
+    private void editDescriptor() throws AiravataAPIInvocationException {
+    	switch (descriptorType){
+	    	case HOST:
+	    		HostDescription h = (HostDescription) getSelected();
+	    		HostDescriptionDialog hostDescriptionDialog = new HostDescriptionDialog(engine.getConfiguration().getAiravataAPI(),false,h, null);
+	    		hostDescriptionDialog.setLocationRelativeTo(this.engine.getGUI().getFrame());
+	    		hostDescriptionDialog.open();
+	    		if (hostDescriptionDialog.isHostCreated()) {
+					loadDescriptors();
+					setAsChanged();
+				}
+	    		break;
+	    	case SERVICE:
+	    		ServiceDescription d = (ServiceDescription) getSelected();
+	    		DeploymentDescriptionDialog serviceDescriptionDialog = new DeploymentDescriptionDialog(getAPI(),false,d, null);
+	        	serviceDescriptionDialog.open();
+//	    		ServiceDescriptionDialog serviceDescriptionDialog = new ServiceDescriptionDialog(getRegistry(),false,d);
+//	    		serviceDescriptionDialog.open();
+	    		if (serviceDescriptionDialog.isServiceCreated()) {
+					loadDescriptors();
+					setAsChanged();
+				}
+	    		break;
+	    	case APPLICATION:
+                ApplicationDescription a = (ApplicationDescription) getSelected();
+                String[] s = dlist.get(a).split("\\$");
+                ApplicationDescriptionDialog aDescriptionDialog = new ApplicationDescriptionDialog(engine, false, a, s[1], s[0]);
+                aDescriptionDialog.setLocationRelativeTo(this.engine.getGUI().getFrame());
+                aDescriptionDialog.open();
+                if (aDescriptionDialog.isApplicationDescCreated()) {
+                    loadDescriptors();
+					setAsChanged();
+                }
+			break;
+    	}
+	}
+
+	private void setAsChanged() {
+		descriptorChanged=true;
+    	if (DescriptorEditorDialog.this.descriptorType==DescriptorType.SERVICE){
+			reloadComponentRegistry();
+		}
+	}
+
+    private void newDescriptor() throws AiravataAPIInvocationException {
+    	switch (descriptorType){
+	    	case HOST:
+	    		HostDescriptionDialog hostDescriptionDialog = new HostDescriptionDialog(engine.getConfiguration().getAiravataAPI(), null);
+	    		hostDescriptionDialog.open();
+	    		if (hostDescriptionDialog.isHostCreated()){
+	    			loadDescriptors();
+					setAsChanged();
+	    		}
+	    		break;
+	    	case SERVICE:
+	    		DeploymentDescriptionDialog serviceDescriptionDialog = new DeploymentDescriptionDialog(null, getAPI());
+	        	serviceDescriptionDialog.open();
+//	    		ServiceDescriptionDialog serviceDescriptionDialog = new ServiceDescriptionDialog(getRegistry());
+//	    		serviceDescriptionDialog.open();
+	    		if (serviceDescriptionDialog.isServiceCreated()){
+	    			loadDescriptors();
+					setAsChanged();
+	    		}
+	    		break;
+	    	case APPLICATION:
+	    		ApplicationDescriptionDialog applicationDescriptionDialog = new ApplicationDescriptionDialog(engine);
+	    		applicationDescriptionDialog.setLocationRelativeTo(this.engine.getGUI().getFrame());
+	    		applicationDescriptionDialog.open();
+	    		if (applicationDescriptionDialog.isApplicationDescCreated()){
+	    			loadDescriptors();
+					setAsChanged();
+	    		}
+	    		break;
+    	}
+		
+	}
+    
+	private Object getSelected() {
+		return descriptorList.getModel().getElementAt(descriptorList.getSelectedIndex());
+	}
+	protected boolean askQuestion(String title, String question) {
+        return JOptionPane.showConfirmDialog(this, question, title, JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION;
+    }
+    private boolean deleteDescriptor() throws AiravataAPIInvocationException{
+    	String title=null;
+    	String question=null;
+    	switch (descriptorType){
+	    	case HOST:
+	    		HostDescription h = (HostDescription) getSelected();
+	    		title = "Host description";
+	    		question = "Are you sure that you want to remove the service description \""
+	                    + h.getType().getHostName() + "\"?";
+	    		break;
+	    	case SERVICE:
+	        	ServiceDescription d = (ServiceDescription) getSelected();
+	    		title = "Service description";
+	    		question = "Are you sure that you want to remove the applications associated with \""
+	                    + d.getType().getName() + "\"?";
+	    		break;
+	    	case APPLICATION:
+	    		ApplicationDescription a = (ApplicationDescription) getSelected();
+	    		title = "Service description";
+	    		question = "Are you sure that you want to remove the service description \""
+	                    + a.getType().getApplicationName().getStringValue() + "\"?";
+	    		break;
+    	}
+    	
+        
+		if (askQuestion(title, question)) {
+            	switch (descriptorType){
+	    	    	case HOST:
+	    	    		HostDescription h = (HostDescription) getSelected();
+	    	        	getAPI().getApplicationManager().deleteHostDescription(h.getType().getHostName());
+                        loadDescriptors();
+    					setAsChanged();
+	    	    		break;
+	    	    	case SERVICE:
+	    	        	ServiceDescription d = (ServiceDescription) getSelected();
+	    	        	getAPI().getApplicationManager().deleteServiceDescription(d.getType().getName());
+                        loadDescriptors();
+    					setAsChanged();
+	    	    		break;
+	    	    	case APPLICATION:
+	    	    		ApplicationDescription a = (ApplicationDescription) getSelected();
+	    	    		String[] s = dlist.get(a).split("\\$");
+	    	        	getAPI().getApplicationManager().deleteApplicationDescription(s[0], s[1], a.getType().getApplicationName().getStringValue());
+	    	    		loadDescriptors();
+						setAsChanged();
+                        break;
+            	}
+//				loadDescriptors();
+        }
+        return true;
+    }
+
+	private void reloadComponentRegistry() {
+		ComponentRegistryLoader loader = ComponentRegistryLoader.getLoader(engine, RegistryConstants.REGISTRY_TYPE_JCR);
+		loader.load(engine.getConfiguration().getJcrComponentRegistry());
+	}
+    
+    private void loadDescriptors() throws AiravataAPIInvocationException {
+    	try {
+    		//allow the registry cache to update
+			Thread.sleep(500);
+		} catch (InterruptedException e1) {
+			e1.printStackTrace();
+		}
+    	((DefaultListModel)descriptorList.getModel()).removeAllElements();
+    		List<?> descriptors=null;
+			switch (descriptorType){
+	    	case HOST:
+	    		descriptors = getAPI().getApplicationManager().getAllHostDescriptions();
+	    		break;
+	    	case SERVICE:
+	    		descriptors = getAPI().getApplicationManager().getAllServiceDescriptions();
+	    		break;
+	    	case APPLICATION:
+	    		Map<String,ApplicationDescription> temp =getAPI().getApplicationManager().getApplicationDescriptors(null);
+                for(String value:temp.keySet()) {
+                    dlist.put(temp.get(value), value);
+
+                }
+	    		descriptors =Arrays.asList(dlist.keySet().toArray(new ApplicationDescription[]{}));
+	    		break;
+    		}
+    		for (Object d : descriptors) {
+				((DefaultListModel)descriptorList.getModel()).addElement(d);
+			}
+	}
+    
+    private static class DescriptorListCellRenderer extends DefaultListCellRenderer{
+		private static final long serialVersionUID = -1019715929291926180L;
+		private DescriptorType descriptorType;
+		public DescriptorListCellRenderer(DescriptorType descriptorType) {
+			this.descriptorType=descriptorType;
+		}
+		public Component getListCellRendererComponent(JList list, Object value,
+				int index, boolean isSelected, boolean cellHasFocus) {
+			Component c = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
+			if (c instanceof JLabel){
+				switch (descriptorType){
+		    	case HOST:
+		    		((JLabel) c).setText(((HostDescription)value).getType().getHostName());
+					((JLabel) c).setIcon(JCRBrowserIcons.HOST_ICON);
+		    		break;
+		    	case SERVICE:
+		    		((JLabel) c).setText(((ServiceDescription)value).getType().getName());
+					((JLabel) c).setIcon(JCRBrowserIcons.SERVICE_ICON);
+		    		break;
+		    	case APPLICATION:
+		    		((JLabel) c).setText(((ApplicationDescription)value).getType().getApplicationName().getStringValue());
+					((JLabel) c).setIcon(JCRBrowserIcons.APPLICATION_ICON);
+		    		break;
+				}
+				
+			}
+			return c;
+		}
+    	
+    }
+    public AiravataAPI getAPI() {
+        return registry;
+    }
+
+    public void setRegistry(AiravataAPI registry) {
+        this.registry = registry;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/dialogs/descriptors/DescriptorListDialog.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/dialogs/descriptors/DescriptorListDialog.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/dialogs/descriptors/DescriptorListDialog.java
new file mode 100644
index 0000000..fa4d03a
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/dialogs/descriptors/DescriptorListDialog.java
@@ -0,0 +1,261 @@
+/*
+ *
+ * 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.Component;
+import java.awt.Dimension;
+import java.awt.Toolkit;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+import javax.swing.BorderFactory;
+import javax.swing.DefaultListCellRenderer;
+import javax.swing.DefaultListModel;
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JOptionPane;
+import javax.swing.JScrollPane;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+
+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.HostDescription;
+import org.apache.airavata.commons.gfac.type.ServiceDescription;
+//import org.apache.airavata.registry.api.AiravataRegistry2;
+import org.apache.airavata.xbaya.registrybrowser.nodes.JCRBrowserIcons;
+import org.apache.airavata.xbaya.ui.XBayaGUI;
+import org.apache.airavata.xbaya.ui.dialogs.XBayaDialog;
+import org.apache.airavata.xbaya.ui.widgets.GridPanel;
+
+public class DescriptorListDialog extends JDialog {
+
+	private static final long serialVersionUID = 478151437279682576L;
+
+	private XBayaGUI xbayaGUI;
+
+    private XBayaDialog dialog;
+
+    private AiravataAPI registry;
+
+	private JList descriptorList;
+
+	private Map<String[],ApplicationDescription> dlist;
+
+	private JButton okButton;
+	
+	private boolean serviceSelected=false;
+
+	public enum DescriptorType{
+		HOST,
+		SERVICE,
+		APPLICATION
+	};
+
+	public DescriptorType descriptorType;
+
+    /**
+     *
+     * @param registry
+     * @param descriptorType
+     */
+    public DescriptorListDialog(AiravataAPI registry, DescriptorType descriptorType) {
+        setRegistry(registry);
+        this.descriptorType=descriptorType;
+        initGUI();
+        
+    }
+
+    /**
+     * Displays the dialog.
+     */
+    public void open() {
+    	pack();
+    	setModal(true);
+        // Adjust the size if it's bigger than the screen.
+        Dimension size = getSize();
+        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
+        final int inset = 100;
+        int width = size.width;
+        if (width > screenSize.width) {
+            width = screenSize.width - inset;
+        }
+        int height = size.height;
+        if (height > screenSize.height) {
+            height = screenSize.height - inset;
+        }
+        setSize(width, height);
+
+        setLocationRelativeTo(null);
+        setVisible(true);
+    }
+
+    public void close() {
+        setVisible(false);
+    }
+
+    /**
+     * Initializes the GUI.
+     */
+    private void initGUI() {
+    	descriptorList= new JList(new DefaultListModel());
+    	descriptorList.setCellRenderer(new DescriptorListCellRenderer(descriptorType));
+    	JScrollPane pane = new JScrollPane(descriptorList);
+
+    	GridPanel infoPanel=new GridPanel();
+        infoPanel.add(pane);
+        infoPanel.getSwingComponent().setBorder(BorderFactory.createEtchedBorder());
+        SwingUtil.layoutToGrid(infoPanel.getSwingComponent(), 1, 1, 0, 0);
+
+        descriptorList.addListSelectionListener(new ListSelectionListener(){
+			@Override
+			public void valueChanged(ListSelectionEvent e) {
+				boolean isSelected=descriptorList.getSelectedIndex()!=-1;
+				okButton.setEnabled(isSelected);
+			}
+        	
+        });
+        okButton = new JButton("OK");
+        okButton.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+            	serviceSelected=true;
+            	close();
+            }
+
+        });
+        JButton closeButton = new JButton("Cancel");
+        closeButton.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                close();
+            }
+        });
+        
+
+        GridPanel buttonPanel = new GridPanel();
+        buttonPanel.add(okButton);
+        buttonPanel.add(closeButton);
+        buttonPanel.getSwingComponent().setBorder(BorderFactory.createEtchedBorder());
+        String title=null; 
+        switch (descriptorType){
+        	case HOST:
+        		title="Host Descriptions";
+        		break;
+        	case SERVICE:
+        		title="Service Descriptions";
+        		break;
+        	case APPLICATION:
+        		title="Application Descriptions";
+        		break;
+        }
+        getContentPane().add(infoPanel.getSwingComponent());
+        getContentPane().add(buttonPanel.getSwingComponent());
+        SwingUtil.layoutToGrid(getContentPane(), 2, 1, 0, 0);
+        getRootPane().setDefaultButton(okButton);
+        okButton.setEnabled(false);
+        loadDescriptors();
+    }
+    
+	public Object getSelected() {
+		return descriptorList.getModel().getElementAt(descriptorList.getSelectedIndex());
+	}
+
+	protected boolean askQuestion(String title, String question) {
+        return JOptionPane.showConfirmDialog(null, question, title, JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION;
+    }
+    
+    private void loadDescriptors() {
+    	((DefaultListModel)descriptorList.getModel()).removeAllElements();
+    	try {
+    		List<?> descriptors=null;
+			switch (descriptorType){
+	    	case HOST:
+	    		descriptors = getRegistry().getApplicationManager().getAllHostDescriptions();
+	    		break;
+	    	case SERVICE:
+	    		descriptors = getRegistry().getApplicationManager().getAllServiceDescriptions();
+	    		break;
+	    	case APPLICATION:
+	    		dlist=getRegistry().getApplicationManager().getAllApplicationDescriptions();
+	    		descriptors =Arrays.asList(dlist.values().toArray(new ApplicationDescription[]{}));
+	    		break;
+    		}
+    		for (Object d : descriptors) {
+				((DefaultListModel)descriptorList.getModel()).addElement(d);
+			}
+		} catch (AiravataAPIInvocationException e) {
+			xbayaGUI.getErrorWindow().error(e);
+		}
+	}
+    
+    private static class DescriptorListCellRenderer extends DefaultListCellRenderer{
+		private static final long serialVersionUID = -1019715929291926180L;
+		private DescriptorType descriptorType;
+		public DescriptorListCellRenderer(DescriptorType descriptorType) {
+			this.descriptorType=descriptorType;
+		}
+		public Component getListCellRendererComponent(JList list, Object value,
+				int index, boolean isSelected, boolean cellHasFocus) {
+			Component c = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
+			if (c instanceof JLabel){
+				switch (descriptorType){
+		    	case HOST:
+		    		((JLabel) c).setText(((HostDescription)value).getType().getHostName());
+					((JLabel) c).setIcon(JCRBrowserIcons.HOST_ICON);
+		    		break;
+		    	case SERVICE:
+		    		((JLabel) c).setText(((ServiceDescription)value).getType().getName());
+					((JLabel) c).setIcon(JCRBrowserIcons.SERVICE_ICON);
+		    		break;
+		    	case APPLICATION:
+		    		((JLabel) c).setText(((ApplicationDescription)value).getType().getApplicationName().getStringValue());
+					((JLabel) c).setIcon(JCRBrowserIcons.APPLICATION_ICON);
+		    		break;
+				}
+				
+			}
+			return c;
+		}
+    	
+    }
+    public AiravataAPI getRegistry() {
+        return registry;
+    }
+
+    public void setRegistry(AiravataAPI registry) {
+        this.registry = registry;
+    }
+
+	public boolean isServiceSelected() {
+		return serviceSelected;
+	}
+
+	public void setServiceSelected(boolean serviceSelected) {
+		this.serviceSelected = serviceSelected;
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/dialogs/descriptors/HostDeploymentDialog.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/dialogs/descriptors/HostDeploymentDialog.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/dialogs/descriptors/HostDeploymentDialog.java
new file mode 100644
index 0000000..d544e16
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/dialogs/descriptors/HostDeploymentDialog.java
@@ -0,0 +1,617 @@
+/*
+ *
+ * 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.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.commons.gfac.type.ApplicationDescription;
+import org.apache.airavata.common.utils.SwingUtil;
+import org.apache.airavata.commons.gfac.type.HostDescription;
+//import org.apache.airavata.registry.api.AiravataRegistry2;
+import org.apache.airavata.schemas.gfac.*;
+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;
+
+public class HostDeploymentDialog extends JDialog implements ActionListener {
+    /**
+	 * 
+	 */
+    private static final long serialVersionUID = -2745085755585610025L;
+    private XBayaTextField txtExecPath;
+    private XBayaTextField txtTempDir;
+
+    private AiravataAPI registry;
+    private ApplicationDescription shellApplicationDescription;
+    private JLabel lblError;
+    private boolean applcationDescCreated = false;
+    private JButton okButton;
+
+    private String hostName;
+    private JComboBox cmbHostName;
+
+    private JButton btnHostAdvanceOptions;
+    private boolean newDescriptor;
+    private ApplicationDescription originalDescription;
+    private String originalHost;
+    private JButton btnTmpDirBrowse;
+    private JButton btnExecBrowse;
+    private List<String> existingHostList;
+
+    /**
+     * Create the dialog.
+     */
+    public HostDeploymentDialog(AiravataAPI registry, boolean newDescriptor,
+            ApplicationDescription originalDescription, String originalHost, List<String> existingHostList) {
+        setNewDescriptor(newDescriptor);
+        setOriginalDescription(originalDescription);
+        setOriginalHost(originalHost);
+        setRegistry(registry);
+        setExistingHostList(existingHostList);
+        iniGUI();
+    }
+
+    public void open() {
+        setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
+        setVisible(true);
+    }
+
+    protected HostDeploymentDialog getDialog() {
+        return this;
+    }
+
+    private void iniGUI() {
+        if (isNewDescriptor()) {
+            setTitle("New Application Deployment");
+        } else {
+            setTitle("Update Application Deployment: "
+                    + getOriginalDescription().getType().getApplicationName().getStringValue());
+        }
+        setBounds(100, 100, 600, 620);
+        setModal(true);
+        setLocationRelativeTo(null);
+        GridPanel buttonPane = new GridPanel();
+        {
+            lblError = new JLabel("");
+            lblError.setForeground(Color.RED);
+            buttonPane.add(lblError);
+            if (!isNewDescriptor()) {
+                JButton resetButton = new JButton("Reset");
+                resetButton.addActionListener(new ActionListener() {
+                    public void actionPerformed(ActionEvent e) {
+                        loadData();
+                    }
+                });
+                buttonPane.add(resetButton);
+            }
+            {
+                okButton = new JButton("Add");
+                if (!isNewDescriptor()) {
+                    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 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() {
+                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);
+
+            setupLayoutForBrowse(execPath, txtExecPath.getSwingComponent());
+
+            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() {
+                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);
+
+            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());
+                    }
+                }
+            });
+
+            cmbHostName = new JComboBox();
+            cmbHostName.addActionListener(this);
+
+            XBayaLabel lblHostName = new XBayaLabel("Application host", cmbHostName);
+            XBayaLinkButton lnkNewHost = new XBayaLinkButton("New button");
+            lnkNewHost.addActionListener(new ActionListener() {
+                public void actionPerformed(ActionEvent e) {
+                    try {
+                        HostDescriptionDialog hostDescriptionDialog = new HostDescriptionDialog(getRegistry(), 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);
+
+            btnHostAdvanceOptions = new JButton("HPC Configuration...");
+            btnHostAdvanceOptions.addActionListener(new ActionListener() {
+                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);
+            hostPanel.add(new JLabel());
+
+            SwingUtil.layoutToGrid(hostPanel.getSwingComponent(), 1, 2, 0, 0);
+
+            GridPanel infoPanel1 = new GridPanel();
+
+            infoPanel1.add(lblExecutablePath);
+            infoPanel1.add(execPath);
+            infoPanel1.add(lblTemporaryDirectory);
+            infoPanel1.add(tmpDirPath);
+
+            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(btnHostAdvanceOptions);
+            infoPanel4.add(btnAdvance);
+            infoPanel4.layout(1, 2, 0, 0);
+
+            SwingUtil.layoutToGrid(infoPanel1.getSwingComponent(), 4, 1, SwingUtil.WEIGHT_NONE, 0);
+            SwingUtil.layoutToGrid(infoPanel3.getSwingComponent(), 2, 2, SwingUtil.WEIGHT_NONE, 1);
+
+            GridPanel infoPanel = new GridPanel();
+            infoPanel.add(new JSeparator());
+            infoPanel.add(infoPanel3);
+            infoPanel.add(new JSeparator());
+            infoPanel.add(infoPanel1);
+
+            infoPanel.add(new JSeparator());
+            infoPanel.add(infoPanel4);
+
+            SwingUtil.layoutToGrid(infoPanel.getSwingComponent(), 6, 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);
+            loadHostDescriptions();
+        }
+        setResizable(true);
+        getRootPane().setDefaultButton(okButton);
+        if (!isNewDescriptor()) {
+            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 loadData() {
+        txtExecPath.setText(getOriginalDescription().getType().getExecutableLocation());
+        setExecutablePath(txtExecPath.getText());
+        txtTempDir.setText(getOriginalDescription().getType().getScratchWorkingDirectory());
+        setTempDir(txtTempDir.getText());
+
+        cmbHostName.setSelectedItem(getOriginalHost());
+        setHostName(cmbHostName.getSelectedItem().toString());
+        cmbHostName.setEnabled(isNewDescriptor());
+    }
+
+    private void loadHostDescriptions() {
+        cmbHostName.removeAllItems();
+        setHostName(null);
+        try {
+            List<HostDescription> hostDescriptions = getRegistry().getApplicationManager().getAllHostDescriptions();
+            for (HostDescription hostDescription : hostDescriptions) {
+                if (!isNewDescriptor() || !getExistingHostList().contains(hostDescription.getType().getHostName())) {
+                    cmbHostName.addItem(hostDescription.getType().getHostName());
+                }
+            }
+        } catch (Exception e) {
+            setError(e.getLocalizedMessage());
+        }
+        updateHostName();
+    }
+
+    public ApplicationDescription getShellApplicationDescription() {
+        if (shellApplicationDescription == null) {
+            if (isNewDescriptor()) {
+                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 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() {
+        setApplicationDescCreated(true);
+    }
+
+    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 (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 (getHostName() == null || getHostName().trim().equals("")) {
+            throw new Exception("Please select/create host to bind to this deployment description");
+        }
+
+    }
+
+    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 || hostDescription.getType() instanceof UnicoreHostType || 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) {
+                e.printStackTrace();
+            }
+        }
+        updateDialogStatus();
+    }
+
+    private boolean isLocalAddress(String hostAddress) {
+        return hostAddress.equalsIgnoreCase("localhost") || hostAddress.equalsIgnoreCase("127.0.0.1");
+    }
+
+    private void updateHostName() {
+        if (cmbHostName.getSelectedItem() != null) {
+            setHostName(cmbHostName.getSelectedItem().toString());
+        }
+    }
+
+    public void actionPerformed(ActionEvent e) {
+        if (e.getSource() == cmbHostName) {
+            updateHostName();
+        }
+        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 isNewDescriptor() {
+        return newDescriptor;
+    }
+
+    public void setNewDescriptor(boolean newDescriptor) {
+        this.newDescriptor = newDescriptor;
+    }
+
+    public ApplicationDescription getOriginalDescription() {
+        return originalDescription;
+    }
+
+    public void setOriginalDescription(ApplicationDescription originalDescription) {
+        this.originalDescription = originalDescription;
+    }
+
+    public String getOriginalHost() {
+        return originalHost;
+    }
+
+    public void setOriginalHost(String originalHost) {
+        this.originalHost = originalHost;
+    }
+
+    public HostDeployment execute() throws AiravataAPIInvocationException {
+        open();
+        if (isApplicationDescCreated()) {
+            return new HostDeployment(getRegistry().getApplicationManager().getHostDescription(getHostName()),
+                    getShellApplicationDescription());
+        }
+        return null;
+    }
+
+    public List<String> getExistingHostList() {
+        return existingHostList;
+    }
+
+    public void setExistingHostList(List<String> existingHostList) {
+        this.existingHostList = existingHostList;
+    }
+
+    public static class HostDeployment {
+        private HostDescription hostDescription;
+        private ApplicationDescription applicationDescription;
+
+        public HostDeployment(HostDescription hostDescription, ApplicationDescription applicationDescription) {
+            setHostDescription(hostDescription);
+            setApplicationDescription(applicationDescription);
+        }
+
+        public ApplicationDescription getApplicationDescription() {
+            return applicationDescription;
+        }
+
+        public void setApplicationDescription(ApplicationDescription applicationDescription) {
+            this.applicationDescription = applicationDescription;
+        }
+
+        public HostDescription getHostDescription() {
+            return hostDescription;
+        }
+
+        public void setHostDescription(HostDescription hostDescription) {
+            this.hostDescription = hostDescription;
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/dialogs/descriptors/HostDescriptionDialog.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/dialogs/descriptors/HostDescriptionDialog.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/dialogs/descriptors/HostDescriptionDialog.java
new file mode 100644
index 0000000..5dece7b
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/ui/dialogs/descriptors/HostDescriptionDialog.java
@@ -0,0 +1,592 @@
+/*
+ *
+ * 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.Font;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyAdapter;
+import java.awt.event.KeyEvent;
+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.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JDialog;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.SwingConstants;
+
+import org.apache.airavata.client.api.AiravataAPI;
+import org.apache.airavata.client.api.exception.AiravataAPIInvocationException;
+import org.apache.airavata.client.api.exception.DescriptorAlreadyExistsException;
+import org.apache.airavata.common.utils.StringUtil;
+import org.apache.airavata.common.utils.SwingUtil;
+import org.apache.airavata.commons.gfac.type.HostDescription;
+import org.apache.airavata.schemas.gfac.Ec2HostType;
+import org.apache.airavata.schemas.gfac.ExportProperties;
+import org.apache.airavata.schemas.gfac.ExportProperties.Name;
+import org.apache.airavata.schemas.gfac.GlobusHostType;
+import org.apache.airavata.schemas.gfac.GsisshHostType;
+import org.apache.airavata.schemas.gfac.HostDescriptionType;
+import org.apache.airavata.schemas.gfac.SSHHostType;
+import org.apache.airavata.schemas.gfac.UnicoreHostType;
+import org.apache.airavata.xbaya.ui.widgets.GridPanel;
+import org.apache.airavata.xbaya.ui.widgets.XBayaLabel;
+import org.apache.airavata.xbaya.ui.widgets.XBayaTextField;
+
+public class HostDescriptionDialog extends JDialog {
+
+	private static final long serialVersionUID = -2910634296292034085L;
+
+    private XBayaTextField hostIdTextField;
+
+    private XBayaTextField hostAddressTextField;
+
+    private XBayaTextField gateKeeperTextField;
+
+    private XBayaTextField gridFTPTextField;
+
+    private HostDescription hostDescription;
+
+    private boolean hostCreated = false;
+
+    private AiravataAPI registry;
+
+	private XBayaLabel gateKeeperLabel;
+
+	private XBayaLabel gridFTPLabel;
+
+    private JLabel lblError;
+
+    private String hostId;
+
+    private JButton okButton;
+
+    private boolean newHost;
+
+    private HostDescription originalHostDescription;
+
+//    private XBayaEngine engine;
+
+	private JComboBox cmbResourceProtocol;
+
+	private GridPanel infoPanel2;
+
+	private XBayaTextField exportsTextField;
+
+	private XBayaTextField preJobCommandsTextField;
+
+	private XBayaTextField postJobCommandsTextField;
+
+	private XBayaLabel postJobCommandsTextFieldLabel;
+
+	private XBayaLabel preJobCommandsLabel;
+
+	private XBayaLabel exportsLabel;
+
+	private XBayaTextField fileEndPointPrefixTextField;
+
+	private XBayaLabel fileEndPointPrefixLabel;
+
+	private JCheckBox hpcResourceCheckBoxField;
+
+	private JLabel emptyLabel;
+
+	private static final String REMOTE_PROTOCOL_STR_LOCAL="Local";
+	private static final String REMOTE_PROTOCOL_STR_SSH="SSH";
+	private static final String REMOTE_PROTOCOL_STR_GLOBUS="Globus";
+	private static final String REMOTE_PROTOCOL_STR_UNICORE="Unicore";
+	private static final String REMOTE_PROTOCOL_STR_AMAZON_EC2="Amazon EC2";
+	private static final String REMOTE_PROTOCOL_STR_HADOOP="Hadoop";
+	private static final String REMOTE_PROTOCOL_GSI_SSH="GSI-SSH";
+
+
+    public HostDescriptionDialog(AiravataAPI registry, JFrame parent) {
+    	this(registry,true,null, parent);
+    }
+
+    /**
+     *
+     * @param registry
+     * @param newHost
+     * @param originalHostDescription
+     */
+    public HostDescriptionDialog(AiravataAPI registry, boolean newHost, HostDescription originalHostDescription, JFrame parent) {
+        super(parent);
+        setNewHost(newHost);
+        setOriginalHostDescription(originalHostDescription);
+        addWindowListener(new WindowAdapter() {
+            @Override
+            public void windowOpened(WindowEvent arg0) {
+//                if (isNewHost()) {
+//					String baseName = "Host";
+//					int i = 1;
+//					String defaultName = baseName + i;
+//					try {
+//						while (getRegistry().getServiceDescription(defaultName) != null) {
+//							defaultName = baseName + (++i);
+//						}
+//					} catch (Exception e) {
+//						e.printStackTrace();
+//					}
+//					hostIdTextField.setText(defaultName);
+//				}
+            }
+        });
+        setRegistry(registry);
+        initGUI();
+    }
+
+    /**
+     * Displays the dialog.
+     */
+    public void open() {
+        setModal(true);
+        setLocationRelativeTo(getOwner());
+		setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
+		setVisible(true);
+    }
+
+    public void close() {
+    	setVisible(false);
+    }
+
+    private void ok() {
+        hostId = this.hostIdTextField.getText();
+        String hostAddress = this.hostAddressTextField.getText();
+
+        setHostId(hostId);
+        setHostLocation(hostAddress);
+        HostDescriptionType host = getHostDescription().getType();
+        if(host instanceof GlobusHostType) {
+        	((GlobusHostType)hostDescription.getType()).addGlobusGateKeeperEndPoint(this.gateKeeperTextField.getText());
+            ((GlobusHostType)hostDescription.getType()).addGridFTPEndPoint(this.gridFTPTextField.getText());
+        }else if (host instanceof UnicoreHostType){
+        	((UnicoreHostType)hostDescription.getType()).addUnicoreBESEndPoint(this.gateKeeperTextField.getText());
+            ((UnicoreHostType)hostDescription.getType()).addGridFTPEndPoint(this.gridFTPTextField.getText());
+        }else if (host instanceof SSHHostType){
+        	while(((SSHHostType)hostDescription.getType()).getFileEndPointPrefixArray().length>0){
+        		((SSHHostType)hostDescription.getType()).removeFileEndPointPrefix(0);
+        	}
+        	String[] prefixes = StringUtil.getElementsFromString(this.fileEndPointPrefixTextField.getText());
+        	for (String prefix : prefixes) {
+        		((SSHHostType)hostDescription.getType()).addNewFileEndPointPrefix().setStringValue(prefix);
+			}
+            ((SSHHostType)hostDescription.getType()).setHpcResource(hpcResourceCheckBoxField.isSelected());
+        }else if (host instanceof GsisshHostType){
+        	String[] exports = StringUtil.getElementsFromString(exportsTextField.getText());
+        	ExportProperties exportsElement = ((GsisshHostType)hostDescription.getType()).addNewExports();
+        	for (String export : exports) {
+        		String[] nameVal = StringUtil.getElementsFromString(export,"=",StringUtil.QUOTE);
+        		if (nameVal.length>0){
+            		Name name = exportsElement.addNewName();
+        			name.setStringValue(nameVal[0]);
+        			if (nameVal.length>1){
+        				name.setValue(nameVal[1]);
+        			}
+        		}
+			}
+            ((GsisshHostType)hostDescription.getType()).setPreJobCommandsArray(StringUtil.getElementsFromString(this.preJobCommandsTextField.getText()));
+            ((GsisshHostType)hostDescription.getType()).setPostJobCommandsArray(StringUtil.getElementsFromString(this.postJobCommandsTextField.getText()));
+        }
+        saveHostDescription();
+        close();
+    }
+
+    private GridPanel createPanelWithMessage(String message){
+    	GridPanel gridPanel = new GridPanel();
+    	JLabel lblMessage = new JLabel(message, SwingConstants.CENTER);
+		gridPanel.add(lblMessage);
+		lblMessage.setFont(new Font("Tahoma", Font.ITALIC, 11));
+    	gridPanel.layout(1,1, 0,0);
+    	return gridPanel;
+    }
+
+    /**
+     * Initializes the GUI.
+     */
+    private void initGUI() {
+    	setBounds(100, 100, 400, 350);
+    	setModal(true);
+        setLocationRelativeTo(null);
+        if (isNewHost()) {
+			setTitle("Register Host");
+		}else{
+			setTitle("Update Host: "+getOriginalHostDescription().getType().getHostName());
+		}
+		this.hostIdTextField = new XBayaTextField();
+        this.hostAddressTextField = new XBayaTextField();
+
+        XBayaLabel hostIdLabel = new XBayaLabel("Host ID", this.hostIdTextField);
+        XBayaLabel hostAddressLabel = new XBayaLabel("Host Address", this.hostAddressTextField);
+        cmbResourceProtocol = new JComboBox(new String[]{REMOTE_PROTOCOL_STR_LOCAL,REMOTE_PROTOCOL_STR_SSH,REMOTE_PROTOCOL_STR_GLOBUS,REMOTE_PROTOCOL_STR_UNICORE,REMOTE_PROTOCOL_STR_AMAZON_EC2, REMOTE_PROTOCOL_STR_HADOOP, REMOTE_PROTOCOL_GSI_SSH});
+        JLabel lblResourceProtocol = new JLabel("Resource Protocol");
+        GridPanel pnlResourceProtocolSelection=new GridPanel();
+        pnlResourceProtocolSelection.add(lblResourceProtocol);
+        pnlResourceProtocolSelection.add(cmbResourceProtocol);
+        pnlResourceProtocolSelection.layout(1, 2, 0, 1);
+        cmbResourceProtocol.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent arg0) {
+                updateRemoteProtocolTypeAndControls();
+            }
+        });
+        hostIdTextField.getSwingComponent().addKeyListener(new KeyAdapter() {
+            @Override
+            public void keyReleased(KeyEvent e) {
+            	updateDialogStatus();
+            }
+        });
+        hostAddressTextField.getSwingComponent().addKeyListener(new KeyAdapter() {
+            @Override
+            public void keyReleased(KeyEvent e) {
+            	updateDialogStatus();
+            }
+        });
+        GridPanel infoPanel1 = new GridPanel();
+        infoPanel1.add(hostIdLabel);
+        infoPanel1.add(this.hostIdTextField);
+        infoPanel1.add(hostAddressLabel);
+        infoPanel1.add(this.hostAddressTextField);
+//        infoPanel1.add(chkGobusHost);
+        infoPanel2 = new GridPanel();
+        infoPanel2.add(createPanelWithMessage("Initializing..."));
+        SwingUtil.layoutToGrid(infoPanel1.getSwingComponent(), 2, 2, SwingUtil.WEIGHT_NONE, 1);
+        SwingUtil.layoutToGrid(infoPanel2.getSwingComponent(), 1, 1, SwingUtil.WEIGHT_NONE, 1);
+
+        GridPanel infoPanel = new GridPanel();
+
+        infoPanel.add(infoPanel1);
+        infoPanel.add(pnlResourceProtocolSelection);
+        infoPanel.add(infoPanel2);
+        infoPanel.getSwingComponent().setBorder(BorderFactory.createEtchedBorder());
+        SwingUtil.layoutToGrid(infoPanel.getSwingComponent(), 3, 1, SwingUtil.WEIGHT_NONE, 0);
+
+        GridPanel buttonPanel = new GridPanel();
+        lblError = new JLabel();
+        lblError.setForeground(Color.RED);
+        buttonPanel.add(lblError);
+        okButton = new JButton("Save");
+        if (!isNewHost()) {
+			okButton.setText("Update");
+		}
+		okButton.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                ok();
+            }
+        });
+
+        buttonPanel.add(okButton);
+
+        JButton cancelButton = new JButton("Cancel");
+        cancelButton.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                close();
+            }
+        });
+
+        buttonPanel.add(cancelButton);
+        buttonPanel.layout(1,3,SwingUtil.WEIGHT_NONE,0);
+        buttonPanel.getSwingComponent().setBorder(BorderFactory.createEtchedBorder());
+
+        getContentPane().add(infoPanel.getSwingComponent());
+        getContentPane().add(buttonPanel.getSwingComponent());
+
+        SwingUtil.layoutToGrid(getContentPane(), 2, 1, 0, 0);
+
+        getRootPane().setDefaultButton(okButton);
+        cmbResourceProtocol.setSelectedIndex(0);
+        updateRemoteProtocolTypeAndControls();
+        if (!isNewHost()) {
+			loadData();
+		}
+//        SwingUtil.addPlaceHolder(hostIdTextField.getSwingComponent(), "[unique name for the host]");
+//        SwingUtil.addPlaceHolder(hostAddressTextField.getSwingComponent(), "[a valid host address, eg: myhost.com, 127.0.0.1]");
+//        SwingUtil.addPlaceHolder(GridFTPTextField.getSwingComponent(), "[List of grid ftp endpoints]");
+//        SwingUtil.addPlaceHolder(globusGateKeeperTextField.getSwingComponent(), "[List of globus gate keeper endpoints]");
+        updateDialogStatus();
+    }
+
+	private GridPanel createGlobusRemoteProtocolPanel() {
+		GridPanel globusPanel = new GridPanel();
+        if (gridFTPTextField==null) {
+			this.gridFTPTextField = new XBayaTextField();
+			this.gateKeeperTextField = new XBayaTextField();
+			gateKeeperLabel = new XBayaLabel("GRAM Endpoint", this.gateKeeperTextField);
+	        gridFTPLabel = new XBayaLabel("Grid FTP Endpoint", this.gridFTPTextField);
+		}
+        globusPanel.add(gateKeeperLabel);
+        globusPanel.add(gateKeeperTextField);
+        globusPanel.add(gridFTPLabel);
+        globusPanel.add(gridFTPTextField);
+        SwingUtil.layoutToGrid(globusPanel.getSwingComponent(), 2, 2, SwingUtil.WEIGHT_NONE, 1);
+        return globusPanel;
+	}
+	
+	private GridPanel createSSHRemoteProtocolPanel() {
+		GridPanel globusPanel = new GridPanel();
+        if (fileEndPointPrefixTextField==null) {
+			this.fileEndPointPrefixTextField = new XBayaTextField();
+			this.hpcResourceCheckBoxField = new JCheckBox("HPC Resource");
+			fileEndPointPrefixLabel = new XBayaLabel("File Endpoint Prefix", this.fileEndPointPrefixTextField);
+			this.emptyLabel=new JLabel();
+		}
+        globusPanel.add(hpcResourceCheckBoxField);
+        globusPanel.add(emptyLabel);
+        globusPanel.add(fileEndPointPrefixLabel);
+        globusPanel.add(fileEndPointPrefixTextField);
+        SwingUtil.layoutToGrid(globusPanel.getSwingComponent(), 2, 2, SwingUtil.WEIGHT_NONE, 1);
+        return globusPanel;
+	}
+	
+	private GridPanel createGSISSHRemoteProtocolPanel() {
+		GridPanel globusPanel = new GridPanel();
+        if (exportsTextField==null) {
+			this.exportsTextField = new XBayaTextField();
+			this.preJobCommandsTextField = new XBayaTextField();
+			this.postJobCommandsTextField = new XBayaTextField();
+			exportsLabel = new XBayaLabel("Exports", this.exportsTextField);
+			preJobCommandsLabel = new XBayaLabel("Pre-job Commands", this.preJobCommandsTextField);
+			postJobCommandsTextFieldLabel = new XBayaLabel("Post-job Commands", this.postJobCommandsTextField);
+		}
+        globusPanel.add(exportsLabel);
+        globusPanel.add(exportsTextField);
+        globusPanel.add(preJobCommandsLabel);
+        globusPanel.add(preJobCommandsTextField);
+        globusPanel.add(postJobCommandsTextFieldLabel);
+        globusPanel.add(postJobCommandsTextField);
+        SwingUtil.layoutToGrid(globusPanel.getSwingComponent(), 3, 2, SwingUtil.WEIGHT_NONE, 1);
+        return globusPanel;
+	}
+
+	private GridPanel createUnicoreRemoteProtocolPanel() {
+		GridPanel globusPanel = new GridPanel();
+        if (gridFTPTextField==null) {
+			this.gridFTPTextField = new XBayaTextField();
+			this.gateKeeperTextField = new XBayaTextField();
+			gateKeeperLabel = new XBayaLabel("Unicore Endpoint", this.gateKeeperTextField);
+	        gridFTPLabel = new XBayaLabel("GridFTP Endpoint", this.gridFTPTextField);
+		}
+        globusPanel.add(gateKeeperLabel);
+        globusPanel.add(gateKeeperTextField);
+        globusPanel.add(gridFTPLabel);
+        globusPanel.add(gridFTPTextField);
+        SwingUtil.layoutToGrid(globusPanel.getSwingComponent(), 2, 2, SwingUtil.WEIGHT_NONE, 1);
+        return globusPanel;
+	}
+    private void loadData() {
+    	HostDescriptionType t = getOriginalHostDescription().getType();
+    	hostIdTextField.setText(t.getHostName());
+		hostAddressTextField.setText(t.getHostAddress());
+		if (t instanceof GlobusHostType){
+			cmbResourceProtocol.setSelectedItem(REMOTE_PROTOCOL_STR_GLOBUS);
+			gateKeeperTextField.setText(StringUtil.createDelimiteredString(((GlobusHostType) t).getGlobusGateKeeperEndPointArray()));
+			gridFTPTextField.setText(StringUtil.createDelimiteredString(((GlobusHostType) t).getGridFTPEndPointArray()));
+		}else if (t instanceof SSHHostType){
+			cmbResourceProtocol.setSelectedItem(REMOTE_PROTOCOL_STR_SSH);
+			fileEndPointPrefixTextField.setText(StringUtil.createDelimiteredString(((SSHHostType)t).getFileEndPointPrefixArray()));
+			hpcResourceCheckBoxField.setSelected(((SSHHostType)t).getHpcResource());
+		}else if (t instanceof UnicoreHostType){
+			cmbResourceProtocol.setSelectedItem(REMOTE_PROTOCOL_STR_UNICORE);
+			gateKeeperTextField.setText(StringUtil.createDelimiteredString(((UnicoreHostType) t).getUnicoreBESEndPointArray()));
+			gridFTPTextField.setText(StringUtil.createDelimiteredString(((UnicoreHostType) t).getGridFTPEndPointArray()));
+		}else if (t instanceof Ec2HostType){
+			cmbResourceProtocol.setSelectedItem(REMOTE_PROTOCOL_STR_AMAZON_EC2);
+		}else if (t instanceof GsisshHostType){
+			cmbResourceProtocol.setSelectedItem(REMOTE_PROTOCOL_GSI_SSH);
+			List<String> arr=new ArrayList<String>();
+			ExportProperties exports = ((GsisshHostType) t).getExports();
+			if (exports!=null) {
+				Name[] nameArray = exports.getNameArray();
+				for (Name name : nameArray) {
+					arr.add(name.getStringValue() + "="
+							+ StringUtil.quoteString(name.getValue(), "="));
+				}
+			}
+			exportsTextField.setText(StringUtil.createDelimiteredString(arr.toArray(new String[]{})));
+			preJobCommandsTextField.setText(StringUtil.createDelimiteredString(((GsisshHostType) t).getPreJobCommandsArray()));
+			postJobCommandsTextField.setText(StringUtil.createDelimiteredString(((GsisshHostType) t).getPostJobCommandsArray()));
+		}
+		hostIdTextField.setEditable(isNewHost());
+		updateRemoteProtocolTypeAndControls();
+	}
+
+    public String getHostId() {
+        return getHostDescription().getType().getHostName();
+    }
+
+    public void setHostId(String hostId) {
+        getHostDescription().getType().setHostName(hostId);
+        updateDialogStatus();
+    }
+
+    public String getHostLocation() {
+        return getHostDescription().getType().getHostName();
+    }
+
+    public void setHostLocation(String hostLocation) {
+        getHostDescription().getType().setHostAddress(hostLocation);
+        updateDialogStatus();
+    }
+
+    private void validateDialog() throws Exception {
+        if (isNewHost()) {
+			String hostName = this.hostIdTextField.getText();
+			if (hostName == null
+					|| hostName.trim().equals("")) {
+				throw new Exception("Id of the host cannot be empty!!!");
+			}
+			HostDescription hostDescription2 = null;
+		    hostDescription2 = getRegistry().getApplicationManager().getHostDescription(hostName);
+			if (hostDescription2 != null) {
+				throw new Exception(
+						"Host descriptor with the given id already exists!!!");
+			}
+		}
+        String hostAddress = this.hostAddressTextField.getText();
+		if (hostAddress == null || hostAddress.trim().equals("")) {
+            throw new Exception("Host location/ip cannot be empty!!!");
+        }
+    }
+
+    private void updateDialogStatus() {
+        String message = null;
+        try {
+            validateDialog();
+        } catch (Exception e) {
+            message = e.getLocalizedMessage();
+        }
+        okButton.setEnabled(message == null);
+        setError(message);
+    }
+
+    private void setError(String errorMessage) {
+        if (errorMessage == null || errorMessage.trim().equals("")) {
+            lblError.setText("");
+        } else {
+            lblError.setText(errorMessage.trim());
+        }
+
+    }
+
+    public boolean isHostCreated() {
+        return hostCreated;
+    }
+
+    public void setHostCreated(boolean hostCreated) {
+        this.hostCreated = hostCreated;
+    }
+
+    public HostDescription getHostDescription() {
+        if (hostDescription == null) {
+            hostDescription = new HostDescription(GlobusHostType.type);
+        }
+        return hostDescription;
+    }
+
+    public void saveHostDescription() {
+        HostDescription desc = getHostDescription();
+        try {
+        	if (getRegistry().getApplicationManager().isHostDescriptorExists(desc.getType().getHostName())){
+        		getRegistry().getApplicationManager().updateHostDescriptor(desc);
+        	}else{
+        		getRegistry().getApplicationManager().addHostDescription(desc);
+        	}
+			setHostCreated(true);
+		}catch (DescriptorAlreadyExistsException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}  catch (AiravataAPIInvocationException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+
+		}
+    }
+
+    public AiravataAPI getRegistry() {
+        return registry;
+    }
+
+    public void setRegistry(AiravataAPI registry) {
+        this.registry = registry;
+    }
+    String previousProtocol=null;
+	private void updateRemoteProtocolTypeAndControls() {
+		String selectedProtocol=cmbResourceProtocol.getSelectedItem().toString();
+		if (previousProtocol==null || !previousProtocol.equals(selectedProtocol)){
+			infoPanel2.getContentPanel().removeAll();
+			if (selectedProtocol.equals(REMOTE_PROTOCOL_STR_LOCAL)){
+				getHostDescription().getType().changeType(HostDescriptionType.type);
+				infoPanel2.add(createPanelWithMessage("No configurations needed."));
+			}else if (selectedProtocol.equals(REMOTE_PROTOCOL_STR_SSH)){
+				getHostDescription().getType().changeType(SSHHostType.type);
+				infoPanel2.add(createSSHRemoteProtocolPanel());
+			}else if (selectedProtocol.equals(REMOTE_PROTOCOL_STR_GLOBUS)){
+				getHostDescription().getType().changeType(GlobusHostType.type);
+				infoPanel2.add(createGlobusRemoteProtocolPanel());
+			}else if (selectedProtocol.equals(REMOTE_PROTOCOL_STR_UNICORE)){
+				getHostDescription().getType().changeType(UnicoreHostType.type);
+				infoPanel2.add(createUnicoreRemoteProtocolPanel());
+			}else if (selectedProtocol.equals(REMOTE_PROTOCOL_STR_AMAZON_EC2)){
+				getHostDescription().getType().changeType(Ec2HostType.type);
+				infoPanel2.add(createPanelWithMessage("No configurations needed."));
+			}else if (selectedProtocol.equals(REMOTE_PROTOCOL_GSI_SSH)){
+				getHostDescription().getType().changeType(GsisshHostType.type);
+				infoPanel2.add(createGSISSHRemoteProtocolPanel());
+			}else{
+				infoPanel2.add(createPanelWithMessage("Not supported."));
+			}
+			infoPanel2.getContentPanel().setBorder(BorderFactory.createEtchedBorder());
+			infoPanel2.getContentPanel().updateUI();
+			infoPanel2.layout(1, 1,0,0);
+		}
+	}
+
+	public boolean isNewHost() {
+		return newHost;
+	}
+
+	public void setNewHost(boolean newHost) {
+		this.newHost = newHost;
+	}
+
+	public HostDescription getOriginalHostDescription() {
+		return originalHostDescription;
+	}
+
+	public void setOriginalHostDescription(HostDescription originalHostDescription) {
+		this.originalHostDescription = originalHostDescription;
+	}
+
+//	public XBayaEngine getEngine() {
+//		return engine;
+//	}
+//
+//	public void setEngine(XBayaEngine engine) {
+//		this.engine = engine;
+//	}
+}
\ No newline at end of file