Updated Rules

git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/user/tabular-data-expression-widget@114370 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
Giancarlo Panichi 2015-04-23 14:13:15 +00:00
parent 28897293e4
commit 3ee14bc7f9
13 changed files with 572 additions and 43 deletions

View File

@ -254,3 +254,35 @@ Compiling...
Compilation completed in 0.00 seconds
Removing invalidated units
Finding entry point classes
Public resources found in...
Translatable source found in...
Found 0 cached/archived units. Used 0 / 2737 units from cache.
Compiling...
40% complete (ETR: 6 seconds)
40% complete (ETR: 6 seconds)
40% complete (ETR: 6 seconds)
40% complete (ETR: 6 seconds)
40% complete (ETR: 6 seconds)
50% complete (ETR: 5 seconds)
60% complete (ETR: 4 seconds)
70% complete (ETR: 3 seconds)
80% complete (ETR: 2 seconds)
90% complete (ETR: 1 seconds)
100% complete (ETR: 0 seconds)
Compilation completed in 15.84 seconds
Removing invalidated units
Finding entry point classes
Public resources found in...
Translatable source found in...
Found 2737 cached/archived units. Used 2737 / 2737 units from cache.
Compiling...
Compilation completed in 0.00 seconds
Removing invalidated units
Finding entry point classes
Public resources found in...
Translatable source found in...
Found 2737 cached/archived units. Used 2737 / 2737 units from cache.
Compiling...
Compilation completed in 0.00 seconds
Removing invalidated units
Finding entry point classes

View File

@ -0,0 +1,161 @@
package org.gcube.portlets.user.td.expressionwidget.client;
import java.util.ArrayList;
import org.gcube.portlets.user.td.expressionwidget.client.notification.RuleEditDialogNotification;
import org.gcube.portlets.user.td.expressionwidget.client.notification.RuleEditDialogNotification.HasRuleEditDialogNotificationListener;
import org.gcube.portlets.user.td.expressionwidget.client.notification.RuleEditDialogNotification.RuleEditDialogNotificationListener;
import org.gcube.portlets.user.td.expressionwidget.client.resources.ExpressionResources;
import org.gcube.portlets.user.td.expressionwidget.client.rpc.ExpressionServiceAsync;
import org.gcube.portlets.user.td.expressionwidget.client.utils.UtilsGXT3;
import org.gcube.portlets.user.td.gwtservice.shared.exception.TDGWTSessionExpiredException;
import org.gcube.portlets.user.td.gwtservice.shared.rule.RuleDescriptionData;
import org.gcube.portlets.user.td.widgetcommonevent.client.event.SessionExpiredEvent;
import org.gcube.portlets.user.td.widgetcommonevent.client.type.SessionExpiredType;
import com.allen_sauer.gwt.log.client.Log;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.web.bindery.event.shared.EventBus;
import com.sencha.gxt.widget.core.client.Window;
import com.sencha.gxt.widget.core.client.event.SelectEvent;
import com.sencha.gxt.widget.core.client.event.SelectEvent.SelectHandler;
/**
*
* @author "Giancarlo Panichi" <a
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class RuleEditDialog extends Window implements
HasRuleEditDialogNotificationListener {
private static final String WIDTH = "660px";
private static final String HEIGHT = "200px";
private RuleEditPanel ruleEditPanel;
private EventBus eventBus;
private ArrayList<RuleEditDialogNotificationListener> listeners;
public RuleEditDialog(RuleDescriptionData ruleDescriptionData, EventBus eventBus) {
listeners = new ArrayList<RuleEditDialogNotificationListener>();
initWindow();
this.eventBus = eventBus;
ruleEditPanel = new RuleEditPanel(this,
ruleDescriptionData, eventBus);
add(ruleEditPanel);
}
protected void initWindow() {
setWidth(WIDTH);
setHeight(HEIGHT);
setBodyBorder(false);
setResizable(false);
setHeadingText("Edit Rule On Column");
setClosable(true);
setModal(true);
forceLayoutOnResize = true;
getHeader().setIcon(ExpressionResources.INSTANCE.ruleEdit());
}
/**
* {@inheritDoc}
*/
@Override
protected void initTools() {
super.initTools();
closeBtn.addSelectHandler(new SelectHandler() {
public void onSelect(SelectEvent event) {
close();
}
});
}
protected void close() {
fireAborted();
}
public void updateColumnRule(RuleDescriptionData ruleDescriptionData) {
Log.debug("RuleDescriptionData: " + ruleDescriptionData);
updateColumnRuleCall(ruleDescriptionData);
}
protected void updateColumnRuleCall(RuleDescriptionData ruleDescriptionData) {
ExpressionServiceAsync.INSTANCE.updateColumnRule(ruleDescriptionData,
new AsyncCallback<Void>() {
@Override
public void onSuccess(Void v) {
Log.debug("Updated Rule: ");
UtilsGXT3.info("Update Rule", "The rule is updated!");
fireNotification();
}
@Override
public void onFailure(Throwable caught) {
if (caught instanceof TDGWTSessionExpiredException) {
eventBus.fireEvent(new SessionExpiredEvent(
SessionExpiredType.EXPIREDONSERVER));
} else {
Log.error("Error updating column rule: "
+ caught.getLocalizedMessage());
caught.printStackTrace();
UtilsGXT3.alert("Error updating column rule",
caught.getLocalizedMessage());
fireFailed(caught);
}
}
});
}
@Override
public void addRuleEditDialogNotificationListener(
RuleEditDialogNotificationListener handler) {
listeners.add(handler);
}
@Override
public void removeRuleEditDialogNotificationListener(
RuleEditDialogNotificationListener handler) {
listeners.remove(handler);
}
private void fireNotification() {
if (listeners != null) {
for (RuleEditDialogNotificationListener listener : listeners) {
listener.onNotification(new RuleEditDialogNotification());
}
}
hide();
}
private void fireAborted() {
if (listeners != null) {
for (RuleEditDialogNotificationListener listener : listeners) {
listener.aborted();
}
}
hide();
}
private void fireFailed(Throwable caught) {
if (listeners != null) {
for (RuleEditDialogNotificationListener listener : listeners) {
listener.failed(caught);
}
}
hide();
}
}

