blob: 810648ea051de2d0ed17d34f234f46beacfdb136 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. The ASF licenses this file to You
* under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License. For additional information regarding
* copyright in this work, please see the NOTICE file in the top level
* directory of this distribution.
*/
package org.apache.roller.weblogger.ui.struts2.editor;
import java.io.File;
import java.io.FileInputStream;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.roller.weblogger.WebloggerException;
import org.apache.roller.weblogger.business.FileIOException;
import org.apache.roller.weblogger.business.MediaFileManager;
import org.apache.roller.weblogger.business.WebloggerFactory;
import org.apache.roller.weblogger.pojos.MediaFile;
import org.apache.roller.weblogger.pojos.MediaFileDirectory;
import org.apache.struts2.convention.annotation.AllowedMethods;
import org.apache.struts2.interceptor.validation.SkipValidation;
/**
* Edits metadata for a media file.
*/
@SuppressWarnings("serial")
// TODO: make this work @AllowedMethods({"execute","save"})
public class MediaFileEdit extends MediaFileBase {
private static Log log = LogFactory.getLog(MediaFileEdit.class);
private MediaFileBean bean = new MediaFileBean();
private MediaFileDirectory directory;
// file uploaded by the user, if applicable
private File uploadedFile = null;
// content types for upload file
private String uploadedFileContentType = null;
// filename for uploaded file
private String uploadedFileName = null;
public MediaFileEdit() {
this.actionName = "mediaFileEdit";
this.desiredMenu = "editor";
this.pageTitle = "mediaFile.edit.title";
}
/**
* Prepares edit action.
*/
public void myPrepare() {
refreshAllDirectories();
try {
MediaFileManager mgr = WebloggerFactory.getWeblogger().getMediaFileManager();
if (!StringUtils.isEmpty(bean.getDirectoryId())) {
setDirectory(mgr.getMediaFileDirectory(bean.getDirectoryId()));
}
} catch (WebloggerException ex) {
log.error("Error looking up media file directory", ex);
}
}
/**
* Validates media file metadata to be updated.
*/
public void myValidate() {
MediaFile fileWithSameName = getDirectory().getMediaFile(getBean().getName());
if (fileWithSameName != null && !fileWithSameName.getId().equals(getMediaFileId())) {
addError("MediaFile.error.duplicateName", getBean().getName());
}
}
/**
* Show form for adding a new media file.
*
* @return String The result of the action.
*/
@SkipValidation
public String execute() {
MediaFileManager manager = WebloggerFactory.getWeblogger().getMediaFileManager();
try {
MediaFile mediaFile = manager.getMediaFile(getMediaFileId());
this.bean.copyFrom(mediaFile);
} catch (FileIOException ex) {
addError("uploadFiles.error.upload", bean.getName());
} catch (Exception e) {
log.error("Error uploading file " + bean.getName(), e);
addError("uploadFiles.error.upload", bean.getName());
}
return INPUT;
}
/**
* Save a media file.
*
* @return String The result of the action.
*/
public String save() {
myValidate();
if (!hasActionErrors()) {
MediaFileManager manager = WebloggerFactory.getWeblogger().getMediaFileManager();
try {
MediaFile mediaFile = manager.getMediaFile(getMediaFileId());
bean.copyTo(mediaFile);
if (uploadedFile != null) {
mediaFile.setLength(this.uploadedFile.length());
mediaFile.setContentType(this.uploadedFileContentType);
manager.updateMediaFile(getActionWeblog(), mediaFile,
new FileInputStream(this.uploadedFile));
} else {
manager.updateMediaFile(getActionWeblog(), mediaFile);
}
// Move file
if (!getBean().getDirectoryId().equals(
mediaFile.getDirectory().getId())) {
log.debug("Processing move of " + mediaFile.getId());
setSelectedMediaFiles(new String[] { mediaFile.getId() });
setSelectedDirectory(getBean().getDirectoryId());
doMoveSelected();
}
WebloggerFactory.getWeblogger().flush();
addMessage("mediaFile.update.success");
return SUCCESS;
} catch (FileIOException ex) {
addError("uploadFiles.error.upload", bean.getName());
} catch (Exception e) {
log.error("Error uploading file " + bean.getName(), e);
addError("uploadFiles.error.upload", bean.getName());
}
}
return INPUT;
}
public MediaFileBean getBean() {
return bean;
}
public void setBean(MediaFileBean b) {
this.bean = b;
}
public MediaFileDirectory getDirectory() {
return directory;
}
public void setDirectory(MediaFileDirectory directory) {
this.directory = directory;
}
/**
* @return the uploadedFile
*/
public File getUploadedFile() {
return uploadedFile;
}
/**
* @param uploadedFile
* the uploadedFile to set
*/
public void setUploadedFile(File uploadedFile) {
this.uploadedFile = uploadedFile;
}
/**
* @return the uploadedFileContentType
*/
public String getUploadedFileContentType() {
return uploadedFileContentType;
}
/**
* @param uploadedFileContentType
* the uploadedFileContentType to set
*/
public void setUploadedFileContentType(String uploadedFileContentType) {
this.uploadedFileContentType = uploadedFileContentType;
}
/**
* @return the uploadedFileName
*/
public String getUploadedFileName() {
return uploadedFileName;
}
/**
* @param uploadedFileName
* the uploadedFileName to set
*/
public void setUploadedFileName(String uploadedFileName) {
this.uploadedFileName = uploadedFileName;
}
}