/**
SpagoBI, the Open Source Business Intelligence suite
Copyright (C) 2012 Engineering Ingegneria Informatica S.p.A. - SpagoBI Competency Center
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this file,
You can obtain one at http://mozilla.org/MPL/2.0/.
**/
package it.eng.spagobi.studio.geo.editors;
import it.eng.spagobi.server.services.api.bo.IDataStoreMetadata;
import it.eng.spagobi.server.services.api.bo.IDataStoreMetadataField;
import it.eng.spagobi.server.services.api.exception.MissingParValueException;
import it.eng.spagobi.server.services.api.exception.NoServerException;
import it.eng.spagobi.studio.geo.editors.model.bo.DatamartProviderBO;
import it.eng.spagobi.studio.geo.editors.model.bo.HierarchyBO;
import it.eng.spagobi.studio.geo.editors.model.bo.LevelBO;
import it.eng.spagobi.studio.geo.editors.model.geo.GEODocument;
import it.eng.spagobi.studio.geo.editors.model.geo.Hierarchies;
import it.eng.spagobi.studio.geo.editors.model.geo.Hierarchy;
import it.eng.spagobi.studio.geo.editors.model.geo.Level;
import it.eng.spagobi.studio.geo.editors.model.geo.Link;
import it.eng.spagobi.studio.utils.bo.DataStoreMetadata;
import it.eng.spagobi.studio.utils.bo.DataStoreMetadataField;
import it.eng.spagobi.studio.utils.bo.Dataset;
import it.eng.spagobi.studio.utils.bo.GeoFeature;
import it.eng.spagobi.studio.utils.exceptions.NoActiveServerException;
import it.eng.spagobi.studio.utils.services.SpagoBIServerObjectsFactory;
import java.util.Iterator;
import java.util.Vector;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
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.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HierarchiesDesigner {
private static Logger logger = LoggerFactory.getLogger(HierarchiesDesigner.class);
private GEOEditor editor=null;
private Composite mainComposite;
private GEODocument geoDocument;
Label emptyTree=null;
public HierarchiesDesigner(Composite _composite, GEOEditor _editor) {
super();
mainComposite= _composite;
editor = _editor;
}
public HierarchiesDesigner(Composite _composite, GEOEditor _editor, GEODocument _geoDocument) {
super();
mainComposite= _composite;
editor = _editor;
geoDocument = _geoDocument;
}
private void fillHierarchiesTree(Tree hierarchiesTree){
Hierarchies hierarchies = HierarchyBO.getAllHierarchies(geoDocument);
//create hierarchies
if(hierarchies != null && hierarchies.getHierarchy()!= null){
for(int i=0; i < hierarchies.getHierarchy().size(); i++){
Hierarchy hierarchy = hierarchies.getHierarchy().elementAt(i);
TreeItem item = new TreeItem(hierarchiesTree, SWT.NONE);
item.setText(hierarchy.getName());
if(hierarchy.getLevels() != null){
for(int j=0; j < hierarchy.getLevels().size(); j++){
Level level = hierarchy.getLevels().elementAt(j);
TreeItem itemLev = new TreeItem(item, SWT.NONE);
itemLev.setText(level.getName());
}
}
}
}
hierarchiesTree.getParent().getParent().redraw();
}
private void createNewHierarchy(Tree hierarchiesTree, String name, String type){
TreeItem iItem = new TreeItem(hierarchiesTree, SWT.NONE);
iItem.setText(name);
hierarchiesTree.getParent().getParent().redraw();
//crea oggetto java con name+type
HierarchyBO.setNewHierarchy(geoDocument, name, type);
editor.setIsDirty(true);
}
private void updateHierarchy(Tree hierarchiesTree, String name, String type, Hierarchy hierarchy){
TreeItem iItem = hierarchiesTree.getSelection()[0];
iItem.setText(name);
hierarchy.setName(name);
hierarchy.setType(type);
editor.setIsDirty(true);
}
private void createNewLevel(Tree hierarchiesTree, Level newLevel, TreeItem parent, boolean isDefault){
TreeItem iItem = new TreeItem(parent, SWT.NONE);
iItem.setText(newLevel.getName());
hierarchiesTree.getParent().getParent().redraw();
LevelBO.setNewLevel(geoDocument, parent.getText(), newLevel);
if(isDefault){
DatamartProviderBO.setHierarchy(geoDocument, parent.getText(), newLevel.getName());
}
editor.setIsDirty(true);
}
private void updateLevel(Tree hierarchiesTree, Level newLevel, TreeItem parent, Level oldLevel, boolean isDefault){
TreeItem iItem = hierarchiesTree.getSelection()[0];
iItem.setText(newLevel.getName());
LevelBO.updateLevel(geoDocument, iItem.getParentItem().getText(), oldLevel, newLevel);
if(isDefault){
DatamartProviderBO.setHierarchy(geoDocument, parent.getText(), oldLevel.getName());
}
hierarchiesTree.getParent().getParent().redraw();
oldLevel = newLevel;
editor.setIsDirty(true);
}
private void deleteItem(Tree hierarchiesTree, TreeItem item){
//elimina oggetto java
if(item.getParentItem() == null){
// check hierarchy is not used by cross navigation
if(canEraseHierarchy(geoDocument, item.getText())){
//hierarchy--> delete hierarchy
HierarchyBO.deleteHierarchy(geoDocument, item.getText());
item.dispose();
editor.setIsDirty(true);
}
else{
MessageDialog.openWarning(mainComposite.getShell(), "Warning", "Cannot delete hierarchy because is used in cross navigation section");
}
}else{
// check level is not used by cross navigation
if(canEraseLevel(geoDocument, item.getText())){
//level--> deleteLevel
LevelBO.deleteLevel(geoDocument, item.getParentItem().getText(), item.getText());
item.dispose();
editor.setIsDirty(true);
}
else{
MessageDialog.openWarning(mainComposite.getShell(), "Warning", "Cannot delete Level because is used in cross navigation section");
}
}
//hierarchiesTree.pack();
hierarchiesTree.redraw();
}
private boolean canEraseHierarchy(GEODocument document, String hierarchyName){
boolean can=true;
if(geoDocument.getDatamartProvider()!=null && geoDocument.getDatamartProvider().getCrossNavigation()!=null && geoDocument.getDatamartProvider().getCrossNavigation().getLinks()!=null){
Vector<Link> links=geoDocument.getDatamartProvider().getCrossNavigation().getLinks();
for (Iterator iterator = links.iterator(); iterator.hasNext() && can==true;) {
Link link = (Link) iterator.next();
if(link.getHierarchy()!=null && link.getHierarchy().equalsIgnoreCase(hierarchyName)){
can=false;
}
}
}
return can;
}
private boolean canEraseLevel(GEODocument document, String levelName){
boolean can=true;
if(geoDocument.getDatamartProvider()!=null && geoDocument.getDatamartProvider().getCrossNavigation()!=null && geoDocument.getDatamartProvider().getCrossNavigation().getLinks()!=null){
Vector<Link> links=geoDocument.getDatamartProvider().getCrossNavigation().getLinks();
for (Iterator iterator = links.iterator(); iterator.hasNext() && can==true;) {
Link link = (Link) iterator.next();
if(link.getLevel()!=null && link.getLevel().equalsIgnoreCase(levelName)){
can=false;
}
}
}
return can;
}
private void createMenu(final Composite sectionClient, final Tree hierarchiesTree){
Menu menu = new Menu (sectionClient.getShell(), SWT.POP_UP);
MenuItem menuItem = new MenuItem (menu, SWT.PUSH);
menuItem.setText ("New Hierarchy");
menuItem.addListener(SWT.Selection, new Listener () {
public void handleEvent (Event event) {
TreeItem[] sel = hierarchiesTree.getSelection();
if(sel.length>=1 && sel[0] != null && sel[0].getParentItem() != null){//ha selez un livello--> errore
MessageDialog.openError(sectionClient.getShell(), "Error", "Wrong position");
}else{
createNewHierarchyShell(hierarchiesTree, null);
if(emptyTree!=null && emptyTree.isVisible()){
emptyTree.setVisible(false);
}
}
}
});
menuItem = new MenuItem (menu, SWT.PUSH);
menuItem.setText ("New Level");
menuItem.addListener(SWT.Selection, new Listener () {
public void handleEvent (Event event) {
TreeItem[] sel = hierarchiesTree.getSelection();
if(sel[0] != null && sel[0].getParentItem() == null){
createNewLevelShell(hierarchiesTree, sel[0], null);
}else{
MessageDialog.openError(sectionClient.getShell(), "Error", "Wrong position. Please select a hierarchy");
}
}
});
menuItem = new MenuItem (menu, SWT.PUSH);
menuItem.setText ("Delete");
menuItem.addListener(SWT.Selection, new Listener () {
public void handleEvent (Event event) {
TreeItem[] sel = hierarchiesTree.getSelection();
if(sel[0] != null){
deleteItem(hierarchiesTree, sel[0]);
}else{
MessageDialog.openWarning(sectionClient.getShell(), "Warning", "Please select an item to delete");
}
}
});
hierarchiesTree.setMenu(menu);
}
public void createHierarchiesTree(final Composite sectionClient, FormToolkit toolkit){
GridData gd = new GridData(GridData.FILL_BOTH);
gd.horizontalSpan =4;
gd.heightHint=150;
gd.minimumHeight=70;
gd.verticalAlignment=SWT.TOP;
gd.verticalSpan=1;
gd.grabExcessVerticalSpace=true;
final Composite hierarchiesGroup = new Composite(sectionClient, SWT.RESIZE);
//hierarchiesGroup.setText("Hierarchies");
hierarchiesGroup.setLayoutData(gd);
hierarchiesGroup.setLayout(sectionClient.getLayout());
final Tree hierarchiesTree = toolkit.createTree(hierarchiesGroup, SWT.NONE | SWT.V_SCROLL | SWT.H_SCROLL | SWT.SINGLE );
hierarchiesTree.setLayoutData(gd);
Color color = new org.eclipse.swt.graphics.Color(sectionClient.getDisplay(), 255,0,0);
if(geoDocument.getDatamartProvider().getHierarchies() == null ||
geoDocument.getDatamartProvider().getHierarchies().getHierarchy() == null ||
geoDocument.getDatamartProvider().getHierarchies().getHierarchy().size() == 0){
emptyTree = toolkit.createLabel(hierarchiesGroup, "empty hierarchies tree...right click here to create", SWT.CENTER | SWT.TOP);
emptyTree.setForeground(color);
emptyTree.setLayoutData(gd);
emptyTree.addListener(SWT.MouseDown, new Listener () {
public void handleEvent (Event event) {
if (event.button==3){
createNewHierarchyShell(hierarchiesTree, null);
emptyTree.setVisible(false);
}
}
});
gd = new GridData(GridData.FILL_BOTH);
gd.horizontalSpan =4;
gd.heightHint=50;
gd.minimumHeight=40;
gd.verticalSpan=1;
emptyTree.setLayoutData(gd);
}else{
fillHierarchiesTree(hierarchiesTree);
}
//mouseDoubleClick --> modify
hierarchiesTree.addListener(SWT.MouseDoubleClick, new Listener () {
public void handleEvent (Event event) {
TreeItem[] sel = hierarchiesTree.getSelection();
if(sel[0] != null){
if(sel[0].getParentItem()== null){
//hierarchy
Hierarchy hierarchy= HierarchyBO.getHierarchyByName(geoDocument, sel[0].getText());
createNewHierarchyShell(hierarchiesTree, hierarchy);
}else{
//level
Level level = LevelBO.getLevelByName(geoDocument, sel[0].getParentItem().getText(), sel[0].getText());
createNewLevelShell(hierarchiesTree, sel[0], level);
}
}else{
MessageDialog.openWarning(sectionClient.getShell(), "Warning", "Please select an item to update");
}
}
});
//rightClick --> menu
hierarchiesTree.addListener(SWT.MouseDown, new Listener () {
public void handleEvent (Event event) {
if (event.button==3){
createMenu(sectionClient, hierarchiesTree);
}
}
});
hierarchiesGroup.redraw();
sectionClient.getParent().redraw();
}
private void createNewHierarchyShell(final Tree hierarchiesTree, final Hierarchy hierarchy){
final Shell dialog = new Shell (mainComposite.getDisplay(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
dialog.setText("New Hierarchy");
FormLayout formLayout = new FormLayout ();
formLayout.marginWidth = 10;
formLayout.marginHeight = 10;
formLayout.spacing = 10;
dialog.setLayout (formLayout);
Label label = new Label (dialog, SWT.RIGHT);
label.setText ("Hierarchy name:");
FormData data = new FormData ();
data.width = 100;
label.setLayoutData (data);
Button cancel = new Button (dialog, SWT.PUSH);
cancel.setText ("Cancel");
data = new FormData ();
data.width = 60;
data.right = new FormAttachment (100, 0);
data.bottom = new FormAttachment (100, 0);
cancel.setLayoutData (data);
cancel.addSelectionListener (new SelectionAdapter () {
public void widgetSelected (SelectionEvent e) {
// System.out.println("User cancelled dialog");
dialog.close ();
}
});
final Text text = new Text (dialog, SWT.BORDER);
if(hierarchy != null){
text.setText(hierarchy.getName());
}
data = new FormData ();
data.width = 200;
data.left = new FormAttachment (label, 0, SWT.DEFAULT);
data.right = new FormAttachment (100, 0);
data.top = new FormAttachment (label, 0, SWT.CENTER);
//data.bottom = new FormAttachment (cancel, 0, SWT.DEFAULT);
text.setLayoutData (data);
//type
data = new FormData ();
data.width = 100;
data.top = new FormAttachment(text, 5);
Label labelType = new Label (dialog, SWT.RIGHT);
labelType.setText ("Type:");
labelType.setLayoutData (data);
final Combo textType = new Combo(dialog, SWT.BORDER);
//textType.add("default");
textType.add("custom");
// final Text textType = new Text (dialog, SWT.BORDER);
textType.select(0);
if(hierarchy != null){
if(hierarchy.getType()!=null){
if(hierarchy.getType().equalsIgnoreCase("default")){
textType.select(0);
}
else{
textType.select(1);
}
}
}
data = new FormData ();
data.width = 200;
data.left = new FormAttachment (labelType, 0, SWT.DEFAULT);
data.right = new FormAttachment (100, 0);
data.top = new FormAttachment (labelType, 0, SWT.CENTER);
data.bottom = new FormAttachment (cancel, 0, SWT.DEFAULT);
textType.setLayoutData (data);
Button ok = new Button (dialog, SWT.PUSH);
ok.setText ("OK");
data = new FormData ();
data.width = 60;
data.right = new FormAttachment (cancel, 0, SWT.DEFAULT);
data.bottom = new FormAttachment (100, 0);
ok.setLayoutData (data);
ok.addSelectionListener (new SelectionAdapter () {
public void widgetSelected (SelectionEvent e) {
//create tree item
String type = textType.getText();
String name = text.getText();
if(hierarchy == null){
createNewHierarchy(hierarchiesTree, name, type);
}else{
updateHierarchy(hierarchiesTree, name, type, hierarchy);
}
dialog.close ();
}
});
dialog.setDefaultButton (ok);
dialog.pack ();
dialog.open ();
}
private void createNewLevelShell(final Tree hierarchiesTree, final TreeItem selectedItem, final Level level){
final Shell dialog = new Shell (mainComposite.getDisplay(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
dialog.setText("New Level for "+selectedItem);
FormLayout formLayout = new FormLayout ();
formLayout.marginWidth = 10;
formLayout.marginHeight = 10;
formLayout.spacing = 10;
dialog.setLayout (formLayout);
Label label = new Label (dialog, SWT.RIGHT);
label.setText ("Level name:");
FormData data = new FormData ();
data.width = 100;
label.setLayoutData (data);
Button cancel = new Button (dialog, SWT.PUSH);
cancel.setText ("Cancel");
data = new FormData ();
data.width = 60;
data.right = new FormAttachment (100, 0);
data.bottom = new FormAttachment (100, 0);
cancel.setLayoutData (data);
cancel.addSelectionListener (new SelectionAdapter () {
public void widgetSelected (SelectionEvent e) {
// System.out.println("User cancelled dialog");
dialog.close ();
}
});
final Text text = new Text (dialog, SWT.BORDER);
if(level != null){
text.setText(level.getName());
}
data = new FormData ();
data.width = 200;
data.left = new FormAttachment (label, 0, SWT.DEFAULT);
data.right = new FormAttachment (100, 0);
data.top = new FormAttachment (label, 0, SWT.CENTER);
text.setLayoutData (data);
//dataset column
data = new FormData ();
data.width = 100;
data.top = new FormAttachment(text, 5);
Label labelColumn = new Label (dialog, SWT.RIGHT);
labelColumn.setText ("Dataset column:");
labelColumn.setLayoutData (data);
final Combo textColumn = drawColumnIdCombo(dialog);
if(textColumn == null){
MessageDialog.openError(mainComposite.getShell(), "Error", "Select a dataset!");
return;
}
if(level != null){
for(int i=0; i<textColumn.getItemCount();i++){
String val = textColumn.getItem(i);
if(val.equals(level.getColumnId())){
textColumn.select(i);
}
}
}
data = new FormData ();
data.width = 125;
data.left = new FormAttachment (labelColumn, 0, SWT.DEFAULT);
data.right = new FormAttachment (75, 0);
data.top = new FormAttachment (labelColumn, 0, SWT.CENTER);
textColumn.setLayoutData (data);
//is default
data = new FormData ();
data.width = 75;
data.left = new FormAttachment (textColumn, 5, SWT.DEFAULT);
data.top = new FormAttachment(text, 5);
final Button checkIsDef = new Button(dialog, SWT.CHECK | SWT.RIGHT);
final boolean[] isDefault = new boolean[1];
isDefault[0] = true;
checkIsDef.setText("Is default");
checkIsDef.setSelection(true);
if(level != null){
String defHier =geoDocument.getDatamartProvider().getHierarchy();
String defLev =geoDocument.getDatamartProvider().getLevel();
if(defHier!=null && selectedItem.getParentItem()!=null && defLev!=null && level!=null && level.getName()!=null){
if(defHier.equals(selectedItem.getParentItem().getText()) && defLev.equals(level.getName())){
checkIsDef.setSelection(true);
}
}
}
checkIsDef.setLayoutData (data);
checkIsDef.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent event) {
isDefault[0] = event.widget == checkIsDef;
}
public void widgetDefaultSelected(SelectionEvent event) {
isDefault[0] = event.widget == checkIsDef;
}
});
//description
data = new FormData ();
data.width = 100;
data.top = new FormAttachment(checkIsDef, 5);
Label labelDescr = new Label (dialog, SWT.RIGHT);
labelDescr.setText ("Description:");
labelDescr.setLayoutData (data);
final Text textDescription = new Text (dialog, SWT.BORDER);
if(level != null){
textDescription.setText(level.getColumnDesc());
}
data = new FormData ();
data.width = 200;
data.left = new FormAttachment (labelDescr, 0, SWT.DEFAULT);
data.right = new FormAttachment (100, 0);
data.top = new FormAttachment (labelDescr, 0, SWT.CENTER);
textDescription.setLayoutData (data);
//feature
data = new FormData ();
data.width = 100;
data.top = new FormAttachment(textDescription, 5);
Label labelFeature = new Label (dialog, SWT.RIGHT);
labelFeature.setText ("Feature:");
labelFeature.setLayoutData (data);
final Combo textFeature = drawFeaturesNameCombo(dialog);
if(textFeature == null){
MessageDialog.openError(mainComposite.getShell(), "Error", "Select a map!");
return;
}
if(level != null){
for(int i=0; i<textFeature.getItemCount();i++){
String val = textFeature.getItem(i);
if(val.equals(level.getFeatureName())){
textFeature.select(i);
}
}
}
data = new FormData ();
data.width = 200;
data.left = new FormAttachment (labelFeature, 0, SWT.DEFAULT);
data.right = new FormAttachment (100, 0);
data.top = new FormAttachment (labelFeature, 0, SWT.CENTER);
data.bottom = new FormAttachment (cancel, 0, SWT.DEFAULT);
textFeature.setLayoutData (data);
Button ok = new Button (dialog, SWT.PUSH);
ok.setText ("OK");
data = new FormData ();
data.width = 60;
data.right = new FormAttachment (cancel, 0, SWT.DEFAULT);
data.bottom = new FormAttachment (100, 0);
ok.setLayoutData (data);
ok.addSelectionListener (new SelectionAdapter () {
public void widgetSelected (SelectionEvent e) {
//create tree item
String columnId = textColumn.getText();
String columnDesc = textDescription.getText();
String feature = textFeature.getText();
String name = text.getText();
Level newLevel = new Level();
newLevel.setName(name);
newLevel.setColumnId(columnId);
newLevel.setColumnDesc(columnDesc);
newLevel.setFeatureName(feature);
if(level == null){
if(selectedItem.getParentItem() != null){ // should not happen because hierarchy node is root
createNewLevel(hierarchiesTree, newLevel, selectedItem.getParentItem(), isDefault[0]);
}
else{
createNewLevel(hierarchiesTree, newLevel, selectedItem, isDefault[0]);
}
}else{
if(selectedItem.getParentItem() != null){
updateLevel(hierarchiesTree, newLevel, selectedItem.getParentItem(), level, isDefault[0]);
}
else{ //should not happen because level node is not root
updateLevel(hierarchiesTree, newLevel, selectedItem, level, isDefault[0]);
}
}
dialog.close ();
}
});
dialog.setDefaultButton (ok);
dialog.pack ();
dialog.open ();
}
private Combo drawColumnIdCombo(final Shell dialog){
final Combo textColumn = new Combo(dialog, SWT.SINGLE | SWT.READ_ONLY);
String datasetLabel=editor.getSelectedDataset();
if(datasetLabel == null){
return null;
}
IDataStoreMetadata dataStoreMetadata=null;
// get the metadata
if(editor.getTempDsMetadataInfos().get(datasetLabel)!=null){
dataStoreMetadata=editor.getTempDsMetadataInfos().get(datasetLabel);
}
else{
Dataset dataset = editor.getDatasetInfos().get(datasetLabel);
SpagoBIServerObjectsFactory sbso= null;
try{
sbso =new SpagoBIServerObjectsFactory(editor.getProjectName());
}catch (NoActiveServerException e1) {
logger.error("No active server found",e1);
return null;
}
try{
if(dataset.getId() != null){
dataStoreMetadata=sbso.getServerDatasets().getDataStoreMetadata(dataset.getId());
}
if(dataStoreMetadata!=null){
//editor.getTempDsMetadataInfos().put(datasetLabel, dataStoreMetadata);
}
else{
logger.warn("Dataset returned no metadata");
MessageDialog.openWarning(mainComposite.getShell(), "Warning", "Dataset with label = "+datasetLabel+" returned no metadata");
}
}
catch (MissingParValueException e2) {
logger.error("Could not execute dataset with label = "+datasetLabel+" metadata: execute dataset test in server to retrieve metadata", e2);
MessageDialog.openError(mainComposite.getShell(), "Error", "Could not execute dataset with label = "+datasetLabel+" metadata: probably missing parameter");
}
catch (NoServerException e1) {
logger.error("Error No comunciation with server retrieving dataset with label = "+datasetLabel+" metadata", e1);
MessageDialog.openError(mainComposite.getShell(), "Error", "No comunciation with server retrieving dataset with label = "+datasetLabel+" metadata");
}
}
if(dataStoreMetadata!=null){
for (int i = 0; i < dataStoreMetadata.getFieldsMetadata().length; i++) {
IDataStoreMetadataField dsmf=dataStoreMetadata.getFieldsMetadata()[i];
String column = dsmf.getName();
textColumn.add(column);
}
//dialog.redraw();
}
return textColumn;
}
private Combo drawFeaturesNameCombo(final Shell dialog){
final Combo textFeature = new Combo(dialog, SWT.SINGLE | SWT.READ_ONLY);
GeoFeature[] geoFeatures=null;
SpagoBIServerObjectsFactory sbso= null;
try{
sbso =new SpagoBIServerObjectsFactory(editor.getProjectName());
}catch (NoActiveServerException e1) {
logger.error("No active server found",e1);
return null;
}
try{
geoFeatures=sbso.getServerMaps().getAllFeatures();
if(geoFeatures==null){
logger.warn("No features returned");
MessageDialog.openWarning(mainComposite.getShell(), "Warning", "No features returned");
}
}
catch (Exception e1) {
logger.error("Could not get features", e1);
MessageDialog.openError(mainComposite.getShell(), "Error", "Could not get features");
}
if(geoFeatures!=null){
for (int i = 0; i < geoFeatures.length; i++) {
GeoFeature geoFeature=geoFeatures[i];
textFeature.add(geoFeature.getName());
}
}
return textFeature;
}
public GEOEditor getEditor() {
return editor;
}
public void setEditor(GEOEditor editor) {
this.editor = editor;
}
public Composite getMainComposite() {
return mainComposite;
}
public void setMainComposite(Composite mainComposite) {
this.mainComposite = mainComposite;
}
public GEODocument getGeoDocument() {
return geoDocument;
}
public void setGeoDocument(GEODocument geoDocument) {
this.geoDocument = geoDocument;
}
}