List of usage examples for java.lang.reflect Parameter getName
public String getName()
From source file:org.jspare.forvertx.web.handler.DefaultHandler.java
/** * Resolve parameter.//from www . java 2 s . c om * * @param parameter * the parameter * @param routingContext * the routing context * @return the object */ @SuppressWarnings("unchecked") protected Object resolveParameter(Parameter parameter, RoutingContext routingContext) { if (parameter.getType().equals(RoutingContext.class)) { return routingContext; } if (parameter.getType().equals(HttpServerRequest.class)) { return routingContext.request(); } if (parameter.getType().equals(HttpServerResponse.class)) { return routingContext.response(); } if (StringUtils.isNotEmpty(routingContext.request().getParam(parameter.getName()))) { return routingContext.request().getParam(parameter.getName()); } if (parameter.isAnnotationPresent(ArrayModel.class)) { ArrayModel am = parameter.getAnnotation(ArrayModel.class); Class<? extends Collection<?>> collection = (Class<? extends Collection<?>>) am.collectionClass(); Class<?> clazz = am.value(); return ArrayModelParser.toList(routingContext.getBody().toString(), collection, clazz); } if (parameter.isAnnotationPresent(MapModel.class)) { MapModel mm = parameter.getAnnotation(MapModel.class); Class<?> mapClazz = mm.mapClass(); Class<?> key = mm.key(); Class<?> value = mm.value(); return MapModelParser.toMap(routingContext.getBody().toString(), mapClazz, key, value); } if (parameter.getType().getPackage().getName().endsWith(".model") || parameter.getType().isAnnotationPresent(Model.class) || parameter.isAnnotationPresent(Model.class)) { try { if (routingContext.getBody() == null) { return null; } return my(Json.class).fromJSON(routingContext.getBody().toString(), parameter.getType()); } catch (SerializationException e) { log.debug("Invalid content of body for class [{}] on parameter [{}]", parameter.getClass(), parameter.getName()); return null; } } if (parameter.isAnnotationPresent(org.jspare.forvertx.web.mapping.handling.Parameter.class)) { String parameterName = parameter.getAnnotation(org.jspare.forvertx.web.mapping.handling.Parameter.class) .value(); // Test types Type typeOfParameter = parameter.getType(); if (typeOfParameter.equals(Integer.class)) { return Integer.parseInt(routingContext.request().getParam(parameterName)); } if (typeOfParameter.equals(Double.class)) { return Double.parseDouble(routingContext.request().getParam(parameterName)); } if (typeOfParameter.equals(Long.class)) { return Long.parseLong(routingContext.request().getParam(parameterName)); } return routingContext.request().getParam(parameterName); } if (parameter.isAnnotationPresent(org.jspare.forvertx.web.mapping.handling.Header.class)) { String headerName = parameter.getAnnotation(org.jspare.forvertx.web.mapping.handling.Header.class) .value(); return routingContext.request().getHeader(headerName); } return null; }
From source file:org.instagram4j.DefaultInstagramClient.java
private void addParams(URIBuilder uri, Parameter... params) { if (params != null && params.length != 0) { for (Parameter param : params) uri.addParameter(param.getName(), param.getValue()); }//from w w w.j a v a 2 s .c o m }
From source file:io.stallion.restfulEndpoints.ResourceToEndpoints.java
public List<JavaRestEndpoint> convert(EndpointResource resource) { Class cls = resource.getClass(); List<JavaRestEndpoint> endpoints = new ArrayList<>(); // Get defaults from the resource Role defaultMinRole = Settings.instance().getUsers().getDefaultEndpointRoleObj(); MinRole minRoleAnno = (MinRole) cls.getAnnotation(MinRole.class); if (minRoleAnno != null) { defaultMinRole = minRoleAnno.value(); }//from w w w. j ava 2 s . c o m String defaultProduces = "text/html"; Produces producesAnno = (Produces) cls.getAnnotation(Produces.class); if (producesAnno != null && producesAnno.value().length > 0) { defaultProduces = producesAnno.value()[0]; } Path pathAnno = (Path) cls.getAnnotation(Path.class); if (pathAnno != null) { basePath += pathAnno.value(); } Class defaultJsonViewClass = null; DefaultJsonView jsonView = (DefaultJsonView) cls.getAnnotation(DefaultJsonView.class); if (jsonView != null) { defaultJsonViewClass = jsonView.value(); } for (Method method : cls.getDeclaredMethods()) { JavaRestEndpoint endpoint = new JavaRestEndpoint(); endpoint.setRole(defaultMinRole); endpoint.setProduces(defaultProduces); if (defaultJsonViewClass != null) { endpoint.setJsonViewClass(defaultJsonViewClass); } Log.finer("Resource class method: {0}", method.getName()); for (Annotation anno : method.getDeclaredAnnotations()) { if (Path.class.isInstance(anno)) { Path pth = (Path) anno; endpoint.setRoute(getBasePath() + pth.value()); } else if (GET.class.isInstance(anno)) { endpoint.setMethod("GET"); } else if (POST.class.isInstance(anno)) { endpoint.setMethod("POST"); } else if (DELETE.class.isInstance(anno)) { endpoint.setMethod("DELETE"); } else if (PUT.class.isInstance(anno)) { endpoint.setMethod("PUT"); } else if (Produces.class.isInstance(anno)) { endpoint.setProduces(((Produces) anno).value()[0]); } else if (MinRole.class.isInstance(anno)) { endpoint.setRole(((MinRole) anno).value()); } else if (XSRF.class.isInstance(anno)) { endpoint.setCheckXSRF(((XSRF) anno).value()); } else if (JsonView.class.isInstance(anno)) { Class[] classes = ((JsonView) anno).value(); if (classes == null || classes.length != 1) { throw new UsageException("JsonView annotation for method " + method.getName() + " must have exactly one view class"); } endpoint.setJsonViewClass(classes[0]); } } if (!empty(endpoint.getMethod()) && !empty(endpoint.getRoute())) { endpoint.setJavaMethod(method); endpoint.setResource(resource); endpoints.add(endpoint); Log.fine("Register endpoint {0} {1}", endpoint.getMethod(), endpoint.getRoute()); } else { continue; } int x = -1; for (Parameter param : method.getParameters()) { x++; RequestArg arg = new RequestArg(); for (Annotation anno : param.getAnnotations()) { arg.setAnnotationInstance(anno); Log.finer("Param Annotation is: {0}, {1}", anno, anno.getClass().getName()); if (BodyParam.class.isInstance(anno)) { BodyParam bodyAnno = (BodyParam) (anno); arg.setType("BodyParam"); if (empty(bodyAnno.value())) { arg.setName(param.getName()); } else { arg.setName(((BodyParam) anno).value()); } arg.setAnnotationClass(BodyParam.class); arg.setRequired(bodyAnno.required()); arg.setEmailParam(bodyAnno.isEmail()); arg.setMinLength(bodyAnno.minLength()); arg.setAllowEmpty(bodyAnno.allowEmpty()); if (!empty(bodyAnno.validationPattern())) { arg.setValidationPattern(Pattern.compile(bodyAnno.validationPattern())); } } else if (ObjectParam.class.isInstance(anno)) { ObjectParam oParam = (ObjectParam) anno; arg.setType("ObjectParam"); arg.setName("noop"); if (oParam.targetClass() == null || oParam.targetClass().equals(Object.class)) { arg.setTargetClass(param.getType()); } else { arg.setTargetClass(oParam.targetClass()); } arg.setAnnotationClass(ObjectParam.class); } else if (MapParam.class.isInstance(anno)) { arg.setType("MapParam"); arg.setName("noop"); arg.setAnnotationClass(MapParam.class); } else if (QueryParam.class.isInstance(anno)) { arg.setType("QueryParam"); arg.setName(((QueryParam) anno).value()); arg.setAnnotationClass(QueryParam.class); } else if (PathParam.class.isInstance(anno)) { arg.setType("PathParam"); arg.setName(((PathParam) anno).value()); arg.setAnnotationClass(PathParam.class); } else if (DefaultValue.class.isInstance(anno)) { arg.setDefaultValue(((DefaultValue) anno).value()); } else if (NotNull.class.isInstance(anno)) { arg.setRequired(true); } else if (Nullable.class.isInstance(anno)) { arg.setRequired(false); } else if (NotEmpty.class.isInstance(anno)) { arg.setRequired(true); arg.setAllowEmpty(false); } else if (Email.class.isInstance(anno)) { arg.setEmailParam(true); } } if (StringUtils.isEmpty(arg.getType())) { arg.setType("ObjectParam"); arg.setName(param.getName()); arg.setTargetClass(param.getType()); arg.setAnnotationClass(ObjectParam.class); } if (StringUtils.isEmpty(arg.getName())) { arg.setName(param.getName()); } endpoint.getArgs().add(arg); } } return endpoints; }
From source file:com.phoenixnap.oss.ramlapisync.parser.ResourceParser.java
/** * Extracts parameters from a method call and attaches these with the comments extracted from the javadoc * /* ww w . j av a2s .c om*/ * @param apiAction The Verb of the action containing these parametes * @param method The method to inspect * @param parameterComments The parameter comments associated with these parameters * @return A collection of parameters keyed by name */ protected Map<String, QueryParameter> extractQueryParameters(ActionType apiAction, Method method, Map<String, String> parameterComments) { // Since POST requests have a body we choose to keep all request data in one place as much as possible if (apiAction.equals(ActionType.POST) || method.getParameterCount() == 0) { return Collections.emptyMap(); } Map<String, QueryParameter> queryParams = new LinkedHashMap<>(); for (Parameter param : method.getParameters()) { if (isQueryParameter(param)) { // Lets skip resourceIds since these are going to be going in the URL ParamType simpleType = SchemaHelper.mapSimpleType(param.getType()); if (simpleType == null) { queryParams.putAll(SchemaHelper.convertClassToQueryParameters(param, javaDocs.getJavaDoc(param.getType()))); } else { // Check if we have comments String paramComment = parameterComments.get(param.getName()); queryParams.putAll(SchemaHelper.convertParameterToQueryParameter(param, paramComment)); } } } return queryParams; }
From source file:com.github.ljtfreitas.restify.http.spring.contract.metadata.reflection.SpringWebJavaMethodParameterMetadata.java
public SpringWebJavaMethodParameterMetadata(java.lang.reflect.Parameter javaMethodParameter, Class<?> targetClassType) { this.type = JavaType.of(new JavaTypeResolver(targetClassType).parameterizedTypeOf(javaMethodParameter)); this.pathParameter = AnnotationUtils .synthesizeAnnotation(javaMethodParameter.getAnnotation(PathVariable.class), javaMethodParameter); this.headerParameter = AnnotationUtils .synthesizeAnnotation(javaMethodParameter.getAnnotation(RequestHeader.class), javaMethodParameter); this.bodyParameter = AnnotationUtils .synthesizeAnnotation(javaMethodParameter.getAnnotation(RequestBody.class), javaMethodParameter); this.queryParameter = AnnotationUtils .synthesizeAnnotation(javaMethodParameter.getAnnotation(RequestParam.class), javaMethodParameter); this.name = Optional.ofNullable(pathParameter).map(PathVariable::value).filter(s -> !s.trim().isEmpty()) .orElseGet(() -> Optional.ofNullable(headerParameter).map(RequestHeader::value) .filter(s -> !s.trim().isEmpty()) .orElseGet(() -> Optional.ofNullable(queryParameter).map(RequestParam::value) .filter(s -> !s.trim().isEmpty()) .orElseGet(() -> Optional.ofNullable(javaMethodParameter.getName()).orElseThrow( () -> new IllegalStateException("Could not get the name of the parameter " + javaMethodParameter))))); this.serializerType = SpringWebEndpointMethodParameterSerializer.of(this); }
From source file:com.rapid.core.Application.java
public String getParameterValue(String parameterName) { // if there are parameters if (_parameters != null) { // loop them for (Parameter parameter : _parameters) { // check the name and return if match if (parameterName.equals(parameter.getName())) return parameter.getValue(); }//from w w w .j a va2 s . c o m } // return null if nothing found return null; }
From source file:com.rapid.core.Application.java
public String insertParameters(ServletContext servletContext, String string) { // check for non-null if (string != null) { // get pos of [[ int pos = string.indexOf("[["); // check string contains [[ if (pos > -1) { // if it has ]] thereafter if (string.indexOf("]]") > pos) { // webfolder is the client web facing resources if (string.contains("[[webfolder]]")) string = string.replace("[[webfolder]]", getWebFolder(this)); // appfolder and configfolder are the hidden server app resources if (string.contains("[[appfolder]]")) string = string.replace("[[appfolder]]", getConfigFolder(servletContext, _id, _version)); if (string.contains("[[configfolder]]")) string = string.replace("[[configfolder]]", getConfigFolder(servletContext, _id, _version)); // root folder is WEB-INF if (string.contains("[[rootfolder]]")) string = string.replace("[[rootfolder]]", servletContext.getRealPath("WEB-INF/")); // if we have parameters if (_parameters != null) { // loop them for (Parameter parameter : _parameters) { // define the match string String matchString = "[[" + parameter.getName() + "]]"; // if the match string is present replace it with the value if (string.contains(matchString)) string = string.replace(matchString, parameter.getValue()); }/*from ww w. j av a 2s .c o m*/ } } } } // return it return string; }
From source file:com.rapid.actions.Rapid.java
@Override public JSONObject doAction(RapidRequest rapidRequest, JSONObject jsonAction) throws Exception { JSONObject result = new JSONObject(); String action = jsonAction.getString("actionType"); RapidHttpServlet rapidServlet = rapidRequest.getRapidServlet(); ServletContext servletContext = rapidServlet.getServletContext(); String newAppId = null;/* w w w . jav a 2 s . c o m*/ // get the id of the app we're about to manipulate String appId = jsonAction.getString("appId"); // get the version of the app we're about to manipulate String appVersion = jsonAction.optString("version", null); // get the application we're about to manipulate Application app = rapidServlet.getApplications().get(appId, appVersion); // only if we had an application if (app != null) { // recreate the rapid request using the application we wish to manipulate RapidRequest rapidActionRequest = new RapidRequest(rapidServlet, rapidRequest.getRequest(), app); // check the action if ("GETAPPS".equals(action)) { // create a json array for holding our apps JSONArray jsonApps = new JSONArray(); // get a sorted list of the applications for (String id : rapidServlet.getApplications().getIds()) { // loop the versions for (String version : rapidServlet.getApplications().getVersions(id).keySet()) { // get the this application version Application application = rapidServlet.getApplications().get(id, version); // get the security SecurityAdapter security = application.getSecurityAdapter(); // now emulate the app we are looping RapidRequest appSecurityRequest = new RapidRequest(rapidServlet, rapidRequest.getRequest(), application); // check the user password if (security.checkUserPassword(appSecurityRequest, rapidRequest.getUserName(), rapidRequest.getUserPassword())) { // check the users permission to design this application boolean adminPermission = security.checkUserRole(appSecurityRequest, com.rapid.server.Rapid.DESIGN_ROLE); // if app is rapid do a further check if (adminPermission && "rapid".equals(application.getId())) adminPermission = application.getSecurityAdapter().checkUserRole(appSecurityRequest, com.rapid.server.Rapid.SUPER_ROLE); // if we got permssion - add this application to the list if (adminPermission) { // create a json object JSONObject jsonApplication = new JSONObject(); // add the details we want jsonApplication.put("value", application.getId()); jsonApplication.put("text", application.getName() + " - " + application.getTitle()); // add the object to the collection jsonApps.put(jsonApplication); // no need to check any further versions break; } } // password check } // version loop } // app loop // add the actions to the result result.put("applications", jsonApps); // if there was at least one app if (jsonApps.length() > 0) { // fetch the database drivers JSONArray jsonDatabaseDrivers = rapidServlet.getJsonDatabaseDrivers(); // check we have some database drivers if (jsonDatabaseDrivers != null) { // prepare the database driver collection we'll send JSONArray jsonDrivers = new JSONArray(); // loop what we have for (int i = 0; i < jsonDatabaseDrivers.length(); i++) { // get the item JSONObject jsonDatabaseDriver = jsonDatabaseDrivers.getJSONObject(i); // make a simpler send item JSONObject jsonDriver = new JSONObject(); // add type jsonDriver.put("value", jsonDatabaseDriver.get("class")); // add name jsonDriver.put("text", jsonDatabaseDriver.get("name")); // add to collection jsonDrivers.put(jsonDriver); } // add the database drivers to the result result.put("databaseDrivers", jsonDrivers); } // fetch the connection adapters JSONArray jsonConnectionAdapters = rapidServlet.getJsonConnectionAdapters(); // check we have some database drivers if (jsonConnectionAdapters != null) { // prepare the database driver collection we'll send JSONArray jsonAdapters = new JSONArray(); // loop what we have for (int i = 0; i < jsonConnectionAdapters.length(); i++) { // get the item JSONObject jsonConnectionAdapter = jsonConnectionAdapters.getJSONObject(i); // make a simpler send item JSONObject jsonSendAdapter = new JSONObject(); // add type jsonSendAdapter.put("value", jsonConnectionAdapter.get("class")); // add name jsonSendAdapter.put("text", jsonConnectionAdapter.get("name")); // add to collection jsonAdapters.put(jsonSendAdapter); } // add the database drivers to the result result.put("connectionAdapters", jsonAdapters); } // fetch the security adapters JSONArray jsonSecurityAdapters = rapidServlet.getJsonSecurityAdapters(); // check we have some security adapters if (jsonSecurityAdapters != null) { // prepare the security adapter collection we'll send JSONArray jsonAdapters = new JSONArray(); // loop what we have for (int i = 0; i < jsonSecurityAdapters.length(); i++) { // get the item JSONObject jsonSecurityAdapter = jsonSecurityAdapters.getJSONObject(i); // make a simpler send item JSONObject jsonSendAdapter = new JSONObject(); // add type jsonSendAdapter.put("value", jsonSecurityAdapter.get("type")); // add name jsonSendAdapter.put("text", jsonSecurityAdapter.get("name")); // add canManageRoles jsonSendAdapter.put("canManageRoles", jsonSecurityAdapter.get("canManageRoles")); // add canManageUsers jsonSendAdapter.put("canManageUsers", jsonSecurityAdapter.get("canManageUsers")); // add canManageUserRoles jsonSendAdapter.put("canManageUserRoles", jsonSecurityAdapter.get("canManageUserRoles")); // add to collection jsonAdapters.put(jsonSendAdapter); } // add the security adapters to the result result.put("securityAdapters", jsonAdapters); } // fetch the form adapters JSONArray jsonFormAdapters = rapidServlet.getJsonFormAdapters(); // prepare the collection we'll send JSONArray jsonAdapters = new JSONArray(); // create an entry for no form adapter JSONObject jsonSendAdapter = new JSONObject(); // no value jsonSendAdapter.put("value", ""); // None as text jsonSendAdapter.put("text", "None"); // add the None member first jsonAdapters.put(jsonSendAdapter); // check we have some database drivers if (jsonFormAdapters != null) { // loop what we have for (int i = 0; i < jsonFormAdapters.length(); i++) { // get the item JSONObject jsonAdapter = jsonFormAdapters.getJSONObject(i); // make a simpler send item jsonSendAdapter = new JSONObject(); // add type jsonSendAdapter.put("value", jsonAdapter.get("type")); // add name jsonSendAdapter.put("text", jsonAdapter.get("name")); // add to collection jsonAdapters.put(jsonSendAdapter); } // add the database drivers to the result result.put("formAdapters", jsonAdapters); } // prepare the collection we'll send JSONArray jsonThemes = new JSONArray(); // create an entry for no template JSONObject jsonTheme = new JSONObject(); // no value jsonTheme.put("value", ""); // None as text jsonTheme.put("text", "None"); // add the None member first jsonThemes.put(jsonTheme); // get the themes List<Theme> themes = rapidServlet.getThemes(); // check we have some if (themes != null) { // loop what we have for (Theme theme : themes) { // make a simpler send item jsonTheme = new JSONObject(); // add type jsonTheme.put("value", theme.getType()); // add name jsonTheme.put("text", theme.getName()); // add to collection jsonThemes.put(jsonTheme); } // add the database drivers to the result result.put("themes", jsonThemes); } // process the actions and only send the name and type JSONArray jsonSendActions = new JSONArray(); JSONArray jsonActions = rapidServlet.getJsonActions(); for (int i = 0; i < jsonActions.length(); i++) { JSONObject jsonSysAction = jsonActions.getJSONObject(i); // do not send the rapid action if (!"rapid".equals(jsonSysAction.getString("type"))) { JSONObject jsonSendAction = new JSONObject(); jsonSendAction.put("name", jsonSysAction.get("name")); jsonSendAction.put("type", jsonSysAction.get("type")); jsonSendActions.put(jsonSendAction); } } // add the actions to the result result.put("actions", jsonSendActions); // process the controls and only send the name and type for canUserAdd JSONArray jsonSendControls = new JSONArray(); JSONArray jsonControls = rapidServlet.getJsonControls(); for (int i = 0; i < jsonControls.length(); i++) { JSONObject jsonSysControl = jsonControls.getJSONObject(i); // only present controls users can add if (jsonSysControl.optBoolean("canUserAdd")) { JSONObject jsonSendControl = new JSONObject(); jsonSendControl.put("name", jsonSysControl.get("name")); jsonSendControl.put("type", jsonSysControl.get("type")); jsonSendControls.put(jsonSendControl); } } // add the controls to the result result.put("controls", jsonSendControls); // add the devices result.put("devices", rapidServlet.getDevices()); } // at least one app check // add the current userName to the result result.put("userName", rapidRequest.getUserName()); } else if ("GETVERSIONS".equals(action)) { // prepare a json array we're going to include in the result JSONArray jsonVersions = new JSONArray(); // get the versions Versions versions = rapidServlet.getApplications().getVersions(appId); // if there are any if (versions != null) { // loop the list of applications sorted by id (with rapid last) for (Application application : versions.sort()) { // get the security SecurityAdapter security = application.getSecurityAdapter(); // now emulate the app we are looping RapidRequest appSecurityRequest = new RapidRequest(rapidServlet, rapidRequest.getRequest(), application); // check the user password if (security.checkUserPassword(appSecurityRequest, rapidRequest.getUserName(), rapidRequest.getUserPassword())) { // check the users permission to administer this application boolean adminPermission = security.checkUserRole(appSecurityRequest, com.rapid.server.Rapid.ADMIN_ROLE); // if app is rapid do a further check if (adminPermission && "rapid".equals(application.getId())) adminPermission = application.getSecurityAdapter().checkUserRole(appSecurityRequest, com.rapid.server.Rapid.SUPER_ROLE); // check the RapidDesign role is present in the users roles for this application if (adminPermission) { // make a json object for this version JSONObject jsonVersion = new JSONObject(); // add the version jsonVersion.put("value", application.getVersion()); // derive the text String text = application.getVersion(); // if live add some if (application.getStatus() == 1) text += " - (Live)"; // add the title jsonVersion.put("text", text); // put the entry into the collection jsonVersions.put(jsonVersion); } // design permission } // password check } // versions loop } // got versions check // add the versions to the result result.put("versions", jsonVersions); } else if ("GETVERSION".equals(action)) { // get the security SecurityAdapter security = app.getSecurityAdapter(); // password check if (security.checkUserPassword(rapidActionRequest, rapidRequest.getUserName(), rapidRequest.getUserPassword())) { // check the users permission to design this application boolean adminPermission = security.checkUserRole(rapidActionRequest, com.rapid.server.Rapid.DESIGN_ROLE); // if app is rapid do a further check if (adminPermission && "rapid".equals(app.getId())) adminPermission = app.getSecurityAdapter().checkUserRole(rapidActionRequest, com.rapid.server.Rapid.SUPER_ROLE); if (adminPermission) { // add the name result.put("name", app.getName()); // add the version result.put("version", app.getVersion()); // add the status result.put("status", app.getStatus()); // add the title result.put("title", app.getTitle()); // add the description result.put("description", app.getDescription()); // add the form adapter result.put("formAdapterType", app.getFormAdapterType()); // add whether to show control ids result.put("showControlIds", app.getShowControlIds()); // add whether to show action ids result.put("showActionIds", app.getShowActionIds()); // create a simplified array to hold the pages JSONArray jsonPages = new JSONArray(); // retrieve the pages List<PageHeader> pages = app.getPages().getSortedPages(); // check we have some if (pages != null) { for (PageHeader page : pages) { JSONObject jsonPage = new JSONObject(); jsonPage.put("text", page.getName() + " - " + page.getTitle()); jsonPage.put("value", page.getId()); jsonPages.put(jsonPage); } } // add the pages result.put("pages", jsonPages); // add the start page Id result.put("startPageId", app.getStartPageId()); // add the styles result.put("themeType", app.getThemeType()); result.put("styles", app.getStyles()); result.put("statusBarColour", app.getStatusBarColour()); result.put("statusBarHighlightColour", app.getStatusBarHighlightColour()); result.put("statusBarTextColour", app.getStatusBarTextColour()); result.put("statusBarIconColour", app.getStatusBarIconColour()); // add the security adapter result.put("securityAdapter", app.getSecurityAdapterType()); // add whether there is device security result.put("deviceSecurity", app.getDeviceSecurity()); // add whether password is retained on Rapid Mobile result.put("noRetainPassword", app.getNoRetainPassword()); // add action types result.put("actionTypes", app.getActionTypes()); // add control types result.put("controlTypes", app.getControlTypes()); // create an array for the database connections JSONArray jsonDatabaseConnections = new JSONArray(); // check we have some database connections if (app.getDatabaseConnections() != null) { // remember the index int index = 0; // loop and add to jsonArray for (DatabaseConnection dbConnection : app.getDatabaseConnections()) { // create an object for the database connection JSONObject jsonDBConnection = new JSONObject(); // set the index as the value jsonDBConnection.put("value", index); // set the name as the text jsonDBConnection.put("text", dbConnection.getName()); // add to our collection jsonDatabaseConnections.put(jsonDBConnection); // inc the index index++; } } // add database connections result.put("databaseConnections", jsonDatabaseConnections); // create an array for the soa webservices JSONArray jsonWebservices = new JSONArray(); // check we have some webservices if (app.getWebservices() != null) { // sort them by their name Collections.sort(app.getWebservices(), new Comparator<Webservice>() { @Override public int compare(Webservice o1, Webservice o2) { if (o1 == null) { return -1; } else if (o2 == null) { return 1; } else { return Comparators.AsciiCompare(o1.getName(), o2.getName(), false); } } }); // loop and add to jsonArray for (Webservice webservice : app.getWebservices()) { jsonWebservices.put(webservice.getName()); } } // add webservices connections result.put("webservices", jsonWebservices); // create an array for the parameters JSONArray jsonParameters = new JSONArray(); // check we have some webservices if (app.getParameters() != null) { // sort them by their name Collections.sort(app.getParameters(), new Comparator<Parameter>() { @Override public int compare(Parameter o1, Parameter o2) { if (o1 == null) { return -1; } else if (o2 == null) { return 1; } else { return Comparators.AsciiCompare(o1.getName(), o2.getName(), false); } } }); // loop and add to jsonArray for (Parameter parameter : app.getParameters()) { jsonParameters.put(parameter.getName()); } } // add webservices connections result.put("parameters", jsonParameters); // create an array for the resources JSONArray jsonResources = new JSONArray(); // check we have some resources if (app.getAppResources() != null) { // sort them by their name Collections.sort(app.getAppResources(), new Comparator<Resource>() { @Override public int compare(Resource o1, Resource o2) { if (o1 == null) { return -1; } else if (o2 == null) { return 1; } else { return Comparators.AsciiCompare(o1.getName(), o2.getName(), false); } } }); // loop and adds2 to jsonArray for (Resource resource : app.getAppResources()) { jsonResources.put(resource.getName()); } } // add webservices connections result.put("resources", jsonResources); // create an array for the app backups JSONArray jsonAppBackups = new JSONArray(); // check we have some app backups if (app.getApplicationBackups(rapidServlet) != null) { // loop and add to jsonArray for (Application.Backup appBackup : app.getApplicationBackups(rapidServlet)) { // create the backup json object JSONObject jsonBackup = new JSONObject(); // create a date formatter //SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); // populate it jsonBackup.append("id", appBackup.getId()); jsonBackup.append("date", rapidServlet.getLocalDateTimeFormatter().format(appBackup.getDate())); jsonBackup.append("user", appBackup.getUser()); jsonBackup.append("size", appBackup.getSize()); // add it jsonAppBackups.put(jsonBackup); } } // add webservices connections result.put("appbackups", jsonAppBackups); // add the max number of application backups result.put("appBackupsMaxSize", app.getApplicationBackupsMaxSize()); // create an array for the page backups JSONArray jsonPageBackups = new JSONArray(); // check we have some app backups if (app.getPageBackups(rapidServlet) != null) { // loop and add to jsonArray for (Application.Backup appBackup : app.getPageBackups(rapidServlet)) { // create the backup json object JSONObject jsonBackup = new JSONObject(); // populate it jsonBackup.append("id", appBackup.getId()); jsonBackup.append("page", appBackup.getName()); jsonBackup.append("date", rapidServlet.getLocalDateTimeFormatter().format(appBackup.getDate())); jsonBackup.append("user", appBackup.getUser()); jsonBackup.append("size", appBackup.getSize()); // add it jsonPageBackups.put(jsonBackup); } } // add webservices connections result.put("pagebackups", jsonPageBackups); // add the max number of page backups result.put("pageBackupsMaxSize", app.getPageBackupsMaxSize()); } // permission check } // password check } else if ("GETDBCONN".equals(action)) { // get the index int index = jsonAction.getInt("index"); // get the database connections List<DatabaseConnection> dbConns = app.getDatabaseConnections(); // check we have database connections if (dbConns != null) { // check the index we where given will retieve a database connection if (index > -1 && index < dbConns.size()) { // get the database connection DatabaseConnection dbConn = dbConns.get(index); // add the name result.put("name", dbConn.getName()); // add the driver type result.put("driver", dbConn.getDriverClass()); // add the connection adapter class result.put("connectionString", dbConn.getConnectionString()); // add the connection adapter class result.put("connectionAdapter", dbConn.getConnectionAdapterClass()); // add the user name result.put("userName", dbConn.getUserName()); // add the password if ("".equals(dbConn.getPassword())) { result.put("password", ""); } else { result.put("password", "********"); } } } } else if ("GETSOA".equals(action)) { // retain the JSON object which we will return JSONObject jsonWebservice; // get the index int index = jsonAction.getInt("index"); // get the database connections List<Webservice> webservices = app.getWebservices(); // check we have database connections if (webservices != null) { // check the index we where given will retieve a database connection if (index > -1 && index < webservices.size()) { // get the webservice from the collection Webservice webservice = webservices.get(index); // convert it into a json object jsonWebservice = new JSONObject(webservice); // add the type jsonWebservice.put("type", webservice.getClass().getSimpleName()); // add the user to the response result.put("webservice", jsonWebservice); } } } else if ("GETSEC".equals(action)) { // get the securityAdapter type from the jsonAction String securityAdapterType = jsonAction.getString("securityAdapter"); // assume the current class has not been set String securityAdapterClass = ""; // get all of the available security adapters JSONArray jsonSecurityAdapters = rapidServlet.getJsonSecurityAdapters(); // check we have some security adapters if (jsonSecurityAdapters != null) { // loop what we have for (int i = 0; i < jsonSecurityAdapters.length(); i++) { // get the item JSONObject jsonSecurityAdapter = jsonSecurityAdapters.getJSONObject(i); // if this is the type that came in if (securityAdapterType.equals(jsonSecurityAdapter.getString("type"))) { // retain the name securityAdapterClass = jsonSecurityAdapter.getString("class"); // we're done break; } } } // get the current app security adapter SecurityAdapter security = app.getSecurityAdapter(); // if we got one if (security != null) { // if it's different from what came in if (!securityAdapterClass.equals(security.getClass().getCanonicalName())) { // set the new security adapter app.setSecurityAdapter(servletContext, securityAdapterType); // read it back again security = app.getSecurityAdapter(); } // recreate the rapidRequest with the selected app (so app parameters etc are available from the app in the rapidRequest) rapidRequest = new RapidRequest(rapidServlet, rapidRequest.getRequest(), app); // get the roles Roles roles = security.getRoles(rapidRequest); // add the entire roles collection to the response result.put("roles", roles); // if we had some roles if (roles != null) { // prepapre a list of just the role names (not descriptions) List<String> roleNames = new ArrayList<String>(); // loop the roles for (Role role : roles) { roleNames.add(role.getName()); } // add the rolenames result.put("roleNames", roleNames); } // add the users to the response result.put("users", security.getUsers(rapidRequest)); } // got security } else if ("GETUSER".equals(action)) { // get the userName from the incoming json String userName = jsonAction.getString("userName"); // recreate the rapidRequest with the selected app (so app parameters etc are available from the app in the rapidRequest) rapidRequest = new RapidRequest(rapidServlet, rapidRequest.getRequest(), app); // derive whether this is the current user boolean currentUser = userName.toLowerCase().equals(rapidRequest.getUserName().toLowerCase()); // now set the rapid request user to the user we want rapidRequest.setUserName(userName); // get the app security SecurityAdapter security = app.getSecurityAdapter(); // get the user User user = security.getUser(rapidRequest); // add the user name result.put("userName", userName); // add the user description result.put("description", user.getDescription()); // set the default password mask String password = "********"; // if the password is blank reflect this in what we send if ("".equals(user.getPassword())) password = ""; // add a masked password result.put("password", password); // add the device details result.put("deviceDetails", user.getDeviceDetails()); // if we got one if (security != null) { // get the users roles List<String> roles = security.getUser(rapidRequest).getRoles(); // add the users to the response result.put("roles", roles); } // got security // if this user record is for the logged in user result.put("currentUser", currentUser); } else if ("GETUSERS".equals(action)) { // get the app security SecurityAdapter security = app.getSecurityAdapter(); // if we got one if (security != null) { // recreate the rapidRequest with the selected app (so app parameters etc are available from the app in the rapidRequest) rapidRequest = new RapidRequest(rapidServlet, rapidRequest.getRequest(), app); // get the users Users users = security.getUsers(rapidRequest); // add the users result.put("users", users); // add the current user result.put("currentUser", rapidRequest.getUserName()); } // got security } else if ("GETPARAM".equals(action)) { // retrieve the index int index = jsonAction.getInt("index"); // create the json object JSONObject jsonParameter = new JSONObject(); // check the parameters if (app.getParameters() != null) { // check we have the one requested if (index >= 0 && index < app.getParameters().size()) { // get the parameter Parameter parameter = app.getParameters().get(index); // add the name and value jsonParameter.put("name", parameter.getName()); jsonParameter.put("value", parameter.getValue()); } } // add the parameter to the result result.put("parameter", jsonParameter); } else if ("GETRESOURCE".equals(action)) { // retrieve the index int index = jsonAction.getInt("index"); // create the json object JSONObject jsonParameter = new JSONObject(); // check the resources if (app.getAppResources() != null) { // check we have the one requested if (index >= 0 && index < app.getAppResources().size()) { // get the parameter Resource resource = app.getAppResources().get(index); // add the name and value jsonParameter.put("name", resource.getName()); jsonParameter.put("type", resource.getType()); jsonParameter.put("value", resource.getContent()); } } // add the parameter to the result result.put("resource", jsonParameter); } else if ("GETDEVICE".equals(action)) { // retrieve the index int index = jsonAction.getInt("index"); // create the json object JSONObject jsonDevice = new JSONObject(); // reference to all devices Devices devices = rapidServlet.getDevices(); // check we have devices if (devices != null) { // check the index is ok if (index >= 0 && index < devices.size()) { // get the device Device device = rapidServlet.getDevices().get(index); // add the name and value jsonDevice.put("name", device.getName()); jsonDevice.put("width", device.getWidth()); jsonDevice.put("height", device.getHeight()); jsonDevice.put("ppi", device.getPPI()); jsonDevice.put("scale", device.getScale()); } } // add the parameter to the result result.put("device", jsonDevice); } else if ("GETSESSIONS".equals(action)) { // create the json object JSONObject jsonDetails = new JSONObject(); // create a json array JSONArray jsonSessions = new JSONArray(); // get the sessions Map<String, HttpSession> sessions = RapidSessionListener.getSessions(); // check we got some if (sessions != null) { // get a date formatter SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); // loop them for (String key : sessions.keySet()) { // get the session HttpSession httpSession = sessions.get(key); // create object JSONObject jsonSession = new JSONObject(); // add name jsonSession.put("name", (String) httpSession.getAttribute(RapidFilter.SESSION_VARIABLE_USER_NAME)); // get a new date from the time Date accessTime = new Date(httpSession.getLastAccessedTime()); // add last access jsonSession.put("access", df.format(accessTime)); // add to collections jsonSessions.put(jsonSession); } } // add sessions jsonDetails.put("sessions", jsonSessions); return jsonDetails; } else if ("RELOADACTIONS".equals(action)) { // load actions and set the result message result.put("message", RapidServletContextListener.loadActions(servletContext) + " actions reloaded"); } else if ("RELOADCONTROLS".equals(action)) { // load controls and set the result message result.put("message", RapidServletContextListener.loadControls(servletContext) + " controls reloaded"); } else if ("RELOADAPPLICATIONS".equals(action)) { // load applications and set the result message result.put("message", RapidServletContextListener.loadApplications(servletContext) + " applications reloaded"); } else if ("RELOADADAPTERS".equals(action)) { // load adapters and set the result message int databaseDrivers = 0; int connectionAdapters = 0; int securityAdapters = 0; int forms = 0; int themes = 0; int devices = 0; databaseDrivers = RapidServletContextListener.loadDatabaseDrivers(servletContext); connectionAdapters = RapidServletContextListener.loadConnectionAdapters(servletContext); securityAdapters = RapidServletContextListener.loadSecurityAdapters(servletContext); forms = RapidServletContextListener.loadFormAdapters(servletContext); themes = RapidServletContextListener.loadThemes(servletContext); devices = Devices.load(servletContext).size(); result.put("message", databaseDrivers + " database driver" + (databaseDrivers == 1 ? "" : "s") + ", " + connectionAdapters + " connection adapter" + (connectionAdapters == 1 ? "" : "s") + ", " + securityAdapters + " security adapter" + (securityAdapters == 1 ? "" : "s") + ", " + forms + " form adapter" + (forms == 1 ? "" : "s") + ", " + themes + " theme" + (themes == 1 ? "" : "s") + ", " + devices + " device" + (devices == 1 ? "" : "s") + " reloaded"); } else if ("RELOADVERSION".equals(action)) { // look for an application file in the application folder File applicationFile = new File(app.getConfigFolder(servletContext) + "/application.xml"); // close the existing app app.close(servletContext); // reload the application from file Application reloadedApplication = Application.load(servletContext, applicationFile); // replace it into the applications collection rapidServlet.getApplications().put(reloadedApplication); // load applications and set the result message result.put("message", "Version reloaded"); } else if ("SAVEAPP".equals(action)) { // get the new values String id = Files.safeName(jsonAction.getString("name")).toLowerCase(); String version = Files.safeName(jsonAction.getString("saveVersion")); int status = jsonAction.optInt("status"); String name = jsonAction.getString("name"); String title = jsonAction.getString("title"); String description = jsonAction.getString("description"); String formAdapter = jsonAction.optString("formAdapter"); String startPageId = jsonAction.optString("startPageId", ""); boolean showControlIds = jsonAction.optBoolean("showControlIds"); boolean showActionIds = jsonAction.optBoolean("showActionIds"); // assume we do not need to update the applications drop down boolean appUpdated = false; // if the id or version is now different we need to move it, rebuilding all the resources as we go if (!app.getId().equals(id) || !app.getVersion().equals(version)) { // copy the app to the id/version, returning the new one for saving app = app.copy(rapidServlet, rapidRequest, id, version, true, true); // mark that it has been updated appUpdated = true; } // update the values app.setName(name); app.setStatus(status); app.setTitle(title); app.setDescription(description); app.setFormAdapterType(formAdapter); app.setStartPageId(startPageId); app.setShowControlIds(showControlIds); app.setShowActionIds(showActionIds); // save app.save(rapidServlet, rapidRequest, true); // add the application to the response result.put("message", "Application details saved"); result.put("update", appUpdated); } else if ("SAVESTYLES".equals(action)) { String themeType = jsonAction.getString("themeType"); String styles = jsonAction.getString("styles"); String statusBarColour = jsonAction.optString("statusBarColour"); String statusBarHighlightColour = jsonAction.optString("statusBarHighlightColour"); String statusBarTextColour = jsonAction.optString("statusBarTextColour"); String statusBarIconColour = jsonAction.optString("statusBarIconColour"); app.setThemeType(themeType); app.setStyles(styles); app.setStatusBarColour(statusBarColour); app.setStatusBarHighlightColour(statusBarHighlightColour); app.setStatusBarTextColour(statusBarTextColour); app.setStatusBarIconColour(statusBarIconColour); app.save(rapidServlet, rapidRequest, true); // add the application to the response result.put("message", "Styles saved"); } else if ("SAVEDBCONN".equals(action)) { // get the index int index = jsonAction.getInt("index"); // get the database connections List<DatabaseConnection> dbConns = app.getDatabaseConnections(); // remeber whether we found the connection boolean foundConnection = false; // check we have database connections if (dbConns != null) { // check the index we where given will retieve a database connection if (index > -1 && index < dbConns.size()) { // get the database connection DatabaseConnection dbConn = dbConns.get(index); // set the databse connection properties dbConn.setName(jsonAction.getString("name")); dbConn.setDriverClass(jsonAction.getString("driver")); dbConn.setConnectionString(jsonAction.getString("connectionString")); dbConn.setConnectionAdapterClass(jsonAction.getString("connectionAdapter")); dbConn.setUserName(jsonAction.getString("userName")); String password = jsonAction.getString("password"); // only set the password if it's different from the default if (!"********".equals(password)) dbConn.setPassword(password); // reset the dbconn so the adapter is re-initialised with any changes dbConn.reset(); // save the app app.save(rapidServlet, rapidRequest, true); foundConnection = true; // add the application to the response result.put("message", "Database connection saved"); } } if (!foundConnection) result.put("message", "Database connection could not be found"); } else if ("SAVESOASQL".equals(action)) { // get the index int index = jsonAction.getInt("index"); // get the webservices List<Webservice> webservices = app.getWebservices(); // remeber whether we found the connection boolean foundWebservice = false; // check we have database connections if (webservices != null) { // check the index we where given will retieve a database connection if (index > -1 && index < webservices.size()) { // get the web service connection Webservice webservice = webservices.get(index); // check the type if (webservice.getClass() == SQLWebservice.class) { // cast to our type SQLWebservice sqlWebservice = (SQLWebservice) webservice; // set the webservice properties sqlWebservice.setName(jsonAction.getString("name").trim()); sqlWebservice.setDatabaseConnectionIndex(jsonAction.getInt("databaseConnectionIndex")); // get the rest of the complex details JSONObject jsonDetails = jsonAction.getJSONObject("details"); // set the sql sqlWebservice.setSQL(jsonDetails.getString("SQL").trim()); // get the json request JSONObject jsonRequestSchmea = jsonDetails.optJSONObject("requestSchema"); // check it if (jsonRequestSchmea != null) { // get the root element JSONObject jsonElement = jsonRequestSchmea.getJSONObject("rootElement"); // get its name String elementName = jsonElement.optString("name").trim(); // create the schema SOASchema requestSchema = new SOASchema(elementName); // get any child elements JSONArray jsonChildElements = jsonElement.optJSONArray("childElements"); // check if (jsonChildElements != null) { // loop for (int i = 0; i < jsonChildElements.length(); i++) { // get child element JSONObject jsonChildElement = jsonChildElements.getJSONObject(i); // get child element name String childElementName = jsonChildElement.getString("name").trim(); // get its data type int childElementDataType = jsonChildElement.optInt("dataType", 1); // add child element to schema (and get a reference) SOASchemaElement soaChildElement = requestSchema .addChildElement(childElementName); // set the data type soaChildElement.setDataType(childElementDataType); // add any restrictions soaChildElement.setRestrictions( getRestrictions(jsonChildElement.optJSONArray("restrictions"))); } } // set the schema property sqlWebservice.setRequestSchema(requestSchema); } // get the json response JSONObject jsonResponseSchema = jsonDetails.optJSONObject("responseSchema"); // check it if (jsonResponseSchema != null) { // get the root element JSONObject jsonElement = jsonResponseSchema.getJSONObject("rootElement"); // get its name String elementName = jsonElement.optString("name"); // get if array boolean isArray = Boolean.parseBoolean(jsonElement.optString("isArray")); // create the schema SOASchema responseSchema = new SOASchema(elementName, isArray); // get any child elements JSONArray jsonChildElements = jsonElement.optJSONArray("childElements"); // check if (jsonChildElements != null) { // loop for (int i = 0; i < jsonChildElements.length(); i++) { // get child element JSONObject jsonChildElement = jsonChildElements.getJSONObject(i); // get child element name String childElementName = jsonChildElement.getString("name").trim(); // get child element field String childElementField = jsonChildElement.optString("field", ""); // get its data type int childElementDataType = jsonChildElement.optInt("dataType", 1); // add child element to schema (and get reference) SOASchemaElement soaChildElement = responseSchema .addChildElement(childElementName); // set field soaChildElement.setField(childElementField); // set data type soaChildElement.setDataType(childElementDataType); // add any restrictions soaChildElement.setRestrictions( getRestrictions(jsonChildElement.optJSONArray("restrictions"))); } } // set the schema property sqlWebservice.setResponseSchema(responseSchema); } // save the app app.save(rapidServlet, rapidRequest, true); foundWebservice = true; // add the application to the response result.put("message", "SQL webservice saved"); } } } if (!foundWebservice) result.put("message", "SQL webservice could not be found"); } else if ("SAVESOAJAVA".equals(action)) { // get the index int index = jsonAction.getInt("index"); // get the webservices List<Webservice> webservices = app.getWebservices(); // remeber whether we found the connection boolean foundWebservice = false; // check we have database connections if (webservices != null) { // check the index we where given will retieve a database connection if (index > -1 && index < webservices.size()) { // get the web service connection Webservice webservice = webservices.get(index); // check the type if (webservice.getClass() == JavaWebservice.class) { // cast to our type JavaWebservice javaWebservice = (JavaWebservice) webservice; // set the webservice properties javaWebservice.setName(jsonAction.getString("name").trim()); javaWebservice.setClassName(jsonAction.getString("className").trim()); // save the app app.save(rapidServlet, rapidRequest, true); foundWebservice = true; // add the application to the response result.put("message", "Java webservice saved"); } } } if (!foundWebservice) result.put("message", "Java webservice could not be found"); } else if ("SAVESECURITYADAPT".equals(action)) { String securityAdapter = jsonAction.getString("securityAdapter").trim(); boolean deviceSecurity = jsonAction.optBoolean("deviceSecurity"); boolean noRetainPassword = jsonAction.optBoolean("noRetainPassword"); app.setSecurityAdapterType(securityAdapter); app.setDeviceSecurity(deviceSecurity); app.setNoRetainPassword(noRetainPassword); app.save(rapidServlet, rapidRequest, true); // add the application to the response result.put("message", "Security adapter saved"); } else if ("SAVEACTIONS".equals(action)) { JSONArray jsonActionTypes = jsonAction.getJSONArray("actionTypes"); ArrayList<String> actionTypes = new ArrayList<String>(); for (int i = 0; i < jsonActionTypes.length(); i++) { actionTypes.add(jsonActionTypes.getString(i).trim()); } // make sure some required actions are there if this is the rapid app if ("rapid".equals(appId)) { String[] requiredActionTypes = { "rapid", "ajax", "control", "custom", "dataCopy", "existing", "validation" }; for (String actionType : requiredActionTypes) { if (!actionTypes.contains(actionType)) actionTypes.add(actionType); } } // sort the types Collections.sort(actionTypes); // put the list into the app app.setActionTypes(actionTypes); // save it app.save(rapidServlet, rapidRequest, true); // add the message to the response result.put("message", actionTypes.size() + " actions"); } else if ("SAVECONTROLS".equals(action)) { JSONArray jsonControlTypes = jsonAction.getJSONArray("controlTypes"); ArrayList<String> controlTypes = new ArrayList<String>(); for (int i = 0; i < jsonControlTypes.length(); i++) { controlTypes.add(jsonControlTypes.getString(i).trim()); } // make sure some required controls are there if this is the rapid app if ("rapid".equals(appId)) { String[] requiredControlTypes = { "button", "dataStore", "dropdown", "grid", "image", "input", "page", "table", "tabGroup", "text" }; for (String controlType : requiredControlTypes) { if (!controlTypes.contains(controlType)) controlTypes.add(controlType); } } // sort the types Collections.sort(controlTypes); // add the controls to the app app.setControlTypes(controlTypes); // save app.save(rapidServlet, rapidRequest, true); // add the message to the response result.put("message", controlTypes.size() + " controls"); } else if ("REBUILDPAGES".equals(action)) { // add the application to the response result.put("message", "This feature is not supported"); } else if ("NEWAPP".equals(action)) { // retrieve the inputs from the json String name = jsonAction.getString("name").trim(); String version = jsonAction.getString("newVersion").trim(); String title = jsonAction.optString("title").trim(); String type = jsonAction.optString("type"); String themeType = jsonAction.optString("themeType"); String description = jsonAction.optString("description").trim(); // create a new application with our reusable, private method Application newApp = createApplication(rapidServlet, rapidRequest, name, version, title, type, themeType, description); // set the result message result.put("message", "Application " + app.getTitle() + " created"); // set the result appId result.put("appId", newApp.getId()); // set the result version result.put("version", newApp.getVersion()); } else if ("DELAPP".equals(action)) { // check we have an app if (app != null) { // get the collection of applications and versions Applications applications = rapidServlet.getApplications(); // get all versions of this application Versions versions = applications.getVersions(app.getId()); // get the number of version int versionCount = versions.size(); // make a list of versions ArrayList<String> versionNumbers = new ArrayList<String>(); // loop the versions for (String version : versions.keySet()) { versionNumbers.add(version); } // loop the versionNumbers for (String versionNumber : versionNumbers) { // get this version Application v = applications.get(app.getId(), versionNumber); // delete it v.delete(rapidServlet, rapidActionRequest, true); } // set the result message result.put("message", versionCount + " application version" + (versionCount == 1 ? "" : "s") + " deleted for " + app.getName()); } } else if ("DUPAPP".equals(action)) { String version = jsonAction.getString("newVersion").trim(); String title = jsonAction.optString("title").trim(); String description = jsonAction.optString("description").trim(); // use the application.copy routine (this updates the status and created time) Application dupApp = app.copy(rapidServlet, rapidRequest, app.getId(), version, false, false); // set the new title into the duplicate dupApp.setTitle(title); // set the new description dupApp.setDescription(description); // save the duplicate dupApp.save(rapidServlet, rapidRequest, false); // set the result message result.put("message", "Application " + app.getTitle() + " duplicated"); result.put("id", dupApp.getId()); result.put("version", dupApp.getVersion()); } else if ("NEWVERSION".equals(action)) { // retrieve the inputs from the json String id = jsonAction.getString("appId").trim(); String version = jsonAction.getString("newVersion").trim(); String title = jsonAction.optString("title").trim(); String description = jsonAction.optString("description").trim(); // create a new application with our reusable, private method Application newApp = createApplication(rapidServlet, rapidRequest, id, version, title, "", "", description); // set the result message result.put("message", "Version " + newApp.getVersion() + " created for " + newApp.getTitle()); // set the result appId result.put("appId", newApp.getId()); // set the result version result.put("version", newApp.getVersion()); // set the result message result.put("message", "Application " + app.getTitle() + " duplicated"); result.put("id", newApp.getId()); result.put("version", newApp.getVersion()); } else if ("DELVERSION".equals(action)) { // delete the application version if (app != null) app.delete(rapidServlet, rapidActionRequest, false); // set the result message result.put("message", "Version " + app.getVersion() + " deleted"); } else if ("NEWPAGE".equals(action)) { String id = jsonAction.getString("id").trim(); String name = jsonAction.getString("name").trim(); String title = jsonAction.optString("title").trim(); String description = jsonAction.optString("description").trim(); Page newPage = new Page(); newPage.setId(id); newPage.setName(name); newPage.setTitle(title); newPage.setDescription(description); newPage.setCreatedBy(rapidRequest.getUserName()); newPage.setCreatedDate(new Date()); // save the page to file newPage.save(rapidServlet, rapidActionRequest, app, false); // put the id in the result result.put("id", id); // set the result message result.put("message", "Page " + newPage.getTitle() + " created"); } else if ("DELPAGE".equals(action)) { // get the id String id = jsonAction.getString("id").trim(); // retrieve the page Page delPage = app.getPages().getPage(rapidRequest.getRapidServlet().getServletContext(), id); // delete it if we got one if (delPage != null) delPage.delete(rapidServlet, rapidActionRequest, app); // set the result message result.put("message", "Page " + delPage.getName() + " delete"); } else if ("NEWDBCONN".equals(action)) { // get the database connections List<DatabaseConnection> dbConns = app.getDatabaseConnections(); // instantiate if null if (dbConns == null) dbConns = new ArrayList<DatabaseConnection>(); // make the new database connection DatabaseConnection dbConn = new DatabaseConnection(servletContext, app, jsonAction.getString("name").trim(), jsonAction.getString("driver").trim(), jsonAction.getString("connectionString").trim(), jsonAction.getString("connectionAdapter").trim(), jsonAction.getString("userName").trim(), jsonAction.getString("password")); // add it to the collection dbConns.add(dbConn); // save the app app.save(rapidServlet, rapidRequest, true); // add the application to the response result.put("message", "Database connection added"); } else if ("DELDBCONN".equals(action)) { // get the index int index = jsonAction.getInt("index"); // get the database connections List<DatabaseConnection> dbConns = app.getDatabaseConnections(); // remeber whether we found the connection boolean foundConnection = false; // check we have database connections if (dbConns != null) { // check the index we where given will retieve a database connection if (index > -1 && index < dbConns.size()) { // remove the database connection dbConns.remove(index); // save the app try { app.save(rapidServlet, rapidRequest, true); } catch (Exception ex) { throw new JSONException(ex); } // add the application to the response result.put("message", "Database connection deleted"); } } if (!foundConnection) result.put("message", "Database connection could not be found"); } else if ("NEWSOA".equals(action)) { // the webservice we are about to make Webservice webservice = null; // get the type String type = jsonAction.getString("type"); if ("SQLWebservice".equals(type)) { // make the new SQL webservice webservice = new SQLWebservice(jsonAction.getString("name").trim()); } else if ("JavaWebservice".equals(type)) { // make the new Java class webservice webservice = new JavaWebservice(jsonAction.getString("name").trim()); } // if one was made if (webservice != null) { // add it to the collection app.getWebservices().add(webservice); // save the app app.save(rapidServlet, rapidRequest, true); // add the application to the response result.put("message", "SOA webservice added"); } else { // send message result.put("message", "Webservice type not recognised"); } } else if ("DELSOA".equals(action)) { // get the index int index = jsonAction.getInt("index"); // get the webservices List<Webservice> webservices = app.getWebservices(); // remeber whether we found the webservice boolean foundWebservice = false; // check we have database connections if (webservices != null) { // check the index we where given will retieve a database connection if (index > -1 && index < webservices.size()) { // remove the database connection webservices.remove(index); // save the app app.save(rapidServlet, rapidRequest, true); // add the application to the response result.put("message", "SOA webservice deleted"); } } if (!foundWebservice) result.put("message", "SOA webservice could not be found"); } else if ("NEWROLE".equals(action)) { // get the role name String roleName = jsonAction.getString("role").trim(); // get the role descrition String description = jsonAction.getString("description").trim(); // add the role app.getSecurityAdapter().addRole(rapidRequest, new Role(roleName, description)); // set the result message result.put("message", "Role added"); } else if ("DELROLE".equals(action)) { // get the role String role = jsonAction.getString("role").trim(); // delete the role app.getSecurityAdapter().deleteRole(rapidRequest, role); // set the result message result.put("message", "Role deleted"); } else if ("NEWUSER".equals(action)) { // get the userName String userName = jsonAction.getString("userName").trim(); // get the userDescription String description = jsonAction.optString("description", "").trim(); // get the password String password = jsonAction.getString("password"); // get the device details String deviceDetails = jsonAction.optString("deviceDetails"); // check for useAdmin boolean useAdmin = jsonAction.optBoolean("useAdmin"); // check for useDesign boolean useDesign = jsonAction.optBoolean("useDesign"); // get the security SecurityAdapter security = app.getSecurityAdapter(); // recreate the rapidRequest with the selected app (so app parameters etc are available from the app in the rapidRequest) rapidRequest = new RapidRequest(rapidServlet, rapidRequest.getRequest(), app); // add the user security.addUser(rapidRequest, new User(userName, description, password, deviceDetails)); // update the Rapid Request to have the new user name rapidRequest.setUserName(userName); // add role if we were given one if (useAdmin) security.addUserRole(rapidRequest, com.rapid.server.Rapid.ADMIN_ROLE); // add role if we were given one if (useDesign) security.addUserRole(rapidRequest, com.rapid.server.Rapid.DESIGN_ROLE); // set the result message result.put("message", "User added"); } else if ("DELUSER".equals(action)) { // get the userName String userName = jsonAction.getString("userName").trim(); // recreate the rapidRequest with the selected app (so app parameters etc are available from the app in the rapidRequest) rapidRequest = new RapidRequest(rapidServlet, rapidRequest.getRequest(), app); // override the standard request user rapidRequest.setUserName(userName); // delete the user app.getSecurityAdapter().deleteUser(rapidRequest); // remove any of their page locks app.removeUserPageLocks(servletContext, userName); // set the result message result.put("message", "User deleted"); } else if ("SAVEROLE".equals(action)) { // get the role String roleName = jsonAction.getString("role").trim(); // get the description String roleDescription = jsonAction.getString("description").trim(); // recreate the rapidRequest with the selected app (so app parameters etc are available from the app in the rapidRequest) rapidRequest = new RapidRequest(rapidServlet, rapidRequest.getRequest(), app); // update the role app.getSecurityAdapter().updateRole(rapidRequest, new Role(roleName, roleDescription)); // set the result message result.put("message", "Role details saved"); } else if ("NEWUSERROLE".equals(action)) { // get the userName String userName = jsonAction.getString("userName").trim(); // recreate the rapidRequest with the selected app (so app parameters etc are available from the app in the rapidRequest) rapidRequest = new RapidRequest(rapidServlet, rapidRequest.getRequest(), app); // override the standard request user rapidRequest.setUserName(userName); // get the role String role = jsonAction.getString("role").trim(); // add the user role app.getSecurityAdapter().addUserRole(rapidRequest, role); // set the result message result.put("message", "User role added"); } else if ("DELUSERROLE".equals(action)) { // get the userName String userName = jsonAction.getString("userName").trim(); // recreate the rapidRequest with the selected app (so app parameters etc are available from the app in the rapidRequest) rapidRequest = new RapidRequest(rapidServlet, rapidRequest.getRequest(), app); // override the standard request user rapidRequest.setUserName(userName); // get the role String role = jsonAction.getString("role").trim(); // add the user role app.getSecurityAdapter().deleteUserRole(rapidRequest, role); // set the result message result.put("message", "User role deleted"); } else if ("SAVEUSER".equals(action)) { // get the userName String userName = jsonAction.getString("userName").trim(); // recreate the rapidRequest with the selected app (so app parameters etc are available from the app in the rapidRequest) rapidRequest = new RapidRequest(rapidServlet, rapidRequest.getRequest(), app); // override the standard request user rapidRequest.setUserName(userName); // get the description String description = jsonAction.getString("description").trim(); // get the password String password = jsonAction.getString("password"); // get the device details String deviceDetails = jsonAction.getString("deviceDetails"); // get the security SecurityAdapter security = app.getSecurityAdapter(); // get the user User user = security.getUser(rapidRequest); // update the description user.setDescription(description); // update the password if different from the mask if (!"********".equals(password)) user.setPassword(password); // update the device details user.setDeviceDetails(deviceDetails); // update the user security.updateUser(rapidRequest, user); // if we are updating the rapid application we have used checkboxes for the Rapid Admin and Rapid Designer roles if ("rapid".equals(app.getId())) { // get the valud of rapidAdmin String useAdmin = jsonAction.optString("useAdmin"); // check useAdmin was sent if (useAdmin != null) { // check the user was given the role if ("true".equals(useAdmin)) { // add the role if the user doesn't have it already if (!security.checkUserRole(rapidRequest, com.rapid.server.Rapid.ADMIN_ROLE)) security.addUserRole(rapidRequest, com.rapid.server.Rapid.ADMIN_ROLE); } else { // remove the role security.deleteUserRole(rapidRequest, com.rapid.server.Rapid.ADMIN_ROLE); } } // get the valud of rapidDesign String useDesign = jsonAction.optString("useDesign"); // check useAdmin was sent if (useDesign != null) { // check the user was given the role if ("true".equals(useDesign)) { // add the role if the user doesn't have it already if (!security.checkUserRole(rapidRequest, com.rapid.server.Rapid.DESIGN_ROLE)) security.addUserRole(rapidRequest, com.rapid.server.Rapid.DESIGN_ROLE); } else { // remove the role security.deleteUserRole(rapidRequest, com.rapid.server.Rapid.DESIGN_ROLE); } } } // set the result message result.put("message", "User details saved"); } else if ("NEWPARAM".equals(action)) { // add a new parameter to the collection app.getParameters().add(new Parameter()); } else if ("DELPARAM".equals(action)) { // get the index int index = jsonAction.getInt("index"); // remove the parameter app.getParameters().remove(index); // save the app app.save(rapidServlet, rapidRequest, true); // set the result message result.put("message", "Parameter deleted"); } else if ("SAVEPARAM".equals(action)) { int index = jsonAction.getInt("index"); String name = jsonAction.getString("name"); String value = jsonAction.getString("value"); // fetch the parameter Parameter parameter = app.getParameters().get(index); // update it parameter.setName(name); parameter.setValue(value); // save the app app.save(rapidServlet, rapidRequest, true); // set the result message result.put("message", "Parameter details saved"); } else if ("NEWRESOURCE".equals(action)) { // get the resources Resources resources = app.getAppResources(); // if null (could be from a previous version) if (resources == null) { // instantiate here resources = new Resources(); // assign to the application app.setAppResources(resources); } // add a new parameter to the collection resources.add(new Resource()); } else if ("DELRESOURCE".equals(action)) { // get the index int index = jsonAction.getInt("index"); // remove the parameter app.getAppResources().remove(index); // save the app app.save(rapidServlet, rapidRequest, true); // set the result message result.put("message", "Resource deleted"); } else if ("SAVERESOURCE".equals(action)) { int index = jsonAction.getInt("index"); String name = jsonAction.getString("name"); int type = jsonAction.getInt("type"); String value = jsonAction.getString("value"); // fetch the resource Resource resource = app.getAppResources().get(index); // update it resource.setName(name); resource.setType(type); resource.setContent(value); // save the app app.save(rapidServlet, rapidRequest, true); // set the result message result.put("message", "Resource details saved"); } else if ("NEWDEVICE".equals(action)) { // get the devices Devices devices = rapidServlet.getDevices(); // add a new device to the collection devices.add(new Device("New device", 500, 500, 200, 1d)); // save it devices.save(servletContext); } else if ("DELDEVICE".equals(action)) { // get the index int index = jsonAction.getInt("index"); // get the devices Devices devices = rapidServlet.getDevices(); // remove the device devices.remove(index); // save the devices devices.save(servletContext); // set the result message result.put("message", "Device deleted"); } else if ("SAVEDEVICE".equals(action)) { int index = jsonAction.getInt("index"); String name = jsonAction.getString("name"); int width = jsonAction.getInt("width"); int height = jsonAction.getInt("height"); int ppi = jsonAction.getInt("ppi"); double scale = jsonAction.getDouble("scale"); // fetch the devices Devices devices = rapidServlet.getDevices(); // fetch the device Device device = devices.get(index); // update the device device.setName(name); device.setWidth(width); device.setHeight(height); device.setPPI(ppi); device.setScale(scale); // save the devices devices.save(servletContext); // set the result message result.put("message", "Device details saved"); } else if ("TESTDBCONN".equals(action)) { // get the index int index = jsonAction.getInt("index"); // get the database connections List<DatabaseConnection> dbConns = app.getDatabaseConnections(); // remeber whether we found the connection boolean foundConnection = false; // check we have database connections if (dbConns != null) { // check the index we where given will retieve a database connection if (index > -1 && index < dbConns.size()) { // retrieve the details from the json String driverClass = jsonAction.getString("driver").trim(); String connectionString = app.insertParameters(servletContext, jsonAction.getString("connectionString").trim()); String connectionAdapterClass = jsonAction.getString("connectionAdapter").trim(); String userName = jsonAction.getString("userName").trim(); String password = jsonAction.getString("password"); // if the password wasn't set retrieve it via the connection index if ("********".equals(password)) password = dbConns.get(index).getPassword(); // instantiate a DatabaseConnection object for this test DatabaseConnection dbconnection = new DatabaseConnection(servletContext, app, "test", driverClass, connectionString, connectionAdapterClass, userName, password); // get the adapter ConnectionAdapter connectionAdapter = dbconnection.getConnectionAdapter(servletContext, app); // get a data factory DataFactory dataFactory = new DataFactory(connectionAdapter); // get a connection Connection connection = dataFactory.getConnection(rapidRequest); // close it dataFactory.close(); // add the application to the response result.put("message", "Database connection OK"); // retain that a connection was found foundConnection = true; } } if (!foundConnection) result.put("message", "Database connection could not be found"); } else if ("DELAPPBACKUP".equals(action)) { // get the id String backupId = jsonAction.getString("backupId"); // get the folder into a file object File backup = new File(app.getBackupFolder(servletContext, false) + "/" + backupId); // delete it Files.deleteRecurring(backup); // set the result message result.put("message", "Application backup " + appId + "/" + appVersion + "/" + backupId + " deleted"); // pass back a control id from in the dialogue with which to close it result.put("controlId", "#rapid_P12_C13_"); } else if ("DELPAGEBACKUP".equals(action)) { // get the id String backupId = jsonAction.getString("backupId"); // get the folder into a file object File backup = new File(app.getBackupFolder(servletContext, false) + "/" + backupId); // delete it Files.deleteRecurring(backup); // set the result message result.put("message", "Page backup " + appId + "/" + backupId + " deleted"); // pass back a control id from in the dialogue with which to close it result.put("controlId", "#rapid_P13_C13_"); } else if ("RESTOREAPPBACKUP".equals(action)) { // get the id String backupId = jsonAction.getString("backupId"); // get this backup folder File backupFolder = new File(app.getBackupFolder(servletContext, false) + "/" + backupId); // check it exists if (backupFolder.exists()) { // back up the current state of the application app.backup(rapidServlet, rapidRequest, false); // get the config folder File configFolder = new File(app.getConfigFolder(servletContext)); // get the web folder File webFolder = new File(app.getWebFolder(servletContext)); // get the backups folder File backupsFolder = new File(app.getBackupFolder(servletContext, false)); // create a file object for restoring the config folder File configRestoreFolder = new File( Application.getConfigFolder(servletContext, app.getId(), "_restore")); List<String> ignoreList = new ArrayList<String>(); ignoreList.add("WebContent"); // copy the backup into the application restore folder Files.copyFolder(backupFolder, configRestoreFolder, ignoreList); // create a file object for the web content backup folder (which is currently sitting under the application) File webBackupFolder = new File(backupFolder + "/WebContent"); // create a file object for the web content restore folder File webRestoreFolder = new File( Application.getWebFolder(servletContext, app.getId(), "_restore")); // copy the web contents backup folder to the webcontent restore folder Files.copyFolder(webBackupFolder, webRestoreFolder); // get the backups destination folder File backupsRestoreFolder = new File( Application.getBackupFolder(servletContext, app.getId(), "_restore", false)); // copy in the backups Files.copyFolder(backupsFolder, backupsRestoreFolder); // delete the application config folder (this removes the webcontent and backups too so we do it here) Files.deleteRecurring(configFolder); // rename the restore folder to the application folder configRestoreFolder.renameTo(configFolder); // delete the webcontent folder Files.deleteRecurring(webFolder); // rename the restore folder to the webconten folder webRestoreFolder.renameTo(webFolder); // get the application file File applicationFile = new File(configFolder + "/application.xml"); // reload the application app = Application.load(servletContext, applicationFile); // add it back to the collection rapidServlet.getApplications().put(app); // set the result message result.put("message", "Application " + backupId + " restored"); // pass back a control id from in the dialogue with which to close it result.put("controlId", "#rapid_P14_C13_"); } else { // set the result message result.put("message", "Application backup " + backupId + " not found"); } } else if ("RESTOREPAGEBACKUP".equals(action)) { // get the id String backupId = jsonAction.getString("backupId"); // turn the id into parts String[] idParts = backupId.split("_"); // start the page name String pageName = idParts[0]; // loop the remaining parts and build for (int i = 1; i < idParts.length - 3; i++) { pageName += "_" + idParts[i]; } // get the page Page page = app.getPages().getPageByName(servletContext, pageName); // create a file object for the page File pageFile = new File(page.getFile(servletContext, app)); // create a backup for the current state page.backup(rapidServlet, rapidRequest, app, pageFile, false); // get this backup file File backupFile = new File(app.getBackupFolder(servletContext, false) + "/" + backupId); // copy it over the current page file Files.copyFile(backupFile, pageFile); // load the page from the backup page = Page.load(servletContext, backupFile); // replace the current entry app.getPages().addPage(page, pageFile); // set the result message result.put("message", "Page backup " + appId + "/" + backupId + " restored"); // pass back a control id from in the dialogue with which to close it result.put("controlId", "#rapid_P15_C13_"); } else if ("SAVEAPPBACKUPSIZE".equals(action)) { // get the max backup size int backupMaxSize = jsonAction.getInt("backupMaxSize"); // pass it to the application app.setApplicationBackupMaxSize(backupMaxSize); // save the application app.save(rapidServlet, rapidRequest, false); // set the result message result.put("message", "Application backup max size updated to " + backupMaxSize); } else if ("SAVEPAGEBACKUPSIZE".equals(action)) { // get the max backup size int backupMaxSize = jsonAction.getInt("backupMaxSize"); // pass it to the application app.setPageBackupsMaxSize(backupMaxSize); // save the application app.save(rapidServlet, rapidRequest, false); // set the result message result.put("message", "Page backup max size updated to " + backupMaxSize); } // sent back the new app id for the callback load if (newAppId != null) result.put("id", newAppId); } else { // send back an error result.put("error", "Application not found"); } return result; }