Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,170 @@
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.fineract.adhocquery.api;

import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;

import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.UriInfo;

import org.apache.commons.lang.StringUtils;
import org.apache.fineract.adhocquery.data.AdHocData;
import org.apache.fineract.adhocquery.service.AdHocReadPlatformService;
import org.apache.fineract.commands.domain.CommandWrapper;
import org.apache.fineract.commands.service.CommandWrapperBuilder;
import org.apache.fineract.commands.service.PortfolioCommandSourceWritePlatformService;
import org.apache.fineract.infrastructure.core.api.ApiRequestParameterHelper;
import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
import org.apache.fineract.infrastructure.core.serialization.ApiRequestJsonSerializationSettings;
import org.apache.fineract.infrastructure.core.serialization.DefaultToApiJsonSerializer;
import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

@Path("/adhocquery")
@Component
@Scope("singleton")
public class AdHocApiResource {

/**
* The set of parameters that are supported in response for {@link AdhocData}
*/
private final Set<String> RESPONSE_DATA_PARAMETERS = new HashSet<>(Arrays.asList("id", "name", "query", "tableName","tableField","isActive","createdBy","createdOn","createdById","updatedById","updatedOn","email"));

private final PlatformSecurityContext context;
private final AdHocReadPlatformService adHocReadPlatformService;
private final DefaultToApiJsonSerializer<AdHocData> toApiJsonSerializer;
private final ApiRequestParameterHelper apiRequestParameterHelper;
private final PortfolioCommandSourceWritePlatformService commandsSourceWritePlatformService;

@Autowired
public AdHocApiResource(final PlatformSecurityContext context, final AdHocReadPlatformService readPlatformService,
final DefaultToApiJsonSerializer<AdHocData> toApiJsonSerializer,
final ApiRequestParameterHelper apiRequestParameterHelper,
final PortfolioCommandSourceWritePlatformService commandsSourceWritePlatformService) {
this.context = context;
this.adHocReadPlatformService = readPlatformService;
this.toApiJsonSerializer = toApiJsonSerializer;
this.apiRequestParameterHelper = apiRequestParameterHelper;
this.commandsSourceWritePlatformService = commandsSourceWritePlatformService;
}

@GET
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
public String retrieveAll(@Context final UriInfo uriInfo) {

this.context.authenticatedUser();
final Collection<AdHocData> adhocs = this.adHocReadPlatformService.retrieveAllAdHocQuery();
final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters());
return this.toApiJsonSerializer.serialize(settings, adhocs, this.RESPONSE_DATA_PARAMETERS);
}
@GET
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
@Path("template")
public String template(@Context final UriInfo uriInfo) {
this.context.authenticatedUser();
final AdHocData user = this.adHocReadPlatformService.retrieveNewAdHocDetails();
final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters());
return this.toApiJsonSerializer.serialize(settings, user, this.RESPONSE_DATA_PARAMETERS);
}
@POST
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
public String createAdHocQuery(final String apiRequestBodyAsJson) {

final CommandWrapper commandRequest = new CommandWrapperBuilder() //
.createAdHoc() //
.withJson(apiRequestBodyAsJson) //
.build();

final CommandProcessingResult result = this.commandsSourceWritePlatformService.logCommandSource(commandRequest);

return this.toApiJsonSerializer.serialize(result);
}

@GET
@Path("{adHocId}")
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
public String retrieveAdHocQuery(@PathParam("adHocId") final Long adHocId, @Context final UriInfo uriInfo) {

this.context.authenticatedUser();

final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters());

final AdHocData adhoc = this.adHocReadPlatformService.retrieveOne(adHocId);

