/*
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
* or from the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* Copyright (c) 2009 Pentaho Corporation.. All rights reserved.
*/
package org.pentaho.platform.dataaccess.datasource.wizard;
import org.pentaho.platform.dataaccess.datasource.wizard.models.IWizardModel;
import org.pentaho.ui.xul.XulException;
import org.pentaho.ui.xul.binding.BindingFactory;
import org.pentaho.ui.xul.components.XulImage;
import org.pentaho.ui.xul.components.XulLabel;
import org.pentaho.ui.xul.containers.XulGrid;
import org.pentaho.ui.xul.containers.XulRow;
import org.pentaho.ui.xul.containers.XulRows;
import org.pentaho.ui.xul.gwt.GwtXulDomContainer;
import org.pentaho.ui.xul.gwt.binding.GwtBindingFactory;
import org.pentaho.ui.xul.impl.AbstractXulEventHandler;
import org.pentaho.ui.xul.stereotype.Bindable;
/**
* Todo: Document Me
*
* @author William Seyler
*/
public abstract class AbstractWizardStep extends AbstractXulEventHandler implements IWizardStep {
public static final String VALID_PROPERTY_NAME = "valid"; //$NON-NLS-1$
public static final String PREVIEWABLE_PROPERTY_NAME = "previewable"; //$NON-NLS-1$
public static final String FINISHABLE_PROPERTY_NAME = "finishable"; //$NON-NLS-1$
public static final String DISABLED_PROPERTY_NAME = "disabled"; //$NON-NLS-1$
public static final String STEP_GRID_ID = "step_grid"; //$NON-NLS-1$
public static final String STEP_ROWS_ID = "step_rows"; //$NON-NLS-1$
public static final String XUL_ROW_TYPE = "row"; //$NON-NLS-1$
public static final String XUL_IMAGE_TYPE = "image"; //$NON-NLS-1$
public static final String XUL_LABEL_TYPE = "label"; //$NON-NLS-1$
public static final String STEP_IMAGE_SRC = "images/24x24_chevron_green.png"; //$NON-NLS-1$
public static final String SPACER_IMAGE_SRC = "images/empty_spacer.png"; //$NON-NLS-1$
protected GwtXulDomContainer mainContainer;
private boolean disabled = false;
private boolean valid;
private boolean finishable;
protected BindingFactory bf;
protected XulImage stepImage;
protected XulLabel stepLabel;
protected XulRow stepRow;
private boolean activated;
protected IWizardDatasource parentDatasource;
protected IWizardModel wizardModel;
protected AbstractWizardStep(IWizardDatasource parentDatasource) {
super();
this.parentDatasource = parentDatasource;
}
/**
* Checks, whether the step is currently valid. This returns false as soon as any of the properties changed.
*
* @return true, if the model matches the step's internal state, false otherwise.
*/
@Bindable
public boolean isValid() {
return valid;
}
@Bindable
public void setValid(final boolean valid) {
this.valid = valid;
this.firePropertyChange(VALID_PROPERTY_NAME, !valid , this.valid);
}
/**
* @throws XulException
*/
public void init(IWizardModel wizardModel) throws XulException {
this.wizardModel = wizardModel;
bf = new GwtBindingFactory(document);
this.setBindings();
}
@Override
public void activating() throws XulException {
// get the grid itself so we can update it later
final XulGrid stepGrid = (XulGrid) document.getElementById(STEP_GRID_ID);
// grab the rows and add a new row to it
final XulRows stepRows = (XulRows) document.getElementById(STEP_ROWS_ID);
stepRow = (XulRow) document.createElement(XUL_ROW_TYPE);
stepRows.addChild(stepRow);
// Create and add the activeImage to the row (goes in the first column)
stepImage = (XulImage) document.createElement(XUL_IMAGE_TYPE);
stepImage.setSrc(STEP_IMAGE_SRC);
stepImage.setId(this.getStepName());
stepImage.setVisible(false);
stepRow.addChild(stepImage);
// Create and add the text label to the row (goes in the second column)
stepLabel = (XulLabel) document.createElement(XUL_LABEL_TYPE);
stepLabel.setValue(this.getStepName());
stepLabel.setFlex(1);
stepRow.addChild(stepLabel);
stepGrid.update();
activated = true;
}
public void deactivate(){
XulGrid stepGrid = (XulGrid) document.getElementById(STEP_GRID_ID);
XulRows stepRows = (XulRows) document.getElementById(STEP_ROWS_ID);
stepRows.removeChild(stepRow);
stepGrid.update();
}
public boolean isDisabled() {
return disabled;
}
public void setDisabled(boolean disabled) {
boolean oldDisabled = this.disabled;
this.disabled = disabled;
if (stepLabel != null) {
stepLabel.setDisabled(this.disabled);
}
this.firePropertyChange(DISABLED_PROPERTY_NAME, oldDisabled, this.disabled);
}
/* (non-Javadoc)
* @see org.pentaho.reporting.engine.classic.wizard.ui.xul.components.WizardStep#stepActivatingForward()
*/
public void stepActivatingForward() {
setStepImageVisible(true);
}
/* (non-Javadoc)
* @see org.pentaho.reporting.engine.classic.wizard.ui.xul.components.WizardStep#stepActivatingReverse()
*/
public void stepActivatingReverse() {
setStepImageVisible(true);
}
/* (non-Javadoc)
* @see org.pentaho.reporting.engine.classic.wizard.ui.xul.components.WizardStep#stepDeactivatingForward()
*/
public boolean stepDeactivatingForward() {
setStepImageVisible(false);
return true;
}
public void setStepImageVisible(boolean visible) {
if(stepImage != null){
stepImage.setVisible(visible);
}
}
/* (non-Javadoc)
* @see org.pentaho.reporting.engine.classic.wizard.ui.xul.components.WizardStep#stepDeactivatingReverse()
*/
public boolean stepDeactivatingReverse() {
return stepDeactivatingForward();
}
}