Changeset 7832 for mauRepo/NewmoonJSP


Ignore:
Timestamp:
24/01/11 17:15:15 (9 years ago)
Author:
mnagni
Message:
 
Location:
mauRepo/NewmoonJSP/src/main/java/ndg/newmoon/web
Files:
1 added
2 edited

Legend:

Unmodified
Added
Removed
  • mauRepo/NewmoonJSP/src/main/java/ndg/newmoon/web/NewmoonContextListener.java

    r7826 r7832  
    1212public class NewmoonContextListener implements ServletContextListener { 
    1313         
    14         public static final String EXIST_HOME = "exist.home"; 
     14        //public static final String EXIST_HOME = "exist.home"; 
    1515        public static final String TMP_DIR = "tmp.dir"; 
     16        public static final String NM_RULES_CONFORMANCE = "nm.rules.conformance"; 
     17        public static final String NM_RULES_SCHEMA_ENCODING = "nm.rules.schema.encoding"; 
     18        public static final String NM_REPORT_STYLESHEET = "nm.report.schema"; 
    1619 
    1720        /** 
     
    2124         
    2225        public void contextDestroyed(ServletContextEvent event) { 
    23                 System.clearProperty(EXIST_HOME);                
     26                //System.clearProperty(EXIST_HOME);              
    2427                try { 
    2528                        DBManager.getInstance().stopExist(); 
     
    3033 
    3134        public void contextInitialized(ServletContextEvent event) { 
     35                /* 
    3236                System.setProperty(EXIST_HOME, event.getServletContext().getRealPath("/") + "WEB-INF/existData"); 
    3337                if (LOG.isInfoEnabled()) { 
    3438                        LOG.info("System property exist.home set to " + System.getProperty(EXIST_HOME)); 
    3539                } 
    36                 event.getServletContext().setAttribute(TMP_DIR, event.getServletContext().getRealPath("/") + "WEB-INF/tmpDir"); 
     40                */ 
     41                 
     42                String webInfPath = event.getServletContext().getRealPath("/WEB-INF"); 
     43                event.getServletContext().setAttribute(TMP_DIR, webInfPath + "/tmpDir"); 
    3744                if (LOG.isInfoEnabled()) { 
    3845                        LOG.info("ServletContext attribute tmp.dir set to " + event.getServletContext().getAttribute(TMP_DIR)); 
    3946                } 
     47                event.getServletContext().setAttribute(NM_RULES_CONFORMANCE, webInfPath + "/rules/conformance-test"); 
     48                event.getServletContext().setAttribute(NM_RULES_SCHEMA_ENCODING, webInfPath + "/rules/schema-encoding"); 
     49                event.getServletContext().setAttribute(NM_REPORT_STYLESHEET, webInfPath + "/resources/conf-test/results-stylesheet.xsl"); 
    4050        } 
    4151 
  • mauRepo/NewmoonJSP/src/main/java/ndg/newmoon/web/XMIEncoderBean.java

    r7826 r7832  
    22 
    33import java.io.File; 
    4 import java.io.FileFilter; 
    5 import java.io.FileOutputStream; 
     4import java.io.FileInputStream; 
     5import java.io.FileNotFoundException; 
    66import java.io.IOException; 
    7 import java.util.ArrayList; 
    8 import java.util.Enumeration; 
    9 import java.util.List; 
    10 import java.util.zip.ZipEntry; 
    11 import java.util.zip.ZipException; 
    12 import java.util.zip.ZipFile; 
     7import java.io.InputStream; 
     8import java.io.OutputStream; 
    139 
     10import javax.faces.context.ExternalContext; 
    1411import javax.faces.context.FacesContext; 
    1512import javax.servlet.ServletContext; 
     13import javax.servlet.http.HttpServletResponse; 
    1614 
    1715import ndg.services.newmoon.NewmoonException; 
    18 import ndg.services.newmoon.XMIEncoder; 
    19 import ndg.services.newmoon.NewmoonManager.GML_VERSION; 
    2016 
    2117import org.apache.commons.io.FileUtils; 
    2218import org.apache.commons.io.FilenameUtils; 
    2319import org.apache.commons.io.IOUtils; 
    24 import org.apache.commons.io.filefilter.AndFileFilter; 
    25 import org.apache.commons.io.filefilter.DirectoryFileFilter; 
    26 import org.apache.commons.io.filefilter.IOFileFilter; 
    27 import org.apache.commons.io.filefilter.NotFileFilter; 
    28 import org.apache.commons.io.filefilter.RegexFileFilter; 
    2920import org.richfaces.event.FileUploadEvent; 
    3021import org.richfaces.model.UploadedFile; 
     22import org.slf4j.Logger; 
     23import org.slf4j.LoggerFactory; 
    3124 
    3225public class XMIEncoderBean { 
    3326 
    34         private static GML_VERSION gmlVersion = GML_VERSION.v3_2; 
    35          
    36         private String getTempDir() { 
    37                 ServletContext context = (ServletContext)FacesContext.getCurrentInstance().getExternalContext().getContext(); 
    38                 return (String)context.getAttribute(NewmoonContextListener.TMP_DIR); 
     27        private XMIEncoderHelper helper = null; 
     28        private boolean encodeReady = false; 
     29 
     30        private static final ServletContext sc = (ServletContext) FacesContext.getCurrentInstance().getExternalContext() 
     31                        .getContext(); 
     32 
     33        /** 
     34         * Logger for this class. 
     35         */ 
     36        private static final Logger LOG = LoggerFactory.getLogger(XMIEncoderBean.class); 
     37 
     38        public void xmiListener(FileUploadEvent event) throws NewmoonException { 
     39                UploadedFile requestItem = event.getUploadedFile(); 
     40                File requestTmpDir = new File((String) sc.getAttribute(NewmoonContextListener.TMP_DIR), 
     41                                FilenameUtils.getBaseName(requestItem.getName())); 
     42 
     43                if (requestTmpDir.exists()) { 
     44                        try { 
     45                                FileUtils.deleteDirectory(requestTmpDir); 
     46                        } catch (IOException e) { 
     47                                LOG.warn("Problems to cleanup the tempDir", e); 
     48                        } 
     49                } 
     50 
     51                requestTmpDir.mkdir(); 
     52                File zipRequest = new File(requestTmpDir, requestItem.getName()); 
     53                try { 
     54                        FileUtils.writeByteArrayToFile(zipRequest, requestItem.getData()); 
     55                } catch (IOException e) { 
     56                        throw new NewmoonException("Upload error", e); 
     57                } 
     58                helper = new XMIEncoderHelper(zipRequest); 
     59                new Thread(helper).start(); 
    3960        } 
    4061 
    41         public void xmiListener(FileUploadEvent event) throws NewmoonException { 
    42                 UploadedFile item = event.getUploadedFile(); 
    43                 File tmpDir = new File(getTempDir(), FilenameUtils.getBaseName(item.getName())); 
    44                 tmpDir.mkdir(); 
    45                 File zip = new File(tmpDir, item.getName()); 
     62        public boolean isEncodeReady() { 
     63                return helper != null ? helper.isEncodeReady() : false; 
     64        } 
     65 
     66        public void downloadZip(OutputStream out, Object data) throws IOException { 
     67                //data is the item passed throught the VALUE attribute in the a4j:mediaOutput 
     68                //actually is not used 
     69                boolean delete = false; 
     70                if (helper == null) 
     71                        return; 
    4672                try { 
    47                         FileUtils.writeByteArrayToFile(zip, item.getData()); 
    48                         unzipPackage(zip, tmpDir); 
    49                         encodePackage(new File(tmpDir, FilenameUtils.getBaseName(item.getName()))); 
    50                         FileUtils.deleteDirectory(tmpDir); 
    51                 } catch (IOException e) { 
    52                         throw new NewmoonException("Encoding error", e); 
     73                        finalizeResponse(helper.getZipResponse(), out); 
     74                        delete = true; 
     75                } finally { 
     76                        if (delete) { 
     77                                FileUtils.deleteDirectory(helper.getRequestTmpDir()); 
     78                                helper = null; 
     79                                encodeReady = false; 
     80                        } 
    5381                } 
    5482        } 
    5583 
    56         private void encodePackage(File tmpDir) throws IOException, NewmoonException { 
    57                 File register = null; 
    58                 File xmi = null; 
     84        private void finalizeResponse(File zipFile, OutputStream output) throws IOException { 
     85                // Prepare. 
     86                byte[] zip; 
     87                zip = IOUtils.toByteArray(new FileInputStream(zipFile)); 
    5988 
    60                 FileFilter ff = new RegexFileFilter("\\A.+-register\\..+\\Z"); 
    61                 File[] regs = tmpDir.listFiles(ff); 
    62                 if (regs == null || regs.length != 1) { 
    63                         throw new IOException("none or more than one register"); 
    64                 } 
    65                 register = regs[0]; 
     89                FacesContext facesContext = FacesContext.getCurrentInstance(); 
     90                ExternalContext externalContext = facesContext.getExternalContext(); 
     91                HttpServletResponse response = (HttpServletResponse) externalContext.getResponse(); 
    6692 
    67                 List<IOFileFilter> ffs = new ArrayList<IOFileFilter>(); 
    68                 ffs.add(new NotFileFilter((IOFileFilter) ff)); 
    69                 ffs.add(new NotFileFilter(DirectoryFileFilter.DIRECTORY));               
     93                response.reset(); 
     94                response.setContentType("application/zip"); 
     95                response.setHeader("Content-disposition", "attachment; filename=\"" + zipFile.getName() + "\""); 
    7096 
    71                 File[] xmis = tmpDir.listFiles((FileFilter)new AndFileFilter(ffs)); 
    72                 if (xmis == null || xmis.length != 1) { 
    73                         throw new IOException("none or more than one xmi"); 
    74                 } 
    75                 xmi = xmis[0]; 
    76  
    77                 XMIEncoder encoder = new XMIEncoder(); 
    78                 String workingPath = FilenameUtils.getBaseName(FilenameUtils.getFullPathNoEndSeparator(xmi.getPath())); 
    79  
    80                 List<String> encFilePaths = encoder.doEncode(xmi, FilenameUtils.getName(register.getPath()), 
    81                                 workingPath, gmlVersion, FilenameUtils.getBaseName(xmi.getPath())); 
    82                 for (String filePath : encFilePaths) { 
    83                         System.out.println(filePath); 
    84                 }                
    85         } 
    86  
    87         private void unzipPackage(File is, File tmpDir) throws ZipException, IOException { 
    88                 ZipFile zipFile = new ZipFile(is); 
    89  
    90                 if (!tmpDir.isDirectory()) { 
    91                         throw new IOException("tmpDir is not a Directory"); 
    92                 } 
    93  
    94                 Enumeration<? extends ZipEntry> zipen = zipFile.entries(); 
    95                 ZipEntry item = null; 
    96                 String base = tmpDir.getPath() + File.separatorChar; 
    97                 while (zipen.hasMoreElements()) { 
    98                         item = zipen.nextElement(); 
    99  
    100                         if (item.isDirectory()) { 
    101                                 (new File(base + item.getName())).mkdir(); 
    102                                 continue; 
    103                         } 
    104  
    105                         // System.err.println("Extracting file: " + item.getName()); 
    106                         IOUtils.copy(zipFile.getInputStream(item), new FileOutputStream(base + item.getName())); 
    107                 } 
     97                // Write file to response. 
     98                //OutputStream output; 
     99                //output = response.getOutputStream(); 
     100                output.write(zip); 
     101                output.flush(); 
     102                output.close(); 
     103                // facesContext.responseComplete(); 
    108104        } 
    109105} 
Note: See TracChangeset for help on using the changeset viewer.