/*
* � Copyright IBM Corp. 2013
*
* Licensed 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 com.ibm.domino.das.resources;
import static com.ibm.domino.commons.json.JsonConstants.HREF_PROP;
import static com.ibm.domino.das.service.CoreService.PATH_SEGMENT_IMA_SETTINGS;
import static com.ibm.domino.das.service.CoreService.PATH_SEGMENT_NONCE;
import static com.ibm.domino.das.service.CoreService.PATH_SEGMENT_PW_STATS;
import static com.ibm.domino.das.service.CoreService.PATH_SEGMENT_STATS;
import static com.ibm.domino.das.servlet.DasServlet.DAS_LOGGER;
import java.io.IOException;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.ResponseBuilder;
import javax.ws.rs.core.UriInfo;
import com.ibm.commons.util.io.json.JsonException;
import com.ibm.commons.util.io.json.JsonGenerator;
import com.ibm.commons.util.io.json.JsonGenerator.StringBuilderGenerator;
import com.ibm.commons.util.io.json.JsonJavaFactory;
import com.ibm.commons.util.io.json.JsonJavaObject;
import com.ibm.domino.commons.model.IImaSettingsProvider;
import com.ibm.domino.commons.model.ProviderFactory;
import com.ibm.domino.commons.util.UriHelper;
import com.ibm.domino.das.service.CoreService;
@Path("core") // $NON-NLS-1$
public class CoreRootResource {
@GET
public Response getResources(@Context UriInfo uriInfo) {
String jsonEntity = null;
DAS_LOGGER.traceEntry(this, "getResources"); // $NON-NLS-1$
try {
URI baseUri = UriHelper.copy(uriInfo.getAbsolutePath(), true);
List<JsonJavaObject> links = new ArrayList<JsonJavaObject>();
JsonJavaObject pwstats = new JsonJavaObject();
pwstats.putJsonProperty("rel", PATH_SEGMENT_PW_STATS); // $NON-NLS-1$
pwstats.putJsonProperty(HREF_PROP, UriHelper.appendPathSegment(baseUri, PATH_SEGMENT_PW_STATS).toString());
links.add(pwstats);
IImaSettingsProvider provider = ProviderFactory.getImaSettingsProvider();
if ( provider != null ) {
JsonJavaObject imasettings = new JsonJavaObject();
imasettings.putJsonProperty("rel", PATH_SEGMENT_IMA_SETTINGS); // $NON-NLS-1$
imasettings.putJsonProperty(HREF_PROP, UriHelper.appendPathSegment(baseUri, PATH_SEGMENT_IMA_SETTINGS).toString());
links.add(imasettings);
}
JsonJavaObject nonce = new JsonJavaObject();
nonce.putJsonProperty("rel", PATH_SEGMENT_NONCE); // $NON-NLS-1$
nonce.putJsonProperty(HREF_PROP, UriHelper.appendPathSegment(baseUri, PATH_SEGMENT_NONCE).toString());
links.add(nonce);
JsonJavaObject stats = new JsonJavaObject();
stats.putJsonProperty("rel", PATH_SEGMENT_STATS); // $NON-NLS-1$
stats.putJsonProperty(HREF_PROP, UriHelper.appendPathSegment(baseUri, PATH_SEGMENT_STATS).toString());
links.add(stats);
JsonJavaObject obj = new JsonJavaObject();
obj.putJsonProperty("links", links); // $NON-NLS-1$
StringBuilder sb = new StringBuilder();
JsonGenerator.Generator generator = new StringBuilderGenerator(JsonJavaFactory.instanceEx, sb, false);
generator.toJson(obj);
jsonEntity = sb.toString();
}
catch (JsonException e) {
throw new WebApplicationException(CoreService.createErrorResponse(e, Response.Status.INTERNAL_SERVER_ERROR));
}
catch (IOException e) {
throw new WebApplicationException(CoreService.createErrorResponse(e, Response.Status.INTERNAL_SERVER_ERROR));
}
ResponseBuilder builder = Response.ok();
if ( jsonEntity != null ) {
builder.type(MediaType.APPLICATION_JSON).entity(jsonEntity);
}
Response response = builder.build();
DAS_LOGGER.traceExit(this, "getResources", response); // $NON-NLS-1$
return response;
}
}