/** * Copyright (C) 2012 Vincenzo Pirrone * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License as published by the Free Software * Foundation; either version 2 of the License, or (at your option) any later * version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License along with * this program; if not, write to the Free Software Foundation, Inc., 51 * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ package com.kdcloud.server.rest.application; import java.util.Set; import org.reflections.Reflections; import org.restlet.Application; import org.restlet.Context; import org.restlet.Restlet; import org.restlet.data.ChallengeResponse; import org.restlet.data.ChallengeScheme; import org.restlet.routing.Router; import com.kdcloud.ext.rehab.doctor.AddUserSchedulingRestlet; import com.kdcloud.ext.rehab.doctor.DownloadUserBufferedDataByIntervalRestlet; import com.kdcloud.ext.rehab.doctor.DownloadUserBufferedDataRestlet; import com.kdcloud.ext.rehab.doctor.DownloadUserCompleteExerciseRestlet; import com.kdcloud.ext.rehab.doctor.DownloadUserDailyStatisticsRestlet; import com.kdcloud.ext.rehab.doctor.DownloadUserDualModeSessionsRestlet; import com.kdcloud.ext.rehab.doctor.DownloadUserRehabDaysRestlet; import com.kdcloud.ext.rehab.doctor.GetUserExercisesListRestlet; import com.kdcloud.ext.rehab.doctor.GetUserSchedulingRestlet; import com.kdcloud.ext.rehab.doctor.LoginRehabDoctorRestlet; import com.kdcloud.ext.rehab.doctor.RehabDoctorRegistrationRestlet; import com.kdcloud.ext.rehab.doctor.RehabTestGetRestlet; import com.kdcloud.ext.rehab.doctor.RehabUserRegistrationRestlet; import com.kdcloud.ext.rehab.user.CalibrationRestlet; import com.kdcloud.ext.rehab.user.ComputeAnglesRestlet; import com.kdcloud.ext.rehab.user.DownloadCompleteExerciseRestlet; import com.kdcloud.ext.rehab.user.GetSchedulingRestlet; import com.kdcloud.ext.rehab.user.InsertBufferedDataRestlet; import com.kdcloud.ext.rehab.user.InsertCompleteExerciseRestlet; import com.kdcloud.ext.rehab.user.InsertDualModeSessionRestlet; import com.kdcloud.ext.rehab.user.LoginRehabUserRestlet; import com.kdcloud.lib.rest.api.GroupResource; import com.kdcloud.server.entity.Group; import com.kdcloud.server.rest.resource.IndexServerResource; import com.kdcloud.server.rest.resource.KDServerResource; import com.kdcloud.server.rest.resource.UserIndexServerResource; public class KDApplication extends Application { public static final ChallengeResponse defaultChallenge = new ChallengeResponse(ChallengeScheme.HTTP_BASIC, "admin", "admin"); private Restlet outboundRoot; public KDApplication(Context context, Restlet outboundRoot) { super(context); this.outboundRoot = outboundRoot; } /** * Creates a root Restlet that will receive all incoming calls. */ @Override public Restlet createInboundRoot() { Router router = new Router(getContext()); //automatically map resources with uri Reflections reflections = new Reflections( "com.kdcloud.server.rest.resource"); Set<Class<? extends KDServerResource>> allClasses = reflections .getSubTypesOf(KDServerResource.class); for (Class<? extends KDServerResource> clazz : allClasses) { try { getLogger().fine("found resource " + clazz.getSimpleName()); String uri = clazz.getField("URI").get(null).toString(); router.attach(uri, clazz); getLogger().fine("mapped uri " + uri); } catch (Exception e) { getLogger().fine("could not map any uri to the class"); } } //manually map indexes router.attach("/engine/workflow", IndexServerResource.class); router.attach("/modality", IndexServerResource.class); router.attach("/engine/plugin", IndexServerResource.class); router.attach("/view", IndexServerResource.class); router.attach("/group", IndexServerResource.class); router.attach(GroupResource.URI + "/" + Group.PROPERTY_CONTRIBUTORS, UserIndexServerResource.class); router.attach(GroupResource.URI + "/" + Group.PROPERTY_ENROLLED, UserIndexServerResource.class); router.attach(GroupResource.URI + "/" + Group.PROPERTY_MEMBERS, UserIndexServerResource.class); //redirects // for (final Entry<String, String> e : Redirects.getRedirects().entrySet()) { // router.attach(e.getKey(), new Restlet() { // @Override // public void handle(Request request, Response response) { // String target = e.getValue(); // String query = request.getResourceRef().getQuery(); // if (query != null) // target = target + "?" + query; // response.redirectPermanent(target); // response.commit(); // } // }); // } //rehab tutor user restlet router.attach(LoginRehabUserRestlet.URI, LoginRehabUserRestlet.class); router.attach(DownloadCompleteExerciseRestlet.URI, DownloadCompleteExerciseRestlet.class); router.attach(CalibrationRestlet.URI, CalibrationRestlet.class); router.attach(ComputeAnglesRestlet.URI, ComputeAnglesRestlet.class); router.attach(InsertDualModeSessionRestlet.URI, InsertDualModeSessionRestlet.class); router.attach(InsertBufferedDataRestlet.URI, InsertBufferedDataRestlet.class); router.attach(InsertCompleteExerciseRestlet.URI, InsertCompleteExerciseRestlet.class); router.attach(GetSchedulingRestlet.URI, GetSchedulingRestlet.class); //rehab tutor doctor restlet router.attach(RehabUserRegistrationRestlet.URI, RehabUserRegistrationRestlet.class); router.attach(RehabDoctorRegistrationRestlet.URI, RehabDoctorRegistrationRestlet.class); router.attach(LoginRehabDoctorRestlet.URI, LoginRehabDoctorRestlet.class); router.attach(GetUserExercisesListRestlet.URI, GetUserExercisesListRestlet.class); router.attach(DownloadUserCompleteExerciseRestlet.URI, DownloadUserCompleteExerciseRestlet.class); router.attach(DownloadUserDualModeSessionsRestlet.URI, DownloadUserDualModeSessionsRestlet.class); router.attach(DownloadUserBufferedDataRestlet.URI, DownloadUserBufferedDataRestlet.class); router.attach(DownloadUserBufferedDataByIntervalRestlet.URI, DownloadUserBufferedDataByIntervalRestlet.class); router.attach(DownloadUserRehabDaysRestlet.URI, DownloadUserRehabDaysRestlet.class); router.attach(DownloadUserDailyStatisticsRestlet.URI, DownloadUserDailyStatisticsRestlet.class); router.attach(GetUserSchedulingRestlet.URI, GetUserSchedulingRestlet.class); router.attach(AddUserSchedulingRestlet.URI, AddUserSchedulingRestlet.class); router.attach(RehabTestGetRestlet.URI, RehabTestGetRestlet.class); return router; } @Override public Restlet createOutboundRoot() { return outboundRoot; } }