View File

@ -0,0 +1,176 @@
package org.gcube.portlets.user.td.expressionwidget.client;
import org.gcube.portlets.user.td.expressionwidget.client.resources.ExpressionResources;
import org.gcube.portlets.user.td.expressionwidget.client.utils.UtilsGXT3;
import org.gcube.portlets.user.td.gwtservice.shared.rule.RuleDescriptionData;
import com.allen_sauer.gwt.log.client.Log;
import com.google.web.bindery.event.shared.EventBus;
import com.sencha.gxt.cell.core.client.ButtonCell.IconAlign;
import com.sencha.gxt.core.client.util.Margins;
import com.sencha.gxt.widget.core.client.FramedPanel;
import com.sencha.gxt.widget.core.client.button.TextButton;
import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutData;
import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutPack;
import com.sencha.gxt.widget.core.client.container.HBoxLayoutContainer;
import com.sencha.gxt.widget.core.client.container.HBoxLayoutContainer.HBoxLayoutAlign;
import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer;
import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData;
import com.sencha.gxt.widget.core.client.event.SelectEvent;
import com.sencha.gxt.widget.core.client.event.SelectEvent.SelectHandler;
import com.sencha.gxt.widget.core.client.form.FieldLabel;
import com.sencha.gxt.widget.core.client.form.FieldSet;
import com.sencha.gxt.widget.core.client.form.TextArea;
import com.sencha.gxt.widget.core.client.form.TextField;
/**
*
* @author "Giancarlo Panichi" <a
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class RuleEditPanel extends FramedPanel {
private static final String RULE_DESCRIPTION_HEIGHT = "44px";
private static final String WIDTH = "648px";
private static final String HEIGHT = "104px";
private TextButton btnUpdate;
private TextButton btnClose;
private RuleEditDialog parentRuleEditDialog;
private RuleDescriptionData initialRuleDescriptionData;
private TextField ruleName;
private TextArea ruleDescription;
public RuleEditPanel(RuleEditDialog ruleEditDialog,
RuleDescriptionData ruleDescriptionData, EventBus eventBus) {
super();
setWidth(WIDTH);
setHeight(HEIGHT);
this.parentRuleEditDialog = ruleEditDialog;
this.initialRuleDescriptionData = ruleDescriptionData;
create();
}
protected void create() {
forceLayoutOnResize = true;
setBodyBorder(false);
setHeaderVisible(false);
VerticalLayoutContainer basicLayout = new VerticalLayoutContainer();
basicLayout.setAdjustForScroll(true);
FieldSet properties = null;
VerticalLayoutContainer propertiesLayout;
HBoxLayoutContainer flowButton = new HBoxLayoutContainer();
flowButton.setHBoxLayoutAlign(HBoxLayoutAlign.MIDDLE);
flowButton.setPack(BoxLayoutPack.CENTER);
properties = new FieldSet();
properties.setHeadingText("Properties");
properties.setCollapsible(false);
propertiesLayout = new VerticalLayoutContainer();
properties.add(propertiesLayout);
createColumnMockUp(propertiesLayout);
btnUpdate = new TextButton("Save");
btnUpdate.setIcon(ExpressionResources.INSTANCE.ruleEdit());
btnUpdate.setIconAlign(IconAlign.RIGHT);
btnUpdate.setToolTip("Save rule decription");
btnUpdate.addSelectHandler(new SelectHandler() {
public void onSelect(SelectEvent event) {
Log.debug("Pressed Update");
updateRuleDescription();
}
});
btnClose = new TextButton("Close");
btnClose.setIcon(ExpressionResources.INSTANCE.close());
btnClose.setIconAlign(IconAlign.RIGHT);
btnClose.setToolTip("Cancel rule");
btnClose.addSelectHandler(new SelectHandler() {
public void onSelect(SelectEvent event) {
Log.debug("Pressed Close");
close();
}
});
flowButton.add(btnUpdate, new BoxLayoutData(new Margins(2, 4, 2, 4)));
flowButton.add(btnClose, new BoxLayoutData(new Margins(2, 4, 2, 4)));
basicLayout.add(properties, new VerticalLayoutData(1, -1,
new Margins(1)));
basicLayout.add(flowButton, new VerticalLayoutData(1, 36, new Margins(
5, 2, 5, 2)));
add(basicLayout);
}
private void updateRuleDescription() {
String name=ruleName.getCurrentValue();
if(name==null|| name.isEmpty()){
Log.debug("Attention, enter a valid name for the rule!");
UtilsGXT3.alert("Attention",
"Enter a valid name for the rule!");
} else {
String description=ruleDescription.getCurrentValue();
if(description==null|| description.isEmpty()){
Log.debug("Attention, enter a valid description for the rule!");
UtilsGXT3.alert("Attention",
"Enter a valid description for the rule!");
} else {
initialRuleDescriptionData.setName(name);
initialRuleDescriptionData.setDescription(description);
parentRuleEditDialog.updateColumnRule(initialRuleDescriptionData);
}
}
}
private void createColumnMockUp(VerticalLayoutContainer propertiesLayout) {
ruleName = new TextField();
ruleName.setToolTip("Rule Name");
if (initialRuleDescriptionData != null) {
ruleName.setValue(initialRuleDescriptionData.getName());
}
FieldLabel ruleNameLabel = new FieldLabel(ruleName, "Rule Name");
ruleDescription = new TextArea();
ruleDescription.setHeight(RULE_DESCRIPTION_HEIGHT);
ruleDescription.setToolTip("Rule Description");
if (initialRuleDescriptionData != null) {
ruleDescription.setValue(initialRuleDescriptionData
.getDescription());
}
FieldLabel ruleDescriptionLabel = new FieldLabel(ruleDescription,
"Rule Description");
propertiesLayout.add(ruleNameLabel, new VerticalLayoutData(1, -1,
new Margins(0)));
propertiesLayout.add(ruleDescriptionLabel, new VerticalLayoutData(1,
-1, new Margins(0)));
}
protected void close() {
if (parentRuleEditDialog != null) {
parentRuleEditDialog.close();
}
}
}

View File

@ -0,0 +1,40 @@
package org.gcube.portlets.user.td.expressionwidget.client.notification;
/**
*
* @author "Giancarlo Panichi" <a
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class RuleEditDialogNotification {
public interface RuleEditDialogNotificationListener {
void onNotification(RuleEditDialogNotification ruleEditDialogNotification);
void aborted();
void failed(Throwable throwable);
}
public interface HasRuleEditDialogNotificationListener {
public void addRuleEditDialogNotificationListener(
RuleEditDialogNotificationListener handler);
public void removeRuleEditDialogNotificationListener(
RuleEditDialogNotificationListener handler);
}
public RuleEditDialogNotification() {
}
@Override
public String toString() {
return "RuleEditDialogNotification []";
}
}

View File

@ -5,6 +5,7 @@ package org.gcube.portlets.user.td.expressionwidget.client.resources;
import com.google.gwt.core.client.GWT;
import com.google.gwt.resources.client.ClientBundle;
import com.google.gwt.resources.client.ImageResource;
import com.google.gwt.resources.client.ClientBundle.Source;
/**
@ -35,6 +36,13 @@ public interface ExpressionResources extends ClientBundle {
@Source("rule-add_32.png")
ImageResource ruleAdd32();
@Source("rule-edit_32.png")
ImageResource ruleEdit32();
@Source("rule-edit.png")
ImageResource ruleEdit();
@Source("rule-column-add.png")
ImageResource ruleColumnAdd();

Binary file not shown.

After

Width:  |  Height:  |  Size: 839 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -66,6 +66,9 @@ public interface ExpressionService extends RemoteService {
public String saveColumnRule(RuleDescriptionData ruleDescriptionData)
throws TDGWTServiceException;
public void updateColumnRule(RuleDescriptionData ruleDescriptionData)
throws TDGWTServiceException;
public void removeRulesById(ArrayList<RuleDescriptionData> rules) throws TDGWTServiceException;
public String startApplyAndDetachColumnRules(ApplyAndDetachColumnRulesSession applyColumnRulesSession)

View File

@ -52,6 +52,9 @@ public interface ExpressionServiceAsync {
void saveColumnRule(RuleDescriptionData ruleDescriptionData,
AsyncCallback<String> callback);
void updateColumnRule(RuleDescriptionData ruleDescriptionData,
AsyncCallback<Void> callback);
void removeRulesById(ArrayList<RuleDescriptionData> rules,
AsyncCallback<Void> callback);

View File

@ -507,6 +507,55 @@ public class ExpressionServiceImpl extends TDGWTServiceImpl implements
}
/**
*
* {@inheritDoc}
*/
@Override
public void updateColumnRule(RuleDescriptionData ruleDescriptionData)
throws TDGWTServiceException {
try {
HttpSession session = this.getThreadLocalRequest().getSession();
ASLSession aslSession = SessionUtil.getAslSession(session);
logger.debug("UpdateColumnRule() :" + ruleDescriptionData);
AuthorizationProvider.instance.set(new AuthorizationToken(
aslSession.getUsername(), aslSession.getScope()));
TabularDataService service = TabularDataServiceFactory.getService();
RuleDescription ruleDescription=RuleDescriptionMap.map(ruleDescriptionData);
if(ruleDescription==null){
logger.error("Error in rule description: null!");
throw new TDGWTServiceException("Error in rule description: null!");
}
service.updateColumnRule(
ruleDescription);
logger.debug("Rule updated");
return;
} catch (TDGWTServiceException e) {
logger.error(e.getLocalizedMessage());
throw e;
} catch (SecurityException e) {
logger.error(e.getLocalizedMessage());
e.printStackTrace();
throw e;
} catch (Throwable e) {
logger.error("Error in getRule(): " + e.getLocalizedMessage());
e.printStackTrace();
throw new TDGWTServiceException("Error retrieving the rules: "
+ e.getLocalizedMessage());
}
}
/**
*
* {@inheritDoc}

View File

@ -1,10 +1,9 @@
package org.gcube.portlets.user.td.expressionwidget.server.service.rule;
import java.util.ArrayList;
import java.util.List;
import org.gcube.data.analysis.tabulardata.commons.rules.types.RuleColumnType;
import org.gcube.data.analysis.tabulardata.commons.webservice.types.RuleDescription;
import org.gcube.data.analysis.tabulardata.expression.Expression;
import org.gcube.portlets.user.td.expressionwidget.server.C_ExpressionParser;
@ -17,11 +16,10 @@ import org.gcube.portlets.user.td.widgetcommonevent.shared.expression.C_Expressi
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
*
* @author "Giancarlo Panichi"
* <a href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
* @author "Giancarlo Panichi" <a
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class RuleDescriptionMap {
@ -30,29 +28,26 @@ public class RuleDescriptionMap {
private static final String SECURITY_EXCEPTION_RIGHTS = "Security exception, you don't have the required rights!";
public static RuleDescriptionData map(RuleDescription ruleDescription)
throws TDGWTServiceException, ExpressionParserException {
RuleDescriptionData ruleDescriptionData=null;
if(ruleDescription==null){
RuleDescriptionData ruleDescriptionData = null;
if (ruleDescription == null) {
logger.error("Rule description is null");
throw new TDGWTServiceException("Rule description is null");
}
if(ruleDescription.getScope()==null){
if (ruleDescription.getScope() == null) {
logger.error("Rule description has scope null");
throw new TDGWTServiceException("Rule description has scope null");
}
switch (ruleDescription.getScope()) {
case COLUMN:
ruleDescriptionData=createColumnRule(ruleDescription);
ruleDescriptionData = createColumnRuleDescriptionData(ruleDescription);
break;
case TABLE:
ruleDescriptionData=createTableRule(ruleDescription);
ruleDescriptionData = createTableRuleDescriptionData(ruleDescription);
break;
default:
break;
@ -62,14 +57,12 @@ public class RuleDescriptionMap {
}
private static RuleDescriptionData createTableRule(
private static RuleDescriptionData createTableRuleDescriptionData(
RuleDescription ruleDescription) {
return null;
}
private static RuleDescriptionData createColumnRule(
private static RuleDescriptionData createColumnRuleDescriptionData(
RuleDescription ruleDescription) throws ExpressionParserException,
TDGWTServiceException {
@ -82,27 +75,23 @@ public class RuleDescriptionMap {
.map(ruleDescription.getRuleColumnType());
Contacts owner = new Contacts("", ruleDescription.getOwner(), false);
ArrayList<Contacts> contacts=retrieveRuleShareInfo(ruleDescription);
ArrayList<Contacts> contacts = retrieveRuleShareInfo(ruleDescription);
RuleDescriptionData ruleData = new RuleDescriptionData(
ruleDescription.getId(), ruleDescription.getName(),
ruleDescription.getDescription(),
owner, contacts,
RuleScopeMap.map(ruleDescription.getScope()),
tdRuleColumnType, cexp);
ruleDescription.getDescription(), owner, contacts,
RuleScopeMap.map(ruleDescription.getScope()), tdRuleColumnType,
cexp);
return ruleData;
}
private static ArrayList<Contacts> retrieveRuleShareInfo(
RuleDescription ruleDescription)
throws TDGWTServiceException {
RuleDescription ruleDescription) throws TDGWTServiceException {
try {
ArrayList<Contacts> contacts = new ArrayList<Contacts>();
List<String> sharedWithUsers = ruleDescription
.getSharedWithUsers();
List<String> sharedWithUsers = ruleDescription.getSharedWithUsers();
logger.debug("Shared with Users: " + sharedWithUsers);
if (sharedWithUsers != null) {
for (String user : sharedWithUsers) {
@ -132,5 +121,73 @@ public class RuleDescriptionMap {
}
public static RuleDescription map(RuleDescriptionData ruleDescriptionData)
throws TDGWTServiceException {
RuleDescription ruleDescription = null;
if (ruleDescriptionData == null) {
logger.error("Rule description data is null");
throw new TDGWTServiceException("Rule description is null");
}
if (ruleDescriptionData.getScope() == null) {
logger.error("Rule description data has scope null");
throw new TDGWTServiceException("Rule description has scope null");
}
switch (ruleDescriptionData.getScope()) {
case COLUMN:
ruleDescription = createColumnRuleDescription(ruleDescriptionData);
break;
case TABLE:
ruleDescription = createTableRuleDescription(ruleDescriptionData);
break;
default:
break;
}
return ruleDescription;
}
private static RuleDescription createColumnRuleDescription(
RuleDescriptionData ruleDescriptionData)
throws TDGWTServiceException {
C_ExpressionParser parser = new C_ExpressionParser();
Expression conditionExpression = null;
try {
conditionExpression = parser.parse(ruleDescriptionData
.getExpression());
} catch (ExpressionParserException e) {
logger.debug(e.getLocalizedMessage());
throw new TDGWTServiceException(e.getLocalizedMessage());
}
logger.debug("Service Condition Expression:" + conditionExpression);
RuleColumnType ruleColumnType = RuleColumnTypeMap
.map(ruleDescriptionData.getTdRuleColumnType());
if (ruleColumnType == null) {
logger.debug("Error saving rule: rule column type is null!");
throw new TDGWTServiceException(
"Error saving rule: rule column type is null!");
}
RuleDescription ruleDescription=new RuleDescription(ruleDescriptionData.getId(),
ruleDescriptionData.getName(),
ruleDescriptionData.getDescription(), conditionExpression,RuleScopeMap.map(ruleDescriptionData.getScope()),
ruleDescriptionData.getOwnerLogin(),
ruleColumnType,
ruleDescriptionData.getContactsAsStringList());
return ruleDescription;
}
private static RuleDescription createTableRuleDescription(
RuleDescriptionData ruleDescriptionData) {
return null;
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 839 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB