Java tutorial
/* * Copyright (c) 2018, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. * * WSO2 Inc. 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.wso2.carbon.business.rules.templates.editor.core.internal; import com.google.common.util.concurrent.ThreadFactoryBuilder; import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.IOUtils; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceRegistration; import org.osgi.service.component.annotations.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.wso2.carbon.business.rules.templates.editor.core.util.MimeMapper; import org.wso2.carbon.config.provider.ConfigProvider; import org.wso2.msf4j.Microservice; import org.wso2.msf4j.Request; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.core.Context; import javax.ws.rs.core.Response; import java.io.*; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @Component(service = Microservice.class, immediate = true) @Path("/template-editor") public class TemplatesEditorMicroservice implements Microservice { private static final Logger log = LoggerFactory.getLogger(TemplatesEditorMicroservice.class); private static final String FILE_SEPARATOR = "file.separator"; private static final String STATUS = "status"; private static final String SUCCESS = "success"; private ServiceRegistration serviceRegistration; private ExecutorService executorService = Executors.newScheduledThreadPool(5, new ThreadFactoryBuilder().setNameFormat("Debugger-scheduler-thread-%d").build()); private ConfigProvider configProvider; public TemplatesEditorMicroservice() { } private File getResourceAsFile(String resourcePath) { try { InputStream in = this.getClass().getResource(resourcePath).openStream(); if (in == null) { return null; } File tempFile = File.createTempFile(String.valueOf(in.hashCode()), ".tmp"); tempFile.deleteOnExit(); FileOutputStream out = new FileOutputStream(tempFile); IOUtils.copy(in, out); return tempFile; } catch (Throwable e) { log.warn("Couldn't load requested resource: " + resourcePath); return null; } } @GET public Response handleRoot(@Context Request request) throws FileNotFoundException { return handleGet(request); } @GET @Path("/**") public Response handleGet(@Context Request request) throws FileNotFoundException { String rawUri = request.getUri().replaceFirst("^/template-editor", ""); String rawUriPath, mimeType; if (rawUri == null || rawUri.trim().length() == 0 || "/".equals(rawUri)) { rawUriPath = "/index.html"; } else { int uriPathEndIndex = rawUri.indexOf('?'); if (uriPathEndIndex != -1) { // handling query Params. rawUriPath = rawUri.substring(0, uriPathEndIndex); } else { rawUriPath = rawUri; } } try { mimeType = MimeMapper.getMimeType(FilenameUtils.getExtension(rawUriPath)); } catch (Throwable ignored) { mimeType = "text/plain"; } File file = getResourceAsFile("/web" + rawUriPath); if (file != null) { return Response.ok(new FileInputStream(file)).type(mimeType).build(); } log.error(" File not found [" + rawUriPath + "], Requesting path [" + rawUriPath + "] "); return Response.status(Response.Status.NOT_FOUND).build(); } /** * This is the activation method of TemplatesEditorMicroservice. This will be called when its references are * satisfied. * * @param bundleContext the bundle context instance of this bundle. * @throws Exception this will be thrown if an issue occurs while executing the activate method */ @Activate protected void start(BundleContext bundleContext) throws Exception { } /** * This is the deactivation method of TemplatesEditorMicroservice. This will be called when this component * is being stopped or references are satisfied during runtime. * * @throws Exception this will be thrown if an issue occurs while executing the de-activate method */ @Deactivate protected void stop() throws Exception { } }