org.wso2.carbon.bpel.deployer.services.BPELUploader.java Source code

Java tutorial

Introduction

Here is the source code for org.wso2.carbon.bpel.deployer.services.BPELUploader.java

Source

/*
 * Copyright (c) 2008, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
 *
 * 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 org.wso2.carbon.bpel.deployer.services;

import org.apache.axis2.AxisFault;
import org.apache.axis2.context.ConfigurationContext;
import org.apache.commons.io.FileUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.bpel.core.BPELConstants;
import org.wso2.carbon.bpel.deployer.services.types.UploadedFileItem;
import org.wso2.carbon.core.AbstractAdmin;
import org.wso2.carbon.utils.CarbonUtils;

import java.io.Closeable;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.activation.DataHandler;

/**
 * BPEL package uploader admin service
 */
public class BPELUploader extends AbstractAdmin {
    private static Log log = LogFactory.getLog(BPELUploader.class);

    public void uploadService(UploadedFileItem[] fileItems) throws AxisFault {

        //First lets filter for jar resources
        ConfigurationContext configurationContext = getConfigContext();
        String repo = configurationContext.getAxisConfiguration().getRepository().getPath();

        if (CarbonUtils.isURL(repo)) {
            throw new AxisFault("URL Repositories are not supported: " + repo);
        }

        //Writting the artifacts to the proper location
        String bpelDirectory = repo + File.separator + BPELConstants.BPEL_REPO_DIRECTORY;

        String bpelTemp = CarbonUtils.getCarbonHome() + BPELConstants.BPEL_PACKAGE_TEMP_DIRECTORY;
        File bpelTempDir = new File(bpelTemp);
        if (!bpelTempDir.exists() && !bpelTempDir.mkdirs()) {
            throw new AxisFault("Fail to create the directory: " + bpelTempDir.getAbsolutePath());
        }

        File bpelDir = new File(bpelDirectory);
        if (!bpelDir.exists() && !bpelDir.mkdirs()) {
            throw new AxisFault("Fail to create the directory: " + bpelDir.getAbsolutePath());
        }

        for (UploadedFileItem uploadedFile : fileItems) {
            String fileName = uploadedFile.getFileName();

            if (fileName == null || fileName.equals("")) {
                throw new AxisFault("Invalid file name. File name is not available");
            }

            if (uploadedFile.getFileType().equals(BPELConstants.BPEL_PACKAGE_EXTENSION)) {
                try {
                    writeResource(uploadedFile.getDataHandler(), bpelTemp, fileName, bpelDir);
                } catch (IOException e) {
                    throw new AxisFault("IOError: Writing resource failed.", e);
                }
            } else {
                throw new AxisFault("Invalid file type : " + uploadedFile.getFileType() + " ."
                        + BPELConstants.BPEL_PACKAGE_EXTENSION + " file type is expected");
            }
        }

    }

    private void writeResource(DataHandler dataHandler, String destPath, String fileName, File bpelDest)
            throws IOException {
        File tempDestFile = new File(destPath, fileName);
        FileOutputStream fos = null;
        File destFile = new File(bpelDest, fileName);
        try {
            fos = new FileOutputStream(tempDestFile);
            /* File stream is copied to a temp directory in order handle hot deployment issue
               occurred in windows */
            dataHandler.writeTo(fos);
            FileUtils.copyFile(tempDestFile, destFile);
        } catch (FileNotFoundException e) {
            log.error("Cannot find the file", e);
            throw e;
        } catch (IOException e) {
            log.error("IO error.");
            throw e;
        } finally {
            close(fos);
        }

        boolean isDeleted = tempDestFile.delete();
        if (!isDeleted) {
            log.warn("temp file: " + tempDestFile.getAbsolutePath()
                    + " deletion failed, scheduled deletion on server exit.");
            tempDestFile.deleteOnExit();
        }
    }

    public static void close(Closeable c) {
        if (c == null) {
            return;
        }
        try {
            c.close();
        } catch (IOException e) {
            log.warn("Can't close file streams.", e);
        }
    }
}