19,170 → 19,30 |
*/ |
package net.brutex.mylyn.sbmconnector.ui; |
|
import java.util.List; |
|
import net.brutex.mylyn.sbmconnector.SBMConnectorPlugin; |
import net.brutex.mylyn.sbmconnector.core.SBMClient; |
import net.brutex.mylyn.sbmconnector.core.SBMRepositoryConnector; |
import net.brutex.mylyn.sbmconnector.core.model.SBMField; |
import net.brutex.mylyn.sbmconnector.core.model.SBMSystemFields; |
|
import org.eclipse.core.runtime.CoreException; |
import org.eclipse.core.runtime.IProgressMonitor; |
import org.eclipse.jface.dialogs.IMessageProvider; |
import org.eclipse.mylyn.tasks.core.TaskRepository; |
import org.eclipse.mylyn.tasks.ui.wizards.AbstractRepositorySettingsPage; |
import org.eclipse.swt.SWT; |
import org.eclipse.swt.events.ModifyEvent; |
import org.eclipse.swt.events.ModifyListener; |
import org.eclipse.swt.layout.GridData; |
import org.eclipse.swt.layout.GridLayout; |
import org.eclipse.swt.widgets.Combo; |
import org.eclipse.swt.widgets.Composite; |
import org.eclipse.swt.widgets.Event; |
import org.eclipse.swt.widgets.Label; |
import org.eclipse.swt.widgets.Listener; |
import org.eclipse.swt.widgets.Table; |
import org.eclipse.swt.widgets.TableColumn; |
import org.eclipse.swt.widgets.TableItem; |
import org.eclipse.ui.forms.widgets.ExpandableComposite; |
import org.eclipse.ui.forms.widgets.FormToolkit; |
|
public class SBMRepositorySettingsPage extends AbstractRepositorySettingsPage { |
|
private Combo table; |
private Table list; |
|
private String solutionTable = ""; |
private String solutionTableList = ""; |
private String tableFieldList = ""; |
private String tableFullFieldList = ""; |
|
public static final String STRING_SOLUTIONTABLE = "solutionTable"; |
public static final String STRING_SOLUTIONTABLELIST = "solutionTableList"; |
public static final String STRING_TABLEFIELDLIST = "tableFieldList"; |
public static final String STRING_TABLEFULLFIELDLIST = "tableFullFieldList"; |
|
public SBMRepositorySettingsPage(String title, String description, |
TaskRepository taskRepository) { |
super(title, description, taskRepository); |
setNeedsAdvanced(false); |
setNeedsValidation(true); |
setNeedsEncoding(false); |
// initialize table and table list if not null |
if (taskRepository.hasProperty(STRING_SOLUTIONTABLE)) { |
this.solutionTable = taskRepository |
.getProperty(STRING_SOLUTIONTABLE); |
} |
if (taskRepository.hasProperty(STRING_SOLUTIONTABLELIST)) { |
this.solutionTableList = taskRepository |
.getProperty(STRING_SOLUTIONTABLELIST); |
} |
if (taskRepository.hasProperty(STRING_TABLEFIELDLIST)) { |
this.tableFieldList = taskRepository |
.getProperty(STRING_TABLEFIELDLIST); |
} |
if (taskRepository.hasProperty(STRING_TABLEFULLFIELDLIST)) { |
this.tableFullFieldList = taskRepository |
.getProperty(STRING_TABLEFULLFIELDLIST); |
} |
// TODO Auto-generated constructor stub |
} |
|
@Override |
public void applyTo(TaskRepository repository) { |
super.applyTo(repository); |
if (!solutionTable.isEmpty()) { |
repository.setProperty(STRING_SOLUTIONTABLE, solutionTable); |
repository.setProperty(STRING_SOLUTIONTABLELIST, solutionTableList); |
String fieldlist = ","; |
String fullfieldlist = ","; |
for (TableItem t : list.getItems()) { |
if (t.getChecked()) |
fieldlist = fieldlist + t.getText(2) + ","; |
fullfieldlist = fullfieldlist + t.getText(2) + ","; |
} |
repository.setProperty(STRING_TABLEFIELDLIST, fieldlist); |
repository.setProperty(STRING_TABLEFULLFIELDLIST, fullfieldlist); |
} |
} |
protected void createAdditionalControls(Composite parent) { |
// TODO Auto-generated method stub |
|
@Override |
public boolean isPageComplete() { |
if (table != null && table.getText().length() > 4) { |
return super.isPageComplete(); |
} |
return false; |
} |
|
@Override |
protected void createContributionControls(Composite parentControl) { |
ExpandableComposite expander = createSection(parentControl, |
"Mashup application"); |
FormToolkit toolkit = new FormToolkit(parentControl.getDisplay()); |
Composite control = toolkit.createComposite(expander, SWT.NONE); |
GridLayout gridLayout = new GridLayout(); |
gridLayout.numColumns = 2; |
gridLayout.verticalSpacing = 5; |
gridLayout.marginWidth = 0; |
control.setLayout(gridLayout); |
control.setBackground(parentControl.getBackground()); |
|
Label label = new Label(control, SWT.NONE); |
label.setText("Table:"); |
|
table = new Combo(control, SWT.SINGLE | SWT.BORDER); |
Label label_list = new Label(control, SWT.NONE | SWT.TOP); |
label_list.setText("Fields:"); |
list = new Table(control, SWT.MULTI | SWT.BORDER | SWT.V_SCROLL |
| SWT.H_SCROLL | SWT.FULL_SELECTION | SWT.CHECK); |
list.setLinesVisible(true); |
list.setHeaderVisible(true); |
GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); |
data.heightHint = 200; |
list.setLayoutData(data); |
String[] titles = { " ", "Display Name", "DBName", "Type" }; |
for (int i = 0; i < titles.length; i++) { |
TableColumn column = new TableColumn(list, SWT.NONE); |
column.setText(titles[i]); |
} |
list.addListener(SWT.Selection, new Listener() { |
@Override |
public void handleEvent(Event event) { |
//avoid that a system field may be unchecked |
try { |
SBMSystemFields |
.valueOf(((TableItem) event.item).getText(2)); |
((TableItem) event.item).setChecked(true); |
} catch (IllegalArgumentException e) { |
// do nothing |
} |
} |
}); |
table.addListener(SWT.Selection, new Listener() { |
@Override |
public void handleEvent(Event arg0) { |
// when the table has been changed |
// try to re-read the field list |
tableFieldList = ""; |
tableFullFieldList = ""; |
try { |
SBMField[] fields = SBMRepositoryConnector.getClient( |
createTaskRepository()).getFields(table.getText()) |
.toArray(new SBMField[0]); |
fillList(list, fields); |
} catch (Exception e) { } |
if (getWizard() != null) { |
solutionTable = table.getText(); |
getWizard().getContainer().updateButtons(); |
} |
} |
|
}); |
regenerateTables(); |
expander.setClient(control); |
} |
|
@Override |
public String getConnectorKind() { |
return SBMConnectorPlugin.CONNECTOR_KIND; |
} |
194,106 → 54,38 |
|
@Override |
protected boolean isValidUrl(String url) { |
if (url.contains("<server>")) |
return false; |
if(url.contains("<server>")) return false; |
return true; |
} |
|
|
@Override |
protected void applyValidatorResult(Validator validator) { |
if (((SBMConnectionValidator) validator).getResult() != null) { |
setMessage("Validate first!", IMessageProvider.ERROR); |
setNeedsValidation(true); |
} else { |
regenerateTables(); |
getContainer().updateButtons(); |
} |
super.applyValidatorResult(validator); |
} |
|
private void regenerateTables() { |
try { |
List<String> tables = SBMRepositoryConnector.getClient( |
createTaskRepository()).getPrimaryTables(); |
for (String table_name : tables) { |
table.add(table_name); |
if (solutionTable.equals(table_name)) { |
table.setText(table_name); |
} |
} |
} catch (Exception e) { |
// it was not possible to read the list of tables |
// from the server, so just restore saved settings |
table.add(solutionTable); |
table.setText(solutionTable); |
} |
try { |
SBMField[] fields = SBMRepositoryConnector.getClient( |
createTaskRepository()).getFields(table.getText()).toArray( |
new SBMField[0]); |
fillList(list, fields); |
} catch (Exception e) { |
// it was not possible to read the fields for the given table |
// do nothing |
} |
|
} |
|
|
protected class SBMConnectionValidator extends Validator { |
private TaskRepository repository; |
private String result = null; |
|
|
protected SBMConnectionValidator(TaskRepository repository) { |
this.repository = repository; |
this.repository = repository; |
} |
|
|
@Override |
public void run(IProgressMonitor monitor) throws CoreException { |
monitor.beginTask("Prüfe Verbindung", IProgressMonitor.UNKNOWN); |
monitor.beginTask("Prüfe Verbindung", IProgressMonitor.UNKNOWN); |
SBMClient client = new SBMClient(repository); |
if (!client.canAuthenticate()) { |
if(!client.canAuthenticate()) { |
result = "Verbindung fehlgeschlagen"; |
} else { |
result = null; |
} |
result = "Verbindung erfolgreich"; |
monitor.done(); |
} |
|
public String getResult() { |
return result; |
} |
|
public String getResult() { return result; } |
} |
|
private void fillList(Table list, SBMField[] fields) { |
list.removeAll(); |
for (int i = 0; i < fields.length; i++) { |
TableItem item = new TableItem(list, 0); |
item.setText(0, ""); |
item.setText(1, fields[i].getLabel()); |
item.setText(2, fields[i].getName()); |
item.setText(3, fields[i].getType().getValue().replaceFirst( |
"FLDTYPE-", "")); |
try { |
// auto-select all system fields |
SBMSystemFields.valueOf(fields[i].getName()); |
item.setChecked(true); |
} catch (IllegalArgumentException e) { |
// do nothing |
} |
if (tableFieldList.contains(","+fields[i].getName()+",")) { |
// item has been checked before |
// so check it |
item.setChecked(true); |
} |
} |
|
for (TableColumn c : list.getColumns()) { |
c.pack(); |
} |
} |
|
@Override |
protected void createAdditionalControls(Composite arg0) { |
// TODO Auto-generated method stub |
|
} |
|
|
} |