[Ds-java-dev] svn commit r17008 - in trunk/solutions/data-services/java/modules/ide/src/org/wso2/ws/dataservice/ide: dialog wizard

svn at wso2.org svn at wso2.org
Wed May 14 22:26:11 PDT 2008


Author: samindaw
Date: Wed May 14 22:26:11 2008
New Revision: 17008

Log:
add/edit/delete query data, input/output mapping to the ds xml

Modified:
   trunk/solutions/data-services/java/modules/ide/src/org/wso2/ws/dataservice/ide/dialog/AddInputParamDialog.java
   trunk/solutions/data-services/java/modules/ide/src/org/wso2/ws/dataservice/ide/dialog/AddOutputMappingDialog.java
   trunk/solutions/data-services/java/modules/ide/src/org/wso2/ws/dataservice/ide/dialog/AddQueryDialog.java
   trunk/solutions/data-services/java/modules/ide/src/org/wso2/ws/dataservice/ide/wizard/WSO2DataserviceWizardStepTwo.java

Modified: trunk/solutions/data-services/java/modules/ide/src/org/wso2/ws/dataservice/ide/dialog/AddInputParamDialog.java
==============================================================================
--- trunk/solutions/data-services/java/modules/ide/src/org/wso2/ws/dataservice/ide/dialog/AddInputParamDialog.java	(original)
+++ trunk/solutions/data-services/java/modules/ide/src/org/wso2/ws/dataservice/ide/dialog/AddInputParamDialog.java	Wed May 14 22:26:11 2008
@@ -28,6 +28,10 @@
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Text;
 import org.wso2.ws.dataservice.ide.util.FontUtil;
+import org.wso2.ws.dataservice.ide.wizard.WSO2DataserviceWizardStepTwo;
+
+import java.util.List;
+import java.util.ArrayList;
 
 /**
  * Dialog represent the Add Input Parameter configuration UI
@@ -36,11 +40,24 @@
 
 	private Combo sqlTypeCombo;
 	private Combo inOutTypeCombo;
-
+	private List mappingData;
+	
+	private Text nameText;
+	private Text ordinalText;
+	
 	public AddInputParamDialog(Shell parentShell) {
 		super(parentShell);
+		mappingData=new ArrayList();
+		resetMappingData();
 	}
 
+	private void resetMappingData(){
+		mappingData.clear();
+		mappingData.add("");
+		mappingData.add("");
+		mappingData.add("");
+		mappingData.add("");
+	}
 	/**
 	 * Create the dialog area with the controls
 	 */
@@ -77,7 +94,7 @@
 		gd.horizontalSpan = 1;
 		label.setLayoutData(gd);
 
-		Text nameText = new Text(container, SWT.BORDER | SWT.SINGLE);
+		nameText = new Text(container, SWT.BORDER | SWT.SINGLE);
 		gd = new GridData(GridData.FILL_HORIZONTAL);
 		gd.horizontalSpan = 2;
 		nameText.setLayoutData(gd);
@@ -122,14 +139,14 @@
 				comboChanged();
 			}
 		});
-
+		
 		label = new Label(container, SWT.NULL);
 		label.setText("Ordinal **");
 		gd = new GridData(GridData.FILL_HORIZONTAL);
 		gd.horizontalSpan = 1;
 		label.setLayoutData(gd);
 
-		Text ordinalText = new Text(container, SWT.BORDER | SWT.SINGLE);
+		ordinalText = new Text(container, SWT.BORDER | SWT.SINGLE);
 		gd = new GridData(GridData.FILL_HORIZONTAL);
 		gd.horizontalSpan = 2;
 		ordinalText.setLayoutData(gd);
@@ -144,11 +161,15 @@
 		gd = new GridData(GridData.FILL_HORIZONTAL);
 		gd.horizontalSpan = 3;
 		label.setLayoutData(gd);
-
+		comboChanged();
 		return super.createDialogArea(parent);
 	}
 
 	private void pathChanged() {
+		mappingData.set(WSO2DataserviceWizardStepTwo.SQLQUERY_IMAP_NAME, 
+				nameText.getText().trim());
+		mappingData.set(WSO2DataserviceWizardStepTwo.SQLQUERY_IMAP_ORDINAL, 
+				ordinalText.getText().trim());
 		//update the data model
 	}
 