return this.toApiJsonSerializer.serialize(settings, adhoc, this.RESPONSE_DATA_PARAMETERS);
}
@PUT
@Path("{adHocId}")
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
public String update(@PathParam("adHocId") final Long adHocId, final String apiRequestBodyAsJson) {

final CommandWrapper commandRequest = new CommandWrapperBuilder() //
.updateAdHoc(adHocId) //
.withJson(apiRequestBodyAsJson) //
.build();

final CommandProcessingResult result = this.commandsSourceWritePlatformService.logCommandSource(commandRequest);

return this.toApiJsonSerializer.serialize(result);
}
/**
* Delete AdHocQuery
*
* @param adHocId
* @return
*/
@DELETE
@Path("{adHocId}")
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
public String deleteAdHocQuery(@PathParam("adHocId") final Long adHocId) {

final CommandWrapper commandRequest = new CommandWrapperBuilder() //
.deleteAdHoc(adHocId) //
.build();

final CommandProcessingResult result = this.commandsSourceWritePlatformService.logCommandSource(commandRequest);

return this.toApiJsonSerializer.serialize(result);
}

private boolean is(final String commandParam, final String commandValue) {
return StringUtils.isNotBlank(commandParam) && commandParam.trim().equalsIgnoreCase(commandValue);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.fineract.adhocquery.api;

import java.util.HashSet;
import java.util.Set;

/***
* Enum of all parameters passed in while creating/updating a AdHocQuery
***/
public enum AdHocJsonInputParams {
ID("id"), NAME("name"),QUERY("query"),TABLENAME("tableName"),TABLEFIELD("tableFields"), ISACTIVE("isActive"),EMAIL("email");

private final String value;

private AdHocJsonInputParams(final String value) {
this.value = value;
}

private static final Set<String> values = new HashSet<>();
static {
for (final AdHocJsonInputParams type : AdHocJsonInputParams.values()) {
values.add(type.value);
}
}

public static Set<String> getAllValues() {
return values;
}

@Override
public String toString() {
return name().toString().replaceAll("_", " ");
}

public String getValue() {
return this.value;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.fineract.adhocquery.data;

import java.util.Collection;

import org.apache.fineract.organisation.office.data.OfficeData;
import org.apache.fineract.useradministration.data.AppUserData;
import org.apache.fineract.useradministration.data.RoleData;
import org.joda.time.DateTime;
import org.joda.time.LocalDate;

/**
* Immutable data object represent note or case information AdHocData
*
*/
public class AdHocData {



@SuppressWarnings("unused")
private final Long id;
@SuppressWarnings("unused")
private final String name;
@SuppressWarnings("unused")
private final String query;
@SuppressWarnings("unused")
private final String tableName;
@SuppressWarnings("unused")
private final String tableFields;
@SuppressWarnings("unused")
private final String email;
@SuppressWarnings("unused")
private final boolean isActive;
@SuppressWarnings("unused")
private final DateTime createdOn;
@SuppressWarnings("unused")
private final Long createdById;
@SuppressWarnings("unused")
private final Long updatedById;
@SuppressWarnings("unused")
private final DateTime updatedOn;
@SuppressWarnings("unused")
private final String createdBy;




public AdHocData(final Long id, final String name,final String query, final String tableName,final String tableFields,
final boolean isActive, final DateTime createdOn, final Long createdById,final Long updatedById,
final DateTime updatedOn,final String createdBy,final String email
) {
this.id = id;
this.name=name;
this.query=query;
this.tableName = tableName;
this.tableFields = tableFields;
this.isActive = isActive;
this.createdOn = createdOn;
this.createdById = createdById;
this.updatedById=updatedById;
this.updatedOn=updatedOn;
this.createdBy=createdBy;
this.email=email;
}
public static AdHocData template() {
AdHocData adHocData = new AdHocData(null,null,null,null,null,false,null,null,null,null,null,null);
return adHocData;
}
public Long getId() {
return this.id;
}
public String getName() {
return this.name;
}
public String getQuery() {
return this.query;
}
public String getTableName() {
return this.tableName;
}
public String getTableFields() {
return this.tableFields;
}
public String getEmail() {
return this.email;
}
public boolean isActive() {
return this.isActive;
}
public DateTime getCreatedOn() {
return this.createdOn;
}
public Long getCreatedById() {
return this.createdById;
}
public Long getUpdatedById() {
return this.updatedById;
}
public DateTime getUpdatedOn() {
return this.updatedOn;
}
public String getCreatedBy() {
return this.createdBy;
}
}
Loading