Example usage for javax.activation DataHandler writeTo

List of usage examples for javax.activation DataHandler writeTo

Introduction

In this page you can find the example usage for javax.activation DataHandler writeTo.

Prototype

public void writeTo(OutputStream os) throws IOException 

Source Link

Document

Write the data to an OutputStream.

If the DataHandler was created with a DataSource, writeTo retrieves the InputStream and copies the bytes from the InputStream to the OutputStream passed in.

Usage

From source file:com.knowgate.dfs.FileSystem.java

/**
 * <p>Read a binary file into a byte array</p>
 * @param sFilePath Full path of file to be readed. Like "file:///tmp/myfile.txt" or "ftp://myhost:21/dir/myfile.txt"
 * @return byte array with full contents of file
 * @throws FileNotFoundException//from www . j av a 2s.co m
 * @throws IOException
 * @throws OutOfMemoryError
 * @throws MalformedURLException
 * @throws FTPException
 */
public byte[] readfilebin(String sFilePath)
        throws MalformedURLException, FTPException, FileNotFoundException, IOException, OutOfMemoryError {

    if (DebugFile.trace) {
        DebugFile.writeln("Begin FileSystem.readfilebin(" + sFilePath + ")");
        DebugFile.incIdent();
    }

    byte[] aRetVal;
    String sLower = sFilePath.toLowerCase();

    if (sLower.startsWith("file://"))
        sFilePath = sFilePath.substring(7);

    if (sLower.startsWith("http://") || sLower.startsWith("https://")) {

        URL oUrl = new URL(sFilePath);

        if (user().equals("anonymous") || user().length() == 0) {
            ByteArrayOutputStream oStrm = new ByteArrayOutputStream();
            if (DebugFile.trace)
                DebugFile.writeln("new DataHandler(" + oUrl.toString() + ")");
            DataHandler oHndlr = new DataHandler(oUrl);
            oHndlr.writeTo(oStrm);
            aRetVal = oStrm.toByteArray();
            oStrm.close();
        } else {
            if (null == oHttpCli) {
                oHttpCli = new DefaultHttpClient();
            } // fi (oHttpCli)

            oHttpCli.getCredentialsProvider().setCredentials(
                    new AuthScope(oUrl.getHost(), AuthScope.ANY_PORT, realm()),
                    new UsernamePasswordCredentials(user(), password()));
            HttpGet oGet = null;
            try {
                oGet = new HttpGet(sFilePath);
                HttpResponse oResp = oHttpCli.execute(oGet);
                HttpEntity oEnty = oResp.getEntity();
                int nLen = (int) oEnty.getContentLength();
                if (nLen > 0) {
                    aRetVal = new byte[nLen];
                    InputStream oBody = oEnty.getContent();
                    oBody.read(aRetVal, 0, nLen);
                    oBody.close();
                } else {
                    aRetVal = null;
                } // fi         
            } finally {
                oHttpCli.getConnectionManager().shutdown();
                oHttpCli = null;
            }
        } // fi (user is anonymous)
    } else if (sLower.startsWith("ftp://")) {

        FTPClient oFTPC = null;
        boolean bFTPSession = false;

        splitURI(sFilePath);

        try {

            if (DebugFile.trace)
                DebugFile.writeln("new FTPClient(" + sHost + ")");
            oFTPC = new FTPClient(sHost);

            if (DebugFile.trace)
                DebugFile.writeln("FTPClient.login(" + sUsr + "," + sPwd + ")");
            oFTPC.login(sUsr, sPwd);

            bFTPSession = true;

            if (DebugFile.trace)
                DebugFile.writeln("FTPClient.chdir(" + sPath + ")");
            oFTPC.chdir(sPath);

            ByteArrayOutputStream oStrm = new ByteArrayOutputStream();

            oFTPC.setType(FTPTransferType.BINARY);

            if (DebugFile.trace)
                DebugFile.writeln("FTPClient.get(" + sPath + sFile + "," + sFile + ",false)");
            oFTPC.get(oStrm, sFile);

            aRetVal = oStrm.toByteArray();

            oStrm.close();
        } catch (FTPException ftpe) {
            throw new FTPException(ftpe.getMessage());
        } finally {
            if (DebugFile.trace)
                DebugFile.writeln("FTPClient.quit()");
            if (bFTPSession)
                oFTPC.quit();
        }

    } else {

        File oFile = new File(sFilePath);
        int iFLen = (int) oFile.length();

        BufferedInputStream oBfStrm;
        FileInputStream oInStrm;

        if (iFLen > 0) {
            aRetVal = new byte[iFLen];
            oInStrm = new FileInputStream(oFile);
            oBfStrm = new BufferedInputStream(oInStrm, iFLen);

            int iReaded = oBfStrm.read(aRetVal, 0, iFLen);

            oBfStrm.close();
            oInStrm.close();

            oInStrm = null;
            oFile = null;

        } else
            aRetVal = null;
    }

    if (DebugFile.trace) {
        DebugFile.decIdent();
        DebugFile.writeln("End FileSystem.readfilebin()");
    }

    return aRetVal;
}

From source file:com.knowgate.dfs.FileSystem.java

