package com.idega.block.image.business;
import java.io.File;
import java.io.FileInputStream;
import java.sql.SQLException;
import java.util.List;
import com.idega.block.image.data.ImageEntity;
import com.idega.block.media.data.MediaProperties;
import com.idega.core.file.data.ICFileCategory;
import com.idega.data.DatastoreInterface;
import com.idega.data.EntityFinder;
import com.idega.data.IDOLegacyEntity;
import com.idega.presentation.IWContext;
/**
* Title: ImageBusiness
* Description:
* Copyright: Copyright (c) 2001
* Company: idega
* @author Eirikur Hrafnsson
* @version 1.2
*
*/
public class ImageBusiness {
public static int IM_BROWSER_WIDTH = 800;
public static int IM_BROWSER_HEIGHT = 600;
public static int IM_MAX_WIDTH = 140;
/*
public static void saveImageToCategories(int imageId, String[] categoryId)throws SQLException {
ImageEntity image = ((com.idega.block.image.data.ImageEntityHome)com.idega.data.IDOLookup.getHomeLegacy(ImageEntity.class)).findByPrimaryKeyLegacy(imageId);
image.setParentId(-1);//only top level images saved to categories
image.update();
for (int i = 0; i < categoryId.length; i++) {
try{
int category = Integer.parseInt(categoryId[i]);
ImageCategory cat = new ImageCategory(category);
cat.addTo(image);
}
catch(NumberFormatException e){
System.err.println("ImageBusiness : categoryId is not a number");
}
}
}
*/
public static void handleEvent(IWContext iwc,ImageHandler handler) throws Exception{
String action = iwc.getParameter("action");
String scaling = iwc.getParameter("scale.x");
String imageId2 = iwc.getParameter("image_id");
int imageId = (handler!=null)? handler.getOriginalImageId() : Integer.parseInt(imageId2);
if ( action != null){
if ( action.equalsIgnoreCase("Grayscale") ) {
handler.convertModifiedImageToGrayscale();
}
else if ( action.equalsIgnoreCase("Emboss") ) {
handler.embossModifiedImage();
}
else if ( action.equalsIgnoreCase("Invert") ) {
handler.invertModifiedImage();
}
else if ( action.equalsIgnoreCase("Sharpen") ) {
handler.sharpenModifiedImage();
}
else if( action.equalsIgnoreCase("Save") ){
//System.out.println("ImageBusiness: Saving");
handler.writeModifiedImageToDatabase(true);
}
else if( action.equalsIgnoreCase("Savenew") ){
//System.out.println("ImageBusiness: Saving new image");
handler.writeModifiedImageToDatabase(false);
}
else if( action.equalsIgnoreCase("Undo") || action.equalsIgnoreCase("Revert") ){
handler.setModifiedImageAsOriginal();
}
else if( action.equalsIgnoreCase("delete") ){
try{
ImageEntity image = ((com.idega.block.image.data.ImageEntityHome)com.idega.data.IDOLookup.getHomeLegacy(ImageEntity.class)).findByPrimaryKeyLegacy( imageId );
image.removeFrom(((com.idega.core.file.data.ICFileCategoryHome)com.idega.data.IDOLookup.getHomeLegacy(ICFileCategory.class)).createLegacy());
image.delete();
iwc.removeSessionAttribute("image_in_session");
iwc.removeSessionAttribute("handler");
/*ImageEntity parent = (ImageEntity) this.getParentNode();
Iterator iter = (ImageEntity[]) image.getChildren();
//brake childs from parent
while (iter.hasNext()) {
ImageEntity item = (ImageEntity) iter.next();
image.addChild();
if( parent != null ){
parent.addChild(item);
} if( (catagories!=null) && (catagories.length>0) ){
for (int k = 0; k < catagories.length; k++) {
catagories[k].addTo(childs[i]);
}
}
}
ICFileCategory[] catagories = (ImageCategory[]) image.findReverseRelated(com.idega.data.GenericEntity.getStaticInstance("com.idega.block.media.data.ImageCategory"));
image.removeFrom(com.idega.data.GenericEntity.getStaticInstance("com.idega.block.media.data.ImageCategory"));
image.delete();
*/
}
catch(Exception e){
e.printStackTrace(System.err);
System.out.println(e.getMessage());
}
}
}
if( scaling!=null ){
if(!scaling.equalsIgnoreCase("0")){//didn't push the button
String height = iwc.getRequest().getParameter("height");
String width = iwc.getRequest().getParameter("width");
String constraint = iwc.getRequest().getParameter("constraint");
if( constraint!=null ) {
handler.keepProportions(true);
if( (height!=null) &&(height!="") && !(height.equalsIgnoreCase("")) ) {
if ( Integer.parseInt(height) != handler.getModifiedHeight() ){
handler.setModifiedHeight(Integer.parseInt(height));
}
else {
handler.setModifiedHeight(-1);
}
}
if( (width!=null) &&(width!="") && !(width.equalsIgnoreCase("")) ) {
if ( Integer.parseInt(width) != handler.getModifiedWidth() ){
handler.setModifiedWidth(Integer.parseInt(width));
}
else {
handler.setModifiedWidth(-1);
}
}
}
else{
if( (height!=null) &&(height!="") && !(height.equalsIgnoreCase("")) ) { handler.setModifiedHeight(Integer.parseInt(height)); }
if( (width!=null) &&(width!="") && !(width.equalsIgnoreCase("")) ) { handler.setModifiedWidth(Integer.parseInt(width)); }
}
handler.resizeImage();
}
}
}
public static void makeDefaultSizes(IWContext iwc){
try{
/**
*@todo : get the image bundle and make these default image sizes
**/
}
catch(Exception ex){}
}
public static List getImageCategories(){
try {
return EntityFinder.findAll(((com.idega.core.file.data.ICFileCategoryHome)com.idega.data.IDOLookup.getHomeLegacy(ICFileCategory.class)).createLegacy());
}
catch (Exception ex) {
return null;
}
}
public static String getDatastoreType(IDOLegacyEntity entity){
return DatastoreInterface.getDatastoreType(entity.getDatasource());
}
public static void storeEditForm(IWContext iwc){
String catagoriTextInputName = "category"; // same as in ImageViewer getEditForm
String deleteTextInputName = "delete"; // same as in ImageViewer getEditForm
String idees = "ids"; // same as in ImageViewer getEditForm
String[] categoryName = iwc.getParameterValues(catagoriTextInputName);
String[] deleteValue = iwc.getParameterValues(deleteTextInputName);
String[] ids = iwc.getParameterValues(idees);
//change
// if(categoryName != null && categoryName.length > 0){
// for (int i = 0; i < categoryName.length; i++) {
// String tempName = categoryName[i];
// category = new ImageCategory(deleteValue[i]);
// }
//
// }
//debug this is experimental code NOT failsafe!
try {
int k = ids.length;
ICFileCategory temp;
for (int i = 0; i < categoryName.length; i++) {
if (categoryName[i] != null && !"".equals(categoryName[i]) ) {
String tempName = categoryName[i];
if( i >= k ){//insert
temp = ((com.idega.core.file.data.ICFileCategoryHome)com.idega.data.IDOLookup.getHomeLegacy(ICFileCategory.class)).createLegacy();
temp.setName(tempName);
temp.insert();
}
else{//updates
temp = ((com.idega.core.file.data.ICFileCategoryHome)com.idega.data.IDOLookup.getHomeLegacy(ICFileCategory.class)).findByPrimaryKeyLegacy(Integer.parseInt(ids[i]));
if( !temp.getName().equalsIgnoreCase(tempName) ){
temp.setName(tempName);
temp.update();
}
}
}
}
}
catch (Exception ex) {
ex.printStackTrace(System.err);
System.err.println("ImageBusiness : error in storeEditForm");
}
//delete
try {
if(deleteValue != null){
for(int i = 0; i < deleteValue.length; i++){
ICFileCategory cat = ((com.idega.core.file.data.ICFileCategoryHome)com.idega.data.IDOLookup.getHomeLegacy(ICFileCategory.class)).findByPrimaryKeyLegacy( Integer.parseInt(deleteValue[i]) );
cat.removeFrom((IDOLegacyEntity)com.idega.data.GenericEntity.getStaticInstance("com.idega.block.media.data.ImageEntity"));
cat.delete();
}
}
}
catch (Exception ex) {
ex.printStackTrace(System.err);
System.err.println("ImageBusiness : error in storeEditForm");
}
//}
}
public static int SaveImage(MediaProperties ip){
int id = -1;
// Connection Conn = null;
try{
FileInputStream input = new FileInputStream(ip.getRealPath());
System.out.println("ImageBusiness FileSize:"+input.available());
ImageEntity image = ((com.idega.block.image.data.ImageEntityHome)com.idega.data.IDOLookup.getHomeLegacy(ImageEntity.class)).createLegacy();
image.setName(ip.getName());
/**@todo make this non image specific*/
image.setMimeType(ip.getMimeType());
System.out.println("ImageBusiness mimetype:"+ip.getMimeType());
image.setFileValue(input);
image.setFileSize((int)ip.getSize());
image.store();
id = ((Integer)image.getPrimaryKey()).intValue();
/* String dataBaseType = "";
Conn = com.idega.data.GenericEntity.getStaticInstance("com.idega.block.media.data.ImageEntity").getConnection();
if (Conn!=null) dataBaseType = com.idega.data.DatastoreInterface.getDataStoreType(Conn);
else dataBaseType="oracle";
if( dataBaseType.equals("oracle") ) {
id = ImageSave.saveImageToOracleDB(-1,-1,input,ip.getContentType(),ip.getName(),"-1","-1", true);
}//other databases
else {
id = ImageSave.saveImageToDB(-1,-1,input,ip.getContentType(),ip.getName(),"-1","-1", true);
}
*/
}
catch(Exception e){
e.printStackTrace(System.err);
ip.setId(-1);
return -1;
}
finally{
// if(Conn != null ) com.idega.data.GenericEntity.getStaticInstance("com.idega.block.media.data.ImageEntity").freeConnection(Conn);
}
return id;
}
public static MediaProperties doUpload(IWContext iwc) throws Exception{
System.err.println("com.idega.block.image.business.ImageBusiness.doUpload(IWContext iwc)");
System.err.println("Warning: MediaProperties is constructed but with parameterMap = null");
return new MediaProperties(iwc.getUploadedFile());
// String sep = FileUtil.getFileSeparator();
// StringBuffer pathToFile = new StringBuffer();
// pathToFile.append(iwc.getApplication().getApplicationRealPath());
// //pathToFile.append(sep);
// pathToFile.append(IWCacheManager.IW_ROOT_CACHE_DIRECTORY);
// pathToFile.append(sep);
//
// FileUtil.createFolder(pathToFile.toString());
//
//
// MediaProperties ip = null;
//
// MultipartParser mp = new MultipartParser(iwc.getRequest(), 10*1024*1024); // 10MB
// Part part;
// File dir = null;
// String value = null;
// while ((part = mp.readNextPart()) != null) {
// String name = part.getName();
// if(part.isParam()){
// ParamPart paramPart = (ParamPart) part;
// value = paramPart.getStringValue();
// //debug
// System.out.println("Image Business"+name+" : "+value+Text.getBreak());
// }
// else if (part.isFile()) {
// // it's a file part
// FilePart filePart = (FilePart) part;
// String fileName = filePart.getFileName();
//
// if (fileName != null) {
// pathToFile.append(fileName);
// String filePath = pathToFile.toString();
// StringBuffer webPath = new StringBuffer();
// webPath.append('/');
// webPath.append(IWCacheManager.IW_ROOT_CACHE_DIRECTORY);
// webPath.append('/');
// webPath.append(fileName);
//
// File file = new File(filePath);
// int size = (int) filePart.writeTo(file);
// //debug
//
// String mimetype = filePart.getContentType();
// if(mimetype!=null){
// StringTokenizer tokenizer = new StringTokenizer(mimetype," ;:");
// if(tokenizer.hasMoreTokens())
// mimetype = tokenizer.nextToken();
// }
// System.out.println("ImageBusiness : File size"+size);
// System.out.println("ImageBusiness : File filePath"+filePath);
// System.out.println("ImageBusiness : File webPath"+webPath.toString());
// System.out.println("ImageBusiness : File getContentType"+mimetype);
// System.out.println("ImageBusiness : File fileName"+fileName);
//
// ip = new MediaProperties(fileName,mimetype,filePath,webPath.toString(),size);
// }
// }
// }
//
// return ip;
}
public static boolean deleteImageFile(String pathToImage){
File file = new File(pathToImage);
return file.delete();
}
public static void setImageDimensions(MediaProperties ip) {
try{
/**@todo optimize for memory
*
*/
ImageHandler handler = new ImageHandler(ip.getId());
handler.updateOriginalInfo();
}
catch(Exception e){
e.printStackTrace(System.err);
System.err.println("ImageBusiness : setImageDimensions failed!");
}
}
public static void handleSaveImage(IWContext iwc){
MediaProperties ip = (MediaProperties) iwc.getSessionAttribute("im_ip");
String submit = iwc.getParameter("submit");
String categoryId = iwc.getParameter("category_id");
if( (ip!=null) && !("cancel".equalsIgnoreCase(submit)) ){
int imageId = SaveImage(ip);
ip.setId(imageId);
setImageDimensions(ip);//adds width height and size in bytes to database
makeDefaultSizes(iwc);
try{
ImageEntity image = ((com.idega.block.image.data.ImageEntityHome)com.idega.data.IDOLookup.getHomeLegacy(ImageEntity.class)).findByPrimaryKeyLegacy(imageId);
ICFileCategory cat = ((com.idega.core.file.data.ICFileCategoryHome)com.idega.data.IDOLookup.getHomeLegacy(ICFileCategory.class)).findByPrimaryKeyLegacy(Integer.parseInt(categoryId));
cat.addTo(image);
}
catch(SQLException e){
e.printStackTrace(System.err);
System.err.println("ImageBusiness : failed to add to image_image_category");
}
iwc.setSessionAttribute("im_image_id",Integer.toString(imageId));
deleteImageFile(ip.getRealPath());
iwc.removeSessionAttribute("im_ip");
iwc.setSessionAttribute("refresh",new String("true"));
}
else {
System.err.println("Image save failed or was cancelled!");
}
}
public static void handleTextSave(IWContext iwc) throws Exception{
String submit = iwc.getParameter("submit");
if( !"cancel".equalsIgnoreCase(submit) ){
boolean update = true;
String imageId = iwc.getParameter("image_id");
String imageText = iwc.getParameter("image_text");
String imageLink = iwc.getParameter("image_link");
ImageEntity image = ((com.idega.block.image.data.ImageEntityHome)com.idega.data.IDOLookup.getHomeLegacy(ImageEntity.class)).findByPrimaryKeyLegacy(Integer.parseInt(imageId));
if( imageText!=null ) {
image.setDescription(imageText);
}
else {
update = false;
}
if( (imageLink!=null) && !"".equals(imageLink) ){
image.setImageLink(imageLink);
image.setImageLinkOwner("both");
}
else {
update = false;
}
if(update){
image.store();
iwc.setSessionAttribute("im_refresh",new String("true"));
}
}
}
}//end of class