org.netxilia.server.rest.WorkbookResource.java Source code

Java tutorial

Introduction

Here is the source code for org.netxilia.server.rest.WorkbookResource.java

Source

/*******************************************************************************
 * 
 * Copyright 2010 Alexandru Craciun, and individual contributors as indicated
 * by the @authors tag. 
 * 
 * This is free software; you can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation; either version 3 of
 * the License, or (at your option) any later version.
 * 
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 * 
 * You should have received a copy of the GNU Lesser General Public
 * License along with this software; if not, write to the Free
 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
 ******************************************************************************/
package org.netxilia.server.rest;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.DELETE;
import javax.ws.rs.FormParam;
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.WebApplicationException;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.netxilia.api.exception.AlreadyExistsException;
import org.netxilia.api.exception.NotFoundException;
import org.netxilia.api.exception.StorageException;
import org.netxilia.api.impexp.IImportService;
import org.netxilia.api.impexp.ImportException;
import org.netxilia.api.impexp.StringBuilderProcessingConsole;
import org.netxilia.api.model.SheetFullName;
import org.netxilia.api.model.WorkbookId;
import org.netxilia.api.storage.DataSourceConfigurationId;
import org.netxilia.jaxrs.html.ModelAndView;
import org.netxilia.server.rest.html.workbook.IWorkbookModelService;
import org.netxilia.server.rest.html.workbook.ImportSheetModel;
import org.netxilia.server.rest.html.workbook.WorkbookModel;
import org.springframework.beans.factory.annotation.Autowired;

/**
 * 
 * @author <a href='mailto:ax.craciun@gmail.com'>Alexandru Craciun</a>
 * 
 */
@Path("/workbooks")
public class WorkbookResource extends AbstractResource {
    @Autowired
    private IWorkbookModelService workbookModelService;

    private IImportService excelImportService;

    private IImportService jsonImportService;

    public IWorkbookModelService getWorkbookModelService() {
        return workbookModelService;
    }

    public void setWorkbookModelService(IWorkbookModelService workbookModelService) {
        this.workbookModelService = workbookModelService;
    }

    public IImportService getExcelImportService() {
        return excelImportService;
    }

    public void setExcelImportService(IImportService excelImportService) {
        this.excelImportService = excelImportService;
    }

    public IImportService getJsonImportService() {
        return jsonImportService;
    }

    public void setJsonImportService(IImportService jsonImportService) {
        this.jsonImportService = jsonImportService;
    }

    @GET
    @Path("/{workbook}")
    @Produces({ MediaType.TEXT_HTML })
    public ModelAndView<WorkbookModel> getWorkbook(@PathParam("workbook") WorkbookId workbookId)
            throws NotFoundException, StorageException {
        WorkbookModel workbookModel = workbookModelService.buildModel(workbookId);
        return new ModelAndView<WorkbookModel>(workbookModel, "/WEB-INF/jsp/workbook/view.jsp");
    }

    @DELETE
    @Path("/{workbook}")
    public void deleteWorkbook(@PathParam("workbook") WorkbookId workbookId)
            throws NotFoundException, StorageException {

        getWorkbookProcessor().deleteWorkbook(workbookId);

    }

    @SuppressWarnings("unchecked")
    @POST
    @Path("/{workbook}/import")
    @Produces({ MediaType.TEXT_HTML })
    public ModelAndView<ImportSheetModel> importSheetsFromExcel(@PathParam("workbook") WorkbookId workbookId,
            @Context HttpServletRequest request) throws ImportException, IOException {

        long t1 = System.currentTimeMillis();
        List<SheetFullName> sheetNames = new ArrayList<SheetFullName>();
        StringBuilderProcessingConsole console = new StringBuilderProcessingConsole();

        if (ServletFileUpload.isMultipartContent(request)) {
            DiskFileItemFactory factory = new DiskFileItemFactory();

            ServletFileUpload upload = new ServletFileUpload(factory);
            List<FileItem> items = null;
            try {
                items = upload.parseRequest(request);
            } catch (FileUploadException e) {
                e.printStackTrace();
            }

            String format = "json";

            if (items != null) {
                // check first form fields
                for (FileItem item : items) {
                    if (!item.isFormField()) {
                        continue;
                    }
                    String name = item.getFieldName();
                    String value = item.getString();
                    if ("format".equals(name)) {
                        format = value;
                    }
                }
                IImportService importService = "json".equals(format) ? jsonImportService : excelImportService;
                for (FileItem item : items) {
                    if (!item.isFormField() && item.getSize() > 0) {
                        sheetNames.addAll(importService.importSheets(getWorkbookProcessor(), workbookId,
                                item.getInputStream(), console));
                    }
                }
            }
        }
        long t2 = System.currentTimeMillis();
        return new ModelAndView<ImportSheetModel>(
                new ImportSheetModel(sheetNames, console.getContent().toString(), (t2 - t1)),
                "/WEB-INF/jsp/workbook/importSheet.jsp");
    }

    @PUT
    @Path("/{workbook}")
    public void newWorkbook(@PathParam("workbook") WorkbookId workbookId,
            @FormParam("config") DataSourceConfigurationId id) throws NotFoundException, StorageException {
        try {
            getWorkbookProcessor().addNewWorkbook(id, workbookId);
        } catch (AlreadyExistsException ex) {
            throw new WebApplicationException(ex, Response.Status.CONFLICT);
        }

    }
}