/**
 * <p>Read a text file into a String</p>
 * @param sFilePath Full path of file to be readed. Like "file:///tmp/myfile.txt" or "ftp://myhost:21/dir/myfile.txt"
 * @param sEncoding Text Encoding for file {UTF-8, ISO-8859-1, ...}<BR>
 * if <b>null</b> then if first two bytes of file are FF FE then UTF-8 will be assumed<BR>
 * else ISO-8859-1 will be assumed.// w w  w . j  ava 2 s  .  co  m
 * @return String with full contents of file
 * @throws FileNotFoundException
 * @throws IOException
 * @throws OutOfMemoryError
 * @throws MalformedURLException
 * @throws FTPException
 */
public String readfilestr(String sFilePath, String sEncoding)
        throws MalformedURLException, FTPException, FileNotFoundException, IOException, OutOfMemoryError {

    if (DebugFile.trace) {
        DebugFile.writeln("Begin FileSystem.readfilestr(" + sFilePath + "," + sEncoding + ")");
        DebugFile.incIdent();
    }

    String sRetVal;
    String sLower = sFilePath.toLowerCase();

    if (sLower.startsWith("file://"))
        sFilePath = sFilePath.substring(7);

    if (sLower.startsWith("http://") || sLower.startsWith("https://")) {

        URL oUrl = new URL(sFilePath);
        if (user().equals("anonymous") || user().length() == 0) {
            ByteArrayOutputStream oStrm = new ByteArrayOutputStream();
            DataHandler oHndlr = new DataHandler(oUrl);
            oHndlr.writeTo(oStrm);
            sRetVal = oStrm.toString(sEncoding);
            oStrm.close();
        } else {
            if (null == oHttpCli) {
                oHttpCli = new DefaultHttpClient();
            } // fi (oHttpCli)
            oHttpCli.getCredentialsProvider().setCredentials(
                    new AuthScope(oUrl.getHost(), AuthScope.ANY_PORT, realm()),
                    new UsernamePasswordCredentials(user(), password()));
            HttpGet oGet = null;
            try {

                oGet = new HttpGet(sFilePath);
                HttpResponse oResp = oHttpCli.execute(oGet);
                HttpEntity oEnty = oResp.getEntity();
                int nLen = (int) oEnty.getContentLength();
                if (nLen > 0) {
                    byte[] aRetVal = new byte[nLen];
                    InputStream oBody = oEnty.getContent();
                    oBody.read(aRetVal, 0, nLen);
                    oBody.close();
                    sRetVal = new String(aRetVal, sEncoding);
                } else {
                    sRetVal = "";
                } // fi         
            } finally {
                oHttpCli.getConnectionManager().shutdown();
                oHttpCli = null;
            }
        } // fi
    } else if (sLower.startsWith("ftp://")) {

        FTPClient oFTPC = null;
        boolean bFTPSession = false;

        splitURI(sFilePath);

        try {

            if (DebugFile.trace)
                DebugFile.writeln("new FTPClient(" + sHost + ")");
            oFTPC = new FTPClient(sHost);

            if (DebugFile.trace)
                DebugFile.writeln("FTPClient.login(" + sUsr + "," + sPwd + ")");
            oFTPC.login(sUsr, sPwd);

            bFTPSession = true;

            if (DebugFile.trace)
                DebugFile.writeln("FTPClient.chdir(" + sPath + ")");
            oFTPC.chdir(sPath);

            ByteArrayOutputStream oStrm = new ByteArrayOutputStream();

            oFTPC.setType(FTPTransferType.BINARY);

            if (DebugFile.trace)
                DebugFile.writeln("FTPClient.get(" + sPath + sFile + "," + sFile + ",false)");
            oFTPC.get(oStrm, sFile);

            sRetVal = oStrm.toString(sEncoding);

            oStrm.close();
        } catch (FTPException ftpe) {
            throw new FTPException(ftpe.getMessage());
        } finally {
            if (DebugFile.trace)
                DebugFile.writeln("FTPClient.quit()");
            try {
                if (bFTPSession)
                    oFTPC.quit();
            } catch (Exception ignore) {
            }
        }
    } else {

        File oFile = new File(sFilePath);
        int iFLen = (int) oFile.length();
        if (iFLen > 0) {
            byte byBuffer[] = new byte[3];
            char aBuffer[] = new char[iFLen];
            BufferedInputStream oBfStrm;
            FileInputStream oInStrm;
            InputStreamReader oReader;

            if (sEncoding == null) {
                oInStrm = new FileInputStream(oFile);
                oBfStrm = new BufferedInputStream(oInStrm, iFLen);

                sEncoding = new CharacterSetDetector().detect(oBfStrm, "ISO-8859-1");

                if (DebugFile.trace)
                    DebugFile.writeln("encoding is " + sEncoding);

                oBfStrm.close();
                oInStrm.close();
            } // fi

            oInStrm = new FileInputStream(oFile);
            oBfStrm = new BufferedInputStream(oInStrm, iFLen);

            oReader = new InputStreamReader(oBfStrm, sEncoding);

            int iReaded = oReader.read(aBuffer, 0, iFLen);

            // Skip FF FE character mark for Unidode files
            int iSkip = ((int) aBuffer[0] == 65279 || (int) aBuffer[0] == 65533 || (int) aBuffer[0] == 65534 ? 1
                    : 0);

            oReader.close();
            oBfStrm.close();
            oInStrm.close();

            oReader = null;
            oInStrm = null;
            oFile = null;

            sRetVal = new String(aBuffer, iSkip, iReaded - iSkip);
        } else
            sRetVal = "";
    } // fi (iFLen>0)

    if (DebugFile.trace) {
        DebugFile.decIdent();
        DebugFile.writeln("End FileSystem.readfilestr() : " + String.valueOf(sRetVal.length()));
    }

    return sRetVal;
}

