@ -3,26 +3,20 @@ package org.gcube.portlets.user.reportgenerator.server.servlet;
import static org.gcube.resources.discovery.icclient.ICFactory.clientFor ;
import static org.gcube.resources.discovery.icclient.ICFactory.queryFor ;
import java.io.BufferedInputStream ;
import java.io.ByteArrayOutputStream ;
import java.io.File ;
import java.io.FileInputStream ;
import java.io.FileNotFoundException ;
import java.io.FileOutputStream ;
import java.io.IOException ;
import java.io.InputStream ;
import java.io.ObjectInputStream ;
import java.io.OutputStream ;
import java.net.MalformedURLException ;
import java.util.ArrayList ;
import java.util.Calendar ;
import java.util.Date ;
import java.util.List ;
import java.util.Vector ;
import javax.servlet.http.HttpServletRequest ;
import javax.servlet.http.HttpSession ;
import javax.xml.bind.DatatypeConverter ;
import org.apache.commons.io.IOUtils ;
import org.apache.tika.config.TikaConfig ;
@ -43,23 +37,7 @@ import org.gcube.application.rsg.service.dto.response.ServiceResponseMessage;
import org.gcube.application.rsg.support.builder.exceptions.ReportBuilderException ;
import org.gcube.application.rsg.support.builder.impl.ReportManagerReportBuilder ;
import org.gcube.application.rsg.support.model.components.impl.CompiledReport ;
import org.gcube.common.encryption.StringEncrypter ;
import org.gcube.common.homelibary.model.items.type.FolderItemType ;
import org.gcube.common.homelibary.model.items.type.WorkspaceItemType ;
import org.gcube.common.homelibrary.home.HomeLibrary ;
import org.gcube.common.homelibrary.home.exceptions.HomeNotFoundException ;
import org.gcube.common.homelibrary.home.exceptions.InternalErrorException ;
import org.gcube.common.homelibrary.home.workspace.Workspace ;
import org.gcube.common.homelibrary.home.workspace.WorkspaceFolder ;
import org.gcube.common.homelibrary.home.workspace.WorkspaceItem ;
import org.gcube.common.homelibrary.home.workspace.exceptions.ItemNotFoundException ;
import org.gcube.common.homelibrary.home.workspace.exceptions.WorkspaceFolderNotFoundException ;
import org.gcube.common.homelibrary.home.workspace.folder.FolderItem ;
import org.gcube.common.homelibrary.home.workspace.folder.items.ExternalImage ;
import org.gcube.common.homelibrary.home.workspace.folder.items.GCubeItem ;
import org.gcube.common.homelibrary.home.workspace.folder.items.Report ;
import org.gcube.common.homelibrary.home.workspace.folder.items.ReportTemplate ;
import org.gcube.common.homelibrary.home.workspace.folder.items.ts.TimeSeries ;
import org.gcube.common.encryption.encrypter.StringEncrypter ;
import org.gcube.common.portal.PortalContext ;
import org.gcube.common.resources.gcore.ServiceEndpoint ;
import org.gcube.common.resources.gcore.ServiceEndpoint.AccessPoint ;
@ -67,12 +45,8 @@ import org.gcube.common.resources.gcore.ServiceEndpoint.Property;
import org.gcube.common.scope.api.ScopeProvider ;
import org.gcube.portal.custom.scopemanager.scopehelper.ScopeHelper ;
import org.gcube.portlets.d4sreporting.common.server.ServiceUtil ;
import org.gcube.portlets.d4sreporting.common.shared.BasicComponent ;
import org.gcube.portlets.d4sreporting.common.shared.BasicSection ;
import org.gcube.portlets.d4sreporting.common.shared.ComponentType ;
import org.gcube.portlets.d4sreporting.common.shared.Model ;
import org.gcube.portlets.d4sreporting.common.shared.RepTimeSeries ;
import org.gcube.portlets.d4sreporting.common.shared.RepeatableSequence ;
import org.gcube.portlets.d4sreporting.common.shared.Table ;
import org.gcube.portlets.d4sreporting.common.shared.TableCell ;
import org.gcube.portlets.user.reportgenerator.client.ReportConstants ;
@ -174,7 +148,6 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe
}
public String getDevelopmentUser ( ) {
String user = TEST_USER ;
// user = "andrea.rossi";
return user ;
}
/ * *
@ -258,147 +231,7 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe
*
* /
public Model readModel ( String templateName , String templateObjectID , boolean isTemplate , boolean isImporting ) {
ServiceUtil myUtil = new ServiceUtil ( getASLSession ( ) ) ;
_log . debug ( "Reading " + templateName ) ;
Workspace root = null ;
WorkspaceItem item = null ;
try {
root = getWorkspaceArea ( ) ;
item = root . getItem ( templateObjectID ) ;
if ( ! isImporting )
storeReportItemIDInSession ( templateObjectID ) ;
_log . debug ( "** -> getItem, id: " + templateObjectID + " Name: " + item . getName ( ) ) ;
} catch ( Exception e ) {
e . printStackTrace ( ) ;
}
String zipToExtract = "" ;
if ( item . getType ( ) = = WorkspaceItemType . FOLDER_ITEM ) {
_log . debug ( "Item is a FolderItem - OK... next step check if is a templet or a report" ) ;
FolderItem bi = ( FolderItem ) item ;
boolean fromBasket = false ;
if ( isTemplate ) {
if ( bi . getFolderItemType ( ) = = FolderItemType . REPORT_TEMPLATE ) {
ReportTemplate zippedTemplate = ( ReportTemplate ) bi ;
String zipFilename = "" ;
if ( ! isTemplate ) { //then is a report
zipFilename = templateName + "-report.zip" ; //gCube report
_log . debug ( "********************** Reading template -----------------" ) ;
}
else
zipFilename = templateName + ".zip" ; //gCube template
String zipPath = myUtil . getTemplatePath ( templateName , getVreName ( ) , getUsername ( ) ) ;
fromBasket = getTemplateFromBasket ( zippedTemplate , zipPath , zipFilename ) ;
zipToExtract = zipPath + zipFilename ;
}
}
if ( bi . getFolderItemType ( ) = = FolderItemType . REPORT ) {
_log . debug ( "Item is a REPORT" ) ;
Report zippedTemplate = ( Report ) bi ;
String zipFilename = "" ;
if ( ! isTemplate ) { //then is a report
zipFilename = templateName + "-report.zip" ; //gCube report
_log . debug ( " Reading report -----------------" ) ;
}
else
zipFilename = templateName + ".zip" ; //d4science template
File toDelete = new File ( zipFilename ) ;
toDelete . delete ( ) ;
String zipPath = myUtil . getTemplatePath ( templateName , getVreName ( ) , getUsername ( ) ) ;
fromBasket = getReportFromBasket ( zippedTemplate , zipPath , zipFilename ) ;
zipToExtract = zipPath + zipFilename ;
}
_log . info ( "\n\n** zipToExtract: " + zipToExtract ) ;
if ( bi . getFolderItemType ( ) = = FolderItemType . REPORT | | bi . getFolderItemType ( ) = = FolderItemType . REPORT_TEMPLATE ) {
if ( fromBasket ) {
File toExtract = new File ( zipToExtract ) ;
File outputDir = new File ( myUtil . getTemplatePath ( templateName , getVreName ( ) , getUsername ( ) ) ) ;
ZipUtil . unzipArchive ( toExtract , outputDir ) ;
String templatePath = myUtil . getTemplatePath ( templateName , getVreName ( ) , getUsername ( ) ) ;
String modelFilename = "" ;
try {
modelFilename = seekModel ( templatePath , templateName ) ;
} catch ( FileNotFoundException e ) { e . printStackTrace ( ) ; }
String fileToRead = templatePath + modelFilename + ".d4st" ;
_log . debug ( "Loading fileToRead from Disk -> " + fileToRead ) ;
Model toReturn = null ;
Model toConvert = null ;
FileInputStream fis = null ;
ObjectInputStream in = null ;
try {
fis = new FileInputStream ( fileToRead ) ;
in = new ObjectInputStream ( fis ) ;
toConvert = ( Model ) in . readObject ( ) ;
in . close ( ) ;
} catch ( IOException ex ) {
ex . printStackTrace ( ) ;
} catch ( ClassNotFoundException ex ) {
ex . printStackTrace ( ) ;
}
_log . debug ( "Converting fileToRead to Serializable object" ) ;
toReturn = ( toConvert ) ;
// changes the template name model
toReturn . setTemplateName ( templateName ) ;
File toDelete = new File ( fileToRead ) ; //to delete the file extracted from the workspace
File toDelete1 = new File ( myUtil . getTemplatePath ( templateName , getVreName ( ) , getUsername ( ) ) ) ;
boolean deleted1 = toDelete1 . delete ( ) ;
File toDelete2 = new File ( zipToExtract ) ;
boolean deleted2 = toDelete2 . delete ( ) ;
boolean deleted = toDelete . delete ( ) ;
_log . debug ( "deleting extracted file: " + fileToRead + " result: " + deleted ) ;
_log . debug ( "dirToDelete: " + toDelete1 + " result: " + deleted1 ) ;
_log . debug ( "dirToDelete: " + toDelete2 + " result: " + deleted2 ) ;
//**** IMPORTANT ****
if ( ! isImporting ) {
storeTemplateInSession ( toReturn ) ;
_log . debug ( "storeTemplateInSession DONE" ) ;
}
if ( ! isTemplate ) {
try {
ModelReader reader = new ModelReader ( toReturn ) ;
System . out . println ( reader ) ;
} catch ( Exception e ) {
_log . warn ( "ModelReader fails to read this report, continue..." ) ;
}
}
return toReturn ;
}
}
_log . error ( "FAILED TO READ RETURING EMPTY Serializable Template" ) ;
return new Model ( ) ;
}
_log . error ( "FAILED TO READ FROM BASKET RETURING EMPTY Serializable Template" ) ;
return new Model ( ) ;
}
@ -407,51 +240,9 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe
* /
@Override
public ReportImage getUploadedImageUrlById ( String fileName , String absolutePathOnServer ) {
if ( absolutePathOnServer = = null )
return null ;
try {
_log . trace ( "trying read: " + absolutePathOnServer ) ;
WorkspaceFolder imagesFolder = getImagesFolder ( ) ;
// Read from an input stream
InputStream imageData = new BufferedInputStream ( new FileInputStream ( absolutePathOnServer ) ) ;
String itemName = fileName ;
int i = 1 ;
while ( imagesFolder . exists ( itemName ) ) {
String [ ] splitted = fileName . split ( "\\." ) ;
itemName = splitted [ 0 ] + "_" + i + "." + splitted [ splitted . length - 1 ] ;
i + + ;
}
ExternalImage image = imagesFolder . createExternalImageItem ( itemName , "automatically uploaded by Reports Manager" , getMimeType ( imageData , fileName ) , imageData ) ;
_log . trace ( "Created external image with name " + image . getName ( ) ) ;
//delete the temp file
File toDelete = new File ( absolutePathOnServer ) ;
toDelete . delete ( ) ;
return new ReportImage ( image . getId ( ) , buildImageServiceUrl ( image . getId ( ) ) , image . getWidth ( ) , image . getHeight ( ) ) ;
} catch ( Exception e ) {
_log . error ( "Error in server get image by id" , e ) ;
e . printStackTrace ( ) ;
}
return null ;
}
/ * *
* @return the images folder of the workspace , create it if not exist .
* /
private WorkspaceFolder getImagesFolder ( ) {
Workspace ws = null ;
WorkspaceFolder reportFolder = null ;
try {
ws = getWorkspaceArea ( ) ;
if ( ! ws . getRoot ( ) . exists ( REPORT_IMAGES_FOLDER ) ) {
reportFolder = ws . getRoot ( ) . createFolder ( REPORT_IMAGES_FOLDER , "This folder hosts the images uploaded by the Reports Manager" ) ;
} else {
reportFolder = ( WorkspaceFolder ) ws . getRoot ( ) . find ( REPORT_IMAGES_FOLDER ) ;
}
} catch ( Exception e ) {
e . printStackTrace ( ) ;
}
return reportFolder ;
}
/ * *
*
* @param is
@ -475,25 +266,6 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe
* /
@Override
public ReportImage getImageUrlById ( String identifier ) {
if ( identifier = = null )
return null ;
try {
Workspace workspace = getWorkspaceArea ( ) ;
_log . trace ( "get image URL by id: " + identifier ) ;
WorkspaceItem item = workspace . getItem ( identifier ) ; //get item from workspace
//ACCOUNTING READ
item . markAsRead ( true ) ;
_log . trace ( "item name " + item . getName ( ) ) ;
ExternalImage image = ( ExternalImage ) item ; //Cast External Document
return new ReportImage ( image . getId ( ) , buildImageServiceUrl ( image . getId ( ) ) , image . getWidth ( ) , image . getHeight ( ) ) ;
} catch ( Exception e ) {
_log . error ( "Error in server get image by id" , e ) ;
e . printStackTrace ( ) ;
}
return null ;
}
@ -511,118 +283,11 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe
}
/ * *
* handles the case that the user has changed the template name in the basket
* @param templatePath
* @param templateName
* @return
* @throws FileNotFoundException
* /
private String seekModel ( String templatePath , String templateName ) throws FileNotFoundException {
_log . debug ( "seekModel: tPath=" + templatePath ) ;
String fileToSeek = templatePath + templateName + ".d4st" ;
File toSeek = new File ( fileToSeek ) ;
if ( toSeek . exists ( ) ) {
_log . debug ( "seekModel: modelName is the SAME returning" ) ;
return templateName ;
}
else {
_log . debug ( "seekModel: modelName DIFFERENT upgrading" ) ;
File dirToLookIn = new File ( templatePath ) ;
File [ ] innerFiles = dirToLookIn . listFiles ( ) ;
for ( int i = 0 ; i < innerFiles . length ; i + + ) {
_log . debug ( "scanning files in extracted folder: " + innerFiles [ i ] . getName ( ) ) ;
if ( innerFiles [ i ] . getName ( ) . endsWith ( ".d4st" ) ) {
String toReturn = innerFiles [ i ] . getName ( ) ;
toReturn = toReturn . substring ( 0 , toReturn . length ( ) - 5 ) ;
_log . debug ( "seekModel: returning.. =" + toReturn ) ;
return toReturn ;
}
}
}
throw new FileNotFoundException ( ) ;
}
/ * *
* get the template instance from the Basket
* @param repTmp
* @return
* /
private boolean getTemplateFromBasket ( ReportTemplate repTmp , String pathToFile , String filename ) {
try {
File dir = new File ( pathToFile ) ;
_log . debug ( "DIR: " + pathToFile ) ;
if ( ! dir . exists ( ) )
dir . mkdirs ( ) ;
File f = new File ( pathToFile + filename ) ;
InputStream inputStream = null ;
try {
inputStream = repTmp . getData ( ) ;
} catch ( InternalErrorException e ) {
e . printStackTrace ( ) ;
return false ;
}
OutputStream out = new FileOutputStream ( f ) ;
byte buf [ ] = new byte [ 1024 ] ;
int len ;
while ( ( len = inputStream . read ( buf ) ) > 0 )
out . write ( buf , 0 , len ) ;
out . close ( ) ;
inputStream . close ( ) ;
_log . info ( "Successfully got ReportTemplate from Basket: " + pathToFile ) ;
return true ;
}
catch ( IOException e ) {
e . printStackTrace ( ) ;
return false ;
}
}
/ * *
* get the report instance from the Basket
* @param repTmp .
* @param pathToFile the directory where to save the file
* @param filename the filename to give to the newly created file
* @return
* /
private boolean getReportFromBasket ( Report repTmp , String pathToFile , String filename ) {
try {
File dir = new File ( pathToFile ) ;
_log . debug ( "DIR: " + pathToFile ) ;
if ( ! dir . exists ( ) )
dir . mkdirs ( ) ;
File f = new File ( pathToFile + filename ) ;
InputStream inputStream = null ;
try {
inputStream = repTmp . getData ( ) ;
} catch ( InternalErrorException e ) {
e . printStackTrace ( ) ;
return false ;
}
OutputStream out = new FileOutputStream ( f ) ;
byte buf [ ] = new byte [ 1024 ] ;
int len ;
while ( ( len = inputStream . read ( buf ) ) > 0 )
out . write ( buf , 0 , len ) ;
out . close ( ) ;
inputStream . close ( ) ;
_log . info ( "Successfully got ReportTemplate from HL: " + pathToFile ) ;
return true ;
}
catch ( IOException e ) {
e . printStackTrace ( ) ;
return false ;
}
}
/ * *
*
@ -688,82 +353,14 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe
if ( rsgAp ! = null )
_log . trace ( "setting RSG WS address to " + rsgAp . getRestUrl ( ) ) ;
}
/ * *
*
* @return
* @throws WorkspaceFolderNotFoundException
* @throws InternalErrorException
* @throws HomeNotFoundException
* /
protected Workspace getWorkspaceArea ( ) throws WorkspaceFolderNotFoundException , InternalErrorException , HomeNotFoundException {
return HomeLibrary . getUserWorkspace ( getASLSession ( ) . getUsername ( ) ) ;
}
/ * *
* reads from the file system and returns the user workspace as TreeNode object
*
* @return the Default folder if if there is no basket in session , else the folder in session id
* /
public String getRootFolder ( ) {
try {
Workspace workspaceArea = getWorkspaceArea ( ) ;
WorkspaceFolder basket = workspaceArea . getRoot ( ) ;
return basket . getId ( ) ;
} catch ( Exception e ) { e . printStackTrace ( ) ;
}
return "Coud not open default folder" ;
}
/ * *
*
* @return the model previously stored in the session
* /
public Model readTemplateFromSession ( ) {
ASLSession d4Session = getASLSession ( ) ;
String templateid = ( String ) d4Session . getAttribute ( "idreport" ) ;
String templateName = "" ;
_log . debug ( "TEMPLATE ID==NULL " + ( templateid = = null ) ) ;
if ( templateid ! = null ) {
if ( ! templateid . equals ( "" ) ) {
_log . debug ( "READING SESSION VARIABLE FOR REPORT ID... " + templateid ) ;
//reset the value
d4Session . setAttribute ( "idreport" , "" ) ;
Workspace root = null ;
WorkspaceItem item = null ;
try {
root = getWorkspaceArea ( ) ;
item = root . getItem ( templateid ) ;
_log . info ( "READ REPORT FROM WP... " + item . getName ( ) ) ;
templateName = item . getName ( ) ;
} catch ( WorkspaceFolderNotFoundException e ) { e . printStackTrace ( ) ;
} catch ( InternalErrorException e ) { e . printStackTrace ( ) ;
} catch ( HomeNotFoundException e ) { e . printStackTrace ( ) ;
} catch ( ItemNotFoundException e ) { e . printStackTrace ( ) ; }
Model toReturn = readModel ( templateName , templateid , false , false ) ;
return toReturn ;
}
if ( d4Session . getAttribute ( CURRENT_REPORT_INSTANCE ) ! = null )
return ( Model ) d4Session . getAttribute ( CURRENT_REPORT_INSTANCE ) ;
return null ;
}
else {
if ( d4Session . getAttribute ( CURRENT_REPORT_INSTANCE ) ! = null ) {
_log . debug ( "getAttribute(\"CURRENT_REPORT_INSTANCE\")..." ) ;
Model model = ( Model ) d4Session . getAttribute ( CURRENT_REPORT_INSTANCE ) ;
_log . debug ( model . getTemplateName ( ) ) ;
return model ;
}
}
ServiceUtil myUtil = new ServiceUtil ( getASLSession ( ) ) ;
String dirToClean = myUtil . getTemplateFolder ( getVreName ( ) , getUsername ( ) ) ;
_log . info ( "No data on session for Reports, cleaning temp dir: " + dirToClean ) ;
delTemplateDir ( new File ( dirToClean ) ) ;
return null ;
}
@ -796,86 +393,6 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe
}
private void convertDynamicImagesFromHL ( Model model ) {
_log . debug ( "model == NULL " + ( model = = null ) ) ;
Vector < BasicSection > sections = model . getSections ( ) ;
for ( BasicSection section : sections ) {
for ( BasicComponent component : section . getComponents ( ) ) {
if ( component . getType ( ) = = ComponentType . DYNA_IMAGE ) {
_log . debug ( "Found Simple Image: " + component . getPossibleContent ( ) ) ;
if ( component . getId ( ) ! = null ) { // you need to convert only new images that stay in the HL Workspace, this is the check
String imageID = component . getId ( ) ;
component . setPossibleContent ( getdDataImagebase64 ( imageID ) ) ;
_log . trace ( "Image converted base 64 OK: " + component . getPossibleContent ( ) ) ;
}
}
if ( component . getType ( ) = = ComponentType . REPEAT_SEQUENCE | | component . getType ( ) = = ComponentType . BODY_TABLE_IMAGE ) { //there could be images inside
RepeatableSequence res = ( RepeatableSequence ) component . getPossibleContent ( ) ;
for ( BasicComponent co : res . getGroupedComponents ( ) ) {
if ( component . getType ( ) = = ComponentType . DYNA_IMAGE ) {
_log . debug ( "Found Image IN SEQUENCE, type is: " + component . getType ( ) ) ;
if ( co . getId ( ) ! = null ) { // you need to convert only new images that stay in the HL Workspace, this is the check
String imageID = co . getId ( ) ;
co . setPossibleContent ( getdDataImagebase64 ( imageID ) ) ;
_log . trace ( "Image converted base 64 OK, in SEQUENCE: " + co . getPossibleContent ( ) ) ;
}
}
}
}
}
}
}
/ * *
* convert the image into a String encoded base 64
* @param imageIDinWorkspace the id of the image in workspace
* @return the string representing the image converted to be put in the img src attribute e . g . data : image / ong ; base64 , a . . . z
* /
private String getdDataImagebase64 ( String imageIDinWorkspace ) {
Workspace root = null ;
try {
root = getWorkspaceArea ( ) ;
WorkspaceItem item = null ;
item = root . getItem ( imageIDinWorkspace ) ;
if ( item . getType ( ) = = WorkspaceItemType . FOLDER_ITEM ) {
_log . debug ( "Item is a Folder Item" ) ;
FolderItem imageItem = ( FolderItem ) item ;
InputStream data = null ;
if ( imageItem . getFolderItemType ( ) = = FolderItemType . EXTERNAL_IMAGE ) {
_log . debug ( "EXTERNAL_IMAGE -|- " + item . getType ( ) + " itemId=" + item . getId ( ) ) ;
ExternalImage image = ( ExternalImage ) item ;
_log . debug ( "EXTERNAL_IMAGE Name= " + item . getName ( ) + " Asking InputStream .." ) ;
data = image . getData ( ) ;
_log . debug ( "Got inputStream" ) ;
}
else if ( imageItem . getFolderItemType ( ) = = FolderItemType . IMAGE_DOCUMENT ) {
GCubeItem image = ( GCubeItem ) item ;
if ( image . getMimeType ( ) . equals ( "image/tiff" ) )
// image.getProperties().getProperties().get(NodeProperty.THUMBNAIL_DATA); //this is a problem
// else
data = image . getData ( ) ;
}
if ( data ! = null ) {
_log . debug ( "Encoding image in base64" ) ;
byte [ ] imageBytes = IOUtils . toByteArray ( data ) ;
String extension = ImagesUtil . getImageExtension ( imageItem ) ;
String srcAttrValue = "data:image/" + extension + ";base64," + DatatypeConverter . printBase64Binary ( imageBytes ) ;
_log . debug ( "Encoded image=" + srcAttrValue ) ;
return srcAttrValue ;
}
return null ;
}
else
return null ;
} catch ( Exception e ) {
e . printStackTrace ( ) ;
return null ;
}
}
/ * *
* @param reportItemid the report itemd id in basket to store in the session
* /
@ -899,30 +416,7 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe
* used to save the report in the same folder
* /
public void saveReport ( Model toSave ) {
Workspace root = null ;
try {
root = getWorkspaceArea ( ) ;
} catch ( Exception e ) { e . printStackTrace ( ) ; }
WorkspaceItem item = null ;
String folderid = "" ;
String itemName = "" ;
try {
if ( getReportItemIDFromSession ( ) . equals ( "" ) ) {
folderid = getRootFolder ( ) ;
}
else {
item = root . getItem ( getReportItemIDFromSession ( ) ) ;
folderid = item . getParent ( ) . getId ( ) ;
itemName = item . getName ( ) ;
}
} catch ( ItemNotFoundException e ) {
_log . error ( "ITEM NOT FOUND -> " + getReportItemIDFromSession ( ) ) ;
} catch ( InternalErrorException e ) {
e . printStackTrace ( ) ;
}
saveReport ( toSave , folderid , itemName ) ;
_log . warn ( "saveReport Not supported anymore" ) ;
}
@ -932,134 +426,10 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe
*
* /
public void saveReport ( Model toSave , String folderid , String newname ) {
Model model = toSave ;
storeTemplateInSession ( toSave ) ;
_log . info ( "Serializing Model in folder: " + folderid ) ;
_log . info ( "Trying to convert dynamic images ... " ) ;
convertDynamicImagesFromHL ( model ) ;
ServiceUtil myUtil = new ServiceUtil ( getASLSession ( ) ) ;
boolean result = myUtil . writeModel ( model , "CURRENT_OPEN" , getVreName ( ) , getUsername ( ) ) ;
try {
ModelReader reader = new ModelReader ( model ) ;
System . out . println ( reader ) ;
} catch ( Exception e ) {
_log . warn ( "ModelReader fails to read this report, continue..." ) ;
}
if ( ! result ) {
_log . debug ( "Could not save report, serializing failed" ) ;
}
else {
String templatePath = myUtil . getTemplateFolder ( getVreName ( ) , getUsername ( ) ) + "CURRENT_OPEN" ;
try {
Thread . sleep ( 1000 ) ;
} catch ( InterruptedException e ) {
e . printStackTrace ( ) ;
}
_log . debug ( "Trying to zip folder: " + templatePath ) ;
String folderToZip = templatePath ;
String outZip = templatePath + "-report.zip" ;
try {
ZipUtil . zipDir ( outZip , folderToZip ) ;
} catch ( IOException e ) {
_log . error ( "Could not zip template, serializing failed" ) ;
e . printStackTrace ( ) ;
}
_log . info ( "Folder zipped, result: " + outZip ) ;
InputStream isZip = null ;
WorkspaceFolder toSaveIn = null ;
try {
isZip = new BufferedInputStream ( new FileInputStream ( outZip ) ) ;
toSaveIn = getRootFolder ( folderid ) ;
String templateName = newname ;
boolean isUpdate = false ;
if ( templateName . endsWith ( "d4sR" ) ) {
if ( toSaveIn . exists ( templateName ) ) {
_log . warn ( "Item exists already, updating" ) ;
//toSaveIn.removeChild(toSaveIn.find(templateName));
isUpdate = true ;
}
}
if ( toSaveIn . exists ( templateName + ".d4sR" ) ) {
_log . warn ( "Item exists already, updating" ) ;
//toSaveIn.removeChild(toSaveIn.find(templateName + ".d4sR"));
isUpdate = true ;
}
//remove the template extension
String templateToInsert = templateName . replace ( ".d4sT" , "" ) ;
if ( ! templateToInsert . endsWith ( ".d4sR" ) )
templateToInsert + = ".d4sR" ;
Report rep = null ;
if ( isUpdate ) {
rep = ( Report ) toSaveIn . find ( templateName ) ;
getWorkspaceArea ( ) . updateItem ( rep . getId ( ) , isZip ) ;
} else { //is new
Calendar dateCreated = Calendar . getInstance ( ) ;
dateCreated . setTime ( model . getDateCreated ( ) ) ;
Calendar lastEdit = Calendar . getInstance ( ) ;
lastEdit . setTime ( model . getLastEdit ( ) ) ;
rep = toSaveIn . createReportItem ( templateToInsert , templateToInsert , dateCreated , lastEdit ,
model . getAuthor ( ) , model . getLastEditBy ( ) , templateToInsert , model . getSections ( ) . size ( ) , "no-status" , isZip ) ;
}
storeReportItemIDInSession ( rep . getId ( ) ) ;
} catch ( Exception e ) {
e . printStackTrace ( ) ;
}
}
}
/ * *
* Return an instance of the root folder
* @param folderId
* @return
* @throws ItemNotFoundException
* /
private WorkspaceFolder getRootFolder ( String folderId ) throws ItemNotFoundException {
Workspace root = null ;
try {
root = getWorkspaceArea ( ) ;
} catch ( WorkspaceFolderNotFoundException e ) { e . printStackTrace ( ) ;
} catch ( InternalErrorException e ) { e . printStackTrace ( ) ;
} catch ( HomeNotFoundException e ) { e . printStackTrace ( ) ;
}
WorkspaceItem item = null ;
try {
item = root . getItem ( folderId ) ;
} catch ( ItemNotFoundException e ) {
_log . info ( "Folder : " + folderId + " NOT FOUND RETURNING DEFAULT ONE" ) ;
return ( WorkspaceFolder ) root . getItem ( getRootFolder ( ) ) ;
}
if ( item . getType ( ) = = WorkspaceItemType . FOLDER | | item . getType ( ) = = WorkspaceItemType . SHARED_FOLDER ) {
return ( WorkspaceFolder ) item ;
}
_log . error ( "The item id does not belong to a valid folder id:" + folderId ) ;
return null ;
_log . warn ( "saveReport Not supported anymore" ) ;
}
/ *
/ * *
* return a sample of the given TS to the client
@ -1067,61 +437,10 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe
* @return .
* /
public Table getSampleTimeSeries ( RepTimeSeries sTS ) {
File csvTS = getTimeSeriesFromWorkspace ( sTS ) ;
Table toReturn = null ;
try {
toReturn = parseCSV ( csvTS , sTS ) ;
} catch ( ParseException e ) { e . printStackTrace ( ) ;
} catch ( IOException e ) { e . printStackTrace ( ) ;
} catch ( ProcessingException e ) { e . printStackTrace ( ) ;
}
return toReturn ;
return null ;
}
/ * *
* retrieve the given TS csv representation and writes it into / tmp returning the File
* @param sTS serializable TS
* @return a File csv
* /
private File getTimeSeriesFromWorkspace ( RepTimeSeries sTS ) {
try {
String timeSeriesBasketID = sTS . getTsMetadata ( ) . getId ( ) ;
Workspace root = null ;
try {
root = getWorkspaceArea ( ) ;
} catch ( WorkspaceFolderNotFoundException e ) { e . printStackTrace ( ) ;
} catch ( InternalErrorException e ) { e . printStackTrace ( ) ;
} catch ( HomeNotFoundException e ) { e . printStackTrace ( ) ;
}
WorkspaceItem item = null ;
try {
item = root . getItem ( timeSeriesBasketID ) ;
} catch ( ItemNotFoundException e ) {
e . printStackTrace ( ) ;
}
_log . debug ( "Got Item TS From HL, Item Type: " + item . getType ( ) ) ;
if ( item . getType ( ) ! = WorkspaceItemType . FOLDER_ITEM ) {
_log . debug ( "The item id does not belong to a timeseries, id:" + timeSeriesBasketID ) ;
return null ;
}
FolderItem bItem = ( FolderItem ) item ;
if ( bItem . getFolderItemType ( ) ! = FolderItemType . TIME_SERIES ) {
_log . debug ( "The basket item does not belong to a timeseries, id:" + timeSeriesBasketID ) ;
return null ;
}
TimeSeries ts = ( TimeSeries ) bItem ;
return getTSFromBasket ( ts ) ;
}
catch ( NullPointerException e ) {
_log . error ( "No TS was dragged in the Area returning NULL" ) ;
return null ;
}
}
/ * *
*
@ -1211,43 +530,7 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe
}
/ * *
* get the TS from the Basket
* @param ts
* @return a csv file
* /
private File getTSFromBasket ( TimeSeries ts ) {
try {
File temp = File . createTempFile ( ts . getName ( ) , ".csv" ) ;
InputStream inputStream = null ;
try {
inputStream = ts . getData ( ) ;
} catch ( InternalErrorException e ) {
e . printStackTrace ( ) ;
return null ;
}
OutputStream out = new FileOutputStream ( temp ) ;
byte buf [ ] = new byte [ 1024 ] ;
int len ;
while ( ( len = inputStream . read ( buf ) ) > 0 )
out . write ( buf , 0 , len ) ;
out . close ( ) ;
inputStream . close ( ) ;
_log . debug ( "Successfully got TimeSeries from Basket: \n" + temp . getAbsolutePath ( ) ) ;
return temp ;
}
catch ( IOException e ) {
e . printStackTrace ( ) ;
return null ;
} catch ( InternalErrorException e ) {
// TODO Auto-generated catch block
e . printStackTrace ( ) ;
}
return null ;
}
/ * *