@@ -177,9 +198,19 @@
 	 * Handle the Combo Changed scenario
 	 */
 	private void comboChanged() {
+		if (sqlTypeCombo.getSelectionIndex()>-1) 
+			mappingData.set(WSO2DataserviceWizardStepTwo.SQLQUERY_IMAP_SQL_TYPE, 
+					sqlTypeCombo.getItem(sqlTypeCombo.getSelectionIndex()).trim());
+		if (inOutTypeCombo.getSelectionIndex()>-1) 
+			mappingData.set(WSO2DataserviceWizardStepTwo.SQLQUERY_IMAP_INOUT_TYPE, 
+					inOutTypeCombo.getItem(inOutTypeCombo.getSelectionIndex()).trim());
 		//Combo updated
 	}
 
+	public List getMappingData(){
+		return mappingData;
+	}
+	
 }
 
 

Modified: trunk/solutions/data-services/java/modules/ide/src/org/wso2/ws/dataservice/ide/dialog/AddOutputMappingDialog.java
==============================================================================
--- trunk/solutions/data-services/java/modules/ide/src/org/wso2/ws/dataservice/ide/dialog/AddOutputMappingDialog.java	(original)
+++ trunk/solutions/data-services/java/modules/ide/src/org/wso2/ws/dataservice/ide/dialog/AddOutputMappingDialog.java	Wed May 14 22:26:11 2008
@@ -15,6 +15,9 @@
  */
 package org.wso2.ws.dataservice.ide.dialog;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.ModifyEvent;
@@ -28,6 +31,7 @@
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Text;
 import org.wso2.ws.dataservice.ide.util.FontUtil;
+import org.wso2.ws.dataservice.ide.wizard.WSO2DataserviceWizardStepTwo;
 
 /**
  * Dialog represent the Add Output Mapping configuration UI
@@ -35,9 +39,23 @@
 public class AddOutputMappingDialog extends Dialog{
 
 	private Combo mappingTypeCombo;
-
+	private List mappingData;
+	
+	private Text sqlColumnNameText;
+	private Text outputFieldNameText;
+	
 	public AddOutputMappingDialog(Shell parentShell) {
 		super(parentShell);
+		mappingData=new ArrayList();
+		resetMappingData();
+	}
+
+	private void resetMappingData(){
+		mappingData.clear();
+		mappingData.add("");
+		mappingData.add("");
+		mappingData.add("");
+		mappingData.add("");
 	}
 
 	/**
@@ -88,19 +106,20 @@
 			}
 		});
 
+		
 		label = new Label(container, SWT.NULL);
 		label.setText("Output Field Name");
 		gd = new GridData(GridData.FILL_HORIZONTAL);
 		gd.horizontalSpan = 1;
 		label.setLayoutData(gd);
 
-		Text outputFieldNameText = new Text(container, SWT.BORDER | SWT.SINGLE);
+		outputFieldNameText = new Text(container, SWT.BORDER | SWT.SINGLE);
 		gd = new GridData(GridData.FILL_HORIZONTAL);
 		gd.horizontalSpan = 2;
 		outputFieldNameText.setLayoutData(gd);
 		outputFieldNameText.addModifyListener(new ModifyListener() {
 			public void modifyText(ModifyEvent e) {
-				//pathChanged();
+				pathChanged();
 			}
 		});
 
@@ -110,16 +129,16 @@
 		gd.horizontalSpan = 1;
 		label.setLayoutData(gd);
 
-		Text sqlColumnNameText = new Text(container, SWT.BORDER | SWT.SINGLE);
+		sqlColumnNameText = new Text(container, SWT.BORDER | SWT.SINGLE);
 		gd = new GridData(GridData.FILL_HORIZONTAL);
 		gd.horizontalSpan = 2;
 		sqlColumnNameText.setLayoutData(gd);
 		sqlColumnNameText.addModifyListener(new ModifyListener() {
 			public void modifyText(ModifyEvent e) {
-				//pathChanged();
+				pathChanged();
 			}
 		});
-
+		comboChanged();
 		return super.createDialogArea(parent);
 	}
 
@@ -132,12 +151,24 @@
 		mappingTypeCombo.add("ATTRIBUTE");
 	}
 
-
+	private void pathChanged() {
+		mappingData.set(WSO2DataserviceWizardStepTwo.SQLQUERY_OMAP_SQL_COL,
+				sqlColumnNameText.getText().trim());
+		mappingData.set(WSO2DataserviceWizardStepTwo.SQLQUERY_OMAP_OUT_FIELD,
+				outputFieldNameText.getText().trim());
+		//update the data model
+	}
+	
 	/**
 	 * Ensures that both text fields are set.
 	 */
 	private void comboChanged() {
-		//validate the plug-in
+		if (mappingTypeCombo.getSelectionIndex()>-1) 
+			mappingData.set(WSO2DataserviceWizardStepTwo.SQLQUERY_OMAP_TYPE, 
+					mappingTypeCombo.getItem(mappingTypeCombo.getSelectionIndex()).trim());
+	}
+	
+	public List getMappingData(){
+		return mappingData;
 	}
