Updated for curation on validations

git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/user/tabular-data-table-widget@95875 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
Giancarlo Panichi 2014-05-20 16:55:06 +00:00 committed by Giancarlo Panichi
parent e1cb9638e2
commit f584a1cee0
5 changed files with 295 additions and 53 deletions

View File

@ -0,0 +1,3 @@
.image {
cursor: pointer;
}

View File

@ -0,0 +1 @@
<div class="{style.image}" alt="{alt}" title="{title}">{img}</div>

View File

@ -0,0 +1,94 @@
package org.gcube.portlets.user.td.tablewidget.client.custom;
import com.google.gwt.cell.client.ValueUpdater;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.NativeEvent;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.resources.client.ImageResource;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.sencha.gxt.cell.core.client.ResizeCell;
import com.sencha.gxt.core.client.dom.XElement;
import com.sencha.gxt.widget.core.client.event.BeforeSelectEvent;
import com.sencha.gxt.widget.core.client.event.SelectEvent;
import com.sencha.gxt.widget.core.client.event.SelectEvent.HasSelectHandlers;
import com.sencha.gxt.widget.core.client.event.SelectEvent.SelectHandler;
/**
*
* @author "Giancarlo Panichi"
*
*/
public class ValidationCell extends ResizeCell<Boolean> implements HasSelectHandlers {
private final ValidationCellAppearance appearance;
private ImageResource trueIcon;
private ImageResource falseIcon;
private String title;
public ValidationCell() {
this(GWT.<ValidationCellAppearance> create(ValidationCellAppearance.class));
}
public ValidationCell(ValidationCellAppearance appearance) {
super("click");
this.appearance = appearance;
}
public void setTrueIcon(ImageResource icon) {
this.trueIcon = icon;
}
public void setFalseIcon(ImageResource icon) {
this.falseIcon = icon;
}
public void setTitle(String title) {
this.title = title;
}
@Override
public HandlerRegistration addSelectHandler(SelectHandler handler) {
return addHandler(handler, SelectEvent.getType());
}
@Override
public void render(Context context,
Boolean value, SafeHtmlBuilder sb) {
this.appearance.trueIcon = trueIcon;
this.appearance.falseIcon = falseIcon;
if(title==null){
title="";
}
this.appearance.title = title;
this.appearance.render(sb, value);
}
@Override
public void onBrowserEvent(Context context,
Element parent, Boolean value, NativeEvent event,
ValueUpdater<Boolean> valueUpdater) {
Element target = event.getEventTarget().cast();
// ignore the parent element
if (isDisableEvents() || !parent.getFirstChildElement().isOrHasChild(target)) {
return;
}
XElement p = parent.cast();
String eventType = event.getType();
if ("click".equals(eventType)) {
onClick(context, p, value, event, valueUpdater);
}
}
private void onClick(Context context, XElement p, Boolean value, NativeEvent event, ValueUpdater<Boolean> valueUpdater) {
if (!isDisableEvents() && fireCancellableEvent(context, new BeforeSelectEvent(context))) {
fireEvent(context, new SelectEvent(context));
}
}
}

View File

@ -0,0 +1,78 @@
package org.gcube.portlets.user.td.tablewidget.client.custom;
import com.google.gwt.core.client.GWT;
import com.google.gwt.resources.client.ClientBundle;
import com.google.gwt.resources.client.CssResource;
import com.google.gwt.resources.client.ImageResource;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.safehtml.shared.SafeHtmlUtils;
import com.google.gwt.user.client.ui.AbstractImagePrototype;
import com.sencha.gxt.core.client.XTemplates;
/**
*
* @author "Giancarlo Panichi"
*
*/
public class ValidationCellAppearance {
public interface Style extends CssResource {
String image();
}
public interface Template extends XTemplates {
@XTemplate(source = "ValidationButton.html")
SafeHtml template(Style style, SafeHtml img, String title, String alt);
}
public interface Resources extends ClientBundle {
@Source("ValidationButton.css")
Style style();
}
private final Style style;
private final Template template;
public ImageResource trueIcon;
public ImageResource falseIcon;
public String title;
public ValidationCellAppearance() {
this((Resources) GWT.create(Resources.class));
}
public ValidationCellAppearance(Resources resources) {
this.style = resources.style();
this.style.ensureInjected();
this.template = GWT.create(Template.class);
}
public void render(SafeHtmlBuilder sb, Boolean value) {
SafeHtml safeIcon = SafeHtmlUtils.fromString("");
String alt = "";
if (value != null) {
if (value) {
safeIcon = makeImage(trueIcon);
alt = "true";
} else {
safeIcon = makeImage(falseIcon);
alt = "false";
}
}
sb.append(template.template(style, safeIcon, title, alt));
}
/**
* Make icons available as SafeHtml to be displayed inside the table
*
* @param resource
* @return
*/
private static SafeHtml makeImage(ImageResource resource) {
AbstractImagePrototype proto = AbstractImagePrototype.create(resource);
String html = proto.getHTML();
return SafeHtmlUtils.fromTrustedString(html);
}
}

