Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
fabrizzio-dotCMS committed Jun 7, 2023
1 parent 2df0e8a commit 8df0fe9
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 66 deletions.
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package com.dotcms.rest.api.v1.asset;

import com.dotcms.rest.api.v1.DotObjectMapperProvider;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.MapperFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.InputStream;
import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,10 @@ public class FileUploadDetail {
@JsonCreator
public FileUploadDetail(@JsonProperty("assetPath") final String assetPath,
@JsonProperty("language") final String language,
@JsonProperty("status") final Boolean live,
@JsonProperty("createNewVersion") final Boolean createNewVersion) {
@JsonProperty("status") final Boolean live) {
this.assetPath = assetPath;
this.language = language;
this.live = live;
this.createNewVersion = createNewVersion;
}

@JsonProperty("assetPath")
Expand All @@ -27,9 +25,6 @@ public FileUploadDetail(@JsonProperty("assetPath") final String assetPath,
@JsonProperty("live")
private Boolean live;

@JsonProperty("createNewVersion")
private Boolean createNewVersion;

public String getAssetPath() {
return assetPath;
}
Expand All @@ -46,14 +41,6 @@ public void setLanguage(String language) {
this.language = language;
}

public Boolean getCreateNewVersion() {
return createNewVersion;
}

public void setCreateNewVersion(Boolean createNewVersion) {
this.createNewVersion = createNewVersion;
}

public Boolean getLive() {
return live;
}
Expand Down
116 changes: 66 additions & 50 deletions dotCMS/src/main/java/com/dotcms/rest/api/v1/asset/WebAssetHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,17 @@
import com.dotmarketing.portlets.languagesmanager.business.LanguageAPI;
import com.dotmarketing.portlets.languagesmanager.model.Language;
import com.dotmarketing.portlets.structure.model.ContentletRelationships;
import com.dotmarketing.util.FileUtil;
import com.dotmarketing.util.Logger;
import com.liferay.portal.model.User;
import io.vavr.control.Try;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.Serializable;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.Map;
import java.util.Optional;
Expand Down Expand Up @@ -274,7 +278,6 @@ public WebAssetView saveUpdateAsset(final HttpServletRequest request, final File
final FileUploadDetail detail = form.getDetail();
final String assetPath = detail.getAssetPath();
final boolean live = BooleanUtils.toBoolean((detail.getLive()));
final boolean createNewVersion = BooleanUtils.toBoolean(detail.getCreateNewVersion());
final Language lang = lang(detail.getLanguage());
final ResolvedAssetAndPath assetAndPath = AssetPathResolver.newInstance()
.resolve(assetPath, user, true);
Expand All @@ -289,89 +292,102 @@ public WebAssetView saveUpdateAsset(final HttpServletRequest request, final File

final DotTempFile tempFile = tempFileAPI.createTempFile(assetName, request,
fileInputStream);
try {

final Builder builder = BrowserQuery.builder();
builder.showDotAssets(false)
.withUser(user)
.showFiles(true)
.showFolders(true)
.showArchived(false)
.showWorking(true)
.showLinks(false)
.showDotAssets(false)
.showImages(true)
.showContent(true);

final Builder builder = BrowserQuery.builder();
builder.showDotAssets(false)
.withUser(user)
.showFiles(true)
.showFolders(true)
.showArchived(false)
.showWorking(true)
.showLinks(false)
.showDotAssets(false)
.showImages(true)
.showContent(true);

if (folder.isSystemFolder()) {
builder.withHostOrFolderId(host.getIdentifier());
} else {
builder.withHostOrFolderId(folder.getInode());
}

builder.withFilter(assetName);
final List<Treeable> folderContent = browserAPI.getFolderContentList(builder.build());
final List<Contentlet> assets = folderContent.stream()
.filter(Contentlet.class::isInstance).map(Contentlet.class::cast)
.collect(Collectors.toList());

Contentlet savedAsset = null;

if (assets.isEmpty()) {
//The file does not exist
final Contentlet contentlet = makeFileAsset(tempFile.file, folder, lang);
savedAsset = checkinOrPublish(contentlet, user, live);
if (folder.isSystemFolder()) {
builder.withHostOrFolderId(host.getIdentifier());
} else {
builder.withHostOrFolderId(folder.getInode());
}

} else {
builder.withFilter(assetName);
final List<Treeable> folderContent = browserAPI.getFolderContentList(builder.build());
final List<Contentlet> assets = folderContent.stream()
.filter(Contentlet.class::isInstance).map(Contentlet.class::cast)
.collect(Collectors.toList());

final Optional<Contentlet> found = assets.stream()
.filter(contentlet -> lang.getId() == contentlet.getLanguageId()).findFirst();
Contentlet savedAsset = null;

if (found.isEmpty()) {
//We're required to create a new version in a different language
if (assets.isEmpty()) {
//The file does not exist
final Contentlet contentlet = makeFileAsset(tempFile.file, folder, lang);
savedAsset = checkinOrPublish(contentlet, user, live);

} else {
final Contentlet asset = found.get();
final Contentlet checkout = contentletAPI.checkout(asset.getInode(), user, false);
updateFileAsset(tempFile.file, folder, checkout);
if (createNewVersion) {
savedAsset = checkinOrPublish(checkout, user, live);

final Optional<Contentlet> found = assets.stream()
.filter(contentlet -> lang.getId() == contentlet.getLanguageId())
.findFirst();

if (found.isEmpty()) {
//We're required to create a new version in a different language
final Contentlet contentlet = makeFileAsset(tempFile.file, folder, lang);
savedAsset = checkinOrPublish(contentlet, user, live);

} else {
savedAsset = contentletAPI.checkinWithoutVersioning(checkout,
(ContentletRelationships) null, null, null,
user, false);
final Contentlet asset = found.get();
final Contentlet checkout = contentletAPI.checkout(asset.getInode(), user,
false);
updateFileAsset(tempFile.file, folder, lang, checkout);
savedAsset = checkinOrPublish(checkout, user, live);
}
}

final FileAsset fileAsset = fileAssetAPI.fromContentlet(savedAsset);
return toAsset(fileAsset);
} finally {
disposeTempFile(tempFile);
}
}

final FileAsset fileAsset = fileAssetAPI.fromContentlet(savedAsset);
return toAsset(fileAsset);
void disposeTempFile(final DotTempFile tempFile){
final File file = tempFile.file;
try {
Path parentFolder = file.getParentFile().toPath();
Files.delete(parentFolder);
} catch (IOException e) {
Logger.debug(this, e.getMessage(), e);
}
}

Contentlet checkinOrPublish(final Contentlet contentlet, User user, final boolean live) throws DotDataException, DotSecurityException {
if(live){
contentletAPI.publish(contentlet, user, false);
return contentlet;
}
return contentletAPI.checkin(contentlet, user, false);
return contentletAPI.checkinWithoutVersioning(contentlet,
(ContentletRelationships) null, null, null,
user, false);
// contentletAPI.checkin(contentlet, user, false);
}

Contentlet makeFileAsset(final File file, final Folder folder, Language lang)
throws DotDataException, DotSecurityException {
final Contentlet contentlet = new Contentlet();
contentlet.setContentTypeId(contentTypeAPI.find("FileAsset").id());
contentlet.setLanguageId(lang.getId());
return updateFileAsset(file, folder, contentlet);
return updateFileAsset(file, folder, lang, contentlet);
}


Contentlet updateFileAsset(final File file, final Folder folder, final Contentlet contentlet){
Contentlet updateFileAsset(final File file, final Folder folder, final Language lang, final Contentlet contentlet){
final String fileName = file.getName();
contentlet.setProperty(FileAssetAPI.TITLE_FIELD, fileName);
contentlet.setProperty(FileAssetAPI.FILE_NAME_FIELD, fileName);
contentlet.setProperty(FileAssetAPI.BINARY_FIELD, file);
contentlet.setFolder(folder.getInode());
contentlet.setLanguageId(lang.getId());
return contentlet;
}

Expand Down

0 comments on commit 8df0fe9

Please sign in to comment.