package org.hippoecm.repository.gallery.impl; import org.hippoecm.frontend.plugins.gallery.model.GalleryException; import org.hippoecm.frontend.plugins.gallery.processor.ScalingGalleryProcessor; import org.hippoecm.repository.api.MappingException; import org.hippoecm.repository.api.WorkflowContext; import org.hippoecm.repository.api.WorkflowException; import org.hippoecm.repository.ext.InternalWorkflow; import org.hippoecm.repository.ext.WorkflowImpl; import org.hippoecm.repository.gallery.GalleryProcessorWorkflow; import org.hippoecm.repository.gallery.WorkflowParameters; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.jcr.Node; import javax.jcr.RepositoryException; import javax.jcr.Session; import java.io.*; import java.rmi.RemoteException; import java.util.Calendar; import java.util.Date; import java.util.Map; public class GalleryProcessorWorkflowImpl extends WorkflowImpl implements InternalWorkflow, GalleryProcessorWorkflow { public static final String WFID = "galleryprocessor"; private static final Logger log = LoggerFactory.getLogger(GalleryProcessorWorkflowImpl.class); private Session rootSession; private Node subject; private Session userSession; private WorkflowParameters parameters; public GalleryProcessorWorkflowImpl(Session userSession, Session rootSession, Node subject) throws RemoteException { this.subject = subject; this.rootSession = rootSession; this.userSession = userSession; } public Map hints() { return null; } public void scale(String fileName) throws WorkflowException { createParameters(fileName); if(!verifyParams(this.parameters)) { throw new IllegalArgumentException(" ScalingParameters are not complete "); } String message = ""; Node node = this.subject; try { ScalingGalleryProcessor processor = new ScalingGalleryProcessor(); processor.makeImage(node,parameters.getInputStream(),parameters.getMimeType(),parameters.getFileName()); node.getSession().save(); } catch(ClassNotFoundException e){ message = "Error because of exception " + e.getClass().toString() + " message : " + e.getMessage(); log.error(message); }catch(IOException e){ message = "Error because of exception " + e.getClass().toString() + " message : " + e.getMessage(); log.error(message); }catch (RepositoryException e){ message = "Error because of exception " + e.getClass().toString() + " message : " + e.getMessage(); log.error(message); throw new WorkflowException(message); }catch(GalleryException e) { message = "Error because of exception " + e.getClass().toString() + " message : " + e.getMessage(); log.error(message); throw new WorkflowException(message); } } private void processByDate(Date date) throws WorkflowException { if(!verifyDate(date)) { throw new IllegalArgumentException(" Date " + date + " has to be in the future"); } if(!verifyParams(this.parameters)) { throw new IllegalArgumentException(" Date " + date + " has to be in the future"); } String message = ""; try { WorkflowContext ctx = getWorkflowContext(); ctx = ctx.getWorkflowContext(date); GalleryProcessorWorkflow workflow = (GalleryProcessorWorkflow)ctx.getWorkflow(WFID); workflow.scale(parameters.getFileName()); } catch (MappingException e) { message = "Error because of exception " + e.getClass().toString() + " message : " + e.getMessage(); log.error(message); throw new WorkflowException(message); } catch( RepositoryException e) { message = "Error because of exception " + e.getClass().toString() + " message : " + e.getMessage(); log.error(message); throw new WorkflowException(message); } } private static boolean verifyParams(WorkflowParameters parameters) { return parameters != null && parameters.getFileName() != null && parameters.getImage() != null && parameters.getMimeType() != null; } public void setParameters(WorkflowParameters parameters) { this.parameters = parameters; } private static boolean verifyDate(Date date) { if(date.before(Calendar.getInstance().getTime())){ return false; } return true; } public void processNow(String fileName) throws WorkflowException { setParameters(createParameters(fileName)); Calendar cal = Calendar.getInstance(); cal.add(Calendar.MINUTE,3); processByDate(cal.getTime()); } public void processLater(Calendar calendar)throws WorkflowException { processByDate(calendar.getTime()); } private WorkflowParameters createParameters(String fileName) { WorkflowParameters workflowParameters = new WorkflowParameters(); try { FileInputStream fin = new FileInputStream(fileName + ".ser"); ObjectInputStream oin = new ObjectInputStream(fin); Object o = oin.readObject( ); workflowParameters = (WorkflowParameters) o; oin.close( ); }catch(FileNotFoundException e) { log.error(" File not found :" + fileName + ".ser - " + e.getClass() + " - " + e.getMessage()); } catch(IOException e){ log.error("IOException during deserialization of " + fileName + ".ser - " + e.getClass() + " - " + e.getMessage() ); } catch (ClassNotFoundException e ) { log.error("ClassNotFoundException during deserialization of " + fileName + ".ser - " + e.getClass() + " - " + e.getMessage() ); } return workflowParameters; } }