View Javadoc

1   /*
2    * Copyright (c) 2002-2014, Mairie de Paris
3    * All rights reserved.
4    *
5    * Redistribution and use in source and binary forms, with or without
6    * modification, are permitted provided that the following conditions
7    * are met:
8    *
9    *  1. Redistributions of source code must retain the above copyright notice
10   *     and the following disclaimer.
11   *
12   *  2. Redistributions in binary form must reproduce the above copyright notice
13   *     and the following disclaimer in the documentation and/or other materials
14   *     provided with the distribution.
15   *
16   *  3. Neither the name of 'Mairie de Paris' nor 'Lutece' nor the names of its
17   *     contributors may be used to endorse or promote products derived from
18   *     this software without specific prior written permission.
19   *
20   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23   * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
24   * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28   * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30   * POSSIBILITY OF SUCH DAMAGE.
31   *
32   * License 1.0
33   */
34  package fr.paris.lutece.plugins.formengine.service.output;
35  
36  import fr.paris.lutece.portal.service.util.AppException;
37  import fr.paris.lutece.portal.service.util.AppLogService;
38  
39  import java.io.File;
40  import java.io.FileNotFoundException;
41  import java.io.FileOutputStream;
42  import java.io.IOException;
43  
44  import java.nio.channels.FileChannel;
45  import java.nio.channels.FileLock;
46  
47  import javax.xml.bind.JAXBException;
48  
49  
50  /**
51   * This abstract class defines the basis for file output processing
52   */
53  public abstract class FileOutputProcessor extends OutputProcessor
54  {
55      private String _strXmlFilePath;
56  
57      /**
58       * Constructor
59       */
60      public FileOutputProcessor(  )
61      {
62      }
63  
64      /**
65       * Constructor
66       * @param transactionObject  The transaction object
67       */
68      protected void generateOutput( Object transactionObject )
69      {
70          try
71          {
72              File file = new File( getXmlFilePath(  ) );
73  
74              // FIXME return true to indicate a directory creation, false if directory exist
75              File instanceDir = file.getParentFile(  );
76              instanceDir.mkdirs(  );
77  
78              // return true to indicate a file creation, false if file exist
79              //boolean bNewFile = file.createNewFile(  );
80              FileOutputStream fout = new FileOutputStream( file );
81              FileChannel channel = fout.getChannel(  );
82              FileLock lock = channel.lock(  );
83  
84              this.write( fout, transactionObject );
85  
86              lock.release(  );
87              fout.close(  );
88          }
89          catch ( FileNotFoundException e )
90          {
91              // TODO Auto-generated catch block
92              AppLogService.error( e.getMessage(  ), e );
93          }
94          catch ( IOException e )
95          {
96              // TODO Auto-generated catch block
97              AppLogService.error( e.getMessage(  ), e );
98          }
99          catch ( JAXBException e )
100         {
101             throw new AppException( e.getMessage(  ), e );
102         }
103     }
104 
105     /**
106      * This method will actually write the data given by the input object into the output stream.
107      * @param out the file outpustream
108      * @param transactionObject the object to process
109      * @throws JAXBException If an error occurs
110      */
111     protected abstract void write( FileOutputStream out, Object transactionObject )
112         throws JAXBException;
113 
114     /**
115      * @return Returns the _strXmlFilePath.
116      */
117     public String getXmlFilePath(  )
118     {
119         return _strXmlFilePath;
120     }
121 
122     /**
123      * @param strXmlFilePath The _strXmlFilePath to set.
124      */
125     public void setXmlFilePath( String strXmlFilePath )
126     {
127         _strXmlFilePath = strXmlFilePath;
128     }
129 }