/* * Copyright (C) 2005 Alfresco, Inc. * * Licensed under the Mozilla Public License version 1.1 * with a permitted attribution clause. You may obtain a * copy of the License at * * http://www.alfresco.org/legal/license.txt * * 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. */ package org.alfresco.web.bean.wizard; import java.io.File; import java.io.Serializable; import java.text.MessageFormat; import java.util.HashMap; import java.util.Map; import java.util.ResourceBundle; import javax.faces.context.FacesContext; import org.alfresco.model.ContentModel; import org.alfresco.repo.content.MimetypeMap; import org.alfresco.repo.content.filestore.FileContentReader; import org.alfresco.service.cmr.repository.ContentReader; import org.alfresco.service.namespace.QName; import org.alfresco.web.app.Application; import org.alfresco.web.bean.FileUploadBean; import org.alfresco.web.bean.repository.Repository; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * Handler class used by the Add Content Wizard * * @author gavinc */ public class AddContentWizard extends BaseContentWizard { private static Log logger = LogFactory.getLog(AddContentWizard.class); // TODO: retrieve these from the config service private static final String WIZARD_TITLE_ID = "add_content_title"; private static final String WIZARD_DESC_ID = "add_content_desc"; private static final String STEP1_TITLE_ID = "add_conent_step1_title"; private static final String STEP1_DESCRIPTION_ID = "add_conent_step1_desc"; private static final String STEP2_TITLE_ID = "add_conent_step2_title"; private static final String STEP2_DESCRIPTION_ID = "add_conent_step2_desc"; // add content wizard specific properties private File file; /** * @see org.alfresco.web.bean.wizard.AbstractWizardBean#next() */ public String next() { String outcome = super.next(); // if the outcome is "properties" we pre-set the content type and other // fields accordingly if (outcome.equals("properties")) { this.contentType = Repository.getMimeTypeForFileName( FacesContext.getCurrentInstance(), this.fileName); // set default for in-line editing flag this.inlineEdit = (this.contentType.equals(MimetypeMap.MIMETYPE_HTML)); // Try and extract metadata from the file ContentReader cr = new FileContentReader(this.file); cr.setMimetype(this.contentType); // create properties for content type Map contentProps = new HashMap(5, 1.0f); if (Repository.extractMetadata(FacesContext.getCurrentInstance(), cr, contentProps)) { this.author = (String)(contentProps.get(ContentModel.PROP_AUTHOR)); this.title = (String)(contentProps.get(ContentModel.PROP_TITLE)); this.description = (String)(contentProps.get(ContentModel.PROP_DESCRIPTION)); } if (this.title == null) { this.title = this.fileName; } } return outcome; } /** * Deals with the finish button being pressed * * @return outcome */ public String finish() { String outcome = saveContent(this.file, null); // now we know the new details are in the repository, reset the // client side node representation so the new details are retrieved if (this.editMode) { this.browseBean.getDocument().reset(); } return outcome; } /** * @see org.alfresco.web.bean.wizard.AbstractWizardBean#getWizardDescription() */ public String getWizardDescription() { return Application.getMessage(FacesContext.getCurrentInstance(), WIZARD_DESC_ID); } /** * @see org.alfresco.web.bean.wizard.AbstractWizardBean#getWizardTitle() */ public String getWizardTitle() { return Application.getMessage(FacesContext.getCurrentInstance(), WIZARD_TITLE_ID); } /** * @see org.alfresco.web.bean.wizard.AbstractWizardBean#getStepDescription() */ public String getStepDescription() { String stepDesc = null; switch (this.currentStep) { case 1: { stepDesc = Application.getMessage(FacesContext.getCurrentInstance(), STEP1_DESCRIPTION_ID); break; } case 2: { stepDesc = Application.getMessage(FacesContext.getCurrentInstance(), STEP2_DESCRIPTION_ID); break; } case 3: { stepDesc = Application.getMessage(FacesContext.getCurrentInstance(), SUMMARY_DESCRIPTION_ID); break; } default: { stepDesc = ""; } } return stepDesc; } /** * @see org.alfresco.web.bean.wizard.AbstractWizardBean#getStepTitle() */ public String getStepTitle() { String stepTitle = null; switch (this.currentStep) { case 1: { stepTitle = Application.getMessage(FacesContext.getCurrentInstance(), STEP1_TITLE_ID); break; } case 2: { stepTitle = Application.getMessage(FacesContext.getCurrentInstance(), STEP2_TITLE_ID); break; } case 3: { stepTitle = Application.getMessage(FacesContext.getCurrentInstance(), SUMMARY_TITLE_ID); break; } default: { stepTitle = ""; } } return stepTitle; } /** * Initialises the wizard */ public void init() { super.init(); clearUpload(); this.file = null; } /** * @return Returns the message to display when a file has been uploaded */ public String getFileUploadSuccessMsg() { String msg = Application.getMessage(FacesContext.getCurrentInstance(), "file_upload_success"); return MessageFormat.format(msg, new Object[] {getFileName()}); } /** * @return Returns the name of the file */ public String getFileName() { // try and retrieve the file and filename from the file upload bean // representing the file we previously uploaded. FacesContext ctx = FacesContext.getCurrentInstance(); FileUploadBean fileBean = (FileUploadBean)ctx.getExternalContext().getSessionMap(). get(FileUploadBean.FILE_UPLOAD_BEAN_NAME); if (fileBean != null) { this.file = fileBean.getFile(); this.fileName = fileBean.getFileName(); } return this.fileName; } /** * @param fileName The name of the file */ public void setFileName(String fileName) { this.fileName = fileName; // we also need to keep the file upload bean in sync FacesContext ctx = FacesContext.getCurrentInstance(); FileUploadBean fileBean = (FileUploadBean)ctx.getExternalContext().getSessionMap(). get(FileUploadBean.FILE_UPLOAD_BEAN_NAME); if (fileBean != null) { fileBean.setFileName(this.fileName); } } /** * @return Returns the summary data for the wizard. */ public String getSummary() { ResourceBundle bundle = Application.getBundle(FacesContext.getCurrentInstance()); return buildSummary( new String[] {bundle.getString("file_name"), bundle.getString("type"), bundle.getString("content_type"), bundle.getString("title"), bundle.getString("description"), bundle.getString("author"), bundle.getString("inline_editable")}, new String[] {this.fileName, getSummaryObjectType(), getSummaryContentType(), this.title, this.description, this.author, Boolean.toString(this.inlineEdit)}); } /** * @see org.alfresco.web.bean.wizard.AbstractWizardBean#determineOutcomeForStep(int) */ protected String determineOutcomeForStep(int step) { String outcome = null; switch(step) { case 1: { outcome = "upload"; break; } case 2: { outcome = "properties"; break; } case 3: { outcome = "summary"; break; } default: { outcome = CANCEL_OUTCOME; } } return outcome; } /** * Deletes the uploaded file and removes the FileUploadBean from the session */ private void clearUpload() { // delete the temporary file we uploaded earlier if (this.file != null) { this.file.delete(); } // remove the file upload bean from the session FacesContext ctx = FacesContext.getCurrentInstance(); ctx.getExternalContext().getSessionMap().remove(FileUploadBean.FILE_UPLOAD_BEAN_NAME); } }