@@ -42,7 +42,6 @@

private static final XStream configXstream = XStreamHelper.createXStreamInstance();
static {
XStream.setupDefaultSecurity(configXstream);
Class<?>[] types = new Class[] { ExportFormat.class };
configXstream.addPermission(new ExplicitTypePermission(types));
configXstream.alias(QTI_EXPORT_ITEM_FORMAT_CONFIG, ExportFormat.class);
@@ -103,7 +103,18 @@
@Autowired
private UserManager userManager;

private final XStream xstream = XStreamHelper.createXStreamInstance();
private static final XStream xstream = XStreamHelper.createXStreamInstance();
static {
XStreamHelper.allowDefaultPackage(xstream);
}

public static EfficiencyStatement fromXML(String xml) {
return (EfficiencyStatement)xstream.fromXML(xml);
}

public static String toXML(EfficiencyStatement statement) {
return xstream.toXML(statement);
}

/**
* Updates the users efficiency statement for this course. <p>
@@ -341,7 +352,7 @@ public void fillEfficiencyStatement(EfficiencyStatement efficiencyStatement, Ass
}

efficiencyProperty.setLastModified(new Date());
efficiencyProperty.setStatementXml(xstream.toXML(efficiencyStatement));
efficiencyProperty.setStatementXml(toXML(efficiencyStatement));
}

/**
@@ -377,7 +388,7 @@ public EfficiencyStatement getUserEfficiencyStatementByCourseRepositoryEntry(Rep
if(s == null || s.getStatementXml() == null) {
return null;
}
return (EfficiencyStatement)xstream.fromXML(s.getStatementXml());
return fromXML(s.getStatementXml());
}

public EfficiencyStatement getUserEfficiencyStatementByResourceKey(Long resourceKey, Identity identity){
@@ -393,7 +404,7 @@ public EfficiencyStatement getUserEfficiencyStatementByResourceKey(Long resource
if(statement.isEmpty() || statement.get(0).getStatementXml() == null) {
return null;
}
return (EfficiencyStatement)xstream.fromXML(statement.get(0).getStatementXml());
return fromXML(statement.get(0).getStatementXml());
}


@@ -532,7 +543,7 @@ public EfficiencyStatement getUserEfficiencyStatementByKey(Long key) {
if(statement.isEmpty() || !StringHelper.containsNonWhitespace(statement.get(0).getStatementXml())) {
return null;
}
return (EfficiencyStatement)xstream.fromXML(statement.get(0).getStatementXml());
return fromXML(statement.get(0).getStatementXml());
}

public UserEfficiencyStatementLight getUserEfficiencyStatementLightByKey(Long key) {
@@ -648,7 +659,7 @@ public Double getScore(String nodeIdent, EfficiencyStatement efficiencyStatement
.getResultList();
for(UserEfficiencyStatementImpl statement:statements) {
if(StringHelper.containsNonWhitespace(statement.getStatementXml())) {
EfficiencyStatement s = (EfficiencyStatement)xstream.fromXML(statement.getStatementXml());
EfficiencyStatement s = fromXML(statement.getStatementXml());
efficiencyStatements.add(s);
}
}
@@ -37,9 +37,9 @@
import org.olat.core.logging.activity.ThreadLocalUserActivityLogger;
import org.olat.core.util.StringHelper;
import org.olat.core.util.vfs.VFSLeaf;
import org.olat.core.util.xml.XStreamHelper;
import org.olat.course.assessment.AssessmentHelper;
import org.olat.course.assessment.EfficiencyStatement;
import org.olat.course.assessment.manager.EfficiencyStatementManager;
import org.olat.course.assessment.model.AssessmentNodeData;
import org.olat.course.assessment.ui.tool.IdentityAssessmentOverviewController;
import org.olat.course.certificate.ui.CertificateAndEfficiencyStatementController;
@@ -57,8 +57,6 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.thoughtworks.xstream.XStream;

/**
*
* Initial date: 24.06.2016<br>
@@ -69,8 +67,7 @@
public class EfficiencyStatementMediaHandler extends AbstractMediaHandler {

private static final Logger log = Tracing.createLoggerFor(EfficiencyStatementMediaHandler.class);
private static final XStream myXStream = XStreamHelper.createXStreamInstance();


public static final String EFF_MEDIA = "EfficiencyStatement";

@Autowired
@@ -114,7 +111,7 @@ public Media createMedia(String title, String description, Object mediaObject, S
Media media = null;
if (mediaObject instanceof EfficiencyStatement) {
EfficiencyStatement statement = (EfficiencyStatement) mediaObject;
String xml = myXStream.toXML(statement);
String xml = EfficiencyStatementManager.toXML(statement);
media = mediaDao.createMedia(title, description, xml, EFF_MEDIA, businessPath, null, 90, author);
ThreadLocalUserActivityLogger.log(PortfolioLoggingAction.PORTFOLIO_MEDIA_ADDED, getClass(),
LoggingResourceable.wrap(media));
@@ -128,7 +125,7 @@ public Controller getMediaController(UserRequest ureq, WindowControl wControl, M
EfficiencyStatement statement = null;
if(StringHelper.containsNonWhitespace(statementXml)) {
try {
statement = (EfficiencyStatement)myXStream.fromXML(statementXml);
statement = EfficiencyStatementManager.fromXML(statementXml);
} catch (Exception e) {
log.error("Cannot load efficiency statement from artefact", e);
}
@@ -148,7 +145,7 @@ public void export(Media media, ManifestBuilder manifest, File mediaArchiveDirec
EfficiencyStatement statement = null;
if(StringHelper.containsNonWhitespace(media.getContent())) {
try {
statement = (EfficiencyStatement)myXStream.fromXML(media.getContent());
statement = EfficiencyStatementManager.fromXML(media.getContent());
} catch (Exception e) {
log.error("Cannot load efficiency statement from artefact", e);
}
@@ -57,7 +57,6 @@

private static final XStream xstream = XStreamHelper.createXStreamInstance();
static {
XStream.setupDefaultSecurity(xstream);
Class<?>[] types = new Class[] {
CourseConfig.class, Hashtable.class, HashMap.class
};
@@ -57,6 +57,10 @@
public class CustomConfigManager {

private static final Logger log = Tracing.createLoggerFor(CustomConfigManager.class);
private static final XStream xstream = XStreamHelper.createXStreamInstance();
static {
XStreamHelper.allowDefaultPackage(xstream);
}

private static final String IFRAME_CSS = "iframe.css";
private static final String MAIN_CSS = "main.css";
@@ -91,8 +95,7 @@ public void saveCustomConfigAndCompileCSS(Map<String, Map<String, Object>> custo
configTarget = themeBase.createChildLeaf(CUSTOM_CONFIG_XML);
}

XStream xStream = XStreamHelper.createXStreamInstance();
xStream.toXML(customConfig, configTarget.getOutputStream(false));
xstream.toXML(customConfig, configTarget.getOutputStream(false));

// compile the css-files
StringBuilder sbMain = new StringBuilder();
@@ -187,9 +190,8 @@ public VFSItem getLogoItem(VFSContainer themeBase){
if (configTarget == null) {
return defaultConf;
}
XStream xStream = XStreamHelper.createXStreamInstance();
try(InputStream in=configTarget.getInputStream()) {
return (Map<String, Map<String, Object>>) xStream.fromXML(in);
return (Map<String, Map<String, Object>>) xstream.fromXML(in);
} catch(IOException e) {
log.error("", e);
return defaultConf;
@@ -430,6 +430,7 @@ public void postImport(File importDirectory, ICourse course, CourseEnvironmentMa
File projectBrokerFile = new File(folderNodeData, "projectbroker.xml");
if (projectBrokerFile.exists()) {
XStream xstream = XStreamHelper.createXStreamInstance();
XStreamHelper.allowDefaultPackage(xstream);
ProjectGroupManager projectGroupManager = CoreSpringFactory.getImpl(ProjectGroupManager.class);
ProjectBrokerConfig brokerConfig = (ProjectBrokerConfig) XStreamHelper.readObject(xstream,
projectBrokerFile);
@@ -456,6 +457,7 @@ public void postImport(File importDirectory, ICourse course, CourseEnvironmentMa
private void importProject(File projectDir, File projectFile, ProjectBroker projectBroker, ICourse course,
CourseEnvironmentMapper envMapper) {
XStream xstream = XStreamHelper.createXStreamInstance();
XStreamHelper.allowDefaultPackage(xstream);
BusinessGroupService bgs = CoreSpringFactory.getImpl(BusinessGroupService.class);
CoursePropertyManager cpm = course.getCourseEnvironment().getCoursePropertyManager();
ProjectGroupManager projectGroupManager = CoreSpringFactory.getImpl(ProjectGroupManager.class);
@@ -536,6 +538,7 @@ public void exportNode(File exportDirectory, ICourse course) {
ProjectBroker pb = projectBrokerManager.getProjectBroker(projectBrokerManager.getProjectBrokerId(cpm, this));
ProjectGroupManager projectGroupManager = CoreSpringFactory.getImpl(ProjectGroupManager.class);
XStream xstream = XStreamHelper.createXStreamInstance();
XStreamHelper.allowDefaultPackage(xstream);

// folder for the pb node
File pbNodeFolder = new File(exportDirectory, getIdent());
@@ -130,6 +130,9 @@
private static final Logger log = Tracing.createLoggerFor(GTAManagerImpl.class);

private static final XStream taskDefinitionsXstream = XStreamHelper.createXStreamInstance();
static {
XStreamHelper.allowDefaultPackage(taskDefinitionsXstream);
}

@Autowired
private DB dbInstance;
@@ -46,8 +46,6 @@

public GroupXStream() {
xstream = XStreamHelper.createXStreamInstance();

XStream.setupDefaultSecurity(xstream);
Class<?>[] types = new Class[] {
CollabTools.class, Group.class, Area.class, AreaCollection.class, GroupCollection.class,
OLATGroupExport.class, ArrayList.class
@@ -81,7 +81,6 @@

private static XStream configXstream = XStreamHelper.createXStreamInstance();
static {
XStream.setupDefaultSecurity(configXstream);
Class<?>[] types = new Class[] {
CPPackageConfig.class, DeliveryOptions.class
};
@@ -194,7 +194,6 @@

private static XStream configXstream = XStreamHelper.createXStreamInstance();
static {
XStream.setupDefaultSecurity(configXstream);
Class<?>[] types = new Class[] {
QTI21DeliveryOptions.class, QTI21AssessmentResultsOptions.class
};
@@ -32,7 +32,6 @@
import javax.annotation.PostConstruct;

import org.apache.logging.log4j.Logger;
import org.apache.pdfbox.io.IOUtils;
import org.olat.basesecurity.IdentityImpl;
import org.olat.core.gui.media.MediaResource;
import org.olat.core.gui.translator.Translator;
@@ -72,18 +71,16 @@
@PostConstruct
public void init() {
logXStream = XStreamHelper.createXStreamInstance();
XStreamHelper.allowDefaultPackage(logXStream);
logXStream.alias("message", InstantMessageImpl.class);
logXStream.alias("identity", IdentityImpl.class);
logXStream.omitField(IdentityImpl.class, "user");
}

public void archive(OLATResourceable ores, File exportDirectory) {
ObjectOutputStream out = null;
try {
File file = new File(exportDirectory, "chat.xml");
Writer writer = new FileWriter(file);
out = logXStream.createObjectOutputStream(writer);

File file = new File(exportDirectory, "chat.xml");
try(Writer writer = new FileWriter(file);
ObjectOutputStream out = logXStream.createObjectOutputStream(writer)) {
int counter = 0;
List<InstantMessage> messages;
do {
@@ -95,8 +92,6 @@ public void archive(OLATResourceable ores, File exportDirectory) {
} while(messages.size() == BATCH_SIZE);
} catch (IOException e) {
log.error("", e);
} finally {
IOUtils.closeQuietly(out);
}
}

@@ -47,7 +47,6 @@

private static final XStream xstream = XStreamHelper.createXStreamInstance();
static {
XStream.setupDefaultSecurity(xstream);
Class<?>[] types = new Class[] {
ImageSettings.class, ImageHorizontalAlignment.class, ImageTitlePosition.class, ImageSize.class,
TextSettings.class, ContainerSettings.class, ContainerColumn.class,
@@ -63,7 +63,6 @@
private static final XStream xstream = XStreamHelper.createXStreamInstanceForDBObjects();

static {
XStream.setupDefaultSecurity(xstream);
Class<?>[] types = new Class[] {
Curriculum.class, CurriculumImpl.class, CurriculumElement.class, CurriculumElementImpl.class,
CurriculumElementType.class, CurriculumElementTypeImpl.class, CurriculumElementTypeManagedFlag.class,
@@ -48,6 +48,7 @@

private static final XStream disadvantageCompensationXStream = XStreamHelper.createXStreamInstanceForDBObjects();
static {
XStreamHelper.allowDefaultPackage(disadvantageCompensationXStream);
disadvantageCompensationXStream.alias("disadvantageCompensation", DisadvantageCompensationImpl.class);
disadvantageCompensationXStream.ignoreUnknownElements();

@@ -37,7 +37,6 @@
private static final XStream xstream = XStreamHelper.createXStreamInstance();

static {
XStream.setupDefaultSecurity(xstream);
Class<?>[] types = new Class[] { Choice.class,
Choices.class, Container.class, Disclaimer.class, FileStoredData.class, FileUpload.class, Form.class,
HTMLParagraph.class, HTMLRaw.class, Image.class, ImageSettings.class, InformationType.class,
@@ -69,6 +69,7 @@

private static final XStream lectureBlockXStream = XStreamHelper.createXStreamInstanceForDBObjects();
static {
XStreamHelper.allowDefaultPackage(lectureBlockXStream);
lectureBlockXStream.ignoreUnknownElements();

lectureBlockXStream.alias("lectureBlock", LectureBlockImpl.class);
@@ -85,6 +86,7 @@

private static final XStream rollCallXStream = XStreamHelper.createXStreamInstanceForDBObjects();
static {
XStreamHelper.allowDefaultPackage(rollCallXStream);
rollCallXStream.alias("rollcall", LectureBlockRollCallImpl.class);
rollCallXStream.ignoreUnknownElements();
rollCallXStream.omitField(LectureBlockRollCallImpl.class, "identity");
@@ -94,6 +96,7 @@

private static final XStream summaryXStream = XStreamHelper.createXStreamInstanceForDBObjects();
static {
XStreamHelper.allowDefaultPackage(summaryXStream);
summaryXStream.alias("summary", LectureParticipantSummaryImpl.class);
summaryXStream.ignoreUnknownElements();
summaryXStream.omitField(LectureParticipantSummaryImpl.class, "identity");
@@ -102,6 +105,7 @@

private static final XStream absenceNoticeXStream = XStreamHelper.createXStreamInstanceForDBObjects();
static {
XStreamHelper.allowDefaultPackage(absenceNoticeXStream);
absenceNoticeXStream.alias("absenceNotice", AbsenceNoticeImpl.class);
absenceNoticeXStream.ignoreUnknownElements();
absenceNoticeXStream.omitField(LectureParticipantSummaryImpl.class, "identity");
@@ -113,6 +117,7 @@

private static final XStream absenceNoticeRelationsXStream = XStreamHelper.createXStreamInstanceForDBObjects();
static {
XStreamHelper.allowDefaultPackage(absenceNoticeRelationsXStream);
absenceNoticeRelationsXStream.alias("absenceNoticeRelations", AbsenceNoticeRelationsAuditImpl.class);
absenceNoticeRelationsXStream.ignoreUnknownElements();

@@ -54,6 +54,7 @@
@PostConstruct
public void init() {
xStream = XStreamHelper.createXStreamInstance();
XStreamHelper.allowDefaultPackage(xStream);
xStream.alias("room", OpenMeetingsRoom.class);
xStream.omitField(OpenMeetingsRoom.class, "property");
xStream.omitField(OpenMeetingsRoom.class, "numOfUsers");
@@ -44,6 +44,9 @@

private static final Logger log = Tracing.createLoggerFor(BinderXStream.class);
private static final XStream myStream = XStreamHelper.createXStreamInstanceForDBObjects();
static {
XStreamHelper.allowDefaultPackage(myStream);
}

public static final Binder copy(Binder binder) {
String stringuified = myStream.toXML(binder);
@@ -55,7 +58,7 @@ public static final Binder fromPath(Path path)
try(InputStream inStream = Files.newInputStream(path)) {
return (Binder)myStream.fromXML(inStream);
} catch (Exception e) {
log.error("Cannot import this map: " + path, e);
log.error("Cannot import this map: {}", path, e);
return null;
}
}
@@ -65,7 +68,7 @@ public static final void toStream(Binder binder, ZipOutputStream zout)
try(OutputStream out=new ShieldOutputStream(zout)) {
myStream.toXML(binder, out);
} catch (Exception e) {
log.error("Cannot export this map: " + binder, e);
log.error("Cannot export this map: {}", binder, e);
}
}
}
@@ -34,6 +34,7 @@

private static final XStream xstream = XStreamHelper.createXStreamInstance();
static {
XStreamHelper.allowDefaultPackage(xstream);
xstream.alias("citation", org.olat.modules.portfolio.model.CitationXml.class);
xstream.aliasType("citation", org.olat.modules.portfolio.model.CitationXml.class);
}
@@ -145,7 +145,6 @@
private static XStream configXstream = XStreamHelper.createXStreamInstance();
static {
configXstream.alias("deliveryOptions", BinderDeliveryOptions.class);
XStream.setupDefaultSecurity(configXstream);
Class<?>[] types = new Class[] {
BinderDeliveryOptions.class
};
@@ -43,7 +43,7 @@

private static XStream metadatXstream = XStreamHelper.createXStreamInstance();
static {

XStreamHelper.allowDefaultPackage(metadatXstream);
metadatXstream.alias("item", QuestionItemImpl.class);
metadatXstream.alias("educationalContext", QEducationalContext.class);
metadatXstream.alias("itemType", QItemType.class);
@@ -52,6 +52,7 @@

private static final XStream qitemXStream = XStreamHelper.createXStreamInstanceForDBObjects();
static {
XStreamHelper.allowDefaultPackage(qitemXStream);
qitemXStream.alias("questionItem", QuestionItemImpl.class);
qitemXStream.alias("taxonomyLevel", TaxonomyLevelImpl.class);
qitemXStream.alias("educationalContext", QEducationalContext.class);
@@ -50,7 +50,6 @@

private static final XStream xstream = XStreamHelper.createXStreamInstance();
static {
XStream.setupDefaultSecurity(xstream);
Class<?>[] types = new Class[] {
MultiGroupBy.class, GroupBy.class, AnalysisSearchParameter.class, QualityDataCollectionRefImpl.class,
RepositoryEntryRefImpl.class, IdentityRefImpl.class, OrganisationRefImpl.class, CurriculumRefImpl.class,
@@ -38,6 +38,7 @@

private static final XStream ruleXStream = XStreamHelper.createXStreamInstance();
static {
XStreamHelper.allowDefaultPackage(ruleXStream);
ruleXStream.alias("rule", org.olat.modules.reminder.model.ReminderRuleImpl.class);
ruleXStream.alias("rules", org.olat.modules.reminder.model.ReminderRules.class);
ruleXStream.alias("reminders", org.olat.modules.reminder.model.ImportExportReminders.class);
@@ -56,7 +56,6 @@
private static final Logger log = Tracing.createLoggerFor(ScormMainManager.class);
private static XStream configXstream = XStreamHelper.createXStreamInstance();
static {
XStream.setupDefaultSecurity(configXstream);
Class<?>[] types = new Class[] {
ScormPackageConfig.class, DeliveryOptions.class
};
@@ -46,6 +46,7 @@

private static final XStream competenceXStream = XStreamHelper.createXStreamInstanceForDBObjects();
static {
XStreamHelper.allowDefaultPackage(competenceXStream);
competenceXStream.alias("competence", TaxonomyCompetenceImpl.class);
competenceXStream.alias("taxonomyLevel", TaxonomyLevelImpl.class);
competenceXStream.ignoreUnknownElements();
@@ -119,13 +119,6 @@
*/
public boolean getFrame(VFSLeaf video, int frameNumber, VFSLeaf frame) throws IOException;

/**
* Read the the metdatadata-xml in the videoresource folder
* @param videoResource
* @return
*/
public VideoMetadata readVideoMetadataFile(OLATResource videoResource);

/**
* Trigger the transcoding process to generate versions of the video
*
@@ -489,14 +482,6 @@
*/
public VideoTranscoding retranscodeFailedVideoTranscoding(VideoTranscoding videoTranscoding);

/**
* Checks if is metadata file valid.
*
* @param videoResource
* @return true, if is metadata file valid
*/
public boolean isMetadataFileValid(OLATResource videoResource);

/**
* Checks for master container.
*
@@ -78,14 +78,12 @@
import org.olat.core.util.vfs.VFSManager;
import org.olat.core.util.vfs.VFSStatus;
import org.olat.core.util.vfs.filters.VFSItemFilter;
import org.olat.core.util.xml.XStreamHelper;
import org.olat.fileresource.FileResourceManager;
import org.olat.fileresource.types.ResourceEvaluation;
import org.olat.modules.video.VideoFormat;
import org.olat.modules.video.VideoManager;
import org.olat.modules.video.VideoMarkers;
import org.olat.modules.video.VideoMeta;
import org.olat.modules.video.VideoMetadata;
import org.olat.modules.video.VideoMetadataSearchParams;
import org.olat.modules.video.VideoModule;
import org.olat.modules.video.VideoQuestion;
@@ -94,7 +92,6 @@
import org.olat.modules.video.model.TranscodingCount;
import org.olat.modules.video.model.VideoMarkersImpl;
import org.olat.modules.video.model.VideoMetaImpl;
import org.olat.modules.video.model.VideoMetadataImpl;
import org.olat.modules.video.model.VideoQuestionsImpl;
import org.olat.modules.video.spi.youtube.YoutubeProvider;
import org.olat.modules.video.spi.youtube.model.YoutubeMetadata;
@@ -396,34 +393,6 @@ private VFSLeaf resolveFromMasterContainer(OLATResource videoResource, String pa
}
}

@Override
public boolean isMetadataFileValid(OLATResource videoResource) {
VFSContainer baseContainer = FileResourceManager.getInstance().getFileResourceRootImpl(videoResource);
VFSLeaf metaDataFile = (VFSLeaf) baseContainer.resolve(FILENAME_VIDEO_METADATA_XML);
try {
VideoMetadata meta = (VideoMetadata) XStreamHelper.readObject(XStreamHelper.createXStreamInstance(), metaDataFile);
return meta != null;
} catch (Exception e) {
return false;
}
}

@Override
public VideoMetadata readVideoMetadataFile(OLATResource videoResource){
VFSContainer baseContainer= FileResourceManager.getInstance().getFileResourceRootImpl(videoResource);
VFSLeaf metaDataFile = (VFSLeaf) baseContainer.resolve(FILENAME_VIDEO_METADATA_XML);
try {
return (VideoMetadata) XStreamHelper.readObject(XStreamHelper.createXStreamInstance(), metaDataFile);
} catch (Exception e) {
log.error("Error while parsing XStream file for videoResource::{}", videoResource, e);
// return an empty, so at least it displays something and not an error
VideoMetadata meta = new VideoMetadataImpl();
meta.setWidth(800);
meta.setHeight(600);
return meta;
}
}

@Override
public String toPodcastVideoUrl(String url) {
try {
@@ -25,7 +25,9 @@
import org.olat.core.util.vfs.VFSLeaf;
import org.olat.core.util.xml.XStreamHelper;
import org.olat.modules.video.VideoMeta;
import org.olat.modules.video.VideoMetadata;
import org.olat.modules.video.model.VideoMetaImpl;
import org.olat.modules.video.model.VideoMetadataImpl;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.security.ExplicitTypePermission;
@@ -40,9 +42,9 @@

private static final XStream xstream = XStreamHelper.createXStreamInstance();
static {
XStream.setupDefaultSecurity(xstream);
Class<?>[] types = new Class[] {
VideoMeta.class, VideoMetaImpl.class
VideoMeta.class, VideoMetaImpl.class,
VideoMetadata.class, VideoMetadataImpl.class
};
xstream.addPermission(new ExplicitTypePermission(types));
xstream.ignoreUnknownElements();
@@ -47,7 +47,6 @@

private static final XStream xstream = XStreamHelper.createXStreamInstance();
static {
XStream.setupDefaultSecurity(xstream);
Class<?>[] types = new Class[] {
VideoMarker.class, VideoMarkerImpl.class, VideoMarkers.class, VideoMarkersImpl.class,
VideoQuestion.class, VideoQuestionImpl.class, VideoQuestions.class, VideoQuestionsImpl.class
@@ -204,7 +204,6 @@ protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event
VideoTranscoding videoTranscoding = (VideoTranscoding) link.getUserObject();
if (videoTranscoding == null) {
// this is the master video
// VideoMetadata videoMetadata = videoManager.readVideoMetadataFile(videoResource);
VideoMeta videoMetadata = videoManager.getVideoMetadata(videoResource);
previewVC.contextPut("width", videoMetadata.getWidth());
previewVC.contextPut("height", videoMetadata.getHeight());
@@ -186,6 +186,7 @@ public ViteroManager() {
@PostConstruct
public void init() {
xStream = XStreamHelper.createXStreamInstance();
XStreamHelper.allowDefaultPackage(xStream);
xStream.alias("vBooking", ViteroBooking.class);
xStream.omitField(ViteroBooking.class, "property");
}
@@ -100,6 +100,7 @@
public FeedFileStorge() {
fileResourceManager = FileResourceManager.getInstance();
xstream = XStreamHelper.createXStreamInstance();
XStreamHelper.allowDefaultPackage(xstream);
xstream.alias("feed", FeedImpl.class);
xstream.aliasField("type", FeedImpl.class, "resourceableType");
xstream.omitField(FeedImpl.class, "id");
@@ -60,6 +60,7 @@

private static final XStream xstream = XStreamHelper.createXStreamInstance();
static {
XStreamHelper.allowDefaultPackage(xstream);
xstream.alias("item", ItemImpl.class);
}

@@ -33,6 +33,7 @@
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
@@ -79,6 +80,7 @@
import org.springframework.stereotype.Service;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.security.ExplicitTypePermission;

/**
* Description:
@@ -92,7 +94,10 @@

private static final XStream xmlXStream = XStreamHelper.createXStreamInstance();
static {
XStream.setupDefaultSecurity(xmlXStream);
Class<?>[] types = new Class[] {
HashMap.class
};
xmlXStream.addPermission(new ExplicitTypePermission(types));
}

private static final int VALID_UNTIL_30_DAYS = 30*24;
@@ -88,6 +88,7 @@

private static final XStream xstream = XStreamHelper.createXStreamInstance();
static {
XStreamHelper.allowDefaultPackage(xstream);
xstream.alias(PROP_ROOT, RepositoryEntryImport.class);
xstream.aliasField(PROP_SOFTKEY, RepositoryEntryImport.class, "softkey");
xstream.aliasField(PROP_RESOURCENAME, RepositoryEntryImport.class, "resourcename");
@@ -131,7 +131,9 @@

private static final Logger log = Tracing.createLoggerFor(CourseWebService.class);
private static final XStream myXStream = XStreamHelper.createXStreamInstance();

static {
XStreamHelper.allowDefaultPackage(myXStream);
}

public static final CacheControl cc = new CacheControl();
static {
@@ -695,6 +697,7 @@ public Response findRunStructureById(@Context HttpServletRequest httpRequest, @C
Date lastModified = new Date(runStructureItem.getLastModified());
Response.ResponseBuilder response = request.evaluatePreconditions(lastModified);
if(response == null) {
//TODO xstream
return Response.ok(myXStream.toXML(course.getRunStructure())).build();
}
return response.build();
@@ -33,11 +33,14 @@
import org.olat.core.util.vfs.VFSItem;
import org.olat.core.util.vfs.VFSLeaf;
import org.olat.core.util.vfs.VFSManager;
import org.olat.core.util.xml.XStreamHelper;
import org.olat.fileresource.FileResourceManager;
import org.olat.fileresource.types.VideoFileResource;
import org.olat.modules.video.VideoManager;
import org.olat.modules.video.VideoMetadata;
import org.olat.modules.video.manager.VideoManagerImpl;
import org.olat.modules.video.model.VideoMetaImpl;
import org.olat.modules.video.model.VideoMetadataImpl;
import org.olat.repository.RepositoryEntry;
import org.olat.resource.OLATResource;
import org.springframework.beans.factory.annotation.Autowired;
@@ -51,6 +54,8 @@
public class OLATUpgrade_11_3_0 extends OLATUpgrade {

private static final Logger log = Tracing.createLoggerFor(OLATUpgrade_11_3_0.class);

private static final String FILENAME_VIDEO_METADATA_XML = "video_metadata.xml";

private static final String VIDEO_XML = "VIDEO XML";
private static final String VERSION = "OLAT_11.3.0";
@@ -120,8 +125,8 @@ private boolean processVideoResource(RepositoryEntry entry) {
}
// update track files on file system
VFSContainer masterContainer = videoManager.getMasterContainer(videoResource);
if (videoManager.isMetadataFileValid(videoResource)) {
VideoMetadata metafromXML = videoManager.readVideoMetadataFile(videoResource);
if (isMetadataFileValid(videoResource)) {
VideoMetadata metafromXML = readVideoMetadataFile(videoResource);
for (Entry<String, String> track : metafromXML.getAllTracks().entrySet()) {
VFSItem item = masterContainer.resolve(track.getValue());
if (item != null && item instanceof VFSLeaf) {
@@ -165,4 +170,30 @@ private boolean processVideoResource(RepositoryEntry entry) {
return false;
}
}

private boolean isMetadataFileValid(OLATResource videoResource) {
VFSContainer baseContainer = FileResourceManager.getInstance().getFileResourceRootImpl(videoResource);
VFSLeaf metaDataFile = (VFSLeaf) baseContainer.resolve(FILENAME_VIDEO_METADATA_XML);
try {
VideoMetadata meta = (VideoMetadata) XStreamHelper.readObject(XStreamHelper.createXStreamInstance(), metaDataFile);
return meta != null;
} catch (Exception e) {
return false;
}
}

private VideoMetadata readVideoMetadataFile(OLATResource videoResource){
VFSContainer baseContainer= FileResourceManager.getInstance().getFileResourceRootImpl(videoResource);
VFSLeaf metaDataFile = (VFSLeaf) baseContainer.resolve(FILENAME_VIDEO_METADATA_XML);
try {
return (VideoMetadata) XStreamHelper.readObject(XStreamHelper.createXStreamInstance(), metaDataFile);
} catch (Exception e) {
log.error("Error while parsing XStream file for videoResource::{}", videoResource, e);
// return an empty, so at least it displays something and not an error
VideoMetadata meta = new VideoMetadataImpl();
meta.setWidth(800);
meta.setHeight(600);
return meta;
}
}
}
@@ -237,7 +237,7 @@ private String getTitleQTI12(QuestionItemImpl item) {
Item xmlItem = QTIEditHelper.readItemXml(leaf);
return xmlItem.getTitle();
} catch (NullPointerException e) {
log.warn("Cannot read files from dir: " + item.getDirectory());
log.warn("Cannot read files from dir: {}", item.getDirectory());
}
return null;
}
@@ -247,6 +247,7 @@ private boolean migrateDialogElements(UpgradeManager upgradeManager, UpgradeHist
if (!uhd.getBooleanDataValue(MIGRATE_DIALOG)) {
try {
XStream xstream = XStreamHelper.createXStreamInstance();
XStreamHelper.allowDefaultPackage(xstream);
xstream.alias("org.olat.modules.dialog.DialogPropertyElements", DialogPropertyElements.class);
xstream.alias("org.olat.modules.dialog.DialogElement", DialogElement.class);

@@ -0,0 +1,137 @@
/**
* <a href="http://www.openolat.org">
* OpenOLAT - Online Learning and Training</a><br>
* <p>
* Licensed under the Apache License, Version 2.0 (the "License"); <br>
* you may not use this file except in compliance with the License.<br>
* You may obtain a copy of the License at the
* <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
* <p>
* Unless required by applicable law or agreed to in writing,<br>
* software distributed under the License is distributed on an "AS IS" BASIS, <br>
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
* See the License for the specific language governing permissions and <br>
* limitations under the License.
* <p>
* Initial code contributed and copyrighted by<br>
* frentix GmbH, http://www.frentix.com
* <p>
*/
package org.olat.upgrade;

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;

import org.apache.logging.log4j.Logger;
import org.olat.core.commons.modules.bc.FolderConfig;
import org.olat.core.commons.persistence.DB;
import org.olat.core.commons.persistence.QueryBuilder;
import org.olat.core.logging.Tracing;
import org.olat.core.util.xml.XStreamHelper;
import org.olat.course.CourseXStreamAliases;
import org.olat.course.PersistingCourseImpl;
import org.springframework.beans.factory.annotation.Autowired;

import com.thoughtworks.xstream.XStream;

/**
*
* Initial date: 18 juin 2021<br>
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
*
*/
public class OLATUpgrade_15_3_18 extends OLATUpgrade {

private static final Logger log = Tracing.createLoggerFor(OLATUpgrade_15_3_18.class);

private static final String VERSION = "OLAT_15.3.18";
private static final String OPEN_COURSES = "OPEN COURSES";

@Autowired
private DB dbInstance;

public OLATUpgrade_15_3_18() {
super();
}

@Override
public String getVersion() {
return VERSION;
}

@Override
public boolean doPostSystemInitUpgrade(UpgradeManager upgradeManager) {
UpgradeHistoryData uhd = upgradeManager.getUpgradesHistory(VERSION);
if (uhd == null) {
// has never been called, initialize
uhd = new UpgradeHistoryData();
} else if (uhd.isInstallationComplete()) {
return false;
}

boolean allOk = true;
allOk &= openCourse(upgradeManager, uhd);

uhd.setInstallationComplete(allOk);
upgradeManager.setUpgradesHistory(uhd, VERSION);
if(allOk) {
log.info(Tracing.M_AUDIT, "Finished OLATUpgrade_15_3_18 successfully!");
} else {
log.info(Tracing.M_AUDIT, "OLATUpgrade_15_3_18 not finished, try to restart OpenOlat!");
}
return allOk;
}

private boolean openCourse(UpgradeManager upgradeManager, UpgradeHistoryData uhd) {
boolean allOk = true;
if (!uhd.getBooleanDataValue(OPEN_COURSES)) {
try {
Path coursesPath = Paths.get(FolderConfig.getCanonicalRoot(), PersistingCourseImpl.COURSE_ROOT_DIR_NAME);
List<Long> resourceIds = getCourseKeys();
for(Long resourceId:resourceIds) {
checkCourse(coursesPath, resourceId);
}
} catch (Exception e) {
log.error("", e);
allOk = false;
}

uhd.setBooleanDataValue(OPEN_COURSES, allOk);
upgradeManager.setUpgradesHistory(uhd, VERSION);
}
return allOk;
}

private void checkCourse(Path coursesPath, Long resourceId) {
try {
Path coursePath = coursesPath.resolve(resourceId.toString());
Path runStructure = coursePath.resolve(PersistingCourseImpl.RUNSTRUCTURE_XML);
Path editorTree = coursePath.resolve(PersistingCourseImpl.EDITORTREEMODEL_XML);

XStream xstream = CourseXStreamAliases.getReadCourseXStream();
if(Files.exists(runStructure)) {
XStreamHelper.readObject(xstream, runStructure.toFile());
}
if(Files.exists(editorTree)) {
XStreamHelper.readObject(xstream, editorTree.toFile());
}
} catch (Exception e) {
log.error("Error with course: {}", resourceId, e);
}
}

private List<Long> getCourseKeys() {
QueryBuilder sb = new QueryBuilder();
sb.append("select ores.resId from repositoryentry v")
.append(" inner join v.olatResource as ores")
.and().append(" ores.resName = 'CourseModule'");

List<Long> courseKeys = dbInstance.getCurrentEntityManager()
.createQuery(sb.toString(), Long.class)
.getResultList();
dbInstance.commitAndCloseSession();
return courseKeys;
}
}
@@ -31,11 +31,11 @@

import javax.sql.DataSource;

import org.apache.logging.log4j.Logger;
import org.olat.core.commons.persistence.DBFactory;
import org.olat.core.configuration.Initializable;
import org.olat.core.gui.control.Event;
import org.olat.core.logging.AssertException;
import org.apache.logging.log4j.Logger;
import org.olat.core.logging.StartupException;
import org.olat.core.logging.Tracing;
import org.olat.core.util.WebappHelper;
@@ -45,6 +45,7 @@
import org.olat.core.util.xml.XStreamHelper;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.security.ExplicitTypePermission;

/**
*
@@ -62,7 +63,13 @@

public abstract class UpgradeManager implements Initializable, GenericEventListener {

protected final XStream upgradesXStream = XStreamHelper.createXStreamInstance();
protected static final XStream upgradesXStream = XStreamHelper.createXStreamInstance();
static {
Class<?>[] types = new Class[] {
UpgradeHistoryData.class
};
upgradesXStream.addPermission(new ExplicitTypePermission(types));
}

private static final Logger log = Tracing.createLoggerFor(UpgradeManager.class);

@@ -154,12 +161,11 @@ public void setUpgradesHistory(UpgradeHistoryData upgradeHistoryData, String ver
/**
* Load all persisted UpgradeHistoryData objects from the fileSystem
*/
@SuppressWarnings("unchecked")
protected void initUpgradesHistories() {
File upgradesDir = new File(WebappHelper.getUserDataRoot(), SYSTEM_DIR);
File upgradesHistoriesFile = new File(upgradesDir, INSTALLED_UPGRADES_XML);
if (upgradesHistoriesFile.exists()) {
upgradesHistories = (Map<String, UpgradeHistoryData>)upgradesXStream.fromXML(upgradesHistoriesFile);
upgradesHistories = read(upgradesHistoriesFile);
} else {
if (upgradesHistories == null) {
upgradesHistories = new HashMap<>();
@@ -169,6 +175,11 @@ protected void initUpgradesHistories() {
createUpgradeData();
}
}

@SuppressWarnings("unchecked")
protected static Map<String, UpgradeHistoryData> read(File file) {
return (Map<String, UpgradeHistoryData>)upgradesXStream.fromXML(file);
}

/**
* create fake upgrade data as this is a new installation
@@ -69,6 +69,7 @@
<bean id="upgrade_15_2_6" class="org.olat.upgrade.OLATUpgrade_15_2_6"/>
<bean id="upgrade_15_3_0" class="org.olat.upgrade.OLATUpgrade_15_3_0"/>
<bean id="upgrade_15_3_12" class="org.olat.upgrade.OLATUpgrade_15_3_12"/>
<bean id="upgrade_15_3_18" class="org.olat.upgrade.OLATUpgrade_15_3_18"/>
</list>
</property>
</bean>
@@ -54,7 +54,6 @@

private static XStream homeConfigXStream = XStreamHelper.createXStreamInstance();
static {
XStream.setupDefaultSecurity(homeConfigXStream);
Class<?>[] types = new Class[] {
HomePageConfig.class
};
@@ -85,8 +84,8 @@ public HomePageConfig loadConfigFor(Identity identity) {
}
}
} catch (Exception e) {
log.error("Error while loading homepage config from path::" + configFile.getAbsolutePath() + ", fallback to default configuration",
e);
log.error("Error while loading homepage config from path::{}, fallback to default configuration",
configFile.getAbsolutePath(), e);
FileUtils.deleteFile(configFile);
retVal = loadAndSaveDefaults(identity);
// show message to user
@@ -64,6 +64,7 @@

private static final XStream interestsXStream = XStreamHelper.createXStreamInstance();
static {
XStreamHelper.allowDefaultPackage(interestsXStream);
interestsXStream.alias("category", UserInterestsCategory.class);
interestsXStream.alias("categories", List.class);
interestsXStream.addImplicitCollection(UserInterestsCategory.class, "subcategories");
@@ -0,0 +1,94 @@
/**
* <a href="http://www.openolat.org">
* OpenOLAT - Online Learning and Training</a><br>
* <p>
* Licensed under the Apache License, Version 2.0 (the "License"); <br>
* you may not use this file except in compliance with the License.<br>
* You may obtain a copy of the License at the
* <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
* <p>
* Unless required by applicable law or agreed to in writing,<br>
* software distributed under the License is distributed on an "AS IS" BASIS, <br>
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
* See the License for the specific language governing permissions and <br>
* limitations under the License.
* <p>
* Initial code contributed and copyrighted by<br>
* frentix GmbH, http://www.frentix.com
* <p>
*/
package org.olat.core.commons.modules.glossary;

import java.io.File;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

import org.apache.logging.log4j.Logger;
import org.junit.Assert;
import org.junit.Test;
import org.olat.core.logging.Tracing;
import org.olat.core.util.WebappHelper;
import org.olat.core.util.vfs.VFSLeaf;
import org.olat.test.OlatTestCase;
import org.olat.test.VFSJavaIOFile;
import org.springframework.beans.factory.annotation.Autowired;

/**
*
* Initial date: 21 juin 2021<br>
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
*
*/
public class GlossaryItemManagerTest extends OlatTestCase {

private static final Logger log = Tracing.createLoggerFor(GlossaryItemManagerTest.class);

@Autowired
private GlossaryItemManager glossaryItemManager;

@Test
public void loadGlossaryItemListFromFile() throws URISyntaxException {
URL glossaryUrl = GlossaryItemManagerTest.class.getResource("glossary.xml");
VFSLeaf glossaryLeaf = new VFSJavaIOFile(glossaryUrl.toURI());
List<GlossaryItem> items = glossaryItemManager.loadGlossaryItemListFromFile(glossaryLeaf);
Assert.assertNotNull(items);
}

@Test
public void saveToFile() throws URISyntaxException, MalformedURLException{
GlossaryItem item = new GlossaryItem("Definition", "This is a definition.");
List<String> flexions = new ArrayList<>();
flexions.add("Add");
flexions.add("Flex");
item.setGlossFlexions(flexions);
List<URI> uris = new ArrayList<>();
uris.add(new URL("https://www.frentix.com").toURI());
item.setGlossLinks(uris);
List<String> synonyms = new ArrayList<>();
synonyms.add("Synonym");
item.setGlossSynonyms(synonyms);

List<GlossaryItem> items = new ArrayList<>();
items.add(item);

File glossaryFile = new File(WebappHelper.getTmpDir(), "glossary" + UUID.randomUUID() + ".xml");
glossaryFile.getParentFile().mkdirs();
VFSLeaf glossaryLeaf = new VFSJavaIOFile(glossaryFile);
glossaryItemManager.saveToFile(glossaryLeaf, items);

// read the files
List<GlossaryItem> savedItems = glossaryItemManager.loadGlossaryItemListFromFile(glossaryLeaf);
Assert.assertNotNull(items);
Assert.assertEquals(1, savedItems.size());
Assert.assertEquals("Definition", savedItems.get(0).getGlossTerm());

if(!glossaryFile.delete()) {
log.error("Cannot delete: {}", glossaryFile);
}
}
}
@@ -0,0 +1,86 @@
<?xml version="1.0" encoding="UTF-8"?>
<list>
<glossentry>
<glossTerm>Forsythie</glossTerm>
<glossDef><![CDATA[<p>Die Forsythie, auch Garten-Forsythie, Goldflieder oder Goldglöckchen genannt, ist ein häufig gepflanzter Zierstrauch. Es handelt sich um eine Hybride zweier Arten aus der Gattung der Forsythien. Diese gehört zur Familie der Ölbaumgewächse.</p>]]></glossDef>
<glossSynonyms/>
<revHistory>
<revision>
<author>
<firstname>Jeremery</firstname>
<surname>Johns</surname>
<link>[Identity:66027520]</link>
</author>
<revisionflag>added</revisionflag>
<date>22 Mar 2021</date>
</revision>
<revision>
<author>
<firstname>Jeremery</firstname>
<surname>Johns</surname>
<link>[Identity:66027520]</link>
</author>
<revisionflag>added</revisionflag>
<date>22 Mar 2021</date>
</revision>
<revision>
<author>
<firstname>Jeremery</firstname>
<surname>Johns</surname>
<link>[Identity:66027520]</link>
</author>
<revisionflag>changed</revisionflag>
<date>22 Mar 2021</date>
</revision>
</revHistory>
</glossentry>
<glossentry>
<glossTerm>Kraut- und Braunfäule</glossTerm>
<glossDef><![CDATA[<p><img src="https://www.gesal.ch/.imaging/focus/dam/global/pests-diseases/Kraut-Braunfaeule_Tomate.jpg0/jcr:content.jpeg?x&#61;53&amp;y&#61;41&amp;lastModified&#61;Mon&#43;Dec&#43;02&#43;13%3A31%3A13&#43;CET&#43;2019&amp;width&#61;472&amp;height&#61;354" alt=" herb and brown rot - Kraut- und Braunfaeule" width="117" height="88" /></p>
<p>Kraut- und Braunfäule ist eine Pilzerkrankung, die vor allem im Sommer bei feuchten Witterungsbedingungen auftritt. Bei Tomatenpflanzen erscheinen auf den Blättern graugrüne später braune Flecken, die sich schnell ausbreiten. Die Früchte zeigen schmutzig braune Flecken. Das Fruchtfleisch ist unter den Flecken verhärtet und fault. Die Dauerformen dieses Schadpilzes überdauern im Boden und befallen bei geeigneten Bedingungen (feuchtwarm über 15°C) ab Ende Juni zunächst die bodennahen Blätter.</p>]]></glossDef>
<glossSynonyms/>
<revHistory>
<revision>
<author>
<firstname>Jeremery</firstname>
<surname>Johns</surname>
<link>[Identity:66027520]</link>
</author>
<revisionflag>added</revisionflag>
<date>23 Mar 2021</date>
</revision>
</revHistory>
</glossentry>
<glossentry>
<glossTerm>Test</glossTerm>
<glossDef></glossDef>
<glossSynonyms/>
<revHistory>
<revision>
<author>
<firstname>Jeremery</firstname>
<surname>Johns</surname>
<link>[Identity:66027520]</link>
</author>
<revisionflag>added</revisionflag>
<date>23 Mar 2021</date>
</revision>
</revHistory>
</glossentry>
<glossentry>
<glossTerm>Tomatenhaus</glossTerm>
<glossDef><![CDATA[<p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p>]]></glossDef>
<glossSynonyms/>
<revHistory>
<revision>
<author>
<firstname>Jeremery</firstname>
<surname>Johns</surname>
<link>[Identity:66027520]</link>
</author>
<revisionflag>added</revisionflag>
<date>24 Mar 2021</date>
</revision>
</revHistory>
</glossentry>
</list>
@@ -36,7 +36,6 @@
import org.olat.core.id.Identity;
import org.olat.core.logging.Tracing;
import org.olat.core.util.WebappHelper;
import org.olat.core.util.xml.XStreamHelper;
import org.olat.repository.RepositoryEntry;
import org.olat.test.JunitTestHelper;
import org.olat.test.OlatTestCase;
@@ -192,7 +191,7 @@ public void todo_oldTasks() {
ptask.setStatus(TaskStatus.inWork);
ptask.setExecutorBootId(UUID.randomUUID().toString());
ptask.setExecutorNode(Integer.toString(WebappHelper.getNodeId()));
ptask.setTask(XStreamHelper.createXStreamInstance().toXML(new DummyTask()));
ptask.setTask(PersistentTaskDAO.toXML(new DummyTask()));
dbInstance.getCurrentEntityManager().persist(ptask);

//simulate a task from an other node
@@ -203,7 +202,7 @@ public void todo_oldTasks() {
alienTask.setStatus(TaskStatus.inWork);
alienTask.setExecutorBootId(UUID.randomUUID().toString());
alienTask.setExecutorNode(Integer.toString(WebappHelper.getNodeId() + 1));
alienTask.setTask(XStreamHelper.createXStreamInstance().toXML(new DummyTask()));
alienTask.setTask(PersistentTaskDAO.toXML(new DummyTask()));
dbInstance.getCurrentEntityManager().persist(alienTask);

dbInstance.commitAndCloseSession();
@@ -27,7 +27,6 @@
import org.olat.core.commons.persistence.DB;
import org.olat.core.dispatcher.mapper.manager.MapperDAO;
import org.olat.core.dispatcher.mapper.model.PersistedMapper;
import org.olat.core.util.xml.XStreamHelper;
import org.olat.test.OlatTestCase;
import org.springframework.beans.factory.annotation.Autowired;

@@ -37,6 +36,7 @@
*/
public class MapperDAOTest extends OlatTestCase {


@Autowired
private MapperDAO mapperDao;
@Autowired
@@ -92,7 +92,7 @@ public void testLoadMapper_serializade() {
Assert.assertEquals(pMapper, loadedMapper);
Assert.assertEquals(mapperId, loadedMapper.getMapperId());

Object objReloaded = XStreamHelper.createXStreamInstance().fromXML(pMapper.getXmlConfiguration());
Object objReloaded = MapperDAO.fromXML(pMapper.getXmlConfiguration());
Assert.assertTrue(objReloaded instanceof PersistentMapper);
PersistentMapper sMapperReloaded = (PersistentMapper)objReloaded;
Assert.assertEquals("mapper-to-persist", sMapperReloaded.getKey());
@@ -111,7 +111,7 @@ public void testUpdateMapper_serializade() {
//load the mapper
PersistedMapper loadedMapper = mapperDao.loadByMapperId(mapperId);
Assert.assertNotNull(loadedMapper);
Object objReloaded = XStreamHelper.createXStreamInstance().fromXML(pMapper.getXmlConfiguration());
Object objReloaded = MapperDAO.fromXML(pMapper.getXmlConfiguration());
Assert.assertTrue(objReloaded instanceof PersistentMapper);
PersistentMapper sMapperReloaded = (PersistentMapper)objReloaded;
Assert.assertEquals("mapper-to-persist-bis", sMapperReloaded.getKey());
@@ -125,7 +125,7 @@ public void testUpdateMapper_serializade() {
//load the updated mapper
PersistedMapper loadedMapper2 = mapperDao.loadByMapperId(mapperId);
Assert.assertNotNull(loadedMapper2);
Object objReloaded2 = XStreamHelper.createXStreamInstance().fromXML(loadedMapper2.getXmlConfiguration());
Object objReloaded2 = MapperDAO.fromXML(loadedMapper2.getXmlConfiguration());
Assert.assertTrue(objReloaded2 instanceof PersistentMapper);
PersistentMapper sMapperReloaded2 = (PersistentMapper)objReloaded2;
Assert.assertEquals("mapper-to-update", sMapperReloaded2.getKey());
@@ -144,7 +144,7 @@ public void testUpdateMapper_serializade_withExpirationDate() {
//load the mapper
PersistedMapper loadedMapper = mapperDao.loadByMapperId(mapperId);
Assert.assertNotNull(loadedMapper);
Object objReloaded = XStreamHelper.createXStreamInstance().fromXML(pMapper.getXmlConfiguration());
Object objReloaded = MapperDAO.fromXML(pMapper.getXmlConfiguration());
Assert.assertTrue(objReloaded instanceof PersistentMapper);
PersistentMapper sMapperReloaded = (PersistentMapper)objReloaded;
Assert.assertEquals("mapper-to-persist-until", sMapperReloaded.getKey());
@@ -159,7 +159,7 @@ public void testUpdateMapper_serializade_withExpirationDate() {
//load the updated mapper
PersistedMapper loadedMapper2 = mapperDao.loadByMapperId(mapperId);
Assert.assertNotNull(loadedMapper2);
Object objReloaded2 = XStreamHelper.createXStreamInstance().fromXML(loadedMapper2.getXmlConfiguration());
Object objReloaded2 = MapperDAO.fromXML(loadedMapper2.getXmlConfiguration());
Assert.assertTrue(objReloaded2 instanceof PersistentMapper);
PersistentMapper sMapperReloaded2 = (PersistentMapper)objReloaded2;
Assert.assertEquals("mapper-to-update-until", sMapperReloaded2.getKey());
@@ -48,7 +48,7 @@
@BeforeClass
public static void loadBouncyCastle() {
new PersistedProperties(event -> {
//
// do nothing
});
}

@@ -0,0 +1,84 @@
/**
* <a href="http://www.openolat.org">
* OpenOLAT - Online Learning and Training</a><br>
* <p>
* Licensed under the Apache License, Version 2.0 (the "License"); <br>
* you may not use this file except in compliance with the License.<br>
* You may obtain a copy of the License at the
* <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
* <p>
* Unless required by applicable law or agreed to in writing,<br>
* software distributed under the License is distributed on an "AS IS" BASIS, <br>
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
* See the License for the specific language governing permissions and <br>
* limitations under the License.
* <p>
* Initial code contributed and copyrighted by<br>
* frentix GmbH, http://www.frentix.com
* <p>
*/
package org.olat.core.util.xml;

import java.io.File;
import java.net.URISyntaxException;
import java.net.URL;

import org.junit.Assert;
import org.junit.Test;
import org.olat.core.logging.OLATRuntimeException;

import com.thoughtworks.xstream.converters.ConversionException;

/**
*
* Initial date: 18 juin 2021<br>
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
*
*/
public class XStreamHelperTest {

@Test
public void readXmlMapAllowed() throws URISyntaxException {
URL url = XStreamHelperTest.class.getResource("xstream_map_strings.xml");
File file = new File(url.toURI());
Object obj = XStreamHelper.createXStreamInstance().fromXML(file);
Assert.assertNotNull(obj);
}

@Test
public void readXmlMapDbObjectsAllowed() throws URISyntaxException {
URL url = XStreamHelperTest.class.getResource("xstream_map_strings.xml");
File file = new File(url.toURI());
Object obj = XStreamHelper.createXStreamInstanceForDBObjects().fromXML(file);
Assert.assertNotNull(obj);
}

@Test
public void readXmlMapUnconfiguredAllowed() throws URISyntaxException {
URL url = XStreamHelperTest.class.getResource("xstream_map_strings.xml");
File file = new File(url.toURI());
Object obj = XStreamHelper.readObject(file);
Assert.assertNotNull(obj);
}

@Test(expected = ConversionException.class)
public void readXmlMapNotAllowed() throws URISyntaxException {
URL url = XStreamHelperTest.class.getResource("xstream_map_alien.xml");
File file = new File(url.toURI());
XStreamHelper.createXStreamInstance().fromXML(file);
}

@Test(expected = ConversionException.class)
public void readXmlMapDbObjectsNotAllowed() throws URISyntaxException {
URL url = XStreamHelperTest.class.getResource("xstream_map_alien.xml");
File file = new File(url.toURI());
XStreamHelper.createXStreamInstanceForDBObjects().fromXML(file);
}

@Test(expected = OLATRuntimeException.class)
public void readXmlMapUnconfiguredNotAllowed() throws URISyntaxException {
URL url = XStreamHelperTest.class.getResource("xstream_map_alien.xml");
File file = new File(url.toURI());
XStreamHelper.readObject(file);
}
}
@@ -0,0 +1,8 @@
<java.util.HashMap>
<entry>
<string>Hello</string>
<org.springframework.scheduling.quartz.JobDetailFactoryBean>
<name>World</name>
</org.springframework.scheduling.quartz.JobDetailFactoryBean>
</entry>
</java.util.HashMap>
@@ -0,0 +1,6 @@
<java.util.HashMap>
<entry>
<string>Hello</string>
<string>World</string>
</entry>
</java.util.HashMap>
@@ -81,6 +81,7 @@
org.olat.core.util.openxml.OpenXMLDocumentTest.class,
org.olat.core.util.pdf.PdfDocumentTest.class,
org.olat.core.util.xml.XMLDigitalSignatureUtilTest.class,
org.olat.core.util.xml.XStreamHelperTest.class,
org.olat.core.configuration.EDConfigurationTest.class,
org.olat.core.id.context.BusinessControlFactoryTest.class,
org.olat.core.id.context.HistoryManagerTest.class,
@@ -100,6 +101,7 @@
org.olat.commons.coordinate.cluster.jms.JMSTest.class,
org.olat.commons.coordinate.cluster.lock.LockTest.class,
org.olat.commons.coordinate.CoordinatorTest.class,
org.olat.core.commons.modules.glossary.GlossaryItemManagerTest.class,
org.olat.core.commons.services.csp.manager.CSPManagerTest.class,
org.olat.core.commons.services.doceditor.manager.DocEditorIdentityServiceTest.class,
org.olat.core.commons.services.doceditor.manager.AccessDAOTest.class,
@@ -575,7 +577,8 @@
* tree is not available
*/
org.olat.core.commons.services.scheduler.SchedulerTest.class,
org.olat.upgrade.UpgradeDefinitionTest.class
org.olat.upgrade.UpgradeDefinitionTest.class,
org.olat.upgrade.UpgradeManagerTest.class
})
public class AllTestsJunit4 {
//
@@ -22,12 +22,16 @@
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URI;
import java.nio.file.Path;

import org.apache.logging.log4j.Logger;
import org.olat.core.commons.modules.bc.FolderConfig;
import org.olat.core.commons.services.vfs.VFSMetadata;
import org.olat.core.logging.Tracing;
import org.olat.core.util.vfs.JavaIOItem;
import org.olat.core.util.vfs.VFSConstants;
import org.olat.core.util.vfs.VFSContainer;
@@ -44,10 +48,16 @@
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
*/
public class VFSJavaIOFile implements VFSLeaf, JavaIOItem {

private static final Logger log = Tracing.createLoggerFor(VFSJavaIOFile.class);

private final String name;
private final File file;

public VFSJavaIOFile(URI uri) {
this(new File(uri));
}

public VFSJavaIOFile(File file) {
this(file.getName(), file);
}
@@ -189,6 +199,11 @@ public long getSize() {

@Override
public OutputStream getOutputStream(boolean append) {
return null;
try {
return new FileOutputStream(file);
} catch (FileNotFoundException e) {
log.error("", e);
return null;
}
}
}
@@ -0,0 +1,76 @@
/**
* <a href="http://www.openolat.org">
* OpenOLAT - Online Learning and Training</a><br>
* <p>
* Licensed under the Apache License, Version 2.0 (the "License"); <br>
* you may not use this file except in compliance with the License.<br>
* You may obtain a copy of the License at the
* <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
* <p>
* Unless required by applicable law or agreed to in writing,<br>
* software distributed under the License is distributed on an "AS IS" BASIS, <br>
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
* See the License for the specific language governing permissions and <br>
* limitations under the License.
* <p>
* Initial code contributed and copyrighted by<br>
* frentix GmbH, http://www.frentix.com
* <p>
*/
package org.olat.upgrade;

import java.io.File;
import java.net.URL;
import java.util.Map;
import java.util.UUID;

import org.apache.logging.log4j.Logger;
import org.junit.Assert;
import org.junit.Test;
import org.olat.core.logging.Tracing;
import org.olat.core.util.WebappHelper;
import org.olat.core.util.xml.XStreamHelper;

/**
*
* Initial date: 18 juin 2021<br>
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
*
*/
public class UpgradeManagerTest {

private static final Logger log = Tracing.createLoggerFor(UpgradeManagerTest.class);

@Test
public void readUpgradesXml() throws Exception {
URL upgradeUrl = UpgradeManagerTest.class.getResource("installed_upgrades.xml");
File upgradeFile = new File(upgradeUrl.toURI());
Map<String, UpgradeHistoryData> upgrades = UpgradeManager.read(upgradeFile);
Assert.assertNotNull(upgrades);
Assert.assertFalse(upgrades.isEmpty());
}

@Test
public void readDatabaseUpgradesXml() throws Exception {
URL upgradeUrl = UpgradeManagerTest.class.getResource("installed_database_upgrades.xml");
File upgradeFile = new File(upgradeUrl.toURI());
Map<String, UpgradeHistoryData> upgrades = UpgradeManager.read(upgradeFile);
Assert.assertNotNull(upgrades);
Assert.assertFalse(upgrades.isEmpty());
}

@Test
public void writeDatabaseUpgradesXml() throws Exception {
URL upgradeUrl = UpgradeManagerTest.class.getResource("installed_database_upgrades.xml");
File upgradeFile = new File(upgradeUrl.toURI());
Map<String, UpgradeHistoryData> upgrades = UpgradeManager.read(upgradeFile);
Assert.assertNotNull(upgrades);
Assert.assertFalse(upgrades.isEmpty());

File savedFile = new File(WebappHelper.getTmpDir(), "upgradeDB-" + UUID.randomUUID() + ".xml");
XStreamHelper.writeObject(UpgradeManager.upgradesXStream, savedFile, upgrades);
if(!savedFile.delete()) {
log.error("Cannot delete: {}", savedFile);
}
}
}

Large diffs are not rendered by default.

Large diffs are not rendered by default.