-
 }
\ No newline at end of file

Modified: trunk/solutions/data-services/java/modules/ide/src/org/wso2/ws/dataservice/ide/dialog/AddQueryDialog.java
==============================================================================
--- trunk/solutions/data-services/java/modules/ide/src/org/wso2/ws/dataservice/ide/dialog/AddQueryDialog.java	(original)
+++ trunk/solutions/data-services/java/modules/ide/src/org/wso2/ws/dataservice/ide/dialog/AddQueryDialog.java	Wed May 14 22:26:11 2008
@@ -37,14 +37,16 @@
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.MessageBox;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Text;
 import org.wso2.ws.dataservice.ide.WSO2DataservicePlugin;
+import org.wso2.ws.dataservice.ide.constant.WSO2DataserviceWizardConstant;
 import org.wso2.ws.dataservice.ide.context.PersistentDSContext;
-import org.wso2.ws.dataservice.ide.util.DataServiceXMLUtil;
 import org.wso2.ws.dataservice.ide.util.FontUtil;
 import org.wso2.ws.dataservice.ide.wizard.WSO2DataserviceWizardStepTwo;
 
+
 /**
  * Dialog represent the Add Query configuration UI
  */
@@ -55,19 +57,40 @@
 	private String dialogHeadingPrefix;
 	private Text queryIDText;
 	private StyledText sqlStatementText;
+	private Text groupByElementText;
+	private Text rowNameText;
+	private Text rowNamespaceText;
 	private PersistentDSContext dsContext;
 	private WSO2DataserviceWizardStepTwo parentPage;
 	private List configList;
-
+	private List inputMapList;
+	private List outputMapList;
+	private boolean isEditMode=false;
+	
 	public AddQueryDialog(Shell parentShell, String headingPrefix,
 			WSO2DataserviceWizardStepTwo page) {
 		super(parentShell);
+		configList = new ArrayList();
+		inputMapList=new ArrayList();
+		outputMapList=new ArrayList();
+		resetConfigData();
 		dialogHeadingPrefix = headingPrefix;
+		isEditMode=headingPrefix.equals(WSO2DataserviceWizardConstant.editTag);
 		//Obtain the current context from eclipse preferences.
 		dsContext = WSO2DataservicePlugin.getDefault().getPersistentDSContext();
 		parentPage = page;
 	}
 
+	private void resetConfigData(){
+		configList.clear();
+		configList.add("");
+		configList.add("");
+		configList.add("");
+		configList.add("");
+		configList.add("");
+		configList.add(inputMapList);
+		configList.add(outputMapList);
+	}
 	/**
 	 * Create the dialog area with the controls
 	 */
@@ -189,7 +212,7 @@
 		gd.horizontalSpan = 1;
 		label.setLayoutData(gd);
 
-		Text groupByElementText = new Text(container, SWT.BORDER | SWT.SINGLE);
+		groupByElementText = new Text(container, SWT.BORDER | SWT.SINGLE);
 		gd = new GridData(GridData.FILL_HORIZONTAL);
 		gd.horizontalSpan = 2;
 		groupByElementText.setLayoutData(gd);
