package com.idega.block.media.presentation;
/**
* Title: ImageInserter Description: Copyright: Copyright (c) 2001 Company:
* idega
*
* @author Eirikur Hrafnsson, eiki@idega.is
* @version 1.0
*/
import com.idega.block.media.business.MediaConstants;
import com.idega.idegaweb.IWBundle;
import com.idega.idegaweb.IWResourceBundle;
import com.idega.idegaweb.IWUserContext;
import com.idega.presentation.Block;
import com.idega.presentation.IWContext;
import com.idega.presentation.Image;
import com.idega.presentation.Page;
import com.idega.presentation.Script;
import com.idega.presentation.Table;
import com.idega.presentation.text.Link;
import com.idega.presentation.text.Text;
import com.idega.presentation.ui.CheckBox;
import com.idega.presentation.ui.HiddenInput;
import com.idega.presentation.ui.Window;
public class ImageInserter extends Block {
private final static String IW_BUNDLE_IDENTIFIER = "com.idega.block.media";
private int imageId = -1;
private boolean nullImageIDDefault = false;
private String imSessionImageName = null;
private String sHiddenInputName = null;
private String adminURL = null;
private String nameOfWindow;
private String sUseBoxString;
private int maxImageWidth = 140;
private int imageWidth = 0;
private int imageHeight = 0;
private boolean hasUseBox = true;
private boolean selected = false;
private boolean openInWindow = false;
private Class windowClass = MediaChooserWindow.class;
private Image setImage;
private boolean limitWidth = true;
public final String sessionImageParameterName = MediaConstants.FILE_IN_SESSION_PARAMETER_NAME;
private String prmUseBox = "insertImage";
private boolean maintainSessionParameter = false;
private boolean setWindowToReloadParent = false;
public static int IM_BROWSER_WIDTH = 800;
public static int IM_BROWSER_HEIGHT = 600;
public static int IM_MAX_WIDTH = 140;
private String contextPath = "";
private IWBundle iwb;
private IWResourceBundle iwrb;
public ImageInserter() {
this.imSessionImageName = "image_id";
this.sHiddenInputName = "image_id";
}
public ImageInserter(Image setImage) {
this();
this.setImage = setImage;
}
public ImageInserter(int imageId) {
this.imageId = imageId;
this.imSessionImageName = "image_id";
this.sHiddenInputName = "image_id";
}
public ImageInserter(String imSessionImageName) {
this.imSessionImageName = imSessionImageName;
this.sHiddenInputName = imSessionImageName;
}
public ImageInserter(String imSessionImageName, boolean hasUseBox) {
this(imSessionImageName);
setHasUseBox(hasUseBox);
}
public ImageInserter(int imageId, String imSessionImageName) {
this.imageId = imageId;
this.imSessionImageName = imSessionImageName;
this.sHiddenInputName = imSessionImageName;
}
public ImageInserter(Class WindowToOpen) {
this.sHiddenInputName = this.imSessionImageName;
this.windowClass = WindowToOpen;
this.openInWindow = true;
}
public void main(IWContext iwc) throws Exception {
this.empty();
this.iwb = getBundle(iwc);
this.iwrb = getResourceBundle(iwc);
this.contextPath = this.iwb.getApplication().getApplicationContextURI();
if (this.contextPath == null) {
this.contextPath = "";
}
else if (!this.contextPath.endsWith("/")) {
this.contextPath += "/";
}
this.nameOfWindow = this.iwrb.getLocalizedString("new_image", "New image");
this.sUseBoxString = this.iwrb.getLocalizedString("use_image", "Use image");
String imageSessionId = (String) iwc.getSessionAttribute(this.imSessionImageName);
if (imageSessionId != null) {
this.imageId = Integer.parseInt(imageSessionId);
if (!this.maintainSessionParameter) {
iwc.removeSessionAttribute(this.imSessionImageName);
}
}
Image image = this.setImage;
if (image == null) {
if (this.imageId == -1) {
image = this.iwrb.getImage("picture.gif", this.iwrb.getLocalizedString("new_image", "Newimage"), 138, 90);
}
else {
image = new Image(this.imageId);
}
if (this.limitWidth) {
image.setMaxImageWidth(this.maxImageWidth);
//image.setHeight(90);
}
if (this.imageWidth > 0) {
image.setWidth(this.imageWidth);
}
if (this.imageHeight > 0) {
image.setHeight(this.imageHeight);
}
image.setNoImageLink();
}
image.setName("im" + this.imSessionImageName);
image.setBorder(1);
Link imageAdmin = null;
if (this.adminURL == null) {
imageAdmin = new Link(image);
imageAdmin.setWindowToOpen(this.windowClass);
}
else {
Window insertNewsImageWindow = new Window(this.nameOfWindow, IM_BROWSER_WIDTH, IM_BROWSER_HEIGHT, this.adminURL);
imageAdmin = new Link(image, insertNewsImageWindow);
}
if (this.setWindowToReloadParent) {
imageAdmin.addParameter(MediaConstants.MEDIA_ACTION_RELOAD, "true");
}
imageAdmin.addParameter("submit", "new");
imageAdmin.addParameter(this.sessionImageParameterName, this.imSessionImageName);
//filter only images
imageAdmin.addParameter(MediaConstants.MEDIA_CHOOSER_PARAMETER_NAME, MediaConstants.MEDIA_CHOOSER_IMAGE);
if (this.imageId != -1) {
imageAdmin.addParameter(this.imSessionImageName, this.imageId);
}
String stringImageID = null;
if (this.nullImageIDDefault && this.imageId==-1) {
stringImageID = "";
}
else {
stringImageID = Integer.toString(this.imageId);
}
HiddenInput hidden = new HiddenInput(this.sHiddenInputName, stringImageID);
hidden.keepStatusOnAction();
Page P = getParentPage();
if (P != null) {
Script S = P.getAssociatedScript();
if (S != null) {
S.addFunction("imchange", getImageChangeJSFunction(hidden.getID()));
}
}
CheckBox insertImage = new CheckBox(this.prmUseBox, "Y");
insertImage.setChecked(this.selected);
Text imageText = new Text(this.sUseBoxString + ": ");
imageText.setFontSize(1);
Table imageTable = new Table(1, 2);
imageTable.setAlignment(1, 2, "right");
imageTable.add(imageAdmin, 1, 1);
if (this.hasUseBox) {
imageTable.add(imageText, 1, 2);
imageTable.add(insertImage, 1, 2);
}
imageTable.add(hidden, 1, 2);
add(imageTable);
}
public static String getFunction(int id) {
return "setImageId(" + id + ")";
}
public String getImageChangeJSFunction(String hiddenInputID) {
StringBuffer function = new StringBuffer("");
function.append("function setImageId(imageId,imagename) { \n \t");
// function.append("document.getElementById('im'+imagename).src = \"");
function.append("findObj('im'+imagename).src = \"");
function.append(this.contextPath + "servlet/MediaServlet");
function.append("?media_id=\"+imageId; \n\t");
// function.append("document.getElementById('").append(hiddenInputID).append("').value = imageId; \n}\n");
function.append("findObj('").append(hiddenInputID).append("').value = imageId; \n}\n");
function.append("function getElementIndex(elementname){ \n \t");
function.append("len = document.forms[0].length \n \t");
function.append("for(i=0; i<len; i++){ \n \t \t");
function.append("if(document.forms[0].elements[i].name == elementname.toString()){ \n\t\t ");
function.append("return i; \n \t \t} \n \t} \n }\n");
return function.toString();
}
public void setHasUseBox(boolean useBox) {
this.hasUseBox = useBox;
}
public void setHasUseBox(boolean useBox, String prmUseBox) {
this.hasUseBox = useBox;
this.prmUseBox = prmUseBox;
}
public void setUseBoxParameterName(String prmUseBox) {
this.prmUseBox = prmUseBox;
}
public void setSelected(boolean selected) {
this.selected = selected;
}
public void setUseBoxString(String sUseBoxString) {
this.sUseBoxString = sUseBoxString;
}
public void setHiddenInputName(String name) {
this.sHiddenInputName = name;
}
public String getHiddenInputName() {
return this.sHiddenInputName;
}
public void setMaxImageWidth(int maxWidth) {
this.maxImageWidth = maxWidth;
}
public void setImageHeight(int imageHeight) {
this.imageHeight = imageHeight;
}
public void setImageWidth(int imageWidth) {
this.imageWidth = imageWidth;
}
public void setHeight(String imageHeight) {
try {
this.imageHeight = Integer.parseInt(imageHeight);
}
catch (NumberFormatException e) {
e.printStackTrace();
}
}
public void setWidth(String imageWidth) {
try {
this.imageWidth = Integer.parseInt(imageWidth);
}
catch (NumberFormatException e) {
e.printStackTrace();
}
}
public void setAdminURL(String adminURL) {
this.adminURL = adminURL;
}
public void setImageId(int imageId) {
this.imageId = imageId;
}
public void setImSessionImageName(String imSessionImageName) {
this.imSessionImageName = imSessionImageName;
this.sHiddenInputName = imSessionImageName;
}
public String getImSessionImageName() {
return this.imSessionImageName;
}
public void maintainSessionParameter() {
this.maintainSessionParameter = true;
}
public void setWindowToReload(boolean reload) {
this.setWindowToReloadParent = reload;
}
public void setWindowClassToOpen(Class WindowClass) {
this.windowClass = WindowClass;
this.openInWindow = true;
}
public String getBundleIdentifier() {
return IW_BUNDLE_IDENTIFIER;
}
public void limitImageWidth(boolean limitWidth) {
this.limitWidth = limitWidth;
}
/**
* Sets the instance so it has an empty string instead of the default -1 as
* the ImageID when nothing is selected
*/
public void setNullImageIDDefault() {
this.nullImageIDDefault = true;
}
public String getBuilderName(IWUserContext iwc) {
return iwc.getApplicationContext().getIWMainApplication().getCoreBundle().getComponentName(Image.class,iwc.getCurrentLocale());
}
}