@// Rythm template @// you can try me out at http://fiddle.rythmengine.com @// Created by Wolfgang Fahl, BITPlan GmbH, 2018-12-06 @import com.bitplan.dragtop.DropTarget @import com.bitplan.dragtop.DragItem @import org.apache.tinkerpop.gremlin.structure.Graph @import org.apache.tinkerpop.gremlin.structure.Vertex @import com.bitplan.simplegraph.powerpoint.PowerPointSystem @import com.bitplan.simplegraph.powerpoint.SlideNode @import com.bitplan.simplegraph.core.SimpleStepNode @import java.util.stream.Collectors @args() { DropTarget dropTarget, Graph graph; } @{ PowerPointSystem pps=null; Throwable error=null; try { pps=new PowerPointSystem(); pps.connect(); } catch (Throwable th) { error=th; } } @// error handling - get a stack trace @def String getStackTrace (Throwable t) { StringWriter sw = new StringWriter(); t.printStackTrace(new PrintWriter(sw)); return sw.toString(); } @// show errors @def showError(Throwable error) {

Error @(error.getClass().getName()): @(error.getMessage())

@getStackTrace(error)
} @// get the property with the given name or ? if the property is not set @def String getProperty(SimpleStepNode n, String pname) { Object property=n.property(pname); String value="?"; if (property!=null) value=property.toString(); return value; } @if (error) { @showError(error) } else { @for(DragItem dragItem:dropTarget.getDragItems()) { @{ Object item=dragItem.getItem(); int index=0; File file=null; SimpleStepNode slideShowNode=null; List slides=null; if (item instanceof File) { file=(File) item; if (file.getName().contains(".ppt")) { slideShowNode = (SimpleStepNode) pps.moveTo(file.getPath()); slides = slideShowNode.out("slides") .collect(Collectors.toCollection(ArrayList::new)); } else { file=null; } } } @if (file) {

@(file.getName())

    @for (SimpleStepNode slideNode:slides) { @{ String title=getProperty(slideNode,"title"); String name=getProperty(slideNode,"name"); SlideNode slide=null; File slideFile=null; if (slideNode instanceof SlideNode) { try { slide=(SlideNode) slideNode; slideFile=new File("/tmp/"+file.getName()+""+index++); slide.outputSlideAsImage(slideFile,1.0,false); } catch (Throwable th) { error=th; } } }
  1. @(title) / @(name) @if (error) { @showError(error) } else { @if (slideFile) { } }
    @(getProperty(slideNode,"text"))
  2. }
} } }