View File

@ -1,11 +1,16 @@
package org.gcube.portlets.user.td.tablewidget.client.validation;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.gcube.portlets.user.td.gwtservice.client.rpc.TDGWTServiceAsync;
import org.gcube.portlets.user.td.gwtservice.shared.Constants;
import org.gcube.portlets.user.td.gwtservice.shared.OperationsId;
import org.gcube.portlets.user.td.gwtservice.shared.exception.TDGWTSessionExpiredException;
import org.gcube.portlets.user.td.gwtservice.shared.task.InvocationS;
import org.gcube.portlets.user.td.gwtservice.shared.task.ValidationsTasksMetadata;
import org.gcube.portlets.user.td.tablewidget.client.custom.ValidationCell;
import org.gcube.portlets.user.td.tablewidget.client.resources.ResourceBundle;
import org.gcube.portlets.user.td.tablewidget.client.util.UtilsGXT3;
import org.gcube.portlets.user.td.tablewidget.client.validation.tree.BaseDto;
@ -13,11 +18,15 @@ import org.gcube.portlets.user.td.tablewidget.client.validation.tree.FolderDto;
import org.gcube.portlets.user.td.tablewidget.client.validation.tree.TreeDataGenerator;
import org.gcube.portlets.user.td.tablewidget.client.validation.tree.ValidationDto;
import org.gcube.portlets.user.td.widgetcommonevent.client.event.SessionExpiredEvent;
import org.gcube.portlets.user.td.widgetcommonevent.client.event.WidgetRequestEvent;
import org.gcube.portlets.user.td.widgetcommonevent.client.type.SessionExpiredType;
import org.gcube.portlets.user.td.widgetcommonevent.client.type.WidgetRequestType;
import org.gcube.portlets.user.td.widgetcommonevent.shared.RequestProperties;
import org.gcube.portlets.user.td.widgetcommonevent.shared.TRId;
import com.sencha.gxt.widget.core.client.event.CollapseItemEvent.CollapseItemHandler;
import com.allen_sauer.gwt.log.client.Log;
import com.google.gwt.cell.client.AbstractCell;
import com.google.gwt.cell.client.Cell.Context;
import com.google.gwt.resources.client.ImageResource;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.safehtml.shared.SafeHtmlUtils;
@ -35,6 +44,7 @@ import com.sencha.gxt.widget.core.client.container.MarginData;
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.CollapseItemEvent;
import com.sencha.gxt.widget.core.client.event.CollapseItemEvent.CollapseItemHandler;
import com.sencha.gxt.widget.core.client.event.ExpandItemEvent;
import com.sencha.gxt.widget.core.client.event.ExpandItemEvent.ExpandItemHandler;
import com.sencha.gxt.widget.core.client.event.SelectEvent;
@ -63,6 +73,62 @@ public class ValidationsTasksPanel extends FramedPanel {
protected TreeStore<BaseDto> store;
protected TreeGrid<BaseDto> tree;
@SuppressWarnings("rawtypes")
protected AbstractCell actionButton = new AbstractCell<Boolean>() {
@Override
public void render(Context context, Boolean value, SafeHtmlBuilder sb) {
if (value == null) {
sb.appendHtmlConstant("");
} else {
Log.debug("Context: pos=" + context.getIndex() + ", key="
+ context.getKey() + ", column=" + context.getColumn());
String key = (String) context.getKey();
BaseDto d = store.findModelWithKey(key);
/*
* List<BaseDto> list = ;
* Log.debug("List: ["+list.toString()+"]"); int i = 0; BaseDto
* d=null; for (; i < list.size(); i++) { BaseDto dt =
* list.get(i); if (dt.getId().compareTo((String)
* context.getKey()) == 0) { d=dt;
* Log.debug("Retrieved: "+d+" at pos:"+i); break; } }
*/
String title = "";
if (d != null) {
Log.debug(d.toString());
if (d instanceof ValidationDto) {
ValidationDto v = (ValidationDto) d;
Log.debug("ValidationDto: [" + v.getId() + ", "
+ v.getDescription() + ", " + v.getValid()
+ ", " + v.getInvocation() + "]");
if (v.getInvocation() != null) {
title = v.getInvocation().toString();
}
}
}
if (value) {
sb.appendHtmlConstant("<img src='"
+ ResourceBundle.INSTANCE.ok().getSafeUri()
.asString() + "' alt='true' title='"
+ title + "'>");
} else {
sb.appendHtmlConstant("<img src='"
+ ResourceBundle.INSTANCE.exit().getSafeUri()
.asString() + "' alt='false' title='"
+ title + "'>");
}
}
}
};
class KeyProvider implements ModelKeyProvider<BaseDto> {
@Override
public String getKey(BaseDto item) {
@ -175,64 +241,23 @@ public class ValidationsTasksPanel extends FramedPanel {
}
}, 38, "Valid");
cc3.setHeader("Valid");
cc3.setCell(new AbstractCell<Boolean>() {
ValidationCell validationButton = new ValidationCell();
validationButton.setTrueIcon(ResourceBundle.INSTANCE.ok());
validationButton.setFalseIcon(ResourceBundle.INSTANCE.exit());
validationButton.addSelectHandler(new SelectHandler() {
@Override
public void render(Context context, Boolean value,
SafeHtmlBuilder sb) {
if (value == null) {
sb.appendHtmlConstant("");
} else {
Log.debug("Context: pos=" + context.getIndex() + ", key="
+ context.getKey() + ", column="
+ context.getColumn());
String key = (String) context.getKey();
BaseDto d = store.findModelWithKey(key);
/*
* List<BaseDto> list = ;
* Log.debug("List: ["+list.toString()+"]"); int i = 0;
* BaseDto d=null; for (; i < list.size(); i++) { BaseDto dt
* = list.get(i); if (dt.getId().compareTo((String)
* context.getKey()) == 0) { d=dt;
* Log.debug("Retrieved: "+d+" at pos:"+i); break; } }
*/
String title = "";
if (d != null) {
Log.debug(d.toString());
if (d instanceof ValidationDto) {
ValidationDto v = (ValidationDto) d;
Log.debug("ValidationDto: [" + v.getId() + ", "
+ v.getDescription() + ", "
+ v.getValid() + ", "
+ v.getInvocation() + "]");
if (v.getInvocation() != null) {
title = v.getInvocation().toString();
}
}
}
if (value) {
sb.appendHtmlConstant("<img src='"
+ ResourceBundle.INSTANCE.ok().getSafeUri()
.asString() + "' alt='true' title='"
+ title + "'>");
} else {
sb.appendHtmlConstant("<img src='"
+ ResourceBundle.INSTANCE.exit().getSafeUri()
.asString() + "' alt='false' title='"
+ title + "'>");
}
}
public void onSelect(SelectEvent event) {
Log.debug("Button ValidationCell Pressed");
Context context = event.getContext();
requestSolution(context);
}
});
cc3.setCell(validationButton);
List<ColumnConfig<BaseDto, ?>> l = new ArrayList<ColumnConfig<BaseDto, ?>>();
l.add(cc1);
// l.add(cc2);
@ -329,6 +354,47 @@ public class ValidationsTasksPanel extends FramedPanel {
}
// TODO
protected void requestSolution(Context context) {
String key = (String) context.getKey();
BaseDto d = store.findModelWithKey(key);
String title = "";
if (d != null) {
Log.debug(d.toString());
if (d instanceof ValidationDto) {
ValidationDto v = (ValidationDto) d;
Log.debug("ValidationDto: [" + v.getId() + ", "
+ v.getDescription() + ", " + v.getValid() + ", "
+ v.getInvocation() + "]");
if (v.getInvocation() != null) {
InvocationS invocationS = v.getInvocation();
title = invocationS.toString();
Long op = invocationS.getOperationId();
if (op.compareTo(OperationsId.ChangeToDimensionColumn
.toLong()) == 0) {
WidgetRequestEvent widgetRequestEvent = new WidgetRequestEvent(
WidgetRequestType.CURATIONBYREPLACEBATCHDIALOG);
widgetRequestEvent.setTrId(trId);
HashMap<String, Object> map = new HashMap<String, Object>();
map.put(Constants.REQUEST_PROPERTIES_REFCOLUMN,
invocationS.getRefColumn());
map.put(Constants.REQUEST_PROPERTIES_COLUMNID,
invocationS.getColumnId());
RequestProperties props = new RequestProperties(map);
widgetRequestEvent.setRequestProperties(props);
eventBus.fireEvent(widgetRequestEvent);
} else {
UtilsGXT3.info("Invocation Info", title);
}
}
}
}
}
protected void retrieveValidations() {
TDGWTServiceAsync.INSTANCE.getValidationsTasksMetadata(trId,