From source file:es.pode.empaquetador.negocio.servicio.SrvGestorManifestServiceImpl.java

/**
 * Agrega un ODE comprimido en un ZIP como submanifiesto del ODE actual.
 * //from  w ww .j a  va2 s.c o m
 * @param identificador
 *            Identificador del ODE sobre el que estamos trabajando.
 * @param paqueteSCORM
 *            Archivo comprimido conteniendo el paquete SCORM que se quiere
 *            agregar como submanifiesto del ODE en que se est trabajando.
 * @param subId
 *            Este atributo, cuando es distinto de null, indica el
 *            submanifiesto del manifiesto principal en que se desea agregar
 *            el nuevo manifiesto. El metodo internamente debe resolver el
 *            'base' completo donde deben descomprimirse los archivos del
 *            submanifiesto.
 * @return Identificador del submanifiesto agregado
 * @throws Exception
 */
@Override
protected String handleAgregarManifiestoZIP(java.lang.String identificador,
        javax.activation.DataHandler paqueteSCORM, String subId) throws java.lang.Exception {

    // obtengo un id para el submanifiesto
    String submanifestId = PodeUUIDGenerator.getSubmanifiestoUUID(String.valueOf(System.currentTimeMillis()));
    LocalizadorVO localizador = getSrvLocalizadorService().consultaLocalizador(identificador);

    String rutaZip = utilidades.obtenerRutaTemporal(identificador, localizador.getPath(), true) + BARRA
            + submanifestId + ".zip";

    File nuevoFichero = new File(rutaZip);

    if (logger.isDebugEnabled())
        logger.debug("Volcando fichero zip a disco : " + nuevoFichero.getPath());
    nuevoFichero.createNewFile();
    nuevoFichero.deleteOnExit();
    FileOutputStream fos = new FileOutputStream(nuevoFichero);
    paqueteSCORM.writeTo(fos);
    IOUtils.closeQuietly(fos);
    if (logger.isDebugEnabled())
        logger.debug(nuevoFichero.getPath() + " volcado a disco.");

    try {
        agregarLocal(identificador, subId, submanifestId, null, localizador, nuevoFichero);
    } catch (Exception e) {
        logger.error("Error al agrega submanifiesto desde fichero local " + nuevoFichero, e);
        throw e;
    } finally {
        FileUtils.deleteQuietly(nuevoFichero);
    }
    return submanifestId;
}

From source file:es.pode.empaquetador.negocio.servicio.SrvGestorManifestServiceImpl.java

/**
 * Retorna el OdeVO del manifiesto / submanifiesto principal editado.
 * //from  ww w  .  j  a  va 2  s  .  c o m
 * @param identificador
 *            Identificador del Ode en edicion.
 * @param paqueteRCP
 *            Datahandler recubriendo el archivo comprimido con los recursos
 *            a importar.
 * @param submanifestId
 *            Si es distinto de null, identificador del submanifiesto donde
 *            se deben almacenar los recursos. El metodo sera responsable de
 *            resolver el base completo para obtener la ruta donde almacenar
 *            los archivos.
 * @throws Exception
 */
@Override
protected void handleImportarRecursos(String identificador, DataHandler paqueteRCP, String submanifestId)
        throws Exception {
    Manifest manifest = this.cacheEmpaquetacion.comprobarManifest(identificador);
    Manifest manifestImportado = null;

    // consulta del localizador
    String path = VACIA;
    String rutaSubmanifest;
    LocalizadorVO localizador = this.getSrvLocalizadorService().consultaLocalizador(identificador);

    logger.debug("voy a recorrer los submanifiestos para encontrar la ruta completa");
    rutaSubmanifest = crearRuta(manifest, submanifestId, path, localizador);

    // File dirManifest = new File (rutaSubmanifest);
    // Ruta donde se crea el zip
    String pathtemp = VACIA;

    pathtemp = localizador.getPath() + utilidades.getProperty("carpeta.temporal") + BARRA + identificador
            + BARRA + identificador + ".zip";

    File ficheroZip = new File(pathtemp);
    (ficheroZip.getParentFile()).mkdirs();
    ficheroZip.createNewFile();
    ficheroZip.deleteOnExit();
    FileOutputStream fos = new FileOutputStream(ficheroZip);
    paqueteRCP.writeTo(fos);
    String pathtempDestino = localizador.getPath() + utilidades.getProperty("carpeta.temporal") + BARRA
            + "DestinoTemporal";
    File destinoTemporal = new File(pathtempDestino);
    destinoTemporal.mkdirs();
    destinoTemporal.deleteOnExit();
    fos.close();
    if (validaRCP(ficheroZip.getPath(), pathtempDestino)) {
        logger.debug("el fichero: " + ficheroZip.getName() + " es .zip");
        File destino = new File(rutaSubmanifest);

        // parseo el imsmanifest.xml
        logger.debug("voy a parsear el imsmanifest.xml");

        File rutaXml = new File(pathtempDestino + BARRA + Utilidades.MANIFEST_NAME);
        manifestImportado = this.getScormDao().parsearODELazy(rutaXml);
        // comprobar booo
        boolean borrado = rutaXml.delete();
        if (borrado == false) {
            logger.debug("no se ha conseguido borrar el fichero temporal: " + rutaXml.getName());
        }

        UtilesFicheros.copiar(destinoTemporal, destino);

        // creo manifestagrega con manif y refrescar ids
        ManifestAgrega man = new ManifestAgrega(manifestImportado);
        man.resetearIds();
        Resource[] recurs = manifestImportado.getResources().getResource();

        logger.debug("voy a insertar los recursos");
        for (int i = 0; i < recurs.length; i++) {
            manifest.getResources().addResource(recurs[i]);
        }
        cacheEmpaquetacion.put(identificador, manifest);
        logger.debug("se ha introducido el manifest en la cache");

    } else {
        if (!this.getZipDao().esZip(ficheroZip.getPath())) {
            logger.debug("el fichero no es .zip");
        } else {
            logger.debug("el fichero no existe");
            throw new Exception("Seleccione un paquete de recursos (RCP) v&aacute;lido a importar");
        }
    }
}

