/**
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.extchart.editors.properties.series;
import it.eng.spagobi.studio.extchart.editors.ExtChartEditor;
import it.eng.spagobi.studio.extchart.editors.properties.series.utils.HighlightProperties;
import it.eng.spagobi.studio.extchart.editors.properties.series.utils.LabelProperties;
import it.eng.spagobi.studio.extchart.editors.properties.series.utils.MarkerConfigProperties;
import it.eng.spagobi.studio.extchart.editors.properties.series.utils.TipsProperties;
import it.eng.spagobi.studio.extchart.model.bo.Highlight;
import it.eng.spagobi.studio.extchart.model.bo.Label;
import it.eng.spagobi.studio.extchart.model.bo.MarkerConfig;
import it.eng.spagobi.studio.extchart.model.bo.Series;
import it.eng.spagobi.studio.extchart.model.bo.Tips;
import it.eng.spagobi.studio.extchart.utils.PopupPropertiesDialog;
import it.eng.spagobi.studio.extchart.utils.SWTUtils;
import java.util.Arrays;
import java.util.List;
import java.util.Vector;
import org.eclipse.swt.SWT;
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.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Spinner;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.slf4j.LoggerFactory;
public class SeriesProperties extends PopupPropertiesDialog{
private static org.slf4j.Logger logger = LoggerFactory.getLogger(SeriesProperties.class);
FormToolkit toolkit;
//Shell comp;
ExtChartEditor editor;
Spinner opacitySpinner;
Tips[] tipsHolder= new Tips[1];
Label[] labelHolder= new Label[1];
MarkerConfig[] markerConfigHolder= new MarkerConfig[1];
Highlight[] highlightHolder= new Highlight[1];
Button useLabelCheck;
Button useTipsCheck;
Button usemarkerConfigCheck;
Button useHighlightSegmentCheck;
// SWT objects:
// Text donutText;
// Button smoothButton;
// Combo axisCombo;
// Button showInLegendButton;
Combo fieldCombo;
Combo xFieldCombo;
Combo yFieldCombo;
Table fieldTable;
boolean drawField = false;
boolean drawXField = false;
boolean drawYField = false;
boolean drawYFieldList = false;
boolean drawMarkerConfig = false;
boolean drawHighlightSegment = false;
/**
* serie to be modified
*/
Series serie;
public SeriesProperties(ExtChartEditor editor, Shell comp) {
super(editor, comp);
//this.comp = comp;
this.editor = editor;
toolkit = new FormToolkit(comp.getDisplay());
}
public void drawProperties(){
logger.debug("IN");
// -----------------------------------------------
// get All column from dataset metadata table
String[] metadatas = editor.getMainChartPage().getLeftPage().getDatasetMetadataTableContent();
if(metadatas == null) metadatas = new String[0];
if(drawField)
fieldCombo = SWTUtils.drawCombo(dialog, metadatas, serie.getField(), "Field: ");
// ----------------------- X FIELD ------------------------
if(drawXField)
xFieldCombo = SWTUtils.drawCombo(dialog, metadatas, serie.getxField(), "xField: ");
// ---------------------------- Y FIELD -------------------
/*
if(drawYField)
yFieldCombo = SWTUtils.drawCombo(dialog, metadatas, serie.getyField(), "yField: ");
*/
// -------------------- Y FIELD LIST---------------------------
/*
if(drawYFieldList){
toolkit.createLabel(dialog, "yFieldList: \n(overwrites with multiple selection\n other fields settings).", SWT.NULL);
GridData gd=new GridData(GridData.FILL_BOTH);
gd.grabExcessHorizontalSpace = true;
gd.horizontalSpan=2 ;
fieldTable = new Table (dialog, SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION | SWT.V_SCROLL | SWT.H_SCROLL);
fieldTable.setLinesVisible (true);
fieldTable.setHeaderVisible (true);
fieldTable.setLayoutData(gd);
GridData dataOrder = new GridData(SWT.FILL, SWT.FILL, true, true);
dataOrder.heightHint = 100;
dataOrder.widthHint=50;
fieldTable.setLayoutData(dataOrder);
String[] titlesOrder = {" Field "};
for (int i=0; i<titlesOrder.length; i++) {
TableColumn column = new TableColumn (fieldTable, SWT.NONE);
column.setText (titlesOrder [i]);
}
logger.debug("YField_list is "+serie.getyFieldList());
// select present situation, use a vector to use contains function
Vector<String> selectedFieldsVector = new Vector<String>();
// use a vector to collect selected fields
if(serie.getyFieldList() != null ){
String[] selectedFields = serie.getyFieldList().split(",");
List<String> list = Arrays.asList(selectedFields);
selectedFieldsVector = new Vector(list);
}
//fill table with Metadata
for (int i = 0; i < metadatas.length; i++) {
String meta = metadatas[i];
TableItem item = new TableItem (fieldTable, SWT.NONE);
item.setText(meta);
if(selectedFieldsVector.contains(meta)){
int index = fieldTable.indexOf(item);
logger.debug("select "+meta+" item at index "+index);
fieldTable.select(index);
}
}
for (int i=0; i<titlesOrder.length; i++) {
fieldTable.getColumn (i).pack ();
}
// for yField_list get a table
}
// TODO: unblock and let user change fields
if (fieldTable != null){
fieldTable.setEnabled(false);
}
*/
// Check if define label
useLabelCheck = SWTUtils.drawCheck(dialog, serie.getLabel() != null, "Use Label?");
final Button labelButton = SWTUtils.drawButton(dialog, "Define Label");
final SeriesProperties toPass = this;
final Series serieIns = serie;
labelButton.addListener(SWT.Selection,
new Listener() {
public void handleEvent(Event event) {
logger.debug("Open label editor");
Label labelToPass = labelHolder[0] != null ? labelHolder[0] : serieIns.getLabel();
LabelProperties labelProperties = new LabelProperties(editor, labelToPass, dialogMain, toPass);
labelProperties.setTitle("Define label: ");
labelProperties.drawProperties();
labelProperties.drawButtons();
labelProperties.showPopup();
}
}
);
if(serie.getLabel() != null && serie.getLabel().getField() != null) {
labelButton.setEnabled(true);
useLabelCheck.setSelection(true);
}
else {
useLabelCheck.setSelection(false);
labelButton.setEnabled(false);
}
useLabelCheck.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
boolean selection = useLabelCheck.getSelection();
if(selection == true){
labelButton.setEnabled(true);
}
else{
// deleet from serie the label
serie.setLabel(null);
labelButton.setEnabled(false);
}
}
});
//Check if define Tips
tipsHolder[0] = serie.getTips();
useTipsCheck = SWTUtils.drawCheck(dialog, serie.getTips() != null, "Use Tips?");
final Button tipsButton = SWTUtils.drawButton(dialog, "Define Tips");
tipsButton.addListener(SWT.Selection,
new Listener() {
public void handleEvent(Event event) {
logger.debug("Open Tips editor");
Tips tipsToPass = tipsHolder[0] != null ? tipsHolder[0] : serieIns.getTips();
TipsProperties tipsProperties = new TipsProperties(editor, tipsToPass, dialogMain, toPass);
tipsProperties.setTitle("Define tips");
tipsProperties.setLabelForText("In Text field:\nIf you want to insert category name write {CATEGORY} \nIf you want to insert serie name write {SERIE} ");
tipsProperties.drawProperties();
tipsProperties.drawButtons();
tipsProperties.showPopup();
}
}
);
if(serie.getTips() != null && serie.getTips().getText() != null) {
useTipsCheck.setSelection(true);
tipsButton.setEnabled(true);
}
else {
useTipsCheck.setSelection(false);
tipsButton.setEnabled(false);
}
useTipsCheck.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
boolean selection = useTipsCheck.getSelection();
if(selection == true){
tipsButton.setEnabled(true);
}
else{
// deleet from serie the Tips
serie.setTips(null);
tipsButton.setEnabled(false);
}
}
});
if(drawMarkerConfig){
logger.debug("draw marker config designer");
markerConfigHolder[0] = serie.getMarkerConfig();
usemarkerConfigCheck = SWTUtils.drawCheck(dialog, serie.getMarkerConfig() != null, "Use markerConfig?");
final Button markerConfigButton = SWTUtils.drawButton(dialog, "Define MarkerConfig");
markerConfigButton.addListener(SWT.Selection,
new Listener() {
public void handleEvent(Event event) {
logger.debug("Open markerConfig editor");
MarkerConfig markerConfigToPass = markerConfigHolder[0] != null ? markerConfigHolder[0] : serieIns.getMarkerConfig();
MarkerConfigProperties markerConfigProperties = new MarkerConfigProperties(editor, markerConfigToPass, dialogMain, toPass);
markerConfigProperties.setTitle("Define Marker Config");
markerConfigProperties.drawProperties();
markerConfigProperties.drawButtons();
markerConfigProperties.showPopup();
}
}
);
if(serie.getMarkerConfig() != null && serie.getMarkerConfig().getType()!= null) {
markerConfigButton.setEnabled(true);
usemarkerConfigCheck.setSelection(true);
}
else {
markerConfigButton.setEnabled(false);
usemarkerConfigCheck.setSelection(false);
}
usemarkerConfigCheck.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
boolean selection = usemarkerConfigCheck.getSelection();
if(selection == true){
markerConfigButton.setEnabled(true);
}
else{
// deleet from serie the markerConfig
serie.setMarkerConfig(null);
markerConfigButton.setEnabled(false);
}
}
});
}
if(drawHighlightSegment){
logger.debug("highlight segment designer");
highlightHolder[0] = serie.getHighlightSegment();
useHighlightSegmentCheck = SWTUtils.drawCheck(dialog, serie.getHighlightSegment() != null, "Use Highlight Segment?");
final Button highlightSegmentButton = SWTUtils.drawButton(dialog, "Define Highlight Segment");
highlightSegmentButton.addListener(SWT.Selection,
new Listener() {
public void handleEvent(Event event) {
logger.debug("Open highlight segment editor");
Highlight highlightToPass = highlightHolder[0] != null ? highlightHolder[0] : serieIns.getHighlightSegment();
HighlightProperties highlightProperties = new HighlightProperties(editor, highlightToPass, dialogMain, toPass);
highlightProperties.setTitle("Define Highlight Segment");
highlightProperties.drawProperties();
highlightProperties.drawButtons();
highlightProperties.showPopup();
}
}
);
if(serie.getHighlightSegment() != null && serie.getHighlightSegment().getSegment().getMargin()!= null) {
highlightSegmentButton.setEnabled(true);
useHighlightSegmentCheck.setSelection(true);
}
else {
highlightSegmentButton.setEnabled(false);
useHighlightSegmentCheck.setSelection(false);
}
useHighlightSegmentCheck.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
boolean selection = useHighlightSegmentCheck.getSelection();
if(selection == true){
highlightSegmentButton.setEnabled(true);
}
else{
// delete from serie the highlight segment
serie.setHighlightSegment(null);
highlightSegmentButton.setEnabled(false);
}
}
});
}
opacitySpinner = SWTUtils.drawSpinner(dialog, serie.getStyle().getOpacity(), "Opacity: ");
logger.debug("OUT");
}
public void performOk(){
logger.debug("IN");
// save
editor.setIsDirty(true);
if(serie == null){
logger.debug("create new Serie");
serie = new Series();
}
// String valueAxis = axisCombo.getItem(axisCombo.getSelectionIndex());
// serie.setAxis(valueAxis);
// logger.debug("axis " +valueAxis);
if(drawField){
String valueField = fieldCombo.getItem(fieldCombo.getSelectionIndex());
serie.setField(valueField);
logger.debug("field " +valueField);
}
if(drawXField){
String valueX = xFieldCombo.getItem(xFieldCombo.getSelectionIndex());
serie.setxField(valueX);
logger.debug("Xfield " +valueX);
}
if(drawYField){
String valueY = yFieldCombo.getItem(yFieldCombo.getSelectionIndex());
serie.setyField(valueY);
logger.debug("Yfield " +valueY);
}
/*
if(drawYFieldList){
TableItem[] items = fieldTable.getSelection();
String selections ="";
for (int i = 0; i < items.length; i++) {
TableItem item = items[i];
selections += item.getText(0);
if(i <items.length-1){
selections += ",";
}
}
serie.setyFieldList(selections);
logger.debug("Yfield List " +selections);
}
*/
if (useLabelCheck!= null){
if(useLabelCheck.getSelection() == true && labelHolder[0] != null){
logger.debug("save label");
serie.setLabel(labelHolder[0]);
}
else{
if(useLabelCheck.getSelection() == false){
logger.debug("delete label");
serie.setLabel(null);
}
}
}
if (usemarkerConfigCheck != null){
if(usemarkerConfigCheck.getSelection() == true && markerConfigHolder[0] != null){
logger.debug("save marker Config");
serie.setMarkerConfig(markerConfigHolder[0]);
}
else{
if (usemarkerConfigCheck.getSelection() == false){
logger.debug("delete marker Config");
serie.setMarkerConfig(null);
}
}
}
if (useHighlightSegmentCheck != null){
if(useHighlightSegmentCheck.getSelection() == true && highlightHolder[0] != null){
logger.debug("save highlight");
serie.setHighlightSegment(highlightHolder[0]);
}
else{
logger.debug("delete marker Config");
serie.setMarkerConfig(null);
}
}
if (useTipsCheck != null){
if(useTipsCheck.getSelection() == true && tipsHolder[0] != null){
logger.debug("save Tips");
serie.setTips(tipsHolder[0]);
}
else{
if (useTipsCheck.getSelection() == false){
logger.debug("delete Tips");
serie.setTips(null);
}
}
}
double opacityValue = opacitySpinner.getSelection()/ Math.pow(10, opacitySpinner.getDigits());
// check it is a number
serie.getStyle().setOpacity((float)opacityValue);
logger.debug("opacity " + opacityValue);
logger.debug("OUT");
}
public boolean isDrawField() {
return drawField;
}
public void setDrawField(boolean drawField) {
this.drawField = drawField;
}
public boolean isDrawXField() {
return drawXField;
}
public void setDrawXField(boolean drawXField) {
this.drawXField = drawXField;
}
public boolean isDrawYField() {
return drawYField;
}
public void setDrawYField(boolean drawYField) {
this.drawYField = drawYField;
}
public boolean isDrawYFieldList() {
return drawYFieldList;
}
public void setDrawYFieldList(boolean drawYFieldList) {
this.drawYFieldList = drawYFieldList;
}
public Series getSerie() {
return serie;
}
public void setSerie(Series serie) {
this.serie = serie;
}
public Tips[] getTipsHolder() {
return tipsHolder;
}
public void setTipsHolder(Tips[] tipsHolder) {
this.tipsHolder = tipsHolder;
}
public MarkerConfig[] getMarkerConfigHolder() {
return markerConfigHolder;
}
public void setMarkerConfigHolder(MarkerConfig[] markerConfigHolder) {
this.markerConfigHolder = markerConfigHolder;
}
public Label[] getLabelHolder() {
return labelHolder;
}
public void setLabelHolder(Label[] labelHolder) {
this.labelHolder = labelHolder;
}
public boolean isDrawMarkerConfig() {
return drawMarkerConfig;
}
public void setDrawMarkerConfig(boolean drawMarkerConfig) {
this.drawMarkerConfig = drawMarkerConfig;
}
/**
* @return the drawHighlightSegment
*/
public boolean isDrawHighlightSegment() {
return drawHighlightSegment;
}
/**
* @param drawHighlightSegment the drawHighlightSegment to set
*/
public void setDrawHighlightSegment(boolean drawHighlightSegment) {
this.drawHighlightSegment = drawHighlightSegment;
}
/**
* @return the highlightHolder
*/
public Highlight[] getHighlightHolder() {
return highlightHolder;
}
/**
* @param highlightHolder the highlightHolder to set
*/
public void setHighlightHolder(Highlight[] highlightHolder) {
this.highlightHolder = highlightHolder;
}
}