You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
storage-manager-core/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/FileWriter.java

99 lines
2.6 KiB
Java

package org.gcube.contentmanagement.blobstorage.service.operation;
//import org.apache.log4j.Logger;
//import org.gcube.common.core.utils.logging.GCUBELog;
import org.gcube.contentmanagement.blobstorage.resource.MyFile;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.io.OutputStream;
/**
* A thread that write the chunk in a output stream specified
*
*@author Roberto Cirillo (ISTI - CNR)
*
*/
public class FileWriter extends Thread{
/**
* Logger for this class
*/
// private static final GCUBELog logger = new GCUBELog(FileWriter.class);
final Logger logger=LoggerFactory.getLogger(FileWriter.class);
private Monitor monitor;
private int id;
// private MyFile myFile;
// private byte[] encode;
// private int offset;
// private static int len=0;
private OutputStream out;
// private String path;
private byte[] full;
public synchronized void run(){
if (logger.isDebugEnabled()) {
logger.debug("run() - start");
}
MyFile request = monitor.getRequest();
synchronized (FileWriter.class) {
if(logger.isDebugEnabled()){
logger.debug("recover request: "+request.getKey()+" length: "+request.getContent().length);
}
try {
decodeByte2File(request.getContent());
out.flush();
} catch (Exception e) {
logger.error("run()", e);
}
}
if (logger.isDebugEnabled()) {
logger.debug("run() - end");
}
}
public FileWriter(Monitor monitor, OutputStream out, byte[] fullEncode){
this.monitor=monitor;
this.out=out;
this.full=fullEncode;
}
public FileWriter(Monitor monitor, OutputStream out){
this.monitor = monitor;
this.out=out;
}
public FileWriter(Monitor monitor, int id){
this.monitor = monitor;
this.id = id;
}
public void decodeByte2File(byte[] encode, int offset, int len){
try {
out.write(encode, offset, len);
if(logger.isDebugEnabled())
logger.debug("write from pos:"+offset+" to pos: "+len);
} catch (IOException e) {
logger.error("decodeByte2File(byte[], int, int)", e);
}
if(logger.isDebugEnabled())
logger.debug("New file created!");
}
public void decodeByte2File(byte[] encode){
if (logger.isDebugEnabled()) {
logger.debug("decodeByte2File(byte[]) - start");
logger.debug("encode.length: "+encode.length);
}
try {
out.write(encode);
} catch (Exception e) {
logger.error("scrittura chunk non riuscita!!");
logger.error("decodeByte2File(byte[])", e);
}
if (logger.isDebugEnabled()) {
logger.debug("decodeByte2File(byte[]) - end");
}
}
}