com.feedzai.fos.api.util.ManagerUtils.java Source code

Java tutorial

Introduction

Here is the source code for com.feedzai.fos.api.util.ManagerUtils.java

Source

/*
 * $#
 * FOS API
 * 
 * Copyright (C) 2013 Feedzai SA
 * 
 * This software is licensed under the Apache License, Version 2.0 (the "Apache License") or the GNU
 * Lesser General Public License version 3 (the "GPL License"). You may choose either license to govern
 * your use of this software only upon the condition that you accept all of the terms of either the Apache
 * License or the LGPL License.
 *
 * You may obtain a copy of the Apache License and the LGPL License at:
 *
 * http://www.apache.org/licenses/LICENSE-2.0.txt
 * http://www.gnu.org/licenses/lgpl-3.0.txt
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the Apache License
 * or the LGPL License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
 * either express or implied. See the Apache License and the LGPL License for the specific language governing
 * permissions and limitations under the Apache License and the LGPL License.
 * #$
 */
package com.feedzai.fos.api.util;

import com.feedzai.fos.api.*;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.UUID;

/**
 * Utility methods for {@link Manager} implementations.
 *
 * @author Ricardo Ferreira (ricardo.ferreira@feedzai.com)
 * @see 1.0.4
 */
public class ManagerUtils {

    /**
     * Obtain model UUID from ModelConfig if defined or generate a new random uuid
     *
     * @param config Model Configuration
     * @return new Model UUID
     * @throws com.feedzai.fos.api.FOSException
     */
    public static UUID getUuid(ModelConfig config) throws FOSException {
        String suuid = config.getProperty("UUID");

        return StringUtils.isBlank(suuid) ? UUID.randomUUID() : UUID.fromString(suuid);
    }

    /**
     * Creates a new {@link java.io.File} for the given {@link com.feedzai.fos.api.Model} and writes
     * the classifier representation to it.
     *
     * @param location The target location where the binary will be written to.
     * @param uuid     The UUID of the model.
     * @param model    The {@link com.feedzai.fos.api.Model} representation.
     * @return         The File where the model was written to.
     * @throws java.io.IOException Tf saving to disk was not possible.
     */
    public static File createModelFile(File location, UUID uuid, Model model) throws IOException {
        if (model instanceof ModelBinary) {
            return createModelBinaryFile(location, uuid, ((ModelBinary) model).getBinary());
        } else if (model instanceof ModelPMML) {
            return createModelPMMLFile(location, uuid, ((ModelPMML) model).getPMML());
        } else {
            throw new RuntimeException("Unknown Model instance " + model.getClass().getSimpleName());
        }
    }

    /**
     * Creates a file in {@code <location>/<id>.model} and serializes the given byte array to it.
     *
     * @param location The target location where the binary will be written to.
     * @param id       The UUID of the model.
     * @param model    The serialized classifier.
     * @return The File where the model was written to.
     * @throws java.io.IOException if saving to disk was not possible.
     */
    private static File createModelBinaryFile(File location, UUID id, byte[] model) throws IOException {
        File file = File.createTempFile(id.toString(), ".model", location);
        FileUtils.writeByteArrayToFile(file, model);
        return file;
    }

    /**
     * Creates a file in {@code <location>/<id>.xml} and serializes the given String to it.
     *
     * @param location The target location where the binary will be written to.
     * @param id       The UUID of the model.
     * @param pmml     The String containing the PMML representation.
     * @return The File where the model was written to.
     * @throws java.io.IOException if saving to disk was not possible.
     */
    private static File createModelPMMLFile(File location, UUID id, String pmml) throws IOException {
        File file = File.createTempFile(id.toString(), ".xml", location);

        try (BufferedWriter writer = new BufferedWriter(new FileWriter(file))) {
            writer.write(pmml);
        }

        return file;
    }
}