Skip to content

Commit

Permalink
Dorađen rest server.
Browse files Browse the repository at this point in the history
  • Loading branch information
SandroGrzicic committed May 6, 2012
1 parent 31d2feb commit 2dbb8c3
Showing 1 changed file with 68 additions and 7 deletions.
75 changes: 68 additions & 7 deletions src/main/hr/fer/tel/ops/App.java
Expand Up @@ -8,6 +8,11 @@
import spark.Request; import spark.Request;
import spark.Response; import spark.Response;
import spark.Route; import spark.Route;
import spark.Spark;
import spark.route.SimpleRouteMatcher;

import java.lang.reflect.Field;
import java.util.List;


import static javax.servlet.http.HttpServletResponse.SC_BAD_REQUEST; import static javax.servlet.http.HttpServletResponse.SC_BAD_REQUEST;
import static spark.Spark.get; import static spark.Spark.get;
Expand All @@ -19,10 +24,13 @@ public class App {


private static final XMLOutputter xmlOut = new XMLOutputter(Format.getPrettyFormat()); private static final XMLOutputter xmlOut = new XMLOutputter(Format.getPrettyFormat());


private static String podržaneRute;

/** Pokreće web aplikaciju. */ /** Pokreće web aplikaciju. */
public static void main(String[] args) { public static void main(String[] args) {
final Server s = new Server(); final Server s = new Server();



// zahtjev za registracijom // zahtjev za registracijom
get(new Route("/reg/:login/:pass") { get(new Route("/reg/:login/:pass") {
@Override @Override
Expand All @@ -32,7 +40,7 @@ public Object handle(Request request, Response response) {


Either<String, String> odgovor = s.zahtjevZaRegistracijom(korisničkoIme, lozinka); Either<String, String> odgovor = s.zahtjevZaRegistracijom(korisničkoIme, lozinka);


return either2response(response, odgovor, SC_BAD_REQUEST); return either2xml(response, odgovor, SC_BAD_REQUEST);
} }
}); });


Expand All @@ -45,25 +53,78 @@ public Object handle(Request request, Response response) {


Either<String, String> odgovor = s.zahtjevZaUkidanjeRegistracije(korisničkoIme, lozinka); Either<String, String> odgovor = s.zahtjevZaUkidanjeRegistracije(korisničkoIme, lozinka);


return either2response(response, odgovor, SC_BAD_REQUEST); return either2xml(response, odgovor, SC_BAD_REQUEST);
}
});

// vraća broj registriranih korisnika.
get(new Route("/count") {
@Override
public Object handle(final Request request, final Response response) {
return string2xml(Integer.toString(s.getBrojKorisnika()));
}
});

podržaneRute = dohvatiRute();

// ispisuje sve podržane rute koristeći Reflection API.
get(new Route("/") {
@Override
public Object handle(final Request request, final Response response) {
return podržaneRute;
} }
}); });
}



/** Vraća sve podržane rute koristeći Reflection. */
private static String dohvatiRute() {
final StringBuilder sb = new StringBuilder("REST metode: \n\n");
try {
final Field routeMatcher = Spark.class.getDeclaredField("routeMatcher");
routeMatcher.setAccessible(true);
final SimpleRouteMatcher simpleRouteMatcher = (SimpleRouteMatcher) routeMatcher.get(null);

final Field routesField = simpleRouteMatcher.getClass().getDeclaredField("routes");
routesField.setAccessible(true);

@SuppressWarnings("unchecked")
final List<?> routes = (List<?>) routesField.get(simpleRouteMatcher);
for (final Object route: routes) {
sb.append(route.toString().split(", ")[1]).append("\n");
}
return sb.toString();
} catch (Exception ignored) {
return ignored.getMessage();
}
}

/** Generira XML odgovor na temelju zadanog Stringa. */
private static String string2xml(final String string) {
final Document doc = new Document();
final Element root = new Element("ops");
doc.setRootElement(root);

final Element odgovorEl = new Element("odgovor");

odgovorEl.addContent(string);
root.addContent(odgovorEl);
return xmlOut.outputString(doc);
} }


/** Generira String odgovor na temelju zadanog Eithera. */ /** Generira XML odgovor na temelju zadanog Eithera. */
private static String either2response(final Response httpResponse, final Either<String, String> odgovor, final int greškaKod) { private static String either2xml(final Response httpResponse, final Either<String, String> either, final int greškaKod) {
final Document doc = new Document(); final Document doc = new Document();
final Element root = new Element("ops"); final Element root = new Element("ops");
doc.setRootElement(root); doc.setRootElement(root);


final Element odgovorEl = new Element(odgovor.getClass().getSimpleName().toLowerCase()); final Element odgovorEl = new Element(either.getClass().getSimpleName().toLowerCase());


if (odgovor.isLeft()) { if (either.isLeft()) {
httpResponse.status(greškaKod); httpResponse.status(greškaKod);
} }


odgovorEl.addContent(odgovor.toString()); odgovorEl.addContent(either.toString());
root.addContent(odgovorEl); root.addContent(odgovorEl);
return xmlOut.outputString(doc); return xmlOut.outputString(doc);
} }
Expand Down

0 comments on commit 2dbb8c3

Please sign in to comment.