From source file:es.pode.publicacion.negocio.servicios.SrvPublicacionServiceImpl.java

private ResultadoOperacionVO crearPIFAux(DataHandler ficheroPIF, String idUsuario, String comentarios,
        String titulo, String idioma, boolean chequeaCuota) throws Exception {

    String id_localizadorNP = new String();
    try {/*from   w  w  w. j  a v  a2s .  c  o  m*/
        // utilizar un id generado por la clase de soporte que genera un
        // uuid
        String idODE = es.pode.soporte.uuid.PodeUUIDGenerator
                .getOdeUUID(String.valueOf(System.currentTimeMillis()));
        // creacion
        this.getSrvLocalizadorService().crearLocalizadorNoPublicado(idUsuario, idODE);
        logger.info("Creando PIF utilizando identificador[" + idODE + "], idUsuario[" + idUsuario
                + "], comentarios[" + comentarios + "] y titulo[" + titulo + "]");

        SrvLocalizadorService localizadorService = this.getSrvLocalizadorService();
        LocalizadorVO localizadorNP = localizadorService.consultaLocalizador(idODE);
        id_localizadorNP = localizadorNP.getIdentificador();
        if (logger.isDebugEnabled())
            logger.debug("Encontramos localizador con identificador[" + localizadorNP.getIdentificador()
                    + "] usuario[" + localizadorNP.getIdUsuario() + "] MEC[" + localizadorNP.getMec()
                    + "] path[" + localizadorNP.getPath() + "] URL[" + localizadorNP.getUrl() + "]");

        // empezamos a descomprimir el pif y guardar lo que nos devuelve
        // en un directorio temporal
        if (logger.isDebugEnabled())
            logger.debug("Comenzamos a descomprimir el PIF y guardar en un dir temporal.");

        String pathtemp = "";
        pathtemp = localizadorNP.getPath() + getPropertyValue("carpeta.temporal") + "/" + titulo;
        File ficheroZip = new File(pathtemp);
        (ficheroZip.getParentFile()).mkdirs();
        ficheroZip.createNewFile();
        ficheroZip.deleteOnExit();
        FileOutputStream fos = new FileOutputStream(ficheroZip);
        ficheroPIF.writeTo(fos);
        String pathtempDestino = localizadorNP.getPath();
        File destinoTemporal = new File(pathtempDestino);
        destinoTemporal.mkdirs();
        destinoTemporal.deleteOnExit();
        fos.close();
        //          La comprobacion se delega en el
        // empaquetador para hacer un 'importar inteligente'. El atributo
        // 'titulo' es el nombre del fichero proporcionado por la aplicacin
        // cliente
        AnalizaArchivoVO resultadoAnalisis = null;
        String tipoFichero = null;
        try {
            resultadoAnalisis = this.getSrvFachadaAgregarService().analizarArchivo(pathtemp);
            tipoFichero = resultadoAnalisis.getTipoArchivo();
            if (logger.isDebugEnabled())
                logger.debug("El fichero importado " + titulo + " es de tipo " + tipoFichero);
            // Si el tipo de fichero es comprimido, lo descomprimimos en la localizacin definitiva
            if (ConstantesAgrega.FICHERO.equals(tipoFichero)) {
                UtilesFicheros.copiar(ficheroZip, destinoTemporal);
            } else {
                getZipDao().descomprimir(ficheroZip.getPath(), pathtempDestino);
            }
        } catch (Exception e) {
            //             borramos todo lo que hayamos hecho hasta ahora
            this.getSrvLocalizadorService().eliminarLocalizador(id_localizadorNP);
            logger.error("Error analizando fichero [" + pathtemp + "], con nombre[" + titulo + "]", e);
            return new ResultadoOperacionVO(ERROR_DESCOMPRIMIENDO_FICHERO_ZIP,
                    getPropertyValueI18n(ERROR_DESCOMPRIMIENDO_FICHERO_ZIP), idODE, new Long(0));
        }
        /*
         * En funcion del tipo de archivo hay que generar un imsmanifest.xml que recubra el contenido.
         */
        if (ConstantesAgrega.FICHERO.equals(tipoFichero)) {
            this.getSrvFachadaAgregarService().generarManifest(localizadorNP.getIdentificador(),
                    new String[] { titulo }, titulo, idioma);
        } else if (ConstantesAgrega.ARCHIVO.equals(tipoFichero)) {
            Collection<File> ficheros = FileUtils.listFiles(destinoTemporal, null, true);
            if (ficheros != null) {
                java.io.File[] ficherosArray = new java.io.File[ficheros.size()];
                if (logger.isDebugEnabled())
                    logger.debug("Se han encontrado " + ficheros.size() + "dentro del zip " + titulo);
                ficherosArray = (java.io.File[]) ficheros.toArray(ficherosArray);
                String[] rutas = new String[ficheros.size()];
                String rutaAReemplazar = destinoTemporal.getPath().replaceAll("\\\\", "/");
                if (logger.isDebugEnabled())
                    logger.debug("Ruta a reemplazar con / : " + rutaAReemplazar);
                for (int i = 0; i < ficherosArray.length; i++) {
                    String ruta = ficherosArray[i].getPath().replaceAll(destinoTemporal.getPath(), "");
                    if (ruta.startsWith("/"))
                        ruta = ruta.substring(1);
                    if (logger.isDebugEnabled())
                        logger.debug("Ruta " + ficherosArray[i].getPath() + " cambiada a " + ruta);
                    rutas[i] = ruta;
                }
                getSrvFachadaAgregarService().generarManifest(localizadorNP.getIdentificador(), rutas, rutas[0],
                        idioma);
            } else {
                logger.error("Se ha intentado importar un ZIP vacio");
            }
        } else if (ConstantesAgrega.RCP.equals(tipoFichero)) {
            this.getSrvFachadaAgregarService().generarManifestRCP(localizadorNP.getIdentificador(), idioma);
        } // PARA ConstantesAgrega.CA no hace falta hacer nada

        // copiar los esquemas por si acaso no los trajese
        try {
            this.copiarEsquemas(pathtempDestino);
        } catch (Exception e1) {
            logger.error("No se pudieron copiar los esquemas al importar un pif: ", e1);
            // borramos todo lo que hayamos hecho hasta ahora
            this.getSrvLocalizadorService().eliminarLocalizador(id_localizadorNP);
            return new ResultadoOperacionVO(ERROR_COPIANDO_ESQUEMAS,
                    getPropertyValueI18n(ERROR_COPIANDO_ESQUEMAS), idODE, new Long(0));
        }

        Long consumoODE = new Long(0);
        if (chequeaCuota) // si atendemos al chequeo del espacio en disco usado.
        {
            //Antes de seguir vemos si el ODE no supera el espacio de su cuota. Ya tenemos descomprimido el ODE en disco y podemos ver si se ha pasado
            consumoODE = this.getSrvLocalizadorService().consultaEspacioLocalizador(id_localizadorNP);
            long cuotaConsumida = calculaCuotaConsumidaUsuario(idUsuario);
            long cuotaUsuario = LdapUserDetailsUtils.getCuota().longValue();
            if (logger.isDebugEnabled())
                logger.debug("El espacio consumido en disco por el ODE[" + idODE + "] con localizador["
                        + localizadorNP.getPath() + "]del usuario[" + idUsuario + "] es de [" + consumoODE
                        + "] bytes");

            if (logger.isDebugEnabled())
                logger.debug("Los ODEs del usuario[" + idUsuario + "] ocupan un total de [" + cuotaConsumida
                        + "] y tiene una cuota de [" + cuotaUsuario + "] bytes");
            if ((cuotaConsumida + consumoODE) > cuotaUsuario) // nos hemos pasado de cuota, le damos la vuelta al asunto y salimos
            {
                logger.error("Error creando ODE. La cuota del usuario[" + idUsuario + "][" + cuotaUsuario
                        + "]bytes se ha superado con el ODE[" + idODE + "][" + consumoODE + "]bytes en ["
                        + (cuotaConsumida - cuotaUsuario) + "]bytes");
                // borramos todo lo que hayamos hecho hasta ahora
                this.getSrvLocalizadorService().eliminarLocalizador(id_localizadorNP);
                return new ResultadoOperacionVO(ERROR_EXCEDER, getPropertyValueI18n(ERROR_EXCEDER), idODE,
                        new Long(consumoODE));
            }
            logger.info("Creando ODE desde PIF con id[" + idODE + "] tamanio[" + consumoODE + "] para usuario["
                    + idUsuario + "] con cuota consumida[" + cuotaConsumida + "] y cuota total[" + cuotaUsuario
                    + "]");
        }

        // validador
        SrvValidadorService validadorService = this.getSrvValidadorService();
        // reaalizamos una validacion ligera en lugar de carga ode.
        ValidaVO valid = validadorService.obtenervalidacionLigera(localizadorNP.getPath(), "CA");
        logger.info("Validando el ODE a importar[" + localizadorNP.getPath() + "] : Valido["
                + valid.getEsValidoManifest().booleanValue() + "]");

        // la hora de testear cuidado con el validador
        if (valid.getEsValidoManifest().booleanValue()) {
            // Extraemos el manifest del ODE.
            File extraeSubmanifest = new File(localizadorNP.getPath(), MANIFEST_NAME);
            Manifest imsmanifest = this.getScormDao().parsearODEEager(extraeSubmanifest);
            if (logger.isDebugEnabled())
                logger.debug("Validado el ODE [" + localizadorNP.getPath() + "]!!");

            String resultadoVocab = this.comprobarVocabulariosYFechas(imsmanifest);

            // Por ultimo, en caso de que todo haya ido bien, tenemos que
            // recubrir el MEC y el identificador del
            // manifest que tenga este ODE con el identificador UUID que
            // utilizamos en la plataforma, ya que este
            // ODE esta en estado CREADO => esta en el taller. Para ello
            // vamos autilizar el mismo metodo que ya
            // existe y hace todo esto con el identificador MEC en el
            // momento de publicar, pero le vamos a pasar
            // el identificador de taller (el UUID)

            cambiaUUIDxMEC(idODE, localizadorNP.getPath(), imsmanifest,
                    AgregaPropertiesImpl.getInstance().getProperty(AgregaProperties.CATALOGO_AGREGA)); // utilizamos
            // el
            // catalogo
            // agrega
            // imsmanifest.
            // si el ode tiene lomes el ttulo lo cambiamos al que trajese
            // con el lomes

            // manifest en la posicion exacta
            ManifestAgrega manAgrega = new ManifestAgrega(imsmanifest);
            String identifiadorManifest = manAgrega.getManifest().getIdentifier();
            // Lom lom = manAgrega.obtenerLom(idODE, null);
            Lom lom = manAgrega.obtenerLom(identifiadorManifest, null);
            if (lom != null) {
                LomAgrega lomAgrega = new LomAgrega(lom);
                idioma = lomAgrega.getMetaMetadataAgrega().getIdioma();
                titulo = lomAgrega.getGeneralAgrega().getTitulo(idioma);

            } else {
                logger.warn("El Lom del manifest " + idODE
                        + " no tiene objeto general, el nombre del fichero ser el titulo del ODE");
            }

            // Creamos la transicion
            EstadoDao estadoDao = this.getEstadoDao();
            TransicionDao transicionDao = this.getTransicionDao();
            Date fecha = new Date(System.currentTimeMillis());
            Transicion t = transicionDao.create(DateManager.dateToCalendar(fecha), comentarios, idODE,
                    idUsuario, titulo, idUsuario, // el usuario de creacion es el mismo que me pasan
                    new Long(fecha.getTime()), Boolean.FALSE, null, estadoDao.obtenEstadoPorNombre(CREACION));
            if (resultadoVocab.equals(""))
                return new ResultadoOperacionVO(SIN_ERRORES, getPropertyValueI18n(SIN_ERRORES), idODE,
                        consumoODE);
            else
                return new ResultadoOperacionVO(VOCAB_BORRADOS, resultadoVocab, idODE, consumoODE);

        } // si no es vlido rollback
        else {
            // borrar la info
            // borramos todo lo que hayamos hecho hasta ahora
            this.getSrvLocalizadorService().eliminarLocalizador(id_localizadorNP);

            // Lanzamos una excepcin para que haga el rollback de las bbdd
            // Ahora no lanzamos la excepcion pq no hay nada que deshacer
            // String errorValidacion="";
            // if (valid.getErrores() != null && valid.getErrores().length
            // >0)
            // {
            // errorValidacion = valid.getResultadoValidacion();
            // // errorValidacion = ""+
            // getPropertyValueI18n(LINEA_ERROR)+"["+valid.getErrores()[0].getLinea()+"]
            // "+
            // //
            // getPropertyValueI18n(COLUMNA_ERROR)+"["+valid.getErrores()[0].getColumna()+"]
            // "+
            // //
            // getPropertyValueI18n(TEXTO_ERROR)+"["+valid.getErrores()[0].getMensaje()+"]";
            // }
            logger.error("Atencin: no se ha validado el ODE [" + localizadorNP.getPath()
                    + "]correctamente. No se ha creado el Pif, error: " + valid.getResultadoValidacion() + "]");
            return new ResultadoOperacionVO(this.ERROR_DE_VALIDACION, valid.getResultadoValidacion(), idODE,
                    new Long(0));
        }
    } // try
    catch (Exception e) {
        logger.error("Fallo creando PIF con fichero[" + titulo + "] idusuario[" + idUsuario + "] comentarios["
                + comentarios + "] titulo[" + titulo + "] )", e);
        // borramos todo lo que hayamos hecho hasta ahora
        this.getSrvLocalizadorService().eliminarLocalizador(id_localizadorNP);
        throw new Exception(e);
    }
}

