/* (c) 2014 Open Source Geospatial Foundation - all rights reserved
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.geofence.gui.client.widget.dialog;
import com.extjs.gxt.ui.client.mvc.Dispatcher;
import com.extjs.gxt.ui.client.widget.Dialog;
import com.extjs.gxt.ui.client.widget.TabItem;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.extjs.gxt.ui.client.widget.toolbar.FillToolItem;
import com.google.gwt.user.client.ui.FormPanel;
import org.geoserver.geofence.gui.client.GeofenceEvents;
import org.geoserver.geofence.gui.client.i18n.I18nProvider;
import org.geoserver.geofence.gui.client.model.RuleModel;
import org.geoserver.geofence.gui.client.service.RulesManagerRemoteServiceAsync;
import org.geoserver.geofence.gui.client.service.WorkspacesManagerRemoteServiceAsync;
import org.geoserver.geofence.gui.client.widget.SaveStaus;
import org.geoserver.geofence.gui.client.widget.SaveStaus.EnumSaveStatus;
import org.geoserver.geofence.gui.client.widget.rule.detail.LayerAttributesTabItem;
import org.geoserver.geofence.gui.client.widget.rule.detail.LayerCustomPropsTabItem;
import org.geoserver.geofence.gui.client.widget.rule.detail.RuleDetailsTabItem;
import org.geoserver.geofence.gui.client.widget.rule.detail.RuleLimitsTabItem;
import org.geoserver.geofence.gui.client.widget.tab.TabWidget;
/**
* The Class RuleDetailsEditDialog.
*/
public class RuleDetailsEditDialog extends Dialog
{
/** The Constant RULE_DETAILS_DIALOG_ID. */
public static final String RULE_DETAILS_DIALOG_ID = "ruleDetailsDialog";
/** The Constant RULE_LAYER_ATTRIBUTES_DIALOG_ID. */
public static final String RULE_LAYER_ATTRIBUTES_DIALOG_ID = "ruleLayerAttributesDialog";
/** The Constant RULE_LAYER_CUSTOM_PROPS_DIALOG_ID. */
public static final String RULE_LAYER_CUSTOM_PROPS_DIALOG_ID = "ruleLayerCustomPropsDialog";
/** The Constant RULE_LIMITS_DIALOG_ID. */
public static final String RULE_LIMITS_DIALOG_ID = "ruleLimitsDialog";
/** The form panel. */
private FormPanel formPanel;
/** The preview fp. */
private com.extjs.gxt.ui.client.widget.form.FormPanel previewFP;
/** The save status. */
private SaveStaus saveStatus;
/** The done. */
private Button done;
/** The wkt. */
protected String wkt;
/** The model. */
private RuleModel model;
/** The rules manager service remote. */
private RulesManagerRemoteServiceAsync rulesManagerServiceRemote;
private WorkspacesManagerRemoteServiceAsync workspacesManagerServiceRemote;
/** The tab widget. */
private TabWidget tabWidget;
/**
* Instantiates a new rule details edit dialog.
*
* @param rulesManagerServiceRemote
* the rules manager service remote
*/
public RuleDetailsEditDialog(RulesManagerRemoteServiceAsync rulesManagerServiceRemote,
WorkspacesManagerRemoteServiceAsync workspacesManagerServiceRemote)
{
this.rulesManagerServiceRemote = rulesManagerServiceRemote;
this.workspacesManagerServiceRemote = workspacesManagerServiceRemote;
setTabWidget(new TabWidget());
setResizable(false);
setButtons("");
setClosable(true);
setModal(true);
setWidth(700);
setHeight(427);
setId(I18nProvider.getMessages().ruleDialogId());
add(this.getTabWidget());
// this.addListener(Events.Hide, new Listener<WindowEvent>() {
//
// public void handleEvent(WindowEvent be) {
// reset();
// }
// });
//
// this.addListener(Events.Show, new Listener<WindowEvent>() {
//
// public void handleEvent(WindowEvent be) {
// mapPreviewWidget.getMapWidget().getMap().zoomToMaxExtent();
// // mapPreviewWidget.getMapWidget().getMap().zoomTo(1);
// mapPreviewWidget.getMapWidget().getMap().updateSize();
// }
// });
//
// this.createUpload();
// this.createMapPreview();
// add(this.previewFP);
}
/* (non-Javadoc)
* @see com.extjs.gxt.ui.client.widget.Dialog#createButtons()
*/
@Override
protected void createButtons()
{
super.createButtons();
this.saveStatus = new SaveStaus();
this.saveStatus.setAutoWidth(true);
getButtonBar().add(saveStatus);
getButtonBar().add(new FillToolItem());
// this.done = new Button("Done", new SelectionListener<ButtonEvent>() {
// @Override
// public void componentSelected(ButtonEvent ce) {
// hide();
// }
// });
//
// addButton(done);
}
/* (non-Javadoc)
* @see com.extjs.gxt.ui.client.widget.Window#show()
*/
@Override
public void show()
{
this.show(true);
}
public void show(boolean loadModel)
{
if (getModel() != null)
{
String layer = model.getLayer();
String workspace = model.getWorkspace();
String grant = model.getGrant();
if ((layer != null) && !layer.equalsIgnoreCase("*") && grant.equalsIgnoreCase("ALLOW"))
{
setHeading("Editing Details for Rule #" + model.getPriority());
//if (workspace.equals("*") && !layer.equalsIgnoreCase("*"))
//else
{
TabItem ruleDetailsTabItem = new RuleDetailsTabItem(RULE_DETAILS_DIALOG_ID, model,
workspacesManagerServiceRemote, loadModel);
this.tabWidget.add(ruleDetailsTabItem);
if ((model.getLayer() != null) && !model.getLayer().equalsIgnoreCase("*"))
{
TabItem layerAttributesItem = new LayerAttributesTabItem(RULE_LAYER_ATTRIBUTES_DIALOG_ID, model,
rulesManagerServiceRemote);
this.tabWidget.add(layerAttributesItem);
// AF: Refactor ... remove layer custom props
/*TabItem layersCustomPropsItem = new LayerCustomPropsTabItem(RULE_LAYER_CUSTOM_PROPS_DIALOG_ID,
model, rulesManagerServiceRemote);
this.tabWidget.add(layersCustomPropsItem);*/
this.tabWidget.setSelection(ruleDetailsTabItem);
}
}
}
else if (grant.equalsIgnoreCase("LIMIT"))
{
setHeading("Editing Limits for Rule #" + model.getPriority());
TabItem ruleLimitsTabItem = new RuleLimitsTabItem(RULE_LIMITS_DIALOG_ID, model,
rulesManagerServiceRemote, loadModel);
this.tabWidget.add(ruleLimitsTabItem);
this.tabWidget.setSelection(ruleLimitsTabItem);
}
else
{
Dispatcher.forwardEvent(GeofenceEvents.SEND_ALERT_MESSAGE,
new String[]
{
"Rule Properties Editor",
"Rule details editor actually enabled only for Rules which specifies a Layer on the filter."
});
}
// // TODO: Temporary. To be removed as soon as the rule editor will be completed!
// if (layer == null || layer.equalsIgnoreCase("*")) {
// Dispatcher.forwardEvent(GeofenceEvents.SEND_ALERT_MESSAGE,
// new String[] {
// "Rule Properties Editor",
// "Rule details editor actually enabled only for Rules which specifies a Layer on the filter."
// }
// );
// } else {
// setHeading("Editing Details for Rule #" + model.getPriority() );
// TabItem ruleDetailsTabItem = new RuleDetailsTabItem(RULE_DETAILS_DIALOG_ID, model, workspacesManagerServiceRemote);
// this.tabWidget.add(ruleDetailsTabItem);
//
// if (model.getLayer() != null && !model.getLayer().equalsIgnoreCase("*")) {
// TabItem layerAttributesItem = new LayerAttributesTabItem(RULE_LAYER_ATTRIBUTES_DIALOG_ID, model, rulesManagerServiceRemote);
// TabItem layersCustomPropsItem = new LayerCustomPropsTabItem(RULE_LAYER_CUSTOM_PROPS_DIALOG_ID, model, rulesManagerServiceRemote);
//
// this.tabWidget.add(layerAttributesItem);
// this.tabWidget.add(layersCustomPropsItem);
//
// this.tabWidget.setSelection(ruleDetailsTabItem);
// }
// }
}
super.show();
}
/**
* Reset.
*/
public void reset()
{
// this.done.disable();
this.tabWidget.removeAll();
this.saveStatus.clearStatus("");
}
/**
* Sets the save status.
*
* @param status
* the status
* @param message
* the message
*/
public void setSaveStatus(EnumSaveStatus status, EnumSaveStatus message)
{
this.saveStatus.setIconStyle(status.getValue());
this.saveStatus.setText(message.getValue());
}
/**
* Sets the model.
*
* @param model
* the new model
*/
public void setModel(RuleModel model)
{
this.model = model;
}
/* (non-Javadoc)
* @see com.extjs.gxt.ui.client.widget.Component#getModel()
*/
public RuleModel getModel()
{
return model;
}
/**
* Sets the tab widget.
*
* @param tabWidget
* the new tab widget
*/
public void setTabWidget(TabWidget tabWidget)
{
this.tabWidget = tabWidget;
}
/**
* Gets the tab widget.
*
* @return the tab widget
*/
public TabWidget getTabWidget()
{
return tabWidget;
}
}