From 8f7656b42f82048d25ba815393eb0dde415944b0 Mon Sep 17 00:00:00 2001
From: uhensler <none@none>
Date: Mon, 5 Mar 2018 14:23:38 +0100
Subject: [PATCH] OO-3170: Add default license to created files and to with
 WebDAV uploaded files.

---
 .../modules/bc/commands/CmdCreateFile.java    | 20 +++++++++++++++++++
 .../modules/bc/meta/MetaInfoFileImpl.java     |  8 ++++++--
 .../bc/meta/MetaInfoFormController.java       |  2 +-
 .../services/license/ui/LicenseRenderer.java  |  3 ++-
 .../webdav/manager/VFSResourceRoot.java       | 20 +++++++++++++++++++
 5 files changed, 49 insertions(+), 4 deletions(-)

diff --git a/src/main/java/org/olat/core/commons/modules/bc/commands/CmdCreateFile.java b/src/main/java/org/olat/core/commons/modules/bc/commands/CmdCreateFile.java
index 4fa8890da1d..da8357b0c43 100644
--- a/src/main/java/org/olat/core/commons/modules/bc/commands/CmdCreateFile.java
+++ b/src/main/java/org/olat/core/commons/modules/bc/commands/CmdCreateFile.java
@@ -29,9 +29,14 @@ import org.olat.core.commons.editor.htmleditor.HTMLEditorController;
 import org.olat.core.commons.editor.htmleditor.WysiwygFactory;
 import org.olat.core.commons.editor.plaintexteditor.PlainTextEditorController;
 import org.olat.core.commons.modules.bc.FolderEvent;
+import org.olat.core.commons.modules.bc.FolderLicenseHandler;
 import org.olat.core.commons.modules.bc.components.FolderComponent;
 import org.olat.core.commons.modules.bc.meta.MetaInfo;
 import org.olat.core.commons.modules.bc.meta.tagged.MetaTagged;
+import org.olat.core.commons.services.license.License;
+import org.olat.core.commons.services.license.LicenseModule;
+import org.olat.core.commons.services.license.LicenseService;
+import org.olat.core.commons.services.license.ui.LicenseUIFactory;
 import org.olat.core.commons.services.notifications.NotificationsManager;
 import org.olat.core.commons.services.notifications.SubscriptionContext;
 import org.olat.core.gui.UserRequest;
@@ -53,6 +58,7 @@ import org.olat.core.util.vfs.VFSLeaf;
 import org.olat.core.util.vfs.VFSManager;
 import org.olat.core.util.vfs.callbacks.VFSSecurityCallback;
 import org.olat.core.util.vfs.util.ContainerAndFile;
+import org.springframework.beans.factory.annotation.Autowired;
 
 /**
  *
@@ -71,6 +77,13 @@ public class CmdCreateFile extends FormBasicController implements FolderCommand
 	private Controller editorCtr;
 	private TextElement textElement;
 	private FolderComponent folderComponent;
+	
+	@Autowired
+	private LicenseService licenseService;
+	@Autowired
+	private LicenseModule licenseModule;
+	@Autowired
+	private FolderLicenseHandler licenseHandler;
 
 	protected CmdCreateFile(UserRequest ureq, WindowControl wControl) {
 		super(ureq, wControl);
@@ -182,6 +195,13 @@ public class CmdCreateFile extends FormBasicController implements FolderCommand
 			if(item instanceof MetaTagged) {
 				MetaInfo meta = ((MetaTagged)item).getMetaInfo();
 				meta.setAuthor(ureq.getIdentity());
+				if (licenseModule.isEnabled(licenseHandler)) {
+					License license = licenseService.createDefaultLicense(licenseHandler, getIdentity());
+					meta.setLicenseTypeKey(String.valueOf(license.getLicenseType().getKey()));
+					meta.setLicenseTypeName(license.getLicenseType().getName());
+					meta.setLicensor(license.getLicensor());
+					meta.setLicenseText(LicenseUIFactory.getLicenseText(license));
+				}
 				meta.write();
 			}
 
diff --git a/src/main/java/org/olat/core/commons/modules/bc/meta/MetaInfoFileImpl.java b/src/main/java/org/olat/core/commons/modules/bc/meta/MetaInfoFileImpl.java
index 2eca8d3ea27..954901aebf4 100644
--- a/src/main/java/org/olat/core/commons/modules/bc/meta/MetaInfoFileImpl.java
+++ b/src/main/java/org/olat/core/commons/modules/bc/meta/MetaInfoFileImpl.java
@@ -258,7 +258,7 @@ public class MetaInfoFileImpl extends DefaultHandler implements MetaInfo {
 	}
 	
 	/**
-	 * Copy values from froMeta into this object except name.
+	 * Copy values from fromMeta into this object except name.
 	 * @param fromMeta
 	 */
 	@Override