From source file:es.pode.publicacion.negocio.servicios.SrvPublicacionServiceImpl.java

/**
 * Publica objetos en formato PIF (ZIP).
 * /*from   ww w. jav a 2s . c o m*/
 * @param pif
 *            Objeto en formato PIF que se va a publicar.
 * @param idUsuario
 *            Identificador del usuario.
 * @param comentarios
 *            Comentarios que puede llevar la publicacin.
 * @param sobrescribir
 *            Indica si la carga se ha de realizar sobrescribiendo el ODE si
 *            este ya existe. Valores s/n.
 * @return se retorna un VO con el error que se ha producido en el caso de
 *         detectarse algun problema.
 * @throws Exception
 * 
 */
protected ResultadoOperacionVO handlePublicarPIF(DataHandler pif, String idUsuario, String comentarios,
        String sobrescribir, String titulo) throws Exception {

    try {
        String idODE = String.valueOf(System.currentTimeMillis());
        // creacion
        logger.info("Publicando PIF (de carga) utilizando identificador[" + idODE + "] idUsuario[" + idUsuario
                + "] y comentarios[" + comentarios + "]");

        ResultadoOperacionVO res = handleCreacion(idODE, idUsuario, comentarios, titulo);
        if (!res.getIdResultado().equals(SIN_ERRORES)) {
            if (logger.isDebugEnabled())
                logger.error("ERROR[" + res.getIdResultado() + "][" + res.getDescripcion()
                        + "]:publicando PIF con fichero[" + pif != null ? pif.getName()
                                : "null" + "] idusuario[" + idUsuario + "] comentarios[" + comentarios
                                        + "] idODE[" + res.getIdODE());
            return res;
        }
        SrvLocalizadorService localizadorService = this.getSrvLocalizadorService();
        LocalizadorVO localizadorNP = localizadorService.consultaLocalizador(idODE);

        logger.debug("Publicando PIF (de carga):Encontramos localizador con identificador["
                + localizadorNP.getIdentificador() + "] usuario[" + localizadorNP.getIdUsuario() + "] MEC["
                + localizadorNP.getMec() + "] path[" + localizadorNP.getPath() + "] URL["
                + localizadorNP.getUrl() + "]");

        // empezamos a descomprimir el pif y guardar lo que nos devuelve
        // en un directorio temporal

        String pathtemp = "";
        pathtemp = localizadorNP.getPath() + getPropertyValue("carpeta.temporal") + "/"
                + localizadorNP.getIdentificador() + ".zip";
        File ficheroZip = new File(pathtemp);
        (ficheroZip.getParentFile()).mkdirs();
        ficheroZip.createNewFile();
        ficheroZip.deleteOnExit();
        FileOutputStream fos = new FileOutputStream(ficheroZip);
        pif.writeTo(fos);
        String pathtempDestino = localizadorNP.getPath();
        File destinoTemporal = new File(pathtempDestino);
        destinoTemporal.mkdirs();
        destinoTemporal.deleteOnExit();
        fos.close();
        if (logger.isDebugEnabled())
            logger.debug("Publicando PIF (de carga):Comenzamos a descomprimir el PIF" + ficheroZip.getPath()
                    + "" + "  y guardar en:" + pathtemp + ";");
        if (this.getZipDao().esZip(pathtemp))
            try {
                this.getZipDao().descomprimir(ficheroZip.getPath(), pathtempDestino);
            } catch (Exception e1) {

                logger.error("Publicando PIF (de carga):Error descomprimiendo fichero [" + pathtemp
                        + "], con nombre[" + pif.getName() + "]", e1);
                this.handleEliminar(idODE, idUsuario);
                return new ResultadoOperacionVO(ERROR_DESCOMPRIMIENDO_FICHERO_ZIP,
                        getPropertyValueI18n(ERROR_DESCOMPRIMIENDO_FICHERO_ZIP), idODE, new Long(0));
            }
        else {
            logger.error("Error de formato descomprimiendo fichero [" + pathtemp + "], con nombre["
                    + pif.getName() + "]");
            this.handleEliminar(idODE, idUsuario);
            return new ResultadoOperacionVO(ERROR_FORMATO_ZIP, getPropertyValueI18n(ERROR_FORMATO_ZIP), idODE,
                    new Long(0));
        }

        // copiar los esquemas por si acaso no los trajese
        try {
            this.copiarEsquemas(pathtempDestino);
        } catch (Exception e1) {
            logger.error("Publicando PIF (de carga):No se pudieron copiar los esquemas al importar un pif: ",
                    e1);
            this.handleEliminar(idODE, idUsuario);
            return new ResultadoOperacionVO(ERROR_COPIANDO_ESQUEMAS,
                    getPropertyValueI18n(ERROR_COPIANDO_ESQUEMAS), idODE, new Long(0));
        }

        // validador
        SrvValidadorService validadorService = this.getSrvValidadorService();

        ValidaVO valid = validadorService.validarCargaOde(localizadorNP.getPath());
        logger.info("Publicando PIF (de carga):Validando el ODE [" + localizadorNP.getIdentificador() + "]");

        if (valid.getEsValidoManifest().booleanValue()) {

            // proponiendo catalogacion
            logger.info("Publicando PIF (de carga):Proponemos para catalogacion el ODE con identificador["
                    + idODE + "], idUsuario[" + idUsuario + "] y comentarios[" + comentarios + "]");
            //            Proponemos para catalogar, pero sin validar ya que ya lo hemos hecho
            this.proponerCatalogacion(idODE, idUsuario, comentarios, titulo, false);

            // proponer publicacion
            logger.info("Publicando PIF (de carga):Proponemos para publicacion el ODE con identificador["
                    + idODE + "], idUsuario[" + idUsuario + "] y comentarios[" + comentarios + "]");
            //            Proponemos para publicar, pero sin validar ya que ya lo hemos hecho
            this.proponerPublicacion(idODE, idUsuario, comentarios, titulo, false);

            // publicar

            // llamada a un metodo "validadorService.validarMec" que devuelve null si el mec es malo o no existe
            // y devuelve el valor del mec, si ste, es bueno
            String mec = validadorService.validarMec(localizadorNP.getPath());

            if (mec == null) {
                mec = this.handleGeneraMEC(localizadorNP.getPath());
                logger.info("Publicando PIF (de carga):MEC del ODE [" + localizadorNP.getPath()
                        + "] invalido. Generado nuevo MEC [" + mec + "]");

            }
            // si no comprobamos que no est repetido, en cuyo caso lanzamos una excepcin
            else {
                IdODECriteria criteria = new IdODECriteria(mec, null);
                if (!this.getTransicionDao().buscarEstadoPorCriterioIdODE(criteria).isEmpty()) {
                    logger.info("Publicando PIF (de carga):El ODE [" + localizadorNP.getPath() + "] con mec["
                            + mec + "] ya existia en la plataforma.");
                    if (SOBRESCRIBIR_PUBLICADOS_NO.equals(sobrescribir)) {
                        // solo necesitamos comprobar la ltima transicin, pq  el mec no cambia nunca
                        // Eliminamos todo lo que ha producido el intento de insercion de este ODE 
                        // que al final ha resultado repetido
                        this.handleEliminar(idODE, idUsuario);
                        logger.warn("Publicando PIF (de carga):El ODE [" + localizadorNP.getPath()
                                + "] con mec[" + mec + "] ya exista y no lo sobrescribimos.");
                        return new ResultadoOperacionVO(MEC_YA_EXISTE, getPropertyValueI18n(MEC_YA_EXISTE),
                                idODE, new Long(0));
                    } else if (SOBRESCRIBIR_PUBLICADOS_SI.equals(sobrescribir)) {
                        logger.info("Publicando PIF (de carga):El ODE [" + localizadorNP.getPath()
                                + "] con mec[" + mec + "] existe. Eliminamos rastro para sobrescribirlo.");
                        eliminaODEPublicado(mec);
                    } else {
                        logger.error(
                                "Publicando PIF (de carga):El mec ya exista y no hay criterio claro de sobrescritura["
                                        + sobrescribir + "]");
                        this.handleEliminar(idODE, idUsuario);
                        return new ResultadoOperacionVO(MEC_YA_EXISTE, getPropertyValueI18n(MEC_YA_EXISTE),
                                idODE, new Long(0));
                    }
                }
            }

            // vamos a comprobar que el mec no existe ya
            EstadoVO estado = this.obtenEstadoPorIdODE(idODE, LdapUserDetailsUtils.getIdioma());
            logger.info("Publicando PIF (de carga):Publicando ODE con identificador [" + idODE + "] en estado["
                    + estado.getClave() + "] con usuario[" + idUsuario + "] y comentarios[" + comentarios
                    + "].");
            if (estado.getClave().equals(PROPUESTO)) {
                // los odes que se cargan masivamente (de momento) no
                // tenemos que introducir informacin
                // de licencias
                ResultadoOperacionVO retorno = publicar_aux(idODE, mec, idUsuario, comentarios, null, "", "",
                        true);
                if (!SIN_ERRORES.equals(retorno.getIdResultado())) {
                    // Si la publicacion no ha ido bien, entendemos que ha tenido error y tenemos que borrar 
                    // todo lo que el intento de publicacion ha creado en la plataforma
                    logger.error("Publicando PIF (de carga):Error intentando publicar un ODE via PIF["
                            + retorno.getIdResultado() + "] con id[" + idODE + "].");
                    this.handleEliminar(idODE, idUsuario);
                } else
                    logger.info("Publicando PIF (de carga):Publicado ODE con identificador[" + idODE
                            + "] a mec[" + mec + "] via PIF.");
                return retorno;
            } else {
                logger.warn("Publicando PIF (de carga):error no se ha podido continuar ya que el ODE ya [" + mec
                        + "], est creado");
                PublicarException e = new PublicarException(
                        "ERROR el ODE[" + mec + "]ya esta creado en la plataforma");
                logger.warn(e);
                return new ResultadoOperacionVO(ODE_YA_CREADO_EN_PLATAFORMA,
                        getPropertyValueI18n(ODE_YA_CREADO_EN_PLATAFORMA), idODE, new Long(0));
            }
        } // if (valid.getEsValidoManifest().booleanValue())
        else {
            logger.error("Publicando PIF (de carga):ERROR: no se ha validado el ODE [" + localizadorNP.getPath()
                    + "]correctamente, cdigo[" + valid.getResultadoValidacion() + "] ");
            this.handleEliminar(localizadorNP.getIdentificador(), idUsuario);
            return new ResultadoOperacionVO(SrvPublicacionServiceImpl.ERROR_DE_VALIDACION,
                    valid.getResultadoValidacion(), idODE, new Long(0));
        }

    } // try
    catch (PublicarException e) {
        logger.error(
                "Publicando PIF (de carga):Se ha producido un error al publicarPIF del tipo PublicarException",
                e);
        throw e;
    } catch (Exception e) {
        logger.error("Publicando PIF (de carga):Se ha producido un error al publicarPIF del tipo Desconocido",
                e);
        throw e;
    }
}