use of org.olat.core.util.vfs.VFSLeaf in project OpenOLAT by OpenOLAT.
the class CmdZip method formOK.
/**
* Creates a zipFile by using ZipUtil and fires Event.DONE_EVENT if successful.
*
* @see org.olat.core.commons.modules.bc.commands.AbstractCreateItemForm#formOK(org.olat.core.gui.UserRequest)
*/
@Override
protected void formOK(UserRequest ureq) {
String name = textElement.getValue();
if (!name.toLowerCase().endsWith(".zip")) {
name += ".zip";
}
VFSItem zipFile = currentContainer.createChildLeaf(name);
if (zipFile == null) {
fireEvent(ureq, Event.FAILED_EVENT);
return;
}
List<VFSItem> vfsFiles = new ArrayList<VFSItem>();
for (String fileName : selection.getFiles()) {
VFSItem item = currentContainer.resolve(fileName);
if (item != null) {
vfsFiles.add(item);
}
}
if (!ZipUtil.zip(vfsFiles, (VFSLeaf) zipFile, true)) {
// cleanup zip file
zipFile.delete();
status = FolderCommandStatus.STATUS_FAILED;
fireEvent(ureq, FOLDERCOMMAND_FINISHED);
} else {
if (zipFile instanceof MetaTagged) {
MetaInfo info = ((MetaTagged) zipFile).getMetaInfo();
if (info != null) {
info.setAuthor(ureq.getIdentity());
info.write();
}
}
fireEvent(ureq, new FolderEvent(FolderEvent.ZIP_EVENT, selection.renderAsHtml()));
fireEvent(ureq, FolderCommand.FOLDERCOMMAND_FINISHED);
}
}
use of org.olat.core.util.vfs.VFSLeaf in project OpenOLAT by OpenOLAT.
the class CmdCreateFile method formOK.
@Override
protected void formOK(UserRequest ureq) {
// create the file
fileName = textElement.getValue();
VFSContainer currentContainer = folderComponent.getCurrentContainer();
VFSItem item = currentContainer.createChildLeaf(fileName);
if (item == null) {
status = FolderCommandStatus.STATUS_FAILED;
notifyFinished(ureq);
} else {
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();
}
// start HTML editor with the folders root folder as base and the file
// path as a relative path from the root directory. But first check if the
// root directory is wirtable at all (e.g. not the case in users personal
// briefcase), and seach for the next higher directory that is writable.
String relFilePath = "/" + fileName;
// add current container path if not at root level
if (!folderComponent.getCurrentContainerPath().equals("/")) {
relFilePath = folderComponent.getCurrentContainerPath() + relFilePath;
}
VFSContainer writableRootContainer = folderComponent.getRootContainer();
ContainerAndFile result = VFSManager.findWritableRootFolderFor(writableRootContainer, relFilePath);
if (result != null) {
writableRootContainer = result.getContainer();
relFilePath = result.getFileName();
} else {
// use fallback that always work: current directory and current file
relFilePath = fileName;
writableRootContainer = folderComponent.getCurrentContainer();
}
if (relFilePath.endsWith(".html") || relFilePath.endsWith(".htm")) {
editorCtr = WysiwygFactory.createWysiwygController(ureq, getWindowControl(), writableRootContainer, relFilePath, true, true);
((HTMLEditorController) editorCtr).setNewFile(true);
} else {
editorCtr = new PlainTextEditorController(ureq, getWindowControl(), (VFSLeaf) writableRootContainer.resolve(relFilePath), "utf-8", true, true, null);
}
listenTo(editorCtr);
initialPanel.setContent(editorCtr.getInitialComponent());
}
}
use of org.olat.core.util.vfs.VFSLeaf in project OpenOLAT by OpenOLAT.
the class FolderManager method getFileInfosRecursively.
private static void getFileInfosRecursively(OlatRelPathImpl relPath, List<FileInfo> fileInfos, long newerThan, int basePathlen) {
if (relPath instanceof VFSLeaf) {
// is a file
long lastModified = ((VFSLeaf) relPath).getLastModified();
if (lastModified > newerThan) {
MetaInfo meta = CoreSpringFactory.getImpl(MetaInfoFactory.class).createMetaInfoFor(relPath);
String bcrootPath = relPath.getRelPath();
String bcRelPath = bcrootPath.substring(basePathlen);
fileInfos.add(new FileInfo(bcRelPath, meta, new Date(lastModified)));
}
} else {
// is a folder
OlatRootFolderImpl container = (OlatRootFolderImpl) relPath;
for (VFSItem item : container.getItems(new SystemItemFilter())) {
getFileInfosRecursively((OlatRelPathImpl) item, fileInfos, newerThan, basePathlen);
}
}
}
use of org.olat.core.util.vfs.VFSLeaf in project OpenOLAT by OpenOLAT.
the class FolderRunController method activatePath.
public void activatePath(UserRequest ureq, String path) {
if (path != null && path.length() > 0) {
VFSItem vfsItem = folderComponent.getRootContainer().resolve(path.endsWith("/") ? path.substring(0, path.length() - 1) : path);
if (vfsItem instanceof VFSLeaf) {
// could be a file - create the mapper - otherwise don't create one if it's a directory
// Create a mapper to deliver the auto-download of the file. We have to
// create a dedicated mapper here
// and can not reuse the standard briefcase way of file delivering, some
// very old fancy code
// Mapper is cleaned up automatically by basic controller
String baseUrl = registerMapper(ureq, new VFSContainerMapper(folderComponent.getRootContainer()));
// Trigger auto-download
DisplayOrDownloadComponent dordc = new DisplayOrDownloadComponent("downloadcomp", baseUrl + path);
folderContainer.put("autoDownloadComp", dordc);
if (path.lastIndexOf("/") > 0) {
String dirPath = path.substring(0, path.lastIndexOf("/"));
if (StringHelper.containsNonWhitespace(dirPath)) {
folderComponent.setCurrentContainerPath(dirPath);
}
}
} else if (vfsItem instanceof VFSContainer) {
if (StringHelper.containsNonWhitespace(path)) {
folderComponent.setCurrentContainerPath(path);
}
}
updatePathResource(ureq);
}
}
use of org.olat.core.util.vfs.VFSLeaf in project OpenOLAT by OpenOLAT.
the class FileCopyController method event.
@Override
public void event(UserRequest ureq, Controller source, Event event) {
if (source instanceof FileLinkChooserController) {
if (event == Event.DONE_EVENT || event == Event.CANCELLED_EVENT) {
fireEvent(ureq, FolderCommand.FOLDERCOMMAND_FINISHED);
} else if (event instanceof URLChoosenEvent) {
URLChoosenEvent choosenEvent = (URLChoosenEvent) event;
String url = choosenEvent.getURL();
if (url.indexOf("://") < 0) {
VFSContainer cContainer = folderComponent.getExternContainerForCopy();
VFSItem item = cContainer.resolve(url);
if (item instanceof VFSLeaf) {
sourceLeaf = (VFSLeaf) item;
String filename = sourceLeaf.getName();
VFSContainer tContainer = folderComponent.getCurrentContainer();
newFile = tContainer.createChildLeaf(filename);
if (newFile == null) {
existingVFSItem = (VFSLeaf) tContainer.resolve(filename);
fileAlreadyExists(ureq);
} else {
finishUpload(ureq);
}
} else {
fireEvent(ureq, FolderCommand.FOLDERCOMMAND_FINISHED);
}
} else {
fireEvent(ureq, FolderCommand.FOLDERCOMMAND_FINISHED);
}
}
} else if (source == overwriteDialog) {
if (event instanceof ButtonClickedEvent) {
ButtonClickedEvent buttonClickedEvent = (ButtonClickedEvent) event;
if (buttonClickedEvent.getPosition() == 0) {
// ok
if (existingVFSItem instanceof Versionable && ((Versionable) existingVFSItem).getVersions().isVersioned()) {
// new version
String relPath = null;
if (existingVFSItem instanceof OlatRootFileImpl) {
relPath = ((OlatRootFileImpl) existingVFSItem).getRelPath();
}
int maxNumOfRevisions = FolderConfig.versionsAllowed(relPath);
if (maxNumOfRevisions == 0) {
// someone play with the configuration
// Overwrite...
String fileName = existingVFSItem.getName();
existingVFSItem.delete();
newFile = folderComponent.getCurrentContainer().createChildLeaf(fileName);
// ... and notify listeners.
finishUpload(ureq);
} else {
removeAsListenerAndDispose(commentVersionCtr);
boolean locked = vfsLockManager.isLocked(existingVFSItem);
commentVersionCtr = new VersionCommentController(ureq, getWindowControl(), locked, true);
listenTo(commentVersionCtr);
removeAsListenerAndDispose(commentVersionDialogBox);
commentVersionDialogBox = new CloseableModalController(getWindowControl(), translate("save"), commentVersionCtr.getInitialComponent());
listenTo(commentVersionDialogBox);
commentVersionDialogBox.activate();
}
} else {
// if the file is locked, ask for unlocking it
if (vfsLockManager.isLocked(existingVFSItem)) {
removeAsListenerAndDispose(unlockCtr);
unlockCtr = new VersionCommentController(ureq, getWindowControl(), true, false);
listenTo(unlockCtr);
removeAsListenerAndDispose(unlockDialogBox);
unlockDialogBox = new CloseableModalController(getWindowControl(), translate("ok"), unlockCtr.getInitialComponent());
listenTo(unlockDialogBox);
unlockDialogBox.activate();
} else {
// Overwrite...
String fileName = existingVFSItem.getName();
existingVFSItem.delete();
newFile = folderComponent.getCurrentContainer().createChildLeaf(fileName);
// ... and notify listeners.
finishUpload(ureq);
}
}
} else if (buttonClickedEvent.getPosition() == 1) {
// not ok
// make newFile with the proposition of filename
newFile = folderComponent.getCurrentContainer().createChildLeaf(renamedFilename);
// ... and notify listeners.
finishUpload(ureq);
} else if (buttonClickedEvent.getPosition() == 2) {
// cancel
// cancel -> do nothing
} else {
throw new RuntimeException("Unknown button number " + buttonClickedEvent.getPosition());
}
}
} else if (source == lockedFileDialog) {
if (event instanceof ButtonClickedEvent) {
ButtonClickedEvent buttonClickedEvent = (ButtonClickedEvent) event;
switch(buttonClickedEvent.getPosition()) {
case 0:
{
// ... and notify listeners.
newFile = existingVFSItem;
finishUpload(ureq);
break;
}
case 1:
{
// cancel
fireEvent(ureq, FolderCommand.FOLDERCOMMAND_FINISHED);
break;
}
default:
throw new RuntimeException("Unknown button number " + buttonClickedEvent.getPosition());
}
}
} else if (source == commentVersionCtr) {
String comment = commentVersionCtr.getComment();
Roles roles = ureq.getUserSession().getRoles();
boolean locked = vfsLockManager.isLocked(existingVFSItem);
if (locked && !commentVersionCtr.keepLocked()) {
vfsLockManager.unlock(existingVFSItem, getIdentity(), roles);
}
commentVersionDialogBox.deactivate();
if (revisionListDialogBox != null) {
revisionListDialogBox.deactivate();
}
// ok, new version of the file
Versionable existingVersionableItem = (Versionable) existingVFSItem;
boolean ok = existingVersionableItem.getVersions().addVersion(ureq.getIdentity(), comment, sourceLeaf.getInputStream());
if (ok) {
newFile = existingVFSItem;
}
finishSuccessfullUpload(existingVFSItem.getName(), ureq);
} else if (source == unlockCtr) {
// Overwrite...
if (!unlockCtr.keepLocked()) {
vfsLockManager.unlock(existingVFSItem, getIdentity(), ureq.getUserSession().getRoles());
}
unlockDialogBox.deactivate();
newFile = existingVFSItem;
// ... and notify listeners.
finishSuccessfullUpload(existingVFSItem.getName(), ureq);
} else if (source == revisionListCtr) {
if (FolderCommandStatus.STATUS_CANCELED == revisionListCtr.getStatus()) {
revisionListDialogBox.deactivate();
// don't want to delete revisions
fireEvent(ureq, FolderCommand.FOLDERCOMMAND_FINISHED);
} else {
if (existingVFSItem instanceof Versionable && ((Versionable) existingVFSItem).getVersions().isVersioned()) {
revisionListDialogBox.deactivate();
Versionable versionable = (Versionable) existingVFSItem;
Versions versions = versionable.getVersions();
int maxNumOfRevisions = FolderConfig.versionsAllowed(null);
if (maxNumOfRevisions < 0 || maxNumOfRevisions > versions.getRevisions().size()) {
removeAsListenerAndDispose(commentVersionCtr);
boolean locked = vfsLockManager.isLocked(existingVFSItem);
commentVersionCtr = new VersionCommentController(ureq, getWindowControl(), locked, true);
listenTo(commentVersionCtr);
removeAsListenerAndDispose(commentVersionDialogBox);
commentVersionDialogBox = new CloseableModalController(getWindowControl(), translate("save"), commentVersionCtr.getInitialComponent());
listenTo(commentVersionDialogBox);
commentVersionDialogBox.activate();
} else {
removeAsListenerAndDispose(revisionListCtr);
revisionListCtr = new RevisionListController(ureq, getWindowControl(), versionable, false);
listenTo(revisionListCtr);
removeAsListenerAndDispose(revisionListDialogBox);
revisionListDialogBox = new CloseableModalController(getWindowControl(), translate("delete"), revisionListCtr.getInitialComponent());
listenTo(revisionListDialogBox);
revisionListDialogBox.activate();
}
}
}
}
}
Aggregations