\usetikzlibrary{positioning}
\usetikzlibrary{shapes.geometric}
\usetikzlibrary{shapes.arrows}
\usetikzlibrary{shapes.misc}
\usetikzlibrary{decorations.pathmorphing,arrows}

\tikzset{terminal/.style={single arrow,top color=white,bottom color=black!20,very thick,draw=black!50}}
\tikzset{plugin/.style={rounded rectangle,top color=white,bottom color=blue!40,very thick,draw=blue!70}}
\tikzset{transform/.style={ellipse,top color=white,bottom color=green!20,very thick,draw=green!50}}

\begin{tikzpicture}[text width=15mm,node distance=20mm and 20mm]

\node[draw,terminal] (inf) {Input\\Format};
\node[draw,right=of inf,plugin,text centered] (inp) {Input\\Plugin};
\node[draw,below=of inp,text width=2cm,transform,text centered] (trans) {Transform};
\node[draw,below=of trans,plugin,text centered] (oup) {Output\\Plugin};
\node[draw,left=of oup,terminal,shape border rotate=180] (ouf) {Output\\Format};

\begin{scope}[thick]
\begin{scope}[decoration={snake,post length=1mm}]
\draw[->,decorate] (inf.east) -- (inp.west);
\draw[->,decorate] (oup.west) -- (ouf.east);
\end{scope}

\draw[->] (inp.south) -- node[sloped,above] {XHTML} (trans.north);
\draw[->] (trans.south) -- (oup.north);

\end{scope}
\end{tikzpicture}