Skip to content

Commit f58f16d

Browse files
committed
continue work on it
1 parent c431ea5 commit f58f16d

File tree

10 files changed

+142
-92
lines changed

10 files changed

+142
-92
lines changed

src/main/java/de/l3s/learnweb/resource/Annotation.java

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,13 @@ public class Annotation implements Serializable {
1111
@Serial
1212
private static final long serialVersionUID = 6321296603254649454L;
1313

14+
private int annotationId;
1415
private int resourceId;
1516
private int userId;
1617
private String action;
1718
private String selection;
1819
private String annotation;
19-
private Instant timestamp;
20+
private Instant createdAt;
2021

2122
// cached values
2223
private transient User user;
@@ -25,13 +26,12 @@ public class Annotation implements Serializable {
2526
public Annotation() {
2627
}
2728

28-
public Annotation(int resourceId, int userId, String action, String selection, String annotation) {
29-
this.resourceId = resourceId;
30-
this.userId = userId;
31-
this.action = action;
32-
this.selection = selection;
33-
this.annotation = annotation;
34-
this.timestamp = Instant.now();
29+
public int getAnnotationId() {
30+
return annotationId;
31+
}
32+
33+
public void setAnnotationId(final int annotationId) {
34+
this.annotationId = annotationId;
3535
}
3636

3737
public int getResourceId() {
@@ -74,17 +74,17 @@ public void setAction(String action) {
7474
this.action = action;
7575
}
7676

77-
public Instant getTimestamp() {
78-
return timestamp;
77+
public Instant getCreatedAt() {
78+
return createdAt;
7979
}
8080

81-
public void setTimestamp(Instant timestamp) {
82-
this.timestamp = timestamp;
81+
public void setCreatedAt(Instant createdAt) {
82+
this.createdAt = createdAt;
8383
}
8484

8585
public User getUser() {
8686
if (null == user) {
87-
user = Learnweb.dao().getUserDao().findByIdOrElseThrow(getUserId());
87+
user = Learnweb.dao().getUserDao().findByIdOrElseThrow(userId);
8888
}
8989
return user;
9090
}

src/main/java/de/l3s/learnweb/resource/AnnotationDao.java

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,24 +17,28 @@
1717

1818
import de.l3s.util.SqlHelper;
1919

20+
@RegisterRowMapper(AnnotationDao.AnnotationMapper.class)
2021
public interface AnnotationDao extends SqlObject, Serializable {
2122

22-
@RegisterRowMapper(AnnotationMapper.class)
2323
@SqlQuery("SELECT a.* FROM lw_transcript_log a JOIN lw_resource USING(resource_id) WHERE user_id IN(<userIds>) and deleted = 0 ORDER BY user_id, created_at DESC")
2424
List<Annotation> findLogsByUserIds(@BindList("userIds") Collection<Integer> userIds);
2525

26+
@SqlQuery("SELECT a.* FROM lw_resource_annotation a WHERE resource_id = ?")
27+
List<Annotation> findAllByResourceId(int resourceId);
28+
2629
default void save(Annotation annotation) {
27-
if (annotation.getTimestamp() == null) {
28-
annotation.setTimestamp(Instant.now());
30+
if (annotation.getCreatedAt() == null) {
31+
annotation.setCreatedAt(Instant.now());
2932
}
3033

3134
LinkedHashMap<String, Object> params = new LinkedHashMap<>();
35+
params.put("annotation_id", annotation.getAnnotationId());
3236
params.put("resource_id", annotation.getResourceId());
3337
params.put("user_id", annotation.getUserId());
34-
params.put("action", annotation.getAction());
38+
params.put("action", SqlHelper.toNullable(annotation.getAction()));
3539
params.put("selection", SqlHelper.toNullable(annotation.getSelection()));
3640
params.put("annotation", SqlHelper.toNullable(annotation.getAnnotation()));
37-
params.put("created_at", annotation.getTimestamp());
41+
params.put("created_at", annotation.getCreatedAt());
3842

3943
SqlHelper.handleSave(getHandle(), "lw_resource_annotation", params).execute();
4044
}
@@ -43,12 +47,13 @@ class AnnotationMapper implements RowMapper<Annotation> {
4347
@Override
4448
public Annotation map(final ResultSet rs, final StatementContext ctx) throws SQLException {
4549
Annotation log = new Annotation();
50+
log.setAnnotationId(rs.getInt("annotation_id"));
4651
log.setResourceId(rs.getInt("resource_id"));
4752
log.setUserId(rs.getInt("user_id"));
4853
log.setAction(rs.getString("action"));
49-
log.setSelection(rs.getString("words_selected"));
50-
log.setAnnotation(rs.getString("user_annotation"));
51-
log.setTimestamp(rs.getTimestamp("created_at").toInstant());
54+
log.setSelection(rs.getString("selection"));
55+
log.setAnnotation(rs.getString("annotation"));
56+
log.setCreatedAt(rs.getTimestamp("created_at").toInstant());
5257
return log;
5358
}
5459
}

src/main/java/de/l3s/learnweb/resource/Resource.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -541,9 +541,9 @@ public void setTypeFromFormat(String format) {
541541
return;
542542
}
543543

544-
if (format.equals("text/html") || format.equals("application/xhtml+xml")) {
544+
if (StringUtils.equalsAny(format, "text/html", "application/xhtml+xml")) {
545545
this.type = ResourceType.website;
546-
} else if (format.startsWith("text/") || StringUtils.equalsAny(format, "application/json", "application/xml")) {
546+
} else if (format.startsWith("text/") || StringUtils.equalsAny(format, "application/json", "application/xml", "application/sql")) {
547547
this.type = ResourceType.text;
548548
} else if (format.startsWith("image/")) {
549549
this.type = ResourceType.image;

src/main/java/de/l3s/learnweb/resource/ResourceAnnotationBean.java

Lines changed: 42 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
package de.l3s.learnweb.resource;
22

3+
import java.io.IOException;
34
import java.io.Serial;
45
import java.io.Serializable;
6+
import java.nio.file.Files;
57
import java.util.ArrayList;
8+
import java.util.List;
69
import java.util.Map;
710
import java.util.regex.Pattern;
811

@@ -12,10 +15,15 @@
1215
import jakarta.inject.Inject;
1316
import jakarta.inject.Named;
1417

18+
import org.apache.logging.log4j.LogManager;
19+
import org.apache.logging.log4j.Logger;
20+
import org.omnifaces.util.Beans;
1521
import org.omnifaces.util.Faces;
1622
import org.omnifaces.util.Messages;
1723
import org.primefaces.PrimeFaces;
1824

25+
import com.google.gson.Gson;
26+
1927
import de.l3s.learnweb.beans.ApplicationBean;
2028
import de.l3s.learnweb.beans.BeanAssert;
2129
import de.l3s.util.NlpHelper;
@@ -25,15 +33,42 @@
2533
public class ResourceAnnotationBean extends ApplicationBean implements Serializable {
2634
@Serial
2735
private static final long serialVersionUID = -6100755972011969429L;
36+
private static final Logger log = LogManager.getLogger(ResourceAnnotationBean.class);
2837

2938
private static final Pattern SPACES = Pattern.compile("\\s+");
39+
private Resource resource;
3040

3141
@Inject
3242
private AnnotationDao annotationDao;
3343

3444
@PostConstruct
3545
public void onLoad() {
3646
BeanAssert.authorized(isLoggedIn());
47+
48+
resource = Beans.getInstance(ResourceDetailBean.class).getResource();
49+
}
50+
51+
public void convert() {
52+
if (resource.getType() == ResourceType.text) {
53+
if (resource.getMainFile() != null) {
54+
try {
55+
String lines = Files.readString(resource.getMainFile().getActualFile().toPath());
56+
lines = lines.replace("\n", "<br/>");
57+
resource.setTranscript(lines);
58+
resource.save();
59+
return;
60+
} catch (IOException e) {
61+
log.error("Error reading file while extracting transcript", e);
62+
}
63+
}
64+
}
65+
66+
addGrowl(FacesMessage.SEVERITY_ERROR, "Unfortunately, we could not extract the text from the file.");
67+
}
68+
69+
public String getAnnotationsAsJson() {
70+
List<Annotation> annotations = annotationDao.findAllByResourceId(resource.getId());
71+
return new Gson().toJson(annotations);
3772
}
3873

3974
/**
@@ -46,8 +81,6 @@ public void commandSaveAnnotation(final Resource resource) {
4681
resource.setTranscript(annotatedText);
4782
resource.save();
4883

49-
annotationDao.save(new Annotation(resource.getId(), getUser().getId(), "save transcript", null, null));
50-
5184
getUser().clearCaches();
5285
addGrowl(FacesMessage.SEVERITY_INFO, "Changes_saved");
5386
}
@@ -63,8 +96,6 @@ public void commandCommitAnnotation(final Resource resource) {
6396
resource.setReadOnlyTranscript(true);
6497
resource.save();
6598

66-
annotationDao.save(new Annotation(resource.getId(), getUser().getId(), "submit transcript", null, null));
67-
6899
getUser().clearCaches();
69100
addGrowl(FacesMessage.SEVERITY_INFO, "Annotation Submitted");
70101
}
@@ -76,7 +107,13 @@ public void commandLogAnnotation(final Resource resource) {
76107
BeanAssert.authorized(resource.canAnnotateResource(getUser()));
77108

78109
Map<String, String> params = Faces.getRequestParameterMap();
79-
annotationDao.save(new Annotation(resource.getId(), getUser().getId(), params.get("action"), params.get("selection"), params.get("annotation")));
110+
Annotation annotation = new Annotation();
111+
annotation.setResourceId(resource.getId());
112+
annotation.setUserId(getUser().getId());
113+
annotation.setAction(params.get("action"));
114+
annotation.setSelection(params.get("selection"));
115+
annotation.setAnnotation(params.get("annotation"));
116+
annotationDao.save(annotation);
80117
}
81118

82119
/**

src/main/java/de/l3s/learnweb/resource/ResourceType.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ public enum ResourceType {
1414
audio,
1515
pdf,
1616
website,
17-
spreadsheet,
18-
presentation,
19-
document,
17+
spreadsheet, // onlyoffice
18+
presentation, // onlyoffice
19+
document, // onlyoffice
2020
file, // applications, archives, etc
2121

2222
// learnweb types

src/main/java/de/l3s/learnweb/resource/ted/TedTranscriptBean.java

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

33
import java.io.Serial;
44
import java.io.Serializable;
5+
import java.util.ArrayList;
56
import java.util.LinkedList;
67
import java.util.List;
78
import java.util.Locale;
8-
import java.util.Map;
99

1010
import jakarta.faces.model.SelectItem;
1111
import jakarta.faces.view.ViewScoped;
@@ -120,7 +120,7 @@ public void setTranscript() {
120120
});
121121

122122
// TODO: but why do we need this (two lines below)?
123-
String transcript = sb.toString().replaceAll("\n", "<br/><br/>");
123+
String transcript = sb.toString().replace("\n", "<br/><br/>");
124124
Document doc = Jsoup.parse(transcript);
125125
tedResource.setTranscript(doc.getElementsByTag("body").html());
126126
}
@@ -172,7 +172,7 @@ public List<SelectItem> getLanguageList() {
172172
if (langList.isEmpty()) {
173173
languageList.add(new SelectItem("NA", "No Transcripts Available"));
174174
} else {
175-
List<Locale> locales = new ArrayList<>();
175+
ArrayList<Locale> locales = new ArrayList<>();
176176
try {
177177
for (String lang : langList) {
178178
locales.add(LocaleUtils.toLocale(lang));
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
CREATE TABLE IF NOT EXISTS `lw_resource_annotation` (
2+
`annotation_id` INT(10) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
23
`resource_id` INT(10) UNSIGNED NOT NULL,
34
`user_id` INT(10) UNSIGNED NOT NULL,
45
`action` CHAR(25) NOT NULL,
56
`selection` LONGTEXT NOT NULL,
6-
`annotation` MEDIUMTEXT NOT NULL,
7+
`annotation` MEDIUMTEXT NULL,
78
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP()
89
);

0 commit comments

Comments
 (0)