@@ -274,6 +274,10 @@ public class MetaInfoFileImpl extends DefaultHandler implements MetaInfo {
 		this.setSource(fromMeta.getSource());
 		this.setTitle(fromMeta.getTitle());
 		this.setUrl(fromMeta.getUrl());
+		this.setLicenseTypeKey(fromMeta.getLicenseTypeKey());
+		this.setLicenseTypeName(fromMeta.getLicenseTypeName());
+		this.setLicensor(fromMeta.getLicensor());
+		this.setLicenseText(fromMeta.getLicenseText());
 	}
 
 	public boolean isLocked() {
@@ -809,7 +813,7 @@ public class MetaInfoFileImpl extends DefaultHandler implements MetaInfo {
 
 	@Override
 	public void setLicensor(String licensor) {
-		this.licensor = licensor;
+		this.licensor = licensor != null? licensor: "";
 	}
 	
 	@Override
diff --git a/src/main/java/org/olat/core/commons/modules/bc/meta/MetaInfoFormController.java b/src/main/java/org/olat/core/commons/modules/bc/meta/MetaInfoFormController.java
index e3d7fc03f9f..0fa6d5f7fe5 100644
--- a/src/main/java/org/olat/core/commons/modules/bc/meta/MetaInfoFormController.java
+++ b/src/main/java/org/olat/core/commons/modules/bc/meta/MetaInfoFormController.java
@@ -475,7 +475,7 @@ public class MetaInfoFormController extends FormBasicController {
 		License license = getLicenseFromFormItems();
 		meta.setLicenseTypeKey(license.getLicenseType() != null? String.valueOf(license.getLicenseType().getKey()): "");
 		meta.setLicenseTypeName(license.getLicenseType() != null? license.getLicenseType().getName(): "");
-		meta.setLicensor(license.getLicensor());
+		meta.setLicensor(license.getLicensor() != null? license.getLicensor(): "");
 		meta.setLicenseText(LicenseUIFactory.getLicenseText(license));
 		return meta;
 	}
diff --git a/src/main/java/org/olat/core/commons/services/license/ui/LicenseRenderer.java b/src/main/java/org/olat/core/commons/services/license/ui/LicenseRenderer.java
index c71bd271774..ed4379908fd 100644
--- a/src/main/java/org/olat/core/commons/services/license/ui/LicenseRenderer.java
+++ b/src/main/java/org/olat/core/commons/services/license/ui/LicenseRenderer.java
@@ -73,7 +73,8 @@ public class LicenseRenderer implements FlexiCellRenderer {
 		// popup with license informations
 		sb.append("<div id='o_lic_pop_").append(id).append("' style='display:none;'><div>");
 		appendStaticcontrol(sb, "license.popup.type", LicenseUIFactory.translate(licenseType, locale));
-		appendStaticcontrol(sb, "license.popup.licensor", license.getLicensor());
+		String licensor = license.getLicensor() != null? license.getLicensor(): "";
+		appendStaticcontrol(sb, "license.popup.licensor", licensor);
 		appendStaticcontrol(sb, "license.popup.text", LicenseUIFactory.getFormattedLicenseText(license));
 		sb.append("</div>");
 		
diff --git a/src/main/java/org/olat/core/commons/services/webdav/manager/VFSResourceRoot.java b/src/main/java/org/olat/core/commons/services/webdav/manager/VFSResourceRoot.java
index 39cc4712b5d..dd5c8ea0759 100644
--- a/src/main/java/org/olat/core/commons/services/webdav/manager/VFSResourceRoot.java
+++ b/src/main/java/org/olat/core/commons/services/webdav/manager/VFSResourceRoot.java
@@ -27,8 +27,14 @@ import java.util.Collections;
 import java.util.List;
 
 import org.apache.commons.io.IOUtils;
+import org.olat.core.CoreSpringFactory;
+import org.olat.core.commons.modules.bc.FolderLicenseHandler;
 import org.olat.core.commons.modules.bc.meta.MetaInfo;
 import org.olat.core.commons.modules.bc.meta.tagged.MetaTagged;
+import org.olat.core.commons.services.license.License;
+import org.olat.core.commons.services.license.LicenseModule;
+import org.olat.core.commons.services.license.LicenseService;
+import org.olat.core.commons.services.license.ui.LicenseUIFactory;
 import org.olat.core.commons.services.notifications.NotificationsManager;
 import org.olat.core.commons.services.notifications.SubscriptionContext;
 import org.olat.core.commons.services.webdav.servlets.WebResource;
@@ -231,6 +237,7 @@ public class VFSResourceRoot implements WebResourceRoot  {
 			MetaInfo infos = ((MetaTagged)childLeaf).getMetaInfo();
 			if(infos != null && !infos.hasAuthorIdentity()) {
 				infos.setAuthor(identity);
+				addLicense(infos, identity);
 				infos.clearThumbnails();
 				//infos.write(); the clearThumbnails call write()
 			}
@@ -248,6 +255,19 @@ public class VFSResourceRoot implements WebResourceRoot  {
 		return true;
 	}
 
+	private void addLicense(MetaInfo meta, Identity identity) {
+		LicenseService licenseService = CoreSpringFactory.getImpl(LicenseService.class);
+		LicenseModule licenseModule = CoreSpringFactory.getImpl(LicenseModule.class);
+		FolderLicenseHandler licenseHandler = CoreSpringFactory.getImpl(FolderLicenseHandler.class);
+		if (licenseModule.isEnabled(licenseHandler)) {
+			License license = licenseService.createDefaultLicense(licenseHandler, identity);
+			meta.setLicenseTypeKey(String.valueOf(license.getLicenseType().getKey()));
+			meta.setLicenseTypeName(license.getLicenseType().getName());
+			meta.setLicensor(license.getLicensor());
+			meta.setLicenseText(LicenseUIFactory.getLicenseText(license));
+		}
+	}
+
 	private void copyVFS(VFSLeaf file, InputStream is) throws IOException {
 		// Try to get Quota
 		long quotaLeft = -1;
-- 
GitLab