Files
Brainstorm/Foundation/src/com/foundation/view/JefImage.java
2014-05-30 10:31:51 -07:00

176 lines
5.0 KiB
Java

/*
* Copyright (c) 2005,2009 Declarative Engineering LLC.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Declarative Engineering LLC
* verson 1 which accompanies this distribution, and is available at
* http://declarativeengineering.com/legal/DE_Developer_License_v1.txt
*/
package com.foundation.view;
import java.io.Externalizable;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
import com.common.debug.Debug;
public class JefImage implements Externalizable, Cloneable {
static final long serialVersionUID = -7739741206125442482L;
public static final String[] SWT_SUPPORTED_IMAGE_EXTENSIONS = new String[] {"*.jpg;*.jpeg;*.gif;*.bmp;*.tiff;*.png;*.ico"};
/** The image data that can be used by the view system to initialize the view system specific image structure. */
private byte[] imageData = null;
/** The hash code which is a simple hash of the image data. */
private int hashCode = 0;
/**
* JefImage default constructor.
* <p>Note: The only reason this is public is to allow easy creation by the serialization code.</p>
*/
public JefImage() {
super();
}//JefImage()//
/**
* JefImage constructor.
* @param fileName The path and file name to the image file.
* @throws IOException Thrown if the file could not be found, opened, or read, or did not contain a valid image.
*/
public JefImage(String fileName) {
super();
loadImageData(fileName);
initialize();
}//JefImage()//
/**
* JefImage constructor.
* @param imageData
*/
public JefImage(byte[] imageData) {
super();
this.imageData = imageData;
initialize();
}//JefImage()//
/**
* Gets the raw bytes for the image.
* @return The image data.
*/
public byte[] getImageData() {
return imageData;
}//getImageData()//
/**
* Initializes the image data.
* @param fileName The path and file name to the image file.
*/
private void loadImageData(String fileName) {
File file = new File(fileName);
boolean success = false;
if(file.exists() && file.canRead() && file.isFile()) {
FileInputStream in = null;
try {
int count = 0;
in = new FileInputStream(file);
imageData = new byte[in.available()];
while(count != imageData.length) {
count += in.read((byte[]) imageData);
}//while//
success = true;
}//try//
catch(FileNotFoundException e) {
Debug.log(e, "Unable to load the file: " + file);
}//catch//
catch(IOException e) {
Debug.log(e, "Unable to load the file: " + file);
}//catch//
finally {
try {
in.close();
}//try//
catch(Throwable e) {
Debug.handle(e);
}//catch//
}//finally//
}//if//
if(!success) {
Debug.log(new IOException("Failed to load the image: " + fileName));
}//if//
}//loadImageData()//
/**
* Initializes the image data.
* @param fileName The path and file name to the image file.
*/
private void initialize() {
//Initialize the hash code.//
if(imageData != null) {
for(int index = 0; index < imageData.length; index++) {
switch(index % 4) {
case 0:
hashCode ^= ((int) imageData[index]);
break;
case 1:
hashCode ^= (((int) imageData[index]) << 8);
break;
case 2:
hashCode ^= (((int) imageData[index]) << 16);
break;
case 3:
hashCode ^= (((int) imageData[index]) << 24);
break;
default:
break;
}//switch//
}//for//
}//if//
}//initialize()//
/* (non-Javadoc)
* @see java.io.Externalizable#readExternal(java.io.ObjectInput)
*/
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
/*byte version = */in.readByte();
int imageLength = in.readInt();
int readCount = 0;
imageData = new byte[imageLength];
while(readCount != imageData.length) {
readCount += in.read(imageData, readCount, imageData.length - readCount);
}//while//
}//readExternal()//
/* (non-Javadoc)
* @see java.io.Externalizable#writeExternal(java.io.ObjectOutput)
*/
public void writeExternal(ObjectOutput out) throws IOException {
out.writeByte(0);
out.writeInt(imageData.length);
out.write(imageData);
}//writeExternal()//
/* (non-Javadoc)
* @see java.lang.Object#equals(java.lang.Object)
*/
public boolean equals(Object object) {
boolean result = object instanceof JefImage && object.hashCode() == hashCode() && ((imageData == null && ((JefImage) object).getImageData() == null) || (((JefImage) object).getImageData() != null && imageData != null && ((JefImage) object).getImageData().length == imageData.length));
//Perform a full comparison on the image data if all else checks out.//
if(result) {
byte[] objectImageData = ((JefImage) object).getImageData();
for(int index = imageData.length - 1; (result) && (index >= 0); index--) {
result = objectImageData[index] == imageData[index];
}//for//
}//if//
return result;
}//equals()//
/* (non-Javadoc)
* @see java.lang.Object#hashCode()
*/
public int hashCode() {
return hashCode;
}//hashCode()//
}//JefImage//