package com.idega.block.text.presentation; import java.io.IOException; import java.sql.SQLException; import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.Vector; import javax.ejb.FinderException; import com.idega.block.image.presentation.ImageAttributeSetter; import com.idega.block.media.presentation.ImageInserter; import com.idega.block.text.business.ContentBusiness; import com.idega.block.text.business.ContentHelper; import com.idega.block.text.business.TextBusiness; import com.idega.block.text.business.TextFinder; import com.idega.block.text.data.LocalizedText; import com.idega.block.text.data.TxText; import com.idega.core.file.data.ICFile; import com.idega.core.file.data.ICFileHome; import com.idega.core.localisation.business.ICLocaleBusiness; import com.idega.core.localisation.presentation.ICLocalePresentation; import com.idega.core.user.data.User; import com.idega.data.IDOLookup; import com.idega.data.IDOLookupException; import com.idega.idegaweb.IWBundle; import com.idega.idegaweb.IWResourceBundle; import com.idega.idegaweb.block.presentation.Builderaware; import com.idega.presentation.IWContext; import com.idega.presentation.Image; import com.idega.presentation.Table; import com.idega.presentation.text.Link; import com.idega.presentation.texteditor.TextEditor; import com.idega.presentation.ui.AbstractChooserWindow; import com.idega.presentation.ui.CloseButton; import com.idega.presentation.ui.DropdownMenu; import com.idega.presentation.ui.HiddenInput; import com.idega.presentation.ui.SubmitButton; import com.idega.presentation.ui.TextInput; /** * Title: * Description: * Copyright: Copyright (c) 2000-2001 idega.is All Rights Reserved * Company: idega *@author <a href="mailto:aron@idega.is">Aron Birkir</a> * @version 1.1 */ public class TextEditorWindow extends AbstractChooserWindow{ private final static String IW_BUNDLE_IDENTIFIER="com.idega.block.text"; private boolean isAdmin = false; private int iUserId = -1; private int iObjInsId = -1; public final static String prmAttribute = "txe_attribute"; public final static String prmTextId = "txep_txtextid"; public final static String prmDelete = "txep_txdeleteid"; public final static String prmLocale = "txep_localedrp"; public final static String prmObjInstId = "txep_icobjinstid"; private final static String prmHeadline = "txep_headline"; private final static String prmBody = "txep_body"; public final static String imageAttributeKey = "txre_im_prop"; public boolean debugParameter = false; private String prmUsedTextId = prmTextId; //debug //private static String prmImageId = "txep.imageid"; private static String prmImageId = "txep_imageid"; //private static String prmTextId = "txep_txtextid"; private static String prmLocalizedTextId = "txep_loctextid"; private static String prmUseImage = "txep_useimage"; private static String prmDeleteFile = "txep_deletefile"; private static String prmSaveFile = "txep_savefile"; private static String actDelete = "txea_delete"; private static String actSave = "txea_save"; private static String actClose = "txea_close"; private static String actNew = "txea_new"; private static String modeDelete = "txem_delete"; public static final String ONCLICK_FUNCTION_NAME = "textselect"; public static final String TEXT_ID_PARAMETER_NAME = "text_id"; public static final String TEXT_NAME_PARAMETER_NAME = "text_name"; private boolean parentReload = true; private String sTextId = null; private IWBundle iwb,core; private IWResourceBundle iwrb; public TextEditorWindow(){ super(); setWidth(570); setHeight(550); setResizable(true); setUnMerged(); } private void control(IWContext iwc)throws Exception{ if(this.debugParameter){ debugParameters(iwc); } //Checks if the Window is being usen by the TextChooser //if chooserParameterName is null it is not being used by TextChooser String chooserParameterName = super.getSelectionParameter(iwc); if(chooserParameterName!=null){ debug("chooserParameterName!=null"); debug("chooserParameterName="+chooserParameterName); debug("iwc.getParameter(chooserParameterName)="+iwc.getParameter(chooserParameterName)); if(iwc.isParameterSet(chooserParameterName)) { this.prmUsedTextId=chooserParameterName; } } else{ debug("chooserParameterName==null"); } boolean doView = true; Locale currentLocale = iwc.getCurrentLocale(); Locale chosenLocale; String sLocaleId = iwc.getParameter(prmLocale); this.sTextId = iwc.getParameter(this.prmUsedTextId); if(iwc.isParameterSet(actClose)|| iwc.isParameterSet(actClose+".x")){ if (chooserParameterName != null) { System.out.println("TextEditorWindow : "+chooserParameterName); System.out.println("SELECT_FUNCTION_NAME : "+SELECT_FUNCTION_NAME); System.out.println("sTextId : "+this.sTextId); setOnLoad(SELECT_FUNCTION_NAME + "('" + this.sTextId + "','" + this.sTextId + "')"); } //else { if (this.parentReload) { setParentToReload(); } close(); //} } else{ // LocaleHandling int iLocaleId = -1; if(sLocaleId!= null){ iLocaleId = Integer.parseInt(sLocaleId); chosenLocale = ICLocaleBusiness.getLocaleReturnIcelandicLocaleIfNotFound(iLocaleId); } else{ chosenLocale = currentLocale; iLocaleId = ICLocaleBusiness.getLocaleId(chosenLocale); } if ( this.isAdmin ) { // end of LocaleHandling // Text initialization String sAttribute = null; String sLocTextId = iwc.getParameter(prmLocalizedTextId); sAttribute = iwc.getParameter(prmAttribute); // Delete Request : if(iwc.getParameter(prmDelete)!=null){ this.sTextId = iwc.getParameter(prmDelete); //add(""+iObjInsId); confirmDelete(this.sTextId,this.iObjInsId); doView = false; } // Object Instance Request : if(iwc.getParameter(prmObjInstId)!= null){ this.iObjInsId = Integer.parseInt(iwc.getParameter(prmObjInstId ) ); } // end of Text initialization // Form processing processForm(iwc,this.sTextId,sLocTextId, sAttribute); if(doView) { doViewText(iwc, this.sTextId,sAttribute,chosenLocale,iLocaleId); } } else { noAccess(); } } } // Form Processing : private void processForm(IWContext iwc,String sTextId,String sLocTextId,String sAttribute){ // Save : if(iwc.getParameter(actSave)!=null || iwc.getParameter(actSave+".x")!=null ){ iwc.getIWMainApplication().getIWCacheManager().invalidateCache(TextReader.CACHE_KEY); saveText(iwc,sTextId,sLocTextId,sAttribute); } // Delete : else if(iwc.getParameter( actDelete )!=null || iwc.getParameter(actDelete+".x")!=null){ iwc.getIWMainApplication().getIWCacheManager().invalidateCache(TextReader.CACHE_KEY); try { if(iwc.getParameter(modeDelete)!=null){ int I = Integer.parseInt(iwc.getParameter(modeDelete)); deleteText(I); } } catch (Exception ex) { ex.printStackTrace(); } } // New: /** @todo make possible */ else if(iwc.getParameter( actNew ) != null || iwc.getParameter(actNew+".x")!= null){ sTextId = null;sAttribute = null; } else if(iwc.getParameter(prmDeleteFile)!=null){ if(sTextId!=null){ String sFileId = iwc.getParameter(prmDeleteFile); deleteFile(sTextId,sFileId); } } else if(iwc.getParameter(prmSaveFile)!= null || iwc.getParameter(prmSaveFile+".x")!=null){ if(sTextId!=null){ String sFileId = iwc.getParameter(prmImageId); saveFile(sTextId,sFileId); } } // end of Form Actions } private void doViewText(IWContext iwc, String sTextId,String sAttribute,Locale locale,int iLocaleId){ ContentHelper contentHelper = null; TxText eTxText = null; int iTextId = -1; if(sTextId != null){ iTextId = Integer.parseInt(sTextId); eTxText = TextFinder.getText(iTextId); if(iLocaleId > 0) { contentHelper = TextFinder.getContentHelper(iTextId,iLocaleId); } else { contentHelper = TextFinder.getContentHelper(iTextId,locale); } } else if(sAttribute != null){ contentHelper = TextFinder.getContentHelper(sAttribute,iLocaleId); } addLocalizedTextFields(iwc, eTxText,contentHelper,iLocaleId,sAttribute,this.iObjInsId); } private void addLocalizedTextFields(IWContext iwc, TxText txText,ContentHelper contentHelper, int iLocaleId,String sAttribute,int iObjInsId){ LocalizedText locText = null; boolean hasTxText = ( txText != null ); //boolean hasLocalizedText = ( locText != null ) ? true: false; boolean hasContent = ( contentHelper != null); if(hasContent) { locText = contentHelper.getLocalizedText(ICLocaleBusiness.getLocaleReturnIcelandicLocaleIfNotFound(iLocaleId)); } boolean hasLocalizedText = ( locText !=null ); TextInput tiHeadline = new TextInput(prmHeadline); tiHeadline.setLength(40); tiHeadline.setMaxlength(255); DropdownMenu LocaleDrop = ICLocalePresentation.getLocaleDropdownIdKeyed(prmLocale); LocaleDrop.setToSubmit(); LocaleDrop.setSelectedElement(Integer.toString(iLocaleId)); //TextArea taBody = new TextArea(prmBody,65,18); TextEditor taBody = new TextEditor(); taBody.setInputName(prmBody); if ( hasLocalizedText ) { if ( locText.getHeadline() != null ) { tiHeadline.setContent(locText.getHeadline()); } if ( locText.getBody() != null ) { taBody.setContent(locText.getBody()); } addHiddenInput(new HiddenInput(prmLocalizedTextId,String.valueOf(locText.getID()))); } if( hasTxText ) { addHiddenInput(new HiddenInput(this.prmUsedTextId,Integer.toString(txText.getID()))); } if(sAttribute != null) { addHiddenInput(new HiddenInput(prmAttribute,sAttribute)); } if(iObjInsId > 0) { addHiddenInput(new HiddenInput(prmObjInstId,String.valueOf(iObjInsId))); } SubmitButton addButton = null; addButton = new SubmitButton(this.core.getImage("/shared/create.gif"),prmSaveFile); ImageInserter imageInsert = new ImageInserter(); imageInsert.setImSessionImageName(prmImageId); imageInsert.setUseBoxParameterName(prmUseImage); imageInsert.setMaxImageWidth(130); imageInsert.setHasUseBox(false); imageInsert.setSelected(false); Table imageTable = new Table(); int row = 1; //imageTable.mergeCells(1,row,3,row); //imageTable.add(formatText(iwrb.getLocalizedString("image","Chosen image :")),1,row++); imageTable.mergeCells(1,row,3,row); imageTable.add(imageInsert,1,row++); imageTable.mergeCells(1,row,3,row); //imageTable.add(leftButton,1,row); imageTable.add(addButton,1,row++); if ( hasContent ) { List files = contentHelper.getFiles(); if(files != null && files.size() > 0){ imageTable.mergeCells(1,row,3,row); imageTable.add( formatText(this.iwrb.getLocalizedString("textimages","Text images :")),1,row++); ICFile file1 = (ICFile) files.get(0); imageInsert.setImageId(((Integer)file1.getPrimaryKey()).intValue()); Iterator I = files.iterator(); while(I.hasNext()){ try { ICFile f = (ICFile) I.next(); Image immi = new Image(((Integer)f.getPrimaryKey()).intValue()); immi.setMaxImageWidth(50); imageTable.add(immi,1,row); //Link edit = new Link(iwb.getImage("/shared/edit.gif")); Link edit = ImageAttributeSetter.getLink(this.iwb.getImage("/shared/edit.gif"),((Integer)f.getPrimaryKey()).intValue(),imageAttributeKey); Link delete = new Link(this.core.getImage("/shared/delete.gif")); maintainParameter(iwc, delete); delete.addParameter(prmDeleteFile,((Integer)f.getPrimaryKey()).intValue()); delete.addParameter(this.prmUsedTextId,txText.getID()); imageTable.add(edit,2,row); imageTable.add(delete,3,row); row++; } catch (Exception ex) { } } } } addLeft(this.iwrb.getLocalizedString("title","Title"),tiHeadline,true); addLeft(this.iwrb.getLocalizedString("locale","Locale"), LocaleDrop,true); addLeft(this.iwrb.getLocalizedString("body","Text"),taBody,true); addRight(this.iwrb.getLocalizedString("image","Image"),imageTable,true,false); SubmitButton save = new SubmitButton(this.iwrb.getLocalizedImageButton("save","Save"),actSave); SubmitButton close = new SubmitButton(this.iwrb.getLocalizedImageButton("close","Close"),actClose); getAssociatedScript().addFunction(ONCLICK_FUNCTION_NAME,"function "+ONCLICK_FUNCTION_NAME+"("+TEXT_NAME_PARAMETER_NAME+","+TEXT_ID_PARAMETER_NAME+"){ }"); getAssociatedScript().addToFunction(ONCLICK_FUNCTION_NAME,AbstractChooserWindow.SELECT_FUNCTION_NAME+"("+TEXT_NAME_PARAMETER_NAME+","+TEXT_ID_PARAMETER_NAME+")"); if (txText != null) { close.setOnClick(ONCLICK_FUNCTION_NAME+"('"+txText.getID()+"','"+txText.getID()+"')"); } addSubmitButton(save); addSubmitButton(close); } private void noAccess() throws IOException,SQLException { addLeft(this.iwrb.getLocalizedString("no_access","Login first!")); this.addSubmitButton(new CloseButton()); } private void saveFile(String sTextId,String sFileId){ TxText tx = TextFinder.getText(Integer.parseInt(sTextId)); ContentBusiness.addFileToContent(tx.getContentId(),Integer.parseInt(sFileId)); } private void deleteFile(String sTextId,String sFileId){ TxText tx = TextFinder.getText(Integer.parseInt(sTextId)); ContentBusiness.removeFileFromContent(tx.getContentId(),Integer.parseInt(sFileId)); } private void confirmDelete(String sTextId,int iObjInsId ) throws IOException,SQLException { int iTextId = Integer.parseInt(sTextId); TxText txText= TextFinder.getText(iTextId); if ( txText != null ) { addLeft(this.iwrb.getLocalizedString("text_to_delete","Text to delete")); addLeft(this.iwrb.getLocalizedString("confirm_delete","Are you sure?")); addSubmitButton(new SubmitButton(this.iwrb.getLocalizedImageButton("delete","Delete"),actDelete)); //addSubmitButton(new SubmitButton(iwrb.getImage("delete.gif"),actDelete)); addHiddenInput(new HiddenInput(modeDelete,String.valueOf(txText.getID()))); } else { addLeft(this.iwrb.getLocalizedString("not_exists","Text already deleted or not available.")); addSubmitButton(new CloseButton()); } } private void saveText(IWContext iwc,String sTxTextId,String sLocalizedTextId,String sAttribute){ String sHeadline = iwc.getParameter( prmHeadline ); String sBody = iwc.getParameter(prmBody ); String sImageId = iwc.getParameter(prmImageId); String sLocaleId = iwc.getParameter(prmLocale); if(sHeadline != null || sBody != null){ int iTxTextId = sTxTextId!=null?Integer.parseInt(sTxTextId): -1; int iLocalizedTextId = sLocalizedTextId != null ? Integer.parseInt(sLocalizedTextId): -1; int iLocaleId = sLocaleId != null ? Integer.parseInt(sLocaleId):-1; int iImageId = sImageId != null ? Integer.parseInt(sImageId):-1; Vector files = null; try { ICFileHome fileHome = (ICFileHome)IDOLookup.getHome(ICFile.class); ICFile file = fileHome.findByPrimaryKey(new Integer(iImageId)); files = new Vector(); files.add(file); }catch (IDOLookupException e) { //e.printStackTrace(); } catch (FinderException e) { //e.printStackTrace(); } TxText tx = TextBusiness.saveText(iTxTextId,iLocalizedTextId,iLocaleId,this.iUserId,this.iObjInsId,null,null,sHeadline,"",sBody,sAttribute,files); if(tx != null){ this.sTextId = tx.getPrimaryKey().toString(); } } } private void deleteText(int iTextId ) { /** * @todo hondla fyrir TextChooser */ TextBusiness.deleteText(iTextId); setParentToReload(); close(); } public void displaySelection(IWContext iwc) { // super.main(iwc); this.isAdmin = iwc.hasEditPermission(new TextReader()); User u= iwc.getCurrentUser(); this.iUserId = u != null?u.getID():-1; this.isAdmin = true; this.iwb = getBundle(iwc); this.iwrb = getResourceBundle(iwc); this.core = iwc.getIWMainApplication().getBundle(Builderaware.IW_CORE_BUNDLE_IDENTIFIER); reloadCheck(iwc); addTitle(this.iwrb.getLocalizedString("text_editor","Text Editor")); try{ control(iwc); } catch(Exception e){ e.printStackTrace(); } } public String getBundleIdentifier(){ return IW_BUNDLE_IDENTIFIER; } private void reloadCheck(IWContext iwc) { if (iwc.getSessionAttribute(TextChooser.RELOAD_PARENT_PARAMETER) != null) { this.parentReload = false; } } public void setDebugParameters(boolean debug){ this.debugParameter = debug; } public void setParentToReload(boolean reload) { this.parentReload = reload; } /* public void displaySelection(IWContext iwc) { }*/ }