@@ -205,7 +228,7 @@
 		gd.horizontalSpan = 1;
 		label.setLayoutData(gd);
 
-		Text rowNameText = new Text(container, SWT.BORDER | SWT.SINGLE);
+		rowNameText = new Text(container, SWT.BORDER | SWT.SINGLE);
 		gd = new GridData(GridData.FILL_HORIZONTAL);
 		gd.horizontalSpan = 2;
 		rowNameText.setLayoutData(gd);
@@ -221,7 +244,7 @@
 		gd.horizontalSpan = 1;
 		label.setLayoutData(gd);
 
-		Text rowNamespaceText = new Text(container, SWT.BORDER | SWT.SINGLE);
+		rowNamespaceText = new Text(container, SWT.BORDER | SWT.SINGLE);
 		gd = new GridData(GridData.FILL_HORIZONTAL);
 		gd.horizontalSpan = 2;
 		rowNamespaceText.setLayoutData(gd);
@@ -252,10 +275,28 @@
 		gd = new GridData(GridData.FILL_HORIZONTAL);
 		gd.horizontalSpan = 3;
 		label.setLayoutData(gd);
-		
+		/*
+		 * setup the environment for edit mode
+		 */
+		if (isEditMode){
+			String qId=parentPage.getSelectedQueryId();
+			List tmpConfigList=parentPage.getQueryData(qId);
+			resetQueryData(tmpConfigList);
+			configList=tmpConfigList;
+			queryIDText.setEditable(false);
+		}
       return super.createDialogArea(parent);
 	}
 
+	private void resetQueryData(List tmpConfigList){
+		if (tmpConfigList!=null){
+			queryIDText.setText((String)tmpConfigList.get(0));
+			sqlStatementText.setText((String)tmpConfigList.get(1));
+			rowNamespaceText.setText((String)tmpConfigList.get(2));
+			groupByElementText.setText((String)tmpConfigList.get(3));
+			rowNameText.setText((String)tmpConfigList.get(4));
+		} 	
+	}
 	/**
 	 * Handler method for the Output Mapping
 	 */
@@ -265,6 +306,9 @@
 		addOutputMappingDialog.create();
 		addOutputMappingDialog.getShell().setSize(500, 350);
 		addOutputMappingDialog.open();
+		if (addOutputMappingDialog.getReturnCode()==org.eclipse.jface.window.Window.OK){
+			outputMapList.add(addOutputMappingDialog.getMappingData());
+		}
 	}
 
 	/**
@@ -276,6 +320,9 @@
 		addInputParamDialog.create();
 		addInputParamDialog.getShell().setSize(500, 350);
 		addInputParamDialog.open();
+		if (addInputParamDialog.getReturnCode()==org.eclipse.jface.window.Window.OK){
+			inputMapList.add(addInputParamDialog.getMappingData());
+		}
 	}
 
 	/**
@@ -290,33 +337,28 @@
 	 * Handle the OK button pressed
 	 */
 	protected void okPressed() {
-		super.okPressed();
-		//Update the DS Configuration
-		configChanged();
+		if (isAllDataValid()){
+			super.okPressed();
+			//Update the DS Configuration
+			configChanged();
+		}
 	}
 	
