List of usage examples for javax.activation DataHandler writeTo
public void writeTo(OutputStream os) throws IOException
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.
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á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; } }