diff --git a/pse.pdf b/pse.pdf index 7ca094e..7c87d1d 100644 Binary files a/pse.pdf and b/pse.pdf differ diff --git a/pse.tex b/pse.tex index 606f7c9..440a89d 100644 --- a/pse.tex +++ b/pse.tex @@ -266,6 +266,20 @@ MVC unterteilt eine interaktive Applikation in drei Teile: Model, View und Contr \item die Verarbeitung von Requests und Responses wird ermöglicht, \item JSF und JSP können darauf aufsetzen, in unserem Projekt wurde JSF verwendet \end{itemize} +\begin{minted}[linenos,breaklines=true]{xml} + + +... + +Faces Servlet +javax.faces.webapp.FacesServlet +1 + + +Faces Servlet +*.xhtml + +\end{minted} \subsubsection{Java Server Faces (JSF)} \begin{itemize} \item JSF basiert auf dem MVC-Pattern @@ -280,20 +294,8 @@ MVC unterteilt eine interaktive Applikation in drei Teile: Model, View und Contr \includegraphics[width=0.5\textwidth]{pics/fc_pat.jpg} \end{figure} \begin{minted}[linenos,breaklines=true]{xml} - - -... - -Faces Servlet -javax.faces.webapp.FacesServlet -1 - - -Faces Servlet -*.xhtml - -\end{minted} -\begin{minted}[linenos,breaklines=true]{xml} + + \item da bei jedem Request ein neues Command Objekt erzeugt wird ist Thread-Safety nicht notwendig \item da nur EIN Controller sind auch Erweiterungen durch z.B.: Decorator einfach (auch zur Laufzeit) \end{itemize} -\section{View Helper} +\section{View Helper (\textit{/src/main/java/at/fhj/swd/psoe/web/*})} \subsection{Erkläre die Funktion + Skizze} \begin{figure}[h!] \centering \includegraphics[width=0.8\textwidth]{pics/view-helper_pat1.jpg} \end{figure} \begin{itemize} - \item View (xhtml-Dateien im Ordner webapp) delegiert Aufgaben an Helper (*Controller-Klassen - z.B. DocumentController im Ordner web) - \item Helper adaptieren View zu Model (Klassen in den Ordnern service und data) + \item View (xhtml-Dateien im Ordner \textit{/src/main/webapp/*}) delegiert Aufgaben an Helper (z.B. DocumentController im Ordner web) + \item Helper adaptieren View zu Model (Klassen in den Ordnern \textit{src/main/java/at/fhj/swd/psoe/service/*} und \textit{src/main/java/at/fhj/swd/psoe/data/*}) \item in View befindet sich HTML Code im ViewHelper Java Code zur Aufbereitung der Daten (+ wenig HTML) \end{itemize} \subsection{Nenne die Konsequenzen der Anwendung} @@ -374,12 +376,12 @@ mode="advanced" label="Add document (.pdf .jpg .docx)"> \end{itemize} -\section{Dependency Injection (don't call us, we'll call you)} +\section{Dependency Injection (CDI-Framework in pom.xml im Projekt)} \subsection{Erkläre die Funktion + Skizze} +%TODO Zarwos is die Dependency-Injection in unserem Projekt guat und wo is se, verdammte Scheiße noch amol, wo konfigurierst denn den Dreck donn überhaupt??? \begin{figure}[!htp] \centering - \includegraphics[width=0.5\textwidth]{pics/dependency_inj_pat.jpg} - \includegraphics[width=0.4\textwidth]{pics/dependency_inj_spring_pat.jpg} + \includegraphics[width=0.8\textwidth]{pics/dependency_inj_pat.jpg} \end{figure} \begin{itemize} \item Grundidee sind loose gekoppelte Objekte @@ -408,15 +410,18 @@ mode="advanced" label="Add document (.pdf .jpg .docx)"> \end{minted} \end{itemize} \begin{itemize} - \item Im Spring Context: Dependency Injection mit XML-Datei - \item alle Beans sind dort gelistet und werden verknüpft - \item Context wird geladen damit alles verknüpft ist - \item erspart Factories + \item Im Spring Context: + \begin{itemize} + \item Dependency Injection mit XML-Datei + \item alle Beans sind dort gelistet und werden verknüpft + \item Context wird geladen damit alles verknüpft ist + \item erspart Factories + \end{itemize} \end{itemize} \subsection{Nenne die Konsequenzen der Anwendung} \begin{itemize} \item loose gekoppelte Objekte - \item Referenzen nurmehr auf Interfaces + \item Referenzen nur noch auf Interfaces \item hohe Flexibilität (Strategy, Proxy,..) \item bessere Erweiterbarkeit und Testbarkeit \item bei Spring kann Dependency Injection mittels XML oder Annotation erfolgen @@ -437,14 +442,115 @@ mode="advanced" label="Add document (.pdf .jpg .docx)"> \item fasst Daten verschiedener Objekte zusammen die vom Remote Objekt benötigt werden \item ev. Map, Record Set, ... \end{itemize} -\subsection{Beschreibe ein konkretes Anwendungsbeispiel} -% todo: Anwendungsbeispiel +\subsection{Verwendung im Projekt in \textit{src/main/java/at/fhj/swd/psoe/service/dto/*}} +\begin{minted}[linenos,breaklines=true]{java} +package at.fhj.swd.psoe.service.dto; + +import java.io.Serializable; +import java.util.Date; + +public class DocumentDTO implements Serializable { + + private static final long serialVersionUID = 4016557982897997689L; + + private Long id; + private Long documentlibraryID; + private String filename; + private UserDTO user; + private byte[] data; + private Date createdTimestamp; + + public DocumentDTO() {} + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getDocumentlibraryID() { + return documentlibraryID; + } + + public void setDocumentlibraryID(Long documentlibraryID) { + this.documentlibraryID = documentlibraryID; + } + + public String getFilename() { + return filename; + } + + public void setFilename(String filename) { + this.filename = filename; + } + + public UserDTO getUser() { + return user; + } + + public void setUser(UserDTO user) { + this.user = user; + } + + public byte[] getData() { + return data; + } + + public void setData(byte[] data) { + this.data = data; + } + + public Date getCreatedTimestamp() { + return createdTimestamp; + } + + public void setCreatedTimestamp(Date createdTimestamp) { + this.createdTimestamp = createdTimestamp; + } + + @Override + public String toString() { + return "DocumentDTO{" + + "id=" + id + + ", documentlibraryID=" + documentlibraryID + + ", filename='" + filename + '\'' + + '}'; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof DocumentDTO)) return false; + + DocumentDTO that = (DocumentDTO) o; + + return id.equals(that.id); + } + + @Override + public int hashCode() { + return id.hashCode(); + } +} +\end{minted} \subsection{Nenne die Konsequenzen der Anwendung} \begin{itemize} - \item kapselt und versteckt - \item nimmt Komplexität - \item steigert Effizienz da weniger Aufrufe über Remotegrenze + \item kapselt und versteckt + \item nimmt Komplexität + \item steigert Effizienz da weniger Aufrufe über Remotegrenze \end{itemize} + + + + + + + + + + \section{Page-Object-Pattern} PageObjectPattern