+	private void showMsg(String msg){
+		MessageBox messageBox =new MessageBox(getShell(),SWT.OK);
+		 messageBox.setMessage(msg);
+		 messageBox.open();
+	}
 	/**
 	 * Handle the configuration changes
 	 */
 	private void configChanged(){
 		//update config with the change
 		try {
-			OMElement root = DataServiceXMLUtil.getOMDocFromString(dsContext.getDSConfig());
-			OMElement element = createQueryElement();
-			//Remove the existing data service config
-			Iterator children = root.getChildElements();
-			while(children.hasNext()){
-				OMElement node = (OMElement)children.next();
-			        if (node.getLocalName().equals("query")) {
-						node.detach();
-					}
-			}
-			root.addChild(element);
-			OutputStream xmlOutputStream = new ByteArrayOutputStream();
-			root.serialize(xmlOutputStream);
-			//call refresh configuration
-			OutputStream stream = DataServiceXMLUtil.prettyPrintDSConfig(xmlOutputStream.toString());
-			parentPage.refreshConfig(stream.toString());
+			parentPage.setQueryData(
+					(String)configList.get(WSO2DataserviceWizardStepTwo.SQLQUERY_QUERYID).toString()
+						,configList);
+			parentPage.configChanged();
 		} catch (Exception e) {
 			e.printStackTrace();
 		}
@@ -324,31 +366,15 @@
 	
 	
 	/**
-	 * Build the Query Element
-	 * @param propertyList : List of properties of Data Service Connection Configuration.
-	 * @return Query Element
-	 */
-	public OMElement createQueryElement(){
-		//create a factory
-		OMFactory factory = OMAbstractFactory.getOMFactory();
-		//use the factory to create three elements
-		OMElement root = factory.createOMElement("query",null);
-		root.addAttribute("id",configList.get(0).toString(), null);
-
-		OMElement currentElement = factory.createOMElement("sql",null);
-		currentElement.setText(configList.get(1).toString());
-		root.addChild(currentElement);
-		return root;
-	}
-	
-	/**
 	 * This method updates the List form current RDBMS Configuration.
 	 * @return RDBMS COnfiguration 
 	 */
 	private void createListFromQuerySConfig(){
-		configList = new ArrayList();
-		configList.add(queryIDText.getText());
-		configList.add(sqlStatementText.getText());
+		configList.set(WSO2DataserviceWizardStepTwo.SQLQUERY_QUERYID,queryIDText.getText());
+		configList.set(WSO2DataserviceWizardStepTwo.SQLQUERY_QUERY,sqlStatementText.getText());
+		configList.set(WSO2DataserviceWizardStepTwo.SQLQUERY_NAME_SPACE,rowNamespaceText.getText());
+		configList.set(WSO2DataserviceWizardStepTwo.SQLQUERY_ELEMENT,groupByElementText.getText());
+		configList.set(WSO2DataserviceWizardStepTwo.SQLQUERY_ROW_NAME,rowNameText.getText());
 	}
 	
 	/**
@@ -359,4 +385,36 @@
 		return configList;
 	}
 
+	private boolean isAllDataValid(){
+		if ((!isEditMode)&&(parentPage.getQueryData(configList.get(0).toString())!=null)){
+			showMsg("Query Id '"+configList.get(0).toString()+"' already present.");
+			return false;
+		}
+		if (configList.get(
+				WSO2DataserviceWizardStepTwo.SQLQUERY_QUERYID).toString().trim().equals("")){
+			showMsg("Query id is required.");
+			return false;
+		}
+
+		if (configList.get(
+				WSO2DataserviceWizardStepTwo.SQLQUERY_QUERY).toString().trim().equals("")){
+			showMsg("Sql statement is required.");
+			return false;
+		}
+
+		if (configList.get(
+				WSO2DataserviceWizardStepTwo.SQLQUERY_ELEMENT).toString().trim().equals("")){
+			showMsg("Group by element is required.");
+			return false;
+		}
+
+		if (configList.get(
+				WSO2DataserviceWizardStepTwo.SQLQUERY_ROW_NAME).toString().trim().equals("")){
+			showMsg("Row name is required.");
+			return false;
+		}
+
+
+		return true;
+	}
 }
\ No newline at end of file

Modified: trunk/solutions/data-services/java/modules/ide/src/org/wso2/ws/dataservice/ide/wizard/WSO2DataserviceWizardStepTwo.java
==============================================================================
--- trunk/solutions/data-services/java/modules/ide/src/org/wso2/ws/dataservice/ide/wizard/WSO2DataserviceWizardStepTwo.java	(original)
+++ trunk/solutions/data-services/java/modules/ide/src/org/wso2/ws/dataservice/ide/wizard/WSO2DataserviceWizardStepTwo.java	Wed May 14 22:26:11 2008
@@ -15,9 +15,15 @@
  */
 package org.wso2.ws.dataservice.ide.wizard;
 
+import java.io.ByteArrayOutputStream;
+import java.io.OutputStream;
 import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.List;
 
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMFactory;
 import org.eclipse.jface.dialogs.IDialogPage;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.swt.SWT;
@@ -29,9 +35,11 @@
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.MessageBox;
 import org.eclipse.swt.widgets.Table;
 import org.eclipse.swt.widgets.TableColumn;
 import org.eclipse.swt.widgets.TableItem;
+import org.eclipse.swt.widgets.Dialog;
 import org.wso2.ws.dataservice.ide.WSO2DataservicePlugin;
 import org.wso2.ws.dataservice.ide.constant.WSO2DataserviceWizardConstant;
 import org.wso2.ws.dataservice.ide.context.PersistentDSContext;
@@ -52,6 +60,22 @@
 	private Table table;
 	private PersistentDSContext dsContext;
 
+	public static int SQLQUERY_QUERYID=0;
+	public static int SQLQUERY_QUERY=1;
+	public static int SQLQUERY_NAME_SPACE=2;
+	public static int SQLQUERY_ELEMENT=3;
+	public static int SQLQUERY_ROW_NAME=4;
+	public static int SQLQUERY_INPUT_MAPS=5;
+	public static int SQLQUERY_OUTPUT_MAPS=6;
+	
+	public static int SQLQUERY_IMAP_NAME=0;
+	public static int SQLQUERY_IMAP_SQL_TYPE=1;
+	public static int SQLQUERY_IMAP_INOUT_TYPE=2;
+	public static int SQLQUERY_IMAP_ORDINAL=3;
+	
+	public static int SQLQUERY_OMAP_TYPE=0;
+	public static int SQLQUERY_OMAP_OUT_FIELD=1;
+	public static int SQLQUERY_OMAP_SQL_COL=2;
 	/**
 	 * Constructor for WSO2DataserviceWizardStepTwo.
 	 * @param pageName
@@ -91,6 +115,11 @@
 		gd.heightHint = 100;
 		table.setLayoutData(gd);
 		table.setVisible(false);
+		table.addSelectionListener(new SelectionAdapter(){
+			public void widgetSelected(SelectionEvent e) {
+				handleTableItemSelected();
+			}
+		});
 
 		label = new Label(container, SWT.NULL);
 		label.setText("");
@@ -116,6 +145,8 @@
 				handleEditQuery();
 			}
 		});
+		editButton.setEnabled(false);
+		
 		gd = new GridData(GridData.FILL_HORIZONTAL);
 		gd.horizontalSpan = 2;
 		editButton.setLayoutData(gd);
@@ -130,7 +161,8 @@
 		gd = new GridData(GridData.FILL_HORIZONTAL);
 		gd.horizontalSpan = 2;
 		deleteButton.setLayoutData(gd);
-
+		deleteButton.setEnabled(false);
+		
 		label = new Label(container, SWT.NULL);
 		label.setText("");
 		gd = new GridData(GridData.FILL_HORIZONTAL);
@@ -176,8 +208,13 @@
 	private void updateTable(List fillItems) {
 		if (fillItems != null) {
 			int queryCount = fillItems.size();
+			table.removeAll();
 			if (queryCount > 0) {
-				table.removeAll();
+				String selectedId=null;
+				int indexSelected=table.getSelectionIndex();
+				if (table.getSelectionIndex()>-1){
+					selectedId=table.getItem(table.getSelectionIndex()).getText();
+				}
 				TableItem[] items = new TableItem[queryCount]; // An item for each field
 				for (int i = 0; i < queryCount; i++) {
 					items[i] = new TableItem(table, SWT.NONE);
@@ -185,7 +222,17 @@
 					List iQueryItem = (List)fillItems.get(i);
 					items[i].setText(iQueryItem.get(0).toString());
 					items[i].setChecked(true);//check them all by default
+					if (selectedId!=null){
+						if (iQueryItem.get(0).toString().equals(selectedId)){
+							indexSelected=i;
+						}						
+					}
+					
 				}
+				if (indexSelected>(queryCount-1)){
+					indexSelected=queryCount-1;
+				}
+				table.setSelection(indexSelected);
 				updateStatus(null);
 			}
 			table.redraw();
@@ -193,7 +240,67 @@
 		table.setVisible(true);
 	}
 
-
+	/**
+	 * Get the query information related to given query id
+	 * @param queryId
+	 * @return
+	 */
+	public List getQueryData(String queryId){
+		int queryCount = queryToUIMapping.size();
+		for (int i = 0; i < queryCount; i++) {
+			List iQueryItem = (List)queryToUIMapping.get(i);
+			if (iQueryItem.get(SQLQUERY_QUERYID).toString().equals(queryId)){
+				return iQueryItem;
+			}						
+		}
+		return null;
+	}
+	
+	public void setQueryData(String queryId, List data){
+		int queryCount = queryToUIMapping.size();
+		for (int i = 0; i < queryCount; i++) {
+			List iQueryItem = (List)queryToUIMapping.get(i);
+			if (iQueryItem.get(SQLQUERY_QUERYID).toString().equals(queryId)){
+				queryToUIMapping.set(i, data);
+				return;
+			}						
+		}
+		queryToUIMapping.add(data);
+	}
+	
+	public void removeQueryData(String queryId){
+		int queryCount = queryToUIMapping.size();
+		for (int i = 0; i < queryCount; i++) {
+			List iQueryItem = (List)queryToUIMapping.get(i);
+			if (iQueryItem.get(SQLQUERY_QUERYID).toString().equals(queryId)){
+				queryToUIMapping.remove(i);
+				return;
+			}						
+		}
+	}
+	
+	
+	public List getQueryIdList(){
+		List IdList=new ArrayList();
+		int queryCount = queryToUIMapping.size();
+		for (int i = 0; i < queryCount; i++) {
+			List iQueryItem = (List)queryToUIMapping.get(i);
+			IdList.add(iQueryItem.get(SQLQUERY_QUERYID).toString());
+		}
+		return IdList;
+	}
+	
+	/**
+	 * return the query id of the selected item in the table
+	 * @return
+	 */
+	public String getSelectedQueryId(){
+		if (table.getSelectionIndex()>-1){
+			return table.getItem(table.getSelectionIndex()).getText();
+		}
+		return null;
+	}
+	
 	private void declareColumn(Table table, int width,String colName){
 		TableColumn column = new TableColumn(table,SWT.NONE);
 		column.setWidth(width);
@@ -209,6 +316,13 @@
 	}
 
 	/**
+	 * Handle when an item in the query table is selected 
+	 */
+	private void handleTableItemSelected(){
+		editButton.setEnabled(table.getSelectionIndex()!=-1);
+		deleteButton.setEnabled(table.getSelectionIndex()!=-1);
+	}
+	/**
 	 * Handle add new Query
 	 */
 	private void handleAddQuery() {
@@ -218,10 +332,10 @@
 		addQueryDialog.create();
 		addQueryDialog.getShell().setSize(500, 700);
 		addQueryDialog.open();
-
-		noOfLoadedQuery++;
-		queryToUIMapping.add(addQueryDialog.getQueryList());
-		updateTable(queryToUIMapping);
+		if (addQueryDialog.getReturnCode()==org.eclipse.jface.window.Window.OK){
+			noOfLoadedQuery++;
+			updateTable(queryToUIMapping);			
+		}
 	}
 
 	/**
@@ -240,9 +354,12 @@
 	 * Handle delete Query
 	 */
 	private void handleDeleteQuery() {
-		queryToUIMapping.remove("Test"+noOfLoadedQuery);
+		removeQueryData(getSelectedQueryId());
+		//queryToUIMapping.remove("Test"+noOfLoadedQuery);
 		noOfLoadedQuery--;
 		updateTable(queryToUIMapping);
+		configChanged();
+		handleTableItemSelected();
 	}
 
 	private void updateStatus(String message) {
@@ -253,7 +370,8 @@
 	public String loadPreviousConfig(){
 		String defaultConfig = null;
 		try {
-			defaultConfig = DataServiceXMLUtil.prettyPrintDSConfig(dsContext.getDSConfig()).toString();
+			defaultConfig = 
+				DataServiceXMLUtil.prettyPrintDSConfig(dsContext.getDSConfig()).toString();
 			refreshConfig(defaultConfig);
 		} catch (Exception e) {
 			e.printStackTrace();
@@ -268,4 +386,86 @@
 		dsContext.setDSConfig(config);
 	}
 
+	/**
+	 * Handle the configuration changes
+	 */
+	public void configChanged(){
+		//update config with the change
+		try {
+			OMElement root = DataServiceXMLUtil.getOMDocFromString(dsContext.getDSConfig());
+			//Remove the existing data service config
+			Iterator children = root.getChildElements();
+			while(children.hasNext()){
+				OMElement node = (OMElement)children.next();
+			        if (node.getLocalName().equals("query")) {
+						node.detach();
+					}
+			}
+			List qIdList=getQueryIdList();
+			OMElement element;
+			for(int i=0;i<qIdList.size();i++){
+				element = createQueryElement(getQueryData((String)qIdList.get(i)));
+				root.addChild(element);	
+			}
+			OutputStream xmlOutputStream = new ByteArrayOutputStream();
+			root.serialize(xmlOutputStream);
+			//call refresh configuration
+			OutputStream stream = 
+				DataServiceXMLUtil.prettyPrintDSConfig(xmlOutputStream.toString());
+			refreshConfig(stream.toString());
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * Build the Query Element
+	 * @param propertyList : List of properties of Data Service Connection Configuration.
+	 * @return Query Element
+	 */
+	public OMElement createQueryElement(List configData){
+		//create a factory
+		OMFactory factory = OMAbstractFactory.getOMFactory();
+		//use the factory to create three elements
+		OMElement root = factory.createOMElement("query",null);
+		root.addAttribute("id",configData.get(SQLQUERY_QUERYID).toString(), null);
+
+		OMElement currentElement = factory.createOMElement("sql",null);
+		currentElement.setText(configData.get(SQLQUERY_QUERY).toString());
+		root.addChild(currentElement);
+		
+		for(int i=0;i<((List)configData.get(SQLQUERY_INPUT_MAPS)).size();i++){
+			List mapData=(List)((List)configData.get(SQLQUERY_INPUT_MAPS)).get(i);
+			currentElement = factory.createOMElement("param",null);
+			currentElement.addAttribute(
+					"name",mapData.get(SQLQUERY_IMAP_NAME).toString(), null);
+			currentElement.addAttribute(
+					"sqlType",mapData.get(SQLQUERY_IMAP_SQL_TYPE).toString(), null);
+			currentElement.addAttribute(
+					"type",mapData.get(SQLQUERY_IMAP_INOUT_TYPE).toString(), null);
+			currentElement.addAttribute(
+					"ordinal",mapData.get(SQLQUERY_IMAP_ORDINAL).toString(), null);
+			root.addChild(currentElement);
+		}
+		
+		currentElement = factory.createOMElement("result",null);
+		currentElement.addAttribute("defaultNamespace",
+				configData.get(SQLQUERY_NAME_SPACE).toString(), null);
+		currentElement.addAttribute("element",configData.get(SQLQUERY_ELEMENT).toString(), null);
+		currentElement.addAttribute("rowName",configData.get(SQLQUERY_ROW_NAME).toString(), null);
+		for(int i=0;i<((List)configData.get(SQLQUERY_OUTPUT_MAPS)).size();i++){
+			List mapData=(List)((List)configData.get(SQLQUERY_OUTPUT_MAPS)).get(i);
+			OMElement tcurrentElement = 
+				factory.createOMElement(
+						mapData.get(SQLQUERY_OMAP_TYPE).toString().toLowerCase(),null);
+			tcurrentElement.addAttribute(
+					"name",mapData.get(SQLQUERY_OMAP_OUT_FIELD).toString(), null);
+			tcurrentElement.addAttribute(
+					"column",mapData.get(SQLQUERY_OMAP_SQL_COL).toString(), null);
+			currentElement.addChild(tcurrentElement);
+		}
+		root.addChild(currentElement);
+		return root;
+	}
+	
 }
\ No newline at end of file



More information about the Ds-java-dev mailing list