Rest Server:
package Server;
import Model.Model;
import Model.Unternehmen;
import org.restlet.Component;
import org.restlet.data.Protocol;
public class UnternehmenServer {
public static void main(String[] args) throws Exception {
Component component = new Component();
component.getServers().add(Protocol.HTTP,8888);
component.getDefaultHost().attach("/api", new UnternehmenApp());
component.start();
/* Test Objekt erstellen nicht vergessen*/
}
}
Rest App:
package Server;
import org.restlet.Application;
import org.restlet.Restlet;
import org.restlet.routing.Router;
public class UnternehmenApp extends Application {
@Override
public Restlet createInboundRoot() {
Router router = new Router();
router.attach("/Unternehmen",UnternehmenServerResource.class);
router.attach("/Unternehmen/Mitarbeiter/{mitarbeiterID}",MitarbeiterServerResource.class);
router.attach("/Unternehmen/Gehalt/{gehaltID}",GehaltServerResource.class);
return router;
}
}
Interface Example:
public interface IMitarbeiterResource {
@Get
public Mitarbeiter getMitarbeiter();
@Delete
public void deleteMitarbeiter();
@Post
public void addGehalt(Gehalt gehalt);
@Put
public void updateMitarbeiter(Mitarbeiter mitarbeiter);
}
Server Resource:
public class GehaltServerResource extends ServerResource implements IGehaltResource {
public Gehalt gehalt;
@Override
protected void doInit() throws ResourceException {
super.doInit();
Unternehmen unternehmen = Model.getInstance().getUnternehmen();
unternehmen.getMitarbeiter().forEach(mitarbeiter -> {
mitarbeiter.getGehalt().forEach(gehalt -> {
if(gehalt.getGehaltID() == Integer.parseInt(getAttribute("gehaltID"))){
this.gehalt = gehalt;
}
});
});
}
@Override
public Gehalt getGehalt() {
return gehalt;
}
@Override
public void deleteGehalt() {
Mitarbeiter mitarbeiter1 = null;
Unternehmen unternehmen = Model.getInstance().getUnternehmen();
for(Mitarbeiter mitarbeiter: unternehmen.getMitarbeiter()){
for(Gehalt gehalt: mitarbeiter.getGehalt()){
if(gehalt.getGehaltID() == this.gehalt.getGehaltID()){
mitarbeiter1 = mitarbeiter;
}
}
}
mitarbeiter1.getGehalt().remove(this.gehalt);
Model.getInstance().save();
}
@Override
public void updateGehalt(Gehalt gehalt) {
this.gehalt.setGehaltID(gehalt.getGehaltID());
this.gehalt.setLohn(gehalt.getLohn());
Model.getInstance().save();
}
}
Model:
public class Model {
private static Model instance;
private Unternehmen unternehmen;
private final String XML_Path = "data.xml";
public Model() {
JAXBContext jaxbContext = null;
try {
jaxbContext = JAXBContext.newInstance(Unternehmen.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
this.unternehmen = (Unternehmen) unmarshaller.unmarshal(new File(XML_Path));
}catch (JAXBException e){
e.printStackTrace();
}
}
public static Model getInstance() {
if(instance == null){
instance = new Model();
}
return instance;
}
public void save(){
JAXBContext jaxbContext = null;
try {
jaxbContext = JAXBContext.newInstance(Unternehmen.class);
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.marshal(unternehmen,new File(XML_Path));
}catch (JAXBException e){
e.printStackTrace();
}
}
public Unternehmen getUnternehmen() {
return unternehmen;
}
public void setUnternehmen(Unternehmen unternehmen) {
this.unternehmen = unternehmen;
}
}
JSP Table:
<html>
<head>
<title>Mitarbeiter</title>
</head>
<body>
<jsp:useBean id="mitarbeiter" class="Model.Mitarbeiter" scope="request"></jsp:useBean>
<h2><%=mitarbeiter.getVorname()%></h2>
<table>
<thead>
<th>Vorname</th>
<th>Nachname</th>
<th>Alter</th>
<th>Gehalt</th>
</thead>
<tbody>
<tr>
<td><%=mitarbeiter.getNachname()%></td>
<td><%=mitarbeiter.getVorname()%></td>
<td><%=mitarbeiter.getAlter()%></td>
<% for(Gehalt gehalt: mitarbeiter.getGehalt()){ %>
<td><%=gehalt.getLohn()%>€</td>
<%}%>
</tr>
</tbody>
<td><a href="Unternehmen"><button>Zurück</button></a></td>
</table>
</body>
</html>
JSP Form:
<html>
<head>
<title>Bearbeiten</title>
</head>
<body>
<jsp:useBean id="mitarbeiter" class="Model.Mitarbeiter" scope="request"></jsp:useBean>
<form method="get" action="UpdateMitarbeiter">
<input type="hidden" value="<%=mitarbeiter.getMitarbeiterID()%>" name="mitarbeiterID">
<label>ID</label>
<input type="text" name="id" value="<%=mitarbeiter.getMitarbeiterID()%>"><br><br>
<label>Vorname</label>
<input type="text" name="vorname" value="<%=mitarbeiter.getVorname()%>"><br><br>
<label>Nachname</label>
<input type="text" name="nachname" value="<%=mitarbeiter.getNachname()%>"><br><br>
<label>Alter</label>
<input type="text" name="alter" value="<%=mitarbeiter.getAlter()%>"><br><br>
<input type="submit" value="Fertig">
</form>
<td><a href="Unternehmen"><button>Zurück</button></a></td>
</body>
</html>
Servlet:
@WebServlet(name = "ShowMitarbeiterServlet", value = "/ShowMitarbeiterServlet")
public class ShowMitarbeiterServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Mitarbeiter mitarbeiter = UnternehmenClient.getMitarbeiter(Integer.parseInt(request.getParameter("mitarbeiterID")));
request.setAttribute("mitarbeiter",mitarbeiter);
RequestDispatcher requestDispatcher = request.getRequestDispatcher("ShowMitarbeiter.jsp");
requestDispatcher.forward(request,response);
}
}
Client:
public static Mitarbeiter getMitarbeiter(int mitarbeiterID){
ClientResource clientResource = new ClientResource("http://localhost:8888/api/Unternehmen/Mitarbeiter/"+mitarbeiterID);
IMitarbeiterResource resource = clientResource.wrap(IMitarbeiterResource.class);
return resource.getMitarbeiter();
}
XSD:
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Unternehmen">
<xs:complexType>
<xs:sequence>
<xs:element name="Firmenname" type="xs:string"></xs:element>
<xs:element name="FirmenID" type="xs:int"></xs:element>
<xs:element ref="Mitarbeiter" maxOccurs="unbounded"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Mitarbeiter">
<xs:complexType>
<xs:sequence>
<xs:element name="MitarbeiterID" type="xs:int"></xs:element>
<xs:element name="Vorname" type="xs:string"></xs:element>
<xs:element name="Nachname" type="xs:string"></xs:element>
<xs:element name="Alter" type="xs:int"></xs:element>
<xs:element ref="Gehalt" maxOccurs="unbounded"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Gehalt">
<xs:complexType>
<xs:sequence>
<xs:element name="Lohn" type="xs:int"></xs:element>
<xs:element name="GehaltID" type="xs:int"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>