Como Lotus Script não possui uma classe nativa para compactar arquivos no formato '.zip', Criei essa funcionalidade utilizando 'ls2j' para conectar na classe java.
Necessidade: O sistema deverá permitir a seleção de um arquivo no formato 'player.html' e o sistema deverá compactar toda a estrutura de diretórios do arquivo selecionado.
1º Criação de um agent Lotus Script com o código abaixo:
Option Public
Option Declare
UseLSX "*javacon"
Use "bib_zip"
Use "OpenLogFunctions" '// OpenLog para captura de erros
Sub Initialize
On Error GoTo trataerro
Dim mySession As JavaSession
Dim zipClass As JavaClass
Dim zipFileObject As JavaObject
Set mySession = New JavaSession()
Set zipClass = mySession.GetClass("br.com.zipFile.controller.ZiparArquivos")
Set zipFileObject = zipClass.CreateObject()
Dim ses_corrente As New NotesSession
Dim strDesktop As String
strDesktop = getDiretorio(ses_corrente)
Dim ws_corrente As New NotesUIWorkspace
Dim varArqHtml As Variant
varArqHtml = ws_corrente.OpenFileDialog(False, "Selecione o arquivo 'Player.html' para anexar", "Htm|*.html", strDesktop)
If IsEmpty(varArqHtml) Then
MsgBox "Operação Cancelada"
Exit Sub
End If
Dim strArqHtmlDiretorio As String
Dim strArqHtmlNomeDir As String
strArqHtmlDiretorio = varArqHtml(0)
strArqHtmlDiretorio = StrLeftBack(strArqHtmlDiretorio,"\")
strArqHtmlNomeDir = StrRightBack(strArqHtmlDiretorio,"\")
Call zipFileObject.ziparArquivo(strArqHtmlDiretorio,strArqHtmlNomeDir)
Dim returnZipPath As String
returnZipPath = zipFileObject.getZippedFilePath()
Dim iuD_corrente As NotesUIDocument
Set iuD_corrente = ws_corrente.currentDocument
Dim doc_atual As NotesDocument
Set doc_atual = iuD_corrente.Document
' //define o campo como notesrichtextitem p/poder anexar
Dim rti_anexo As NotesRichTextItem
set rti_anexo = doc_atual.Getfirstitem("ca_AnexoConvertido")
If Not rti_anexo Is Nothing Then
Call rti_anexo.Remove()
End If
Set rti_anexo = New NotesRichTextItem(doc_atual, "ca_AnexoConvertido")
Call rti_anexo.EmbedObject( EMBED_ATTACHMENT, "", returnZipPath)
Call doc_atual.Save(True,False)
doc_atual.SaveOptions = "0"
Call iuD_corrente.Close()
Call ws_corrente.editDocument(True,doc_atual,False)
Exit Sub
trataerro:
MsgBox | Erro na linha | & CStr(Erl) & | tipo | & CStr(Err) & | | & CStr(Error) , 16, |Operação Cancelada|
Call LogError()
Exit Sub
End Sub
Function getDiretorio(ses_session As NotesSession) As String
On Error GoTo trataerro
getDiretorio = ""
Dim strAux As String
strAux = Environ("HomePath")
If (Trim(strAux)<>"") Then
getDiretorio = strAux + |\Desktop|
Exit Function
End If
strAux = Environ("HOMEDRIVE")
If (Trim(strAux)<>"") Then
getDiretorio = strAux
Exit Function
End If
strAux = ses_session.GetEnvironmentString("Directory",True)
If (Trim(strAux)<>"") Then
getDiretorio = strAux
Exit Function
End If
strAux = ses_session.GetEnvironmentString("Location",True)
If (Trim(strAux)<>"") Then
getDiretorio = strAux
Exit Function
End If
trataerro:
Call AddtoStackTrace()
End Function
2º Criação da biblioteca de script 'bib_zip' em Java com os métodos p/compactar.
Classe Progresso. => Progressive dialog
package br.com.zipFile.view;
import java.awt.Window;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import javax.swing.JFrame;
import javax.swing.ProgressMonitor;
public class Progresso {
ProgressMonitor progress;
public Progresso(String strMensagem, String strAlerta, int intMaximo){
JFrame frame = new JFrame();
WindowListener exitListener;
exitListener = new WindowAdapter() {
public void windowClosing(WindowEvent e) {
Window window = e.getWindow();
window.setVisible(false);
window.dispose();
System.exit(0);
}
};
frame.addWindowListener(exitListener);
progress = new ProgressMonitor(frame, strMensagem, strAlerta, 0, intMaximo);
}
public void setProgresso(int intProgresso){
progress.setProgress(intProgresso);
}
public boolean cancelado(){
return progress.isCanceled();
}
}
Classe model => compactar os arquivos
package br.com.zipFile.model;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import br.com.zipFile.view.Progresso;
public class ZipFolder {
List
private String sourceFolder = "";
public ZipFolder(String sourceFolder){
this.sourceFolder = sourceFolder;
fileList = new ArrayList
}
public void zipIt(String zipFile){
byte[] buffer = new byte[1024];
Progresso progresso = new Progresso("Compactando arquivos...", "Aguarde...", fileList.size()-1);
int counter = 0;
try{
FileOutputStream fos = new FileOutputStream(zipFile);
ZipOutputStream zos = new ZipOutputStream(fos);
for(String file : this.fileList){
ZipEntry ze= new ZipEntry(file);
zos.putNextEntry(ze);
FileInputStream in = new FileInputStream(sourceFolder + File.separator + file);
int len;
while ((len = in.read(buffer)) > 0) {
zos.write(buffer, 0, len);
}
if(progresso.cancelado()){
break;
}
progresso.setProgresso(counter);
counter++;
in.close();
}
zos.closeEntry();
zos.close();
}catch(IOException ex){
ex.printStackTrace();
}
}
public void generateFileList(File node){
//add file only
if(node.isFile()){
fileList.add(generateZipEntry(node.getAbsoluteFile().toString()));
}
if(node.isDirectory()){
String[] subNote = node.list();
for(String filename : subNote){
generateFileList(new File(node, filename));
}
}
}
private String generateZipEntry(String file){
return file.substring(sourceFolder.length()+1, file.length());
}
}
Classe ZiparArquivos => principal
package br.com.zipFile.controller;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import br.com.zipFile.model.ZipFolder;
public class ZiparArquivos {
private String destinationFileName = null;
public ZiparArquivos(){
}
public void ziparArquivo(String caminhoArquivoHtml,String arquivoHtml) {
String sourceFolder = "";
String destinationFolder = "";
sourceFolder = caminhoArquivoHtml;
if(sourceFolder != null){
destinationFolder = System.getProperty("java.io.tmpdir");
Date data = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("ddMMyyyy-HHmmss");
destinationFileName = destinationFolder + arquivoHtml + "_" + dateFormat.format(data) + ".zip";
ZipFolder zipFolder = new ZipFolder(sourceFolder);
zipFolder.generateFileList(new File(sourceFolder));
zipFolder.zipIt(destinationFileName);
}
}
public String getZippedFilePath(){
return destinationFileName;
}
}
Nenhum comentário:
Postar um comentário