Skip to content

Commit 9b83d63

Browse files
authored
Merge pull request #601 from ethaaalpha/tag-layout
fix tag layout
2 parents 72390dc + 41d3409 commit 9b83d63

File tree

5 files changed

+102
-165
lines changed

5 files changed

+102
-165
lines changed

vip-application/src/main/java/fr/insalyon/creatis/vip/application/client/view/system/applications/version/EditVersionLayout.java

Lines changed: 50 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,28 @@
55
import java.util.HashMap;
66
import java.util.List;
77
import java.util.Map;
8+
import java.util.stream.Collectors;
89

910
import com.google.gwt.user.client.Window;
1011
import com.google.gwt.user.client.rpc.AsyncCallback;
12+
import com.smartgwt.client.data.DataSource;
13+
import com.smartgwt.client.data.Record;
14+
import com.smartgwt.client.data.fields.DataSourceTextField;
1115
import com.smartgwt.client.types.ListGridEditEvent;
1216
import com.smartgwt.client.types.ListGridFieldType;
1317
import com.smartgwt.client.types.TitleOrientation;
14-
import com.smartgwt.client.util.*;
15-
import com.smartgwt.client.widgets.*;
16-
import com.smartgwt.client.widgets.events.*;
18+
import com.smartgwt.client.util.BooleanCallback;
19+
import com.smartgwt.client.util.SC;
20+
import com.smartgwt.client.widgets.IButton;
21+
import com.smartgwt.client.widgets.ImgButton;
22+
import com.smartgwt.client.widgets.Label;
23+
import com.smartgwt.client.widgets.events.ClickEvent;
24+
import com.smartgwt.client.widgets.events.ClickHandler;
1725
import com.smartgwt.client.widgets.form.DynamicForm;
18-
import com.smartgwt.client.widgets.form.fields.*;
19-
import com.smartgwt.client.data.Record;
26+
import com.smartgwt.client.widgets.form.fields.CheckboxItem;
27+
import com.smartgwt.client.widgets.form.fields.ComboBoxItem;
28+
import com.smartgwt.client.widgets.form.fields.SelectItem;
29+
import com.smartgwt.client.widgets.form.fields.TextItem;
2030
import com.smartgwt.client.widgets.grid.ListGrid;
2131
import com.smartgwt.client.widgets.grid.ListGridField;
2232
import com.smartgwt.client.widgets.grid.ListGridRecord;
@@ -32,7 +42,8 @@
3242
import fr.insalyon.creatis.vip.core.client.view.CoreConstants;
3343
import fr.insalyon.creatis.vip.core.client.view.common.AbstractFormLayout;
3444
import fr.insalyon.creatis.vip.core.client.view.layout.Layout;
35-
import fr.insalyon.creatis.vip.core.client.view.util.*;
45+
import fr.insalyon.creatis.vip.core.client.view.util.FieldUtil;
46+
import fr.insalyon.creatis.vip.core.client.view.util.WidgetUtil;
3647

3748
public class EditVersionLayout extends AbstractFormLayout {
3849

@@ -51,6 +62,7 @@ public class EditVersionLayout extends AbstractFormLayout {
5162
private SelectItem resourcesList;
5263
private IButton saveButton;
5364
private IButton removeButton;
65+
private DataSource suggestionTags;
5466

5567
public EditVersionLayout() {
5668

@@ -116,6 +128,10 @@ public void onClick(ClickEvent event) {
116128
resourcesList.setMultiple(true);
117129
resourcesList.setWidth(450);
118130

131+
suggestionTags = new DataSource();
132+
suggestionTags.setClientOnly(true);
133+
suggestionTags.setFields(new DataSourceTextField("key", "Key"));
134+
119135
saveButton = WidgetUtil.getIButton("Save", CoreConstants.ICON_SAVED, new ClickHandler() {
120136
@Override
121137
public void onClick(ClickEvent event) {
@@ -208,6 +224,9 @@ private DynamicForm createTagCreationEntry() {
208224

209225
ComboBoxItem combo = new ComboBoxItem("autoComplete", "Add custom Tag");
210226

227+
combo.setOptionDataSource(suggestionTags);
228+
combo.setDisplayField("key");
229+
combo.setValueField("key");
211230
combo.setWidth(175);
212231
combo.setTitleOrientation(TitleOrientation.TOP);
213232

@@ -372,6 +391,7 @@ private void fetchData() {
372391
loadAppVersionTags();
373392
}
374393
loadResources();
394+
loadExistingTagsKeys();
375395
}
376396

377397
private void loadAppVersionTags() {
@@ -407,6 +427,30 @@ public void onSuccess(List<Resource> result) {
407427
service.getResources(callback);
408428
}
409429

430+
private void loadExistingTagsKeys() {
431+
ApplicationServiceAsync service = ApplicationService.Util.getInstance();
432+
final AsyncCallback<List<Tag>> callback = new AsyncCallback<>() {
433+
@Override
434+
public void onFailure(Throwable caught) {
435+
Layout.getInstance().setWarningMessage("Unable to load existing tags keys:<br />" + caught.getMessage());
436+
}
437+
438+
@Override
439+
public void onSuccess(List<Tag> result) {
440+
List<String> keys = new ArrayList<>(result.stream().map(Tag::getKey).collect(Collectors.toSet()));
441+
442+
Record[] records = keys.stream().map(key -> {
443+
Record record = new Record();
444+
record.setAttribute("key", key);
445+
return record;
446+
}).toArray(Record[]::new);
447+
448+
suggestionTags.setCacheData(records);
449+
}
450+
};
451+
service.getTags(callback);
452+
}
453+
410454
public static native void copyToClipboard(String text) /*-{
411455
var textarea = document.createElement("textarea");
412456
textarea.value = text;

vip-application/src/main/java/fr/insalyon/creatis/vip/application/client/view/system/tags/EditTagLayout.java

Lines changed: 10 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -2,40 +2,25 @@
22

33
import java.util.Arrays;
44

5-
import com.google.gwt.user.client.rpc.AsyncCallback;
65
import com.smartgwt.client.types.MultipleAppearance;
7-
import com.smartgwt.client.util.BooleanCallback;
8-
import com.smartgwt.client.util.SC;
9-
import com.smartgwt.client.widgets.IButton;
10-
import com.smartgwt.client.widgets.events.ClickEvent;
11-
import com.smartgwt.client.widgets.events.ClickHandler;
126
import com.smartgwt.client.widgets.form.fields.BooleanItem;
137
import com.smartgwt.client.widgets.form.fields.CheckboxItem;
148
import com.smartgwt.client.widgets.form.fields.SelectItem;
159
import com.smartgwt.client.widgets.form.fields.TextItem;
10+
1611
import fr.insalyon.creatis.vip.application.client.ApplicationConstants;
1712
import fr.insalyon.creatis.vip.application.client.bean.Tag;
18-
import fr.insalyon.creatis.vip.application.client.rpc.ApplicationService;
19-
import fr.insalyon.creatis.vip.core.client.view.CoreConstants;
2013
import fr.insalyon.creatis.vip.core.client.view.common.AbstractFormLayout;
21-
import fr.insalyon.creatis.vip.core.client.view.layout.Layout;
2214
import fr.insalyon.creatis.vip.core.client.view.util.FieldUtil;
23-
import fr.insalyon.creatis.vip.core.client.view.util.WidgetUtil;
2415

2516
public class EditTagLayout extends AbstractFormLayout {
26-
private Tag actualTag;
27-
2817
private TextItem keyField;
2918
private TextItem valueField;
3019
private SelectItem typeField;
31-
private TextItem applicationField;
32-
private TextItem versionField;
20+
private SelectItem appVersionField;
3321
private CheckboxItem visibleField;
3422
private CheckboxItem boutiquesField;
3523

36-
private IButton saveButton;
37-
private IButton removeButton;
38-
3924
public EditTagLayout() {
4025
super(480, 200);
4126
addTitle("Edit tag", ApplicationConstants.ICON_TAG);
@@ -57,102 +42,28 @@ private void configure() {
5742
.toArray(String[]::new));
5843
typeField.setWidth(350);
5944

60-
applicationField = FieldUtil.getTextItem(350, null);
61-
applicationField.setDisabled(true);
62-
63-
versionField = FieldUtil.getTextItem(350, null);
64-
versionField.setDisabled(true);
65-
66-
saveButton = WidgetUtil.getIButton("Save", CoreConstants.ICON_SAVED,
67-
new ClickHandler() {
68-
@Override
69-
public void onClick(ClickEvent event) {
70-
if (keyField.validate() && valueField.validate() && applicationField.validate() && versionField.validate()) {
71-
save(tagFromFields());
72-
}
73-
}
74-
});
75-
76-
removeButton = WidgetUtil.getIButton("Remove", CoreConstants.ICON_DELETE,
77-
new ClickHandler() {
78-
@Override
79-
public void onClick(ClickEvent event) {
80-
SC.ask("Do you really want to remove this tag?", new BooleanCallback() {
81-
@Override
82-
public void execute(Boolean value) {
83-
if (value) {
84-
remove(tagFromFields());
85-
}
86-
}
87-
});
88-
}
89-
});
90-
removeButton.setDisabled(true);
45+
appVersionField = new SelectItem();
46+
appVersionField.setShowTitle(false);
47+
appVersionField.setMultiple(true);
48+
appVersionField.setMultipleAppearance(MultipleAppearance.GRID);
49+
appVersionField.setWidth(350);
9150

9251
addField("Key", keyField);
9352
addField("Value", valueField);
9453
addField("Type", typeField);
95-
addField("Application", applicationField);
96-
addField("Version", versionField);
54+
addField("AppVersions", appVersionField);
9755
addField("Visible", visibleField);
9856
addField("Boutiques", boutiquesField);
99-
addButtons(saveButton, removeButton);
10057
}
10158

102-
public void setTag(Tag tag) {
59+
public void setTag(Tag tag, String[] appVersions) {
10360
if (tag != null) {
104-
this.actualTag = tag;
10561
this.keyField.setValue(tag.getKey());
10662
this.valueField.setValue(tag.getValue());
10763
this.typeField.setValue(tag.getType().toString());
108-
this.applicationField.setValue(tag.getApplication());
109-
this.versionField.setValue(tag.getVersion());
64+
this.appVersionField.setValueMap(appVersions);
11065
this.visibleField.setValue(tag.isVisible());
11166
this.boutiquesField.setValue(tag.isBoutiques());
112-
this.removeButton.setDisabled(false);
11367
}
11468
}
115-
116-
private void save(Tag tag) {
117-
WidgetUtil.setLoadingIButton(saveButton, "Saving...");
118-
ApplicationService.Util.getInstance().updateTag(actualTag, tag, getCallback("update"));
119-
}
120-
121-
private void remove(Tag tag) {
122-
WidgetUtil.setLoadingIButton(removeButton, "Removing...");
123-
ApplicationService.Util.getInstance().removeTag(tag, getCallback("remove"));
124-
}
125-
126-
private AsyncCallback<Void> getCallback(final String text) {
127-
return new AsyncCallback<Void>() {
128-
@Override
129-
public void onFailure(Throwable caught) {
130-
WidgetUtil.resetIButton(saveButton, "Save", CoreConstants.ICON_SAVED);
131-
WidgetUtil.resetIButton(removeButton, "Remove", CoreConstants.ICON_DELETE);
132-
Layout.getInstance().setWarningMessage("Unable to " + text + " tag:<br />" + caught.getMessage());
133-
}
134-
135-
@Override
136-
public void onSuccess(Void result) {
137-
WidgetUtil.resetIButton(saveButton, "Save", CoreConstants.ICON_SAVED);
138-
WidgetUtil.resetIButton(removeButton, "Remove", CoreConstants.ICON_DELETE);
139-
setTag(null);
140-
ManageTagsTab tab = (ManageTagsTab) Layout.getInstance().
141-
getTab(ApplicationConstants.TAB_MANAGE_TAG);
142-
tab.loadTags();
143-
}
144-
};
145-
}
146-
147-
private Tag tagFromFields() {
148-
return new Tag(
149-
keyField.getValueAsString().trim(),
150-
valueField.getValueAsString().trim(),
151-
Tag.ValueType.valueOf(typeField.getValueAsString()),
152-
applicationField.getValueAsString(),
153-
versionField.getValueAsString().trim(),
154-
visibleField.getValueAsBoolean(),
155-
boutiquesField.getValueAsBoolean()
156-
);
157-
}
15869
}

vip-application/src/main/java/fr/insalyon/creatis/vip/application/client/view/system/tags/ManageTagsTab.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public void loadTags() {
2929
tagLayout.loadData();
3030
}
3131

32-
public void setTag(Tag tag) {
33-
editLayout.setTag(tag);
32+
public void setTag(Tag tag, String[] appVersions) {
33+
editLayout.setTag(tag, appVersions);
3434
}
3535
}

0 commit comments

Comments
 (0)