use of org.craftercms.studio.api.v1.ebus.PreviewEventContext in project studio by craftercms.
the class DeploymentServiceImpl method syncAllContentToPreview.
@Override
@ValidateParams
public void syncAllContentToPreview(@ValidateStringParam(name = "site") String site, boolean waitTillDone) throws ServiceLayerException {
PreviewEventContext context = new PreviewEventContext(waitTillDone);
context.setSite(site);
eventService.publish(EVENT_PREVIEW_SYNC, context);
}
use of org.craftercms.studio.api.v1.ebus.PreviewEventContext in project studio by craftercms.
the class ContentServiceImpl method deleteContent.
@Override
@ValidateParams
public boolean deleteContent(@ValidateStringParam(name = "site") String site, @ValidateSecurePathParam(name = "path") String path, boolean generateActivity, @ValidateStringParam(name = "approver") String approver) throws SiteNotFoundException {
String commitId;
boolean toReturn = false;
if (generateActivity) {
generateDeleteActivity(site, path, approver);
}
commitId = _contentRepository.deleteContent(site, path, approver);
objectStateService.deleteObjectStateForPath(site, path);
objectMetadataManager.deleteObjectMetadata(site, path);
try {
dependencyService.deleteItemDependencies(site, path);
} catch (ServiceLayerException e) {
logger.error("Error deleting dependencies for site " + site + " path " + path, e);
}
if (StringUtils.isNotEmpty(commitId)) {
contentRepository.insertGitLog(site, commitId, 1);
}
PreviewEventContext context = new PreviewEventContext();
context.setSite(site);
eventService.publish(EVENT_PREVIEW_SYNC, context);
if (commitId != null) {
toReturn = true;
}
return toReturn;
}
use of org.craftercms.studio.api.v1.ebus.PreviewEventContext in project studio by craftercms.
the class ContentServiceImpl method renameFolder.
@Override
@ValidateParams
public boolean renameFolder(@ValidateStringParam(name = "site") String site, @ValidateSecurePathParam(name = "path") String path, @ValidateStringParam(name = "name") String name) throws ServiceLayerException {
boolean toRet = false;
String parentPath = FILE_SEPARATOR + FilenameUtils.getPathNoEndSeparator(path);
String targetPath = parentPath + FILE_SEPARATOR + name;
if (contentExists(site, targetPath)) {
Map<String, String> ids = contentItemIdGenerator.getIds();
String id = ids.get(KEY_PAGE_GROUP_ID);
targetPath += "-" + id;
}
logger.debug("Rename folder for site {0} sourcePath {3} to target path {4}", site, path, targetPath);
// NOTE: IN WRITE SCENARIOS the repository OP IS PART of this PIPELINE, for some reason,
// historically with MOVE it is not
Map<String, String> commitIds = _contentRepository.moveContent(site, path, targetPath);
if (commitIds != null) {
// Update the database with the commitId for the target item
updateDatabaseOnMove(site, path, targetPath);
updateChildrenOnMove(site, path, targetPath);
for (Map.Entry<String, String> entry : commitIds.entrySet()) {
objectMetadataManager.updateCommitId(site, FILE_SEPARATOR + entry.getKey(), entry.getValue());
contentRepository.insertGitLog(site, entry.getValue(), 1);
}
siteService.updateLastCommitId(site, _contentRepository.getRepoLastCommitId(site));
PreviewEventContext context = new PreviewEventContext();
context.setSite(site);
eventService.publish(EVENT_PREVIEW_SYNC, context);
toRet = true;
} else {
logger.error("Repository move failed site {0} from {1} to {2}", site, path, targetPath);
}
return toRet;
}
use of org.craftercms.studio.api.v1.ebus.PreviewEventContext in project studio by craftercms.
the class ContentServiceImpl method writeContentAsset.
/**
* write content asset
*
* @param site
* @param path
* @param assetName
* @param in
* @param isImage
* is this asset an image?
* @param allowedWidth
* specifies the allowed image width in pixel if the asset is an image
* @param allowedHeight
* specifies the allowed image height in pixel if the asset is an image
* @param unlock
* unlock the content upon edit?
* @return content asset info
* @throws ServiceLayerException
*/
@Override
@ValidateParams
public Map<String, Object> writeContentAsset(@ValidateStringParam(name = "site") String site, @ValidateSecurePathParam(name = "path") String path, @ValidateStringParam(name = "assetName") String assetName, InputStream in, String isImage, String allowedWidth, String allowedHeight, String allowLessSize, String draft, String unlock, String systemAsset) throws ServiceLayerException {
try {
entitlementValidator.validateEntitlement(EntitlementType.ITEM, 1);
} catch (EntitlementException e) {
throw new ServiceLayerException("Unable to complete request due to entitlement limits. Please contact your " + "system administrator.");
}
boolean isSystemAsset = Boolean.valueOf(systemAsset);
Map<String, String> params = new HashMap<String, String>();
params.put(DmConstants.KEY_SITE, site);
params.put(DmConstants.KEY_PATH, path);
params.put(DmConstants.KEY_FILE_NAME, assetName);
params.put(DmConstants.KEY_IS_IMAGE, isImage);
params.put(DmConstants.KEY_ALLOW_LESS_SIZE, allowLessSize);
params.put(DmConstants.KEY_ALLOWED_WIDTH, allowedWidth);
params.put(DmConstants.KEY_ALLOWED_HEIGHT, allowedHeight);
params.put(DmConstants.KEY_CONTENT_TYPE, "");
params.put(DmConstants.KEY_CREATE_FOLDERS, "true");
params.put(DmConstants.KEY_UNLOCK, unlock);
params.put(DmConstants.KEY_SYSTEM_ASSET, String.valueOf(isSystemAsset));
boolean exists = contentExists(site, path + FILE_SEPARATOR + assetName);
params.put(DmConstants.KEY_ACTIVITY_TYPE, (exists ? OPERATION_UPDATE : OPERATION_CREATE));
String id = site + ":" + path + ":" + assetName + ":" + "";
// processContent will close the input stream
ContentItemTO item = null;
try {
path = path + FILE_SEPARATOR + assetName;
item = getContentItem(site, path);
if (item != null) {
ItemState itemState = objectStateService.getObjectState(site, path);
if (itemState != null) {
if (itemState.getSystemProcessing() != 0) {
logger.error(String.format("Error Content %s is being processed " + "(Object State is SYSTEM_PROCESSING);", path));
throw new RuntimeException(String.format("Content \"%s\" is being processed", path));
}
objectStateService.setSystemProcessing(site, path, true);
}
}
if (objectStateService.deletedPathExists(site, path) || objectMetadataManager.movedPathExists(site, path)) {
throw new ServiceLayerException("Content " + path + " for site " + site + ", cannot be created because" + " this name/URL was in use by another content item that has been moved or deleted by " + "not yet published.");
}
ResultTO result = processContent(id, in, false, params, DmConstants.CONTENT_CHAIN_ASSET);
ContentAssetInfoTO assetInfoTO = (ContentAssetInfoTO) result.getItem();
if (isSystemAsset) {
path = path.replace(assetName, assetInfoTO.getFileName());
}
item = getContentItem(site, path);
item.setSize(assetInfoTO.getSize());
item.setSizeUnit(assetInfoTO.getSizeUnit());
if (item != null) {
if (result.getCommitId() != null) {
objectStateService.transition(site, item, SAVE);
} else {
objectStateService.transition(site, item, TransitionEvent.CANCEL_EDIT);
}
}
PreviewEventContext context = new PreviewEventContext();
context.setSite(site);
eventService.publish(EVENT_PREVIEW_SYNC, context);
Map<String, Object> toRet = new HashMap<String, Object>();
toRet.put("success", true);
toRet.put("message", item);
return toRet;
} catch (Exception e) {
logger.error("Error processing content", e);
Map<String, Object> toRet = new HashMap<String, Object>();
toRet.put("success", true);
toRet.put("message", e.getMessage());
toRet.put("error", e);
return toRet;
} finally {
if (item != null) {
objectStateService.setSystemProcessing(site, path, false);
}
}
}
use of org.craftercms.studio.api.v1.ebus.PreviewEventContext in project studio by craftercms.
the class ContentServiceImpl method revertContentItem.
@Override
@ValidateParams
public boolean revertContentItem(@ValidateStringParam(name = "site") String site, @ValidateSecurePathParam(name = "path") String path, @ValidateStringParam(name = "version") String version, boolean major, @ValidateStringParam(name = "comment") String comment) throws SiteNotFoundException {
boolean toReturn = false;
String commitId = _contentRepository.revertContent(site, path, version, major, comment);
if (commitId != null) {
try {
dependencyService.upsertDependencies(site, path);
} catch (ServiceLayerException e) {
logger.error("Error while extracting dependencies for reverted content. Site: " + site + " path: " + path + " version: " + version);
}
// Update the database with the commitId for the target item
objectStateService.transition(site, path, REVERT);
objectMetadataManager.updateCommitId(site, path, commitId);
SiteFeed siteFeed = siteService.getSite(site);
AuditLog auditLog = auditServiceInternal.createAuditLogEntry();
auditLog.setOperation(OPERATION_REVERT);
auditLog.setSiteId(siteFeed.getId());
auditLog.setActorId(securityService.getCurrentUser());
auditLog.setPrimaryTargetId(site + ":" + path);
auditLog.setPrimaryTargetType(TARGET_TYPE_CONTENT_ITEM);
auditLog.setPrimaryTargetValue(path);
auditLog.setPrimaryTargetSubtype(getContentTypeClass(site, path));
auditServiceInternal.insertAuditLog(auditLog);
contentRepository.insertGitLog(site, commitId, 1, 1);
siteService.updateLastCommitId(site, commitId);
toReturn = true;
}
if (toReturn) {
PreviewEventContext context = new PreviewEventContext();
context.setSite(site);
eventService.publish(EVENT_PREVIEW_SYNC, context);
}
return toReturn;
}
Aggregations