package com.idega.block.media.presentation; import java.text.DateFormat; import java.util.Iterator; import java.util.Map; import com.idega.block.media.business.MediaBusiness; import com.idega.block.media.business.MediaConstants; import com.idega.core.data.ICTreeNode; import com.idega.core.file.data.ICFile; import com.idega.core.file.data.ICFileHome; import com.idega.core.file.data.ICFileType; import com.idega.data.IDOLookup; import com.idega.idegaweb.IWMainApplication; import com.idega.idegaweb.IWResourceBundle; import com.idega.presentation.IWContext; import com.idega.presentation.Table; import com.idega.presentation.text.HorizontalRule; import com.idega.presentation.text.Text; import com.idega.presentation.ui.CheckBox; import com.idega.presentation.ui.Form; import com.idega.presentation.ui.HiddenInput; import com.idega.presentation.ui.SubmitButton; import com.idega.presentation.ui.TextArea; import com.idega.presentation.ui.TextInput; import com.idega.presentation.ui.Window; /** * Title: com.idega.block.media.presentation.MediaFolderEditorWindow * Description: This class handles creating and editing of folders. * Copyright: Copyright (c) 2001 * Company: idega software * @author Eirikur S. Hrafnsson eiki@idega.is * @version 1.0 */ public class MediaFolderEditorWindow extends Window { private IWResourceBundle iwrb; private String fileInSessionParameter = ""; public MediaFolderEditorWindow() { } public void main(IWContext iwc) throws Exception { super.main(iwc); this.iwrb = getResourceBundle(iwc); handleEvents(iwc); } private void handleEvents(IWContext iwc) throws Exception { setBackgroundColor(MediaConstants.MEDIA_VIEWER_BACKGROUND_COLOR); setAllMargins(0); String action = iwc.getParameter(MediaConstants.MEDIA_ACTION_PARAMETER_NAME); this.fileInSessionParameter = MediaBusiness.getMediaParameterNameInSession( iwc ); int mediaId = MediaBusiness.getMediaId(iwc); if(action != null) { if( action.equals(MediaConstants.MEDIA_ACTION_NEW) ) { add(new MediaToolbar(mediaId)); Form form = new Form(); Table table = new Table(1,3); table.setWidth(300); table.setHeight(120); table.setVerticalAlignment(1,1,Table.VERTICAL_ALIGN_TOP); table.setVerticalAlignment(1,2,Table.VERTICAL_ALIGN_TOP); table.setVerticalAlignment(1,3,Table.VERTICAL_ALIGN_TOP); TextInput folderName = new TextInput(MediaConstants.MEDIA_FOLDER_NAME_PARAMETER_NAME); //Link save = new Link("Save"); //save.setAsImageButton(true); //save.setToFormSubmit(form); Text add = new Text(this.iwrb.getLocalizedString("mediafoldereditwindow.name.the.folder","Name the folder")); add.setStyle(Text.FONT_FACE_ARIAL); add.setFontSize(Text.FONT_SIZE_10_HTML_2); add.setBold(); table.add(add,1,1); table.add(new HiddenInput(MediaConstants.MEDIA_ACTION_PARAMETER_NAME,MediaConstants.MEDIA_ACTION_FOLDER_SAVE),1,2); table.add(folderName,1,3); table.add(new SubmitButton(this.iwrb.getLocalizedString("mv.save","save")),1,3); form.add(table); if( mediaId != -1){ form.add(new HiddenInput(MediaBusiness.getMediaParameterNameInSession(iwc),String.valueOf(mediaId))); } else{ ICFile rootNode = (ICFile)IWMainApplication.getIWCacheManager().getCachedEntity(com.idega.core.file.data.ICFileBMPBean.IC_ROOT_FOLDER_CACHE_KEY); form.add(new HiddenInput(MediaBusiness.getMediaParameterNameInSession(iwc),rootNode.getPrimaryKey().toString())); } add(form); } else if( action.equals(MediaConstants.MEDIA_ACTION_EDIT) ){ /**TODO add edit code**/ // done by Aron (aron@idega.is) addFileProperties(iwc,mediaId); } else if(action.equals(MediaConstants.MEDIA_ACTION_MOVE)) { addFileMove(iwc, mediaId); } else if( action.equals(MediaConstants.MEDIA_ACTION_FOLDER_SAVE) ){ String folderName = iwc.getParameter(MediaConstants.MEDIA_FOLDER_NAME_PARAMETER_NAME); if( (folderName!=null) && !(folderName.equalsIgnoreCase("")) ){ ICFile folder = ((com.idega.core.file.data.ICFileHome)com.idega.data.IDOLookup.getHome(ICFile.class)).create(); folder.setName(folderName); folder.setMimeType(com.idega.core.file.data.ICMimeTypeBMPBean.IC_MIME_TYPE_FOLDER); folder = MediaBusiness.saveMediaToDB(folder,mediaId,iwc); setOnLoad("parent.frames['"+MediaConstants.TARGET_MEDIA_TREE+"'].location.reload()"); add(new MediaToolbar(((Integer)folder.getPrimaryKey()).intValue())); add(new MediaViewer(((Integer)folder.getPrimaryKey()).intValue())); // Text created = new Text(iwrb.getLocalizedString("mediafoldereditwindow.folder.saved","Folder created")); // created.setStyle(Text.FONT_FACE_ARIAL); // created.setFontSize(Text.FONT_SIZE_10_HTML_2); } } else if( action.equals(MediaConstants.MEDIA_ACTION_RENAME) ){ String newFileName = iwc.getParameter(MediaConstants.MEDIA_FOLDER_NAME_PARAMETER_NAME); String newDescription = iwc.getParameter("me_fol_desc"); if(mediaId>0){ ICFile file = ( (ICFileHome) IDOLookup.getHome(ICFile.class)).findByPrimaryKey(new Integer(mediaId)); // Keeping same file ending : String oldFileName = file.getName(); boolean store = false; // Check for new name or description if( (newFileName!=null) &&!(newFileName.equalsIgnoreCase("")) ){ // keeping same file ending if(oldFileName!=null&& !oldFileName.equals(newFileName)){ int lastPeriod = oldFileName.lastIndexOf("."); if(lastPeriod>0){ String postfix = oldFileName.substring(lastPeriod); if(newFileName.lastIndexOf(".")==-1){ newFileName +=postfix; } } } file.setName(newFileName); store = true; } // Check for new description if(newDescription!=null && !newDescription.equals(file.getDescription()) ){ file.setDescription(newDescription); store = true; } // Check for new metadata if(iwc.isParameterSet("me_fol_mkey") && iwc.isParameterSet("me_fol_mval")){ String key = iwc.getParameter("me_fol_mkey"); String val = iwc.getParameter("me_fol_mval"); file.setMetaData(key,val); store = true; //System.out.println("we shall add metadata !"); } if(iwc.isParameterSet("me_fol_mdel")){ String[] deleteMeta = iwc.getParameterValues("me_fol_mdel"); if(deleteMeta!=null){ for (int i = 0; i < deleteMeta.length; i++) { file.removeMetaData(deleteMeta[i]); } file.updateMetaData(); } } if(store){ file.store(); } setOnLoad("parent.frames['"+MediaConstants.TARGET_MEDIA_TREE+"'].location.reload()"); addFileProperties(iwc,mediaId); //add(new MediaToolbar(file.getID())); //add(new MediaViewer(file.getID())); } } else if(action.equals(MediaConstants.MEDIA_ACTION_SAVE_MOVE)) { String newFolder = iwc.getParameter(MediaConstants.MEDIA_CHOOSER_FOLDER_CHOOSER_NAME); if(newFolder != null && !newFolder.equals("")) { MediaBusiness.moveMedia(mediaId,Integer.parseInt(newFolder)); } setOnLoad("parent.frames['"+MediaConstants.TARGET_MEDIA_TREE+"'].location.reload()"); } } } private void addFileProperties(IWContext iwc,int mediaId)throws Exception{ add(new MediaToolbar(mediaId)); Form form = new Form(); Table table = new Table(); //table.setWidth(300); //table.setHeight(120); //table.setVerticalAlignment(1,1,Table.VERTICAL_ALIGN_TOP); //table.setVerticalAlignment(1,2,Table.VERTICAL_ALIGN_TOP); //table.setVerticalAlignment(1,3,Table.VERTICAL_ALIGN_TOP); TextInput inputName = new TextInput(MediaConstants.MEDIA_FOLDER_NAME_PARAMETER_NAME); TextArea inputDescription = new TextArea("me_fol_desc"); if(mediaId>0){ ICFile file = ( (ICFileHome) IDOLookup.getHome(ICFile.class)).findByPrimaryKey(new Integer(mediaId)); //ICFile file = (ICFile)MediaBusiness.getCachedFileInfo(mediaId,iwc.getApplication()).getEntity(); if(file.getName()!=null){ inputName.setContent(file.getName()); } if(file.getDescription()!=null){ inputDescription.setContent(file.getDescription()); } int row = 1; Text props = new Text(this.iwrb.getLocalizedString("mediafoldereditwindow.properties","Properties")); props.setStyle(Text.FONT_FACE_ARIAL); props.setFontSize(Text.FONT_SIZE_10_HTML_2); props.setBold(); table.add(Text.getBreak(),1,row); table.mergeCells(1,row,2,row); table.add(props,1,row++); table.add(new HiddenInput(MediaConstants.MEDIA_ACTION_PARAMETER_NAME,MediaConstants.MEDIA_ACTION_RENAME),1,2); table.add(Text.getBreak(),1,row++); Text name = getHeaderText(this.iwrb.getLocalizedString("mediafoldereditwindow.properties.filename","Name")); table.add(name,1,row); table.add(inputName,2,row++); Text description = getHeaderText(this.iwrb.getLocalizedString("mediafoldereditwindow.properties.description","Description")); table.add(description,1,row); table.add(inputDescription,2,row++); SubmitButton save = new SubmitButton(this.iwrb.getLocalizedString("mv.save","save")); table.add(save,2,row++); String mimeType = (file.getMimeType() != null ) ? file.getMimeType() : ""; ICFileType fileType = MediaBusiness.getFileType(iwc,mimeType); Text type = getHeaderText(this.iwrb.getLocalizedString("mediafoldereditwindow.properties.type","Type")+":"); table.add(type,1,row); table.add(fileType.getDisplayName(),2,row); row++; Text size = getHeaderText(this.iwrb.getLocalizedString("mediafoldereditwindow.properties.size","Size")+":");; table.add(size,1,row); table.add((file.getFileSize() != null ) ? file.getFileSize().toString() : "",2,row); row++; Text location = getHeaderText(this.iwrb.getLocalizedString("mediafoldereditwindow.properties.location","Location")+":"); table.add(location,1,row); table.add(getFileLocation(file,"/"),2,row); row++; Text mimetype = getHeaderText(this.iwrb.getLocalizedString("mediafoldereditwindow.properties.mimetype","Mimetype")+":"); table.add(mimetype,1,row); table.add(mimeType,2,row); row++; DateFormat df = DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG,iwc.getCurrentLocale()); Text created = getHeaderText(this.iwrb.getLocalizedString("mediafoldereditwindow.properties.created","Created")+":"); table.add(created,1,row); table.add(file.getCreationDate()!=null?df.format(file.getCreationDate()):"",2,row); row++; Text modified = getHeaderText(this.iwrb.getLocalizedString("mediafoldereditwindow.properties.modified","Modified")+":"); table.add(modified,1,row); table.add(file.getModificationDate()!=null?df.format(file.getModificationDate()):"",2,row); row++; table.add(Text.getBreak(),1,row++); table.mergeCells(1,row,2,row); table.add(new HorizontalRule(),1,row++); table.setAlignment(1,row,Table.HORIZONTAL_ALIGN_CENTER); table.setColumnVerticalAlignment(1,Table.VERTICAL_ALIGN_TOP); table.setColumnAlignment(1,Table.HORIZONTAL_ALIGN_RIGHT); table.setAlignment(1,1,Table.HORIZONTAL_ALIGN_CENTER); Table metaTable = new Table(); int mrow = 1; metaTable.add(Text.getBreak(),1,mrow); metaTable.add(getHeaderText(this.iwrb.getLocalizedString("mediafoldereditwindow.properties.metadata","Metadata")),1,mrow); metaTable.mergeCells(1,mrow,3,mrow); mrow++; metaTable.add(Text.getBreak(),1,mrow++); metaTable.add(getHeaderText(this.iwrb.getLocalizedString("mediafoldereditwindow.properties.metadata.key","Key")),1,mrow); metaTable.add(getHeaderText(this.iwrb.getLocalizedString("mediafoldereditwindow.properties.metadata.value","Value")),2,mrow); metaTable.add(getHeaderText(this.iwrb.getLocalizedString("mediafoldereditwindow.properties.metadata.remove","Remove")),3,mrow); mrow++; file.getMetaData("test"); // to fetch the metadata !! //TODO do it in a better way if(file.getMetaDataAttributes()!=null){ Iterator iter = file.getMetaDataAttributes().entrySet().iterator(); while(iter.hasNext()){ Map.Entry entry = (Map.Entry) iter.next(); Text key = getHeaderText((String)entry.getKey()); metaTable.add(key,1,mrow); metaTable.add((String)entry.getValue(),2,mrow); metaTable.add(new CheckBox("me_fol_mdel",(String)entry.getKey()),3,mrow++); } table.add(metaTable,1,row); table.mergeCells(1,row,2,row); } TextInput inputKey = new TextInput("me_fol_mkey"); TextInput inputValue = new TextInput("me_fol_mval"); metaTable.add(inputKey,1,mrow); metaTable.add(inputValue,2,mrow); metaTable.add(save,3,mrow); metaTable.setAlignment(1,1,Table.HORIZONTAL_ALIGN_CENTER); form.add(new HiddenInput(MediaBusiness.getMediaParameterNameInSession(iwc),String.valueOf(mediaId))); } form.add(table); add(form); } private void addFileMove(IWContext iwc,int mediaId)throws Exception { add(new MediaToolbar(mediaId)); Form form = new Form(); form.add(new HiddenInput(MediaBusiness.getMediaParameterNameInSession(iwc),String.valueOf(mediaId))); Table table = new Table(); table.setCellpadding(0); table.setCellspacing(0); table.setWidth(Table.HUNDRED_PERCENT); table.add(Text.BREAK,1,1); table.add(new HiddenInput(MediaConstants.MEDIA_ACTION_PARAMETER_NAME,MediaConstants.MEDIA_ACTION_SAVE_MOVE),1,2); Text move = new Text(this.iwrb.getLocalizedString("mediafoldereditwindow.choose_folder_to_move_to","Choose a folder to move current file/folder to")); move.setStyle(Text.FONT_FACE_ARIAL); move.setFontSize(Text.FONT_SIZE_10_HTML_2); move.setBold(); table.setAlignment(1,1,Table.HORIZONTAL_ALIGN_CENTER); table.add(move,1,1); FolderChooser folderChooser = new FolderChooser(MediaConstants.MEDIA_CHOOSER_FOLDER_CHOOSER_NAME); table.setAlignment(1,2,Table.HORIZONTAL_ALIGN_CENTER); table.add(Text.BREAK,1,2); table.add(folderChooser,1,2); SubmitButton submit = new SubmitButton(this.iwrb.getLocalizedString("mv.save","save")); table.setAlignment(1,3,Table.HORIZONTAL_ALIGN_CENTER); table.add(Text.BREAK,1,3); table.add(submit,1,3); form.add(table); add(form); } private Text getHeaderText(String string){ Text text= new Text(string); text.setStyle(Text.FONT_FACE_ARIAL); text.setFontSize(Text.FONT_SIZE_10_HTML_2); text.setBold(); return text; } private String getFileLocation(ICTreeNode node,String delimiter){ ICTreeNode parent = node.getParentNode(); if(parent!=null ){ // we dont print the name of the leaf , only parents if(!node.isLeaf()) { return getFileLocation(parent,delimiter)+delimiter+node.getNodeName(); } else { return getFileLocation(parent,delimiter)+delimiter; } } // dont print the root ( ICROOT ) return ""; } public String getBundleIdentifier(){ return MediaConstants.IW_BUNDLE_IDENTIFIER ; } }