Skip to content

Commit ccb3ac4

Browse files
committed
extended document selector for calendar events
1 parent 191fb80 commit ccb3ac4

File tree

10 files changed

+170
-51
lines changed

10 files changed

+170
-51
lines changed

logicaldoc-core/src/main/java/com/logicaldoc/core/document/dao/HibernateDocumentHistoryDAO.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,9 @@ public class HibernateDocumentHistoryDAO extends HibernatePersistentObjectDAO<Do
2828
implements DocumentHistoryDAO {
2929

3030
private static final String DATE_ASC = ".date asc";
31+
3132
private static final String ORDER_BY = "order by ";
33+
3234
private static final String AND = " and ";
3335

3436
private HibernateDocumentHistoryDAO() {
@@ -126,11 +128,14 @@ public void markHistoriesAsRead(String event, long userId) {
126128
public void store(DocumentHistory history) throws PersistenceException {
127129
// Write only if the history is enabled
128130
if (RunLevel.current().aspectEnabled(History.ASPECT)) {
131+
if (history.getDate() == null)
132+
history.setDate(new Date());
129133
if (history.getComment() != null) {
130-
// trim to 4000 chars
134+
// trim to 4000 chars
131135
history.setComment(StringUtils.abbreviate(history.getComment(), 4000));
132-
133-
// remove non printable chars, but maintanis the carriage returns and the tabs
136+
137+
// remove non printable chars, but maintanis the carriage
138+
// returns and the tabs
134139
history.setComment(history.getComment().trim().replaceAll("[\\p{Cntrl}&&[^\\n]&&[^\\t]&&[^\\r]]", ""));
135140
}
136141
super.store(history);
@@ -141,8 +146,8 @@ public void store(DocumentHistory history) throws PersistenceException {
141146
@Override
142147
public List<DocumentHistory> findByPath(String pathExpression, Date oldestDate, Collection<String> events,
143148
Integer max) {
144-
StringBuilder query = new StringBuilder("(" + ENTITY + ".path like :pathExpression or " + ENTITY
145-
+ ".pathOld like :pathExpression) ");
149+
StringBuilder query = new StringBuilder(
150+
"(" + ENTITY + ".path like :pathExpression or " + ENTITY + ".pathOld like :pathExpression) ");
146151
Map<String, Object> params = new HashMap<>();
147152
params.put("pathExpression", pathExpression);
148153

logicaldoc-core/src/main/java/com/logicaldoc/core/folder/HibernateFolderHistoryDAO.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,8 @@ public List<FolderHistory> findByUserIdAndEvent(long userId, String event) {
8888
public void store(FolderHistory history) throws PersistenceException {
8989
// Write only if the history is enabled
9090
if (RunLevel.current().aspectEnabled(History.ASPECT)) {
91+
if (history.getDate() == null)
92+
history.setDate(new Date());
9193
if (history.getComment() != null && history.getComment().length() > 4000)
9294
history.setComment(StringUtils.abbreviate(history.getComment(), 4000));
9395
super.store(history);
@@ -98,8 +100,8 @@ public void store(FolderHistory history) throws PersistenceException {
98100
@Override
99101
public List<FolderHistory> findByPath(String pathExpression, Date oldestDate, Collection<String> events,
100102
Integer max) {
101-
StringBuilder query = new StringBuilder("(" + ENTITY + ".path like :pathExpression or " + ENTITY
102-
+ ".pathOld like :pathExpression) ");
103+
StringBuilder query = new StringBuilder(
104+
"(" + ENTITY + ".path like :pathExpression or " + ENTITY + ".pathOld like :pathExpression) ");
103105
Map<String, Object> params = new HashMap<>();
104106
params.put("pathExpression", pathExpression);
105107

logicaldoc-core/src/main/java/com/logicaldoc/core/security/dao/HibernateUserHistoryDAO.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.logicaldoc.core.security.dao;
22

33
import java.util.ArrayList;
4+
import java.util.Date;
45
import java.util.HashMap;
56
import java.util.List;
67
import java.util.Map;
@@ -34,8 +35,7 @@ public List<UserHistory> findByUserId(long userId) {
3435
public List<UserHistory> findByUserIdAndEvent(long userId, String event) {
3536
try {
3637
if (StringUtils.isEmpty(event))
37-
return findByWhere(ENTITY + ".userId =" + userId, "order by " + ENTITY + ".date desc",
38-
null);
38+
return findByWhere(ENTITY + ".userId =" + userId, "order by " + ENTITY + ".date desc", null);
3939
else {
4040
Map<String, Object> params = new HashMap<>();
4141
params.put("userId", userId);
@@ -98,6 +98,8 @@ public void cleanOldHistories(int ttl) {
9898
public void store(UserHistory history) throws PersistenceException {
9999
// Write only if the history is enabled
100100
if (RunLevel.current().aspectEnabled(History.ASPECT)) {
101+
if (history.getDate() == null)
102+
history.setDate(new Date());
101103
if (history.getComment() != null && history.getComment().length() > 4000)
102104
history.setComment(StringUtils.abbreviate(history.getComment(), 4000));
103105
super.store(history);

logicaldoc-gui/src/main/java/com/logicaldoc/gui/frontend/client/calendar/CalendarEventDialog.java

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import com.logicaldoc.gui.common.client.widgets.preview.PreviewPopup;
2626
import com.logicaldoc.gui.frontend.client.clipboard.Clipboard;
2727
import com.logicaldoc.gui.frontend.client.document.DocumentsPanel;
28+
import com.logicaldoc.gui.frontend.client.document.selector.DocumentSelectorDialog;
2829
import com.logicaldoc.gui.frontend.client.services.CalendarService;
2930
import com.logicaldoc.gui.frontend.client.services.DocumentService;
3031
import com.smartgwt.client.data.Record;
@@ -482,9 +483,23 @@ public void onSuccess(GUIDocument doc) {
482483
DocumentsPanel.get().openInFolder(rec.getAttributeAsLong(FOLDER_ID), rec.getAttributeAsLong("id"));
483484
});
484485

485-
IButton addDocuments = new IButton();
486-
addDocuments.setTitle(I18N.message("adddocuments"));
487-
addDocuments.addClickHandler(event -> {
486+
Button addDocuments = new Button(I18N.message("adddocuments"));
487+
addDocuments.setAutoFit(true);
488+
addDocuments.addClickHandler(evnt -> new DocumentSelectorDialog() {
489+
490+
@Override
491+
protected void onSelection(GUIDocument[] selection) {
492+
for (GUIDocument doc : selection) {
493+
calendarEvent.addDocument(doc);
494+
}
495+
refreshDocumentsGrid(documentsGrid);
496+
close();
497+
}
498+
}.show());
499+
500+
Button addDocumentsFromClipboard = new Button(I18N.message("adddocumentsfromclipboard"));
501+
addDocumentsFromClipboard.setAutoFit(true);
502+
addDocumentsFromClipboard.addClickHandler(eevnt -> {
488503
Clipboard clipboard = Clipboard.getInstance();
489504
if (clipboard.isEmpty()) {
490505
SC.warn(I18N.message("nodocsinclipboard"));
@@ -494,7 +509,7 @@ public void onSuccess(GUIDocument doc) {
494509
for (GUIDocument doc : clipboard) {
495510
calendarEvent.addDocument(doc);
496511
}
497-
Clipboard.getInstance().clear();
512+
clipboard.clear();
498513
refreshDocumentsGrid(documentsGrid);
499514
});
500515

@@ -508,7 +523,8 @@ public void onSuccess(GUIDocument doc) {
508523

509524
HLayout buttons = new HLayout();
510525
buttons.setAlign(Alignment.RIGHT);
511-
buttons.setMembers(addDocuments);
526+
buttons.setMembersMargin(4);
527+
buttons.setMembers(addDocuments, addDocumentsFromClipboard);
512528

513529
if (!readOnly)
514530
layout.setMembers(documentsGrid, buttons);

logicaldoc-gui/src/main/java/com/logicaldoc/gui/frontend/client/document/DocumentsListPanel.java

Lines changed: 44 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -31,17 +31,14 @@
3131
*/
3232
public class DocumentsListPanel extends VLayout {
3333

34-
private DocumentsGrid grid;
34+
protected DocumentsGrid documentsGrid;
3535

3636
private Cursor cursor;
3737

3838
private boolean filters;
3939

4040
protected int visualizationMode = DocumentsGrid.MODE_LIST;
4141

42-
public int getVisualizationMode() {
43-
return visualizationMode;
44-
}
4542

4643
public DocumentsListPanel(GUIFolder folder) {
4744
this(folder, DocumentsGrid.MODE_LIST);
@@ -52,20 +49,31 @@ public DocumentsListPanel(GUIFolder folder, int visualizationMode) {
5249

5350
addCursor(folder);
5451

52+
documentsGrid = prepareDocumentsGrid(folder, visualizationMode);
53+
54+
addMember((Canvas) documentsGrid);
55+
documentsGrid.setGridCursor(cursor);
56+
57+
registerGridHandlers();
58+
}
59+
60+
protected DocumentsGrid prepareDocumentsGrid(GUIFolder folder, int visualizationMode) {
61+
DocumentsGrid documentsGrid = null;
5562
if (visualizationMode == DocumentsGrid.MODE_LIST)
56-
grid = new NavigatorDocumentsGrid(folder);
63+
documentsGrid = new NavigatorDocumentsGrid(folder);
5764
else if (visualizationMode == DocumentsGrid.MODE_GALLERY) {
58-
grid = new DocumentsTileGrid(folder);
65+
documentsGrid = new DocumentsTileGrid(folder);
5966
}
60-
addMember((Canvas) grid);
61-
grid.setGridCursor(cursor);
62-
63-
registerGridHandlers();
67+
return documentsGrid;
6468
}
6569

70+
public int getVisualizationMode() {
71+
return visualizationMode;
72+
}
73+
6674
private void registerGridHandlers() {
67-
grid.registerDoubleClickHandler(event -> {
68-
GUIDocument doc = grid.getSelectedDocument();
75+
documentsGrid.registerDoubleClickHandler(event -> {
76+
GUIDocument doc = documentsGrid.getSelectedDocument();
6977
long id = doc.getId();
7078

7179
if (FolderController.get().getCurrentFolder().isDownload()
@@ -92,11 +100,22 @@ private void registerGridHandlers() {
92100
event.cancel();
93101
});
94102

95-
grid.registerSelectionChangedHandler(event -> {
103+
registerSelectionHandler();
104+
105+
documentsGrid.registerCellContextClickHandler(event -> {
106+
Menu contextMenu = new ContextMenu(FolderController.get().getCurrentFolder(), documentsGrid);
107+
contextMenu.showContextMenu();
108+
if (event != null)
109+
event.cancel();
110+
});
111+
}
112+
113+
protected void registerSelectionHandler() {
114+
documentsGrid.registerSelectionChangedHandler(event -> {
96115
// Avoid server load in case of multiple selections
97-
if (grid.getSelectedCount() != 1)
116+
if (documentsGrid.getSelectedCount() != 1)
98117
return;
99-
GUIDocument selectedDocument = grid.getSelectedDocument();
118+
GUIDocument selectedDocument = documentsGrid.getSelectedDocument();
100119
DocumentService.Instance.get().getById(selectedDocument.getId(), new AsyncCallback<GUIDocument>() {
101120
@Override
102121
public void onFailure(Throwable caught) {
@@ -109,13 +128,6 @@ public void onSuccess(GUIDocument doc) {
109128
}
110129
});
111130
});
112-
113-
grid.registerCellContextClickHandler(event -> {
114-
Menu contextMenu = new ContextMenu(FolderController.get().getCurrentFolder(), grid);
115-
contextMenu.showContextMenu();
116-
if (event != null)
117-
event.cancel();
118-
});
119131
}
120132

121133
private void addCursor(GUIFolder folder) {
@@ -133,29 +145,29 @@ private void addCursor(GUIFolder folder) {
133145
* @param folder the folder being opened
134146
*/
135147
public void updateData(GUIFolder folder) {
136-
if (grid.getFolder() == null || (grid.getFolder() != null && grid.getFolder().getId() != folder.getId()))
137-
grid.loadGridLayout(folder);
148+
if (documentsGrid.getFolder() == null || (documentsGrid.getFolder() != null && documentsGrid.getFolder().getId() != folder.getId()))
149+
documentsGrid.loadGridLayout(folder);
138150

139151
DocumentsDSParameters params = new DocumentsDSParameters(folder.getId(), null,
140-
grid.getGridCursor().getPageSize(), grid.getGridCursor().getCurrentPage(),
141-
grid instanceof DocumentsListGrid ? DocumentGridUtil.getSortSpec((DocumentsListGrid) grid) : null);
152+
documentsGrid.getGridCursor().getPageSize(), documentsGrid.getGridCursor().getCurrentPage(),
153+
documentsGrid instanceof DocumentsListGrid ? DocumentGridUtil.getSortSpec((DocumentsListGrid) documentsGrid) : null);
142154
DocumentsDS dataSource = new DocumentsDS(params);
143-
grid.fetchNewData(dataSource);
144-
grid.setCanDrag(folder.isMove());
155+
documentsGrid.fetchNewData(dataSource);
156+
documentsGrid.setCanDrag(folder.isMove());
145157
}
146158

147159
@Override
148160
public void destroy() {
149-
if (grid != null)
150-
grid.destroy();
161+
if (documentsGrid != null)
162+
documentsGrid.destroy();
151163
}
152164

153165
public DocumentsGrid getGrid() {
154-
return grid;
166+
return documentsGrid;
155167
}
156168

157169
public void toggleFilters() {
158-
grid.showFilters(!filters);
170+
documentsGrid.showFilters(!filters);
159171
filters = !filters;
160172
}
161173
}

logicaldoc-gui/src/main/java/com/logicaldoc/gui/frontend/client/document/grid/DocumentsListGrid.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -130,9 +130,9 @@ public class DocumentsListGrid extends RefreshableListGrid implements DocumentsG
130130
/**
131131
* The list of all extended attribute names to display
132132
*/
133-
List<String> extendedAttributes = new ArrayList<>();
133+
protected List<String> extendedAttributes = new ArrayList<>();
134134

135-
public DocumentsListGrid(GUIFolder folder, List<String> extendedAttributes) {
135+
private DocumentsListGrid(GUIFolder folder, List<String> extendedAttributes) {
136136
this.folder = folder;
137137
if (extendedAttributes != null)
138138
this.extendedAttributes = extendedAttributes;
@@ -156,7 +156,7 @@ public DocumentsListGrid(GUIFolder folder, List<String> extendedAttributes) {
156156

157157
addDataArrivedHandler(this::onDataArrived);
158158

159-
DocumentController.get().addObserver(this);
159+
// DocumentController.get().addObserver(this);
160160
}
161161

162162
private void onDataArrived(DataArrivedEvent event) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package com.logicaldoc.gui.frontend.client.document.selector;
2+
3+
import java.util.ArrayList;
4+
import java.util.Arrays;
5+
import java.util.List;
6+
7+
import com.logicaldoc.gui.common.client.Session;
8+
import com.logicaldoc.gui.common.client.beans.GUIFolder;
9+
import com.logicaldoc.gui.common.client.controllers.DocumentController;
10+
import com.logicaldoc.gui.common.client.data.DocumentsDS;
11+
import com.logicaldoc.gui.common.client.data.DocumentsDSParameters;
12+
import com.logicaldoc.gui.common.client.i18n.I18N;
13+
import com.logicaldoc.gui.frontend.client.document.grid.DocumentGridUtil;
14+
import com.logicaldoc.gui.frontend.client.document.grid.DocumentsListGrid;
15+
import com.logicaldoc.gui.frontend.client.document.grid.NavigatorDocumentsGrid;
16+
import com.smartgwt.client.types.SelectionStyle;
17+
import com.smartgwt.client.widgets.grid.ListGridField;
18+
19+
public class DocumentSelectorDocumentsListGrid extends DocumentsListGrid {
20+
21+
public DocumentSelectorDocumentsListGrid(GUIFolder folder) {
22+
super(folder);
23+
setSelectionType(SelectionStyle.MULTIPLE);
24+
25+
int pageSize = loadGridLayout(folder);
26+
DocumentsDSParameters params = new DocumentsDSParameters(folder.getId(), null, pageSize, 1,
27+
DocumentGridUtil.getSortSpec(this));
28+
DocumentsDS dataSource = new DocumentsDS(params);
29+
setDataSource(dataSource);
30+
31+
final List<ListGridField> fields = new ArrayList<>();
32+
33+
fields.add(fieldsMap.get("id"));
34+
fields.add(fieldsMap.get("thumbnail"));
35+
fields.add(fieldsMap.get("statusIcons"));
36+
fields.add(fieldsMap.get("icon"));
37+
38+
String[] cols = Session.get().getInfo().getConfig("gui.document.columns").split(",");
39+
for (String col : cols) {
40+
ListGridField field = fieldsMap.get(col);
41+
if (field != null) {
42+
field.setHidden(false);
43+
fields.add(field);
44+
}
45+
}
46+
47+
mergeFields(fields);
48+
49+
setFields(fields.toArray(new ListGridField[0]));
50+
51+
DocumentController.get().removeObserver(this);
52+
}
53+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.logicaldoc.gui.frontend.client.document.selector;
2+
3+
import com.logicaldoc.gui.common.client.beans.GUIFolder;
4+
import com.logicaldoc.gui.frontend.client.document.DocumentsListPanel;
5+
import com.logicaldoc.gui.frontend.client.document.grid.DocumentsGrid;
6+
7+
/**
8+
* A documents panel for the selection dialog
9+
*
10+
* @author Marco Meschieri - LogicalDOC
11+
* @since 8.9
12+
*/
13+
public class DocumentSelectorDocumentsPanel extends DocumentsListPanel {
14+
15+
public DocumentSelectorDocumentsPanel(GUIFolder folder) {
16+
super(folder, DocumentsGrid.MODE_LIST);
17+
setCanDrag(false);
18+
}
19+
20+
@Override
21+
protected void registerSelectionHandler() {
22+
// Do nothing
23+
}
24+
25+
@Override
26+
protected DocumentsGrid prepareDocumentsGrid(GUIFolder folder, int visualizationMode) {
27+
return new DocumentSelectorDocumentsListGrid(folder);
28+
}
29+
}

logicaldoc-gui/src/main/java/com/logicaldoc/gui/frontend/client/document/selector/DocumentSelectorPanel.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,7 @@ public void onFailure(Throwable caught) {
5353
@Override
5454
public void onSuccess(GUIFolder folder) {
5555
removeMember(documents);
56-
documents = new DocumentsListPanel(folder);
57-
documents.setCanDrag(false);
56+
documents = new DocumentSelectorDocumentsPanel(folder);
5857
addMember(documents);
5958
}
6059
}));

0 commit comments

Comments
 (0)