From: <den...@us...> - 2010-11-29 21:09:00
|
Revision: 4902 http://jaffa.svn.sourceforge.net/jaffa/?rev=4902&view=rev Author: dennisl-jaffa Date: 2010-11-29 21:08:51 +0000 (Mon, 29 Nov 2010) Log Message: ----------- Modified to check whether the form bean specifies a different form alternateName only if alternateName has not already been specified by the FormPrintRequest or as a FollowOnFormAlternate. Modified Paths: -------------- trunk/JaffaComponentsPrinting/source/java/org/jaffa/modules/printing/services/FormProcessor.java Modified: trunk/JaffaComponentsPrinting/source/java/org/jaffa/modules/printing/services/FormProcessor.java =================================================================== --- trunk/JaffaComponentsPrinting/source/java/org/jaffa/modules/printing/services/FormProcessor.java 2010-11-29 21:07:10 UTC (rev 4901) +++ trunk/JaffaComponentsPrinting/source/java/org/jaffa/modules/printing/services/FormProcessor.java 2010-11-29 21:08:51 UTC (rev 4902) @@ -45,7 +45,6 @@ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * =================================================================== */ - package org.jaffa.modules.printing.services; import java.beans.IntrospectionException; @@ -75,7 +74,6 @@ /** Logger reference */ private final static Logger log = Logger.getLogger(FormProcessor.class); - /** * Process the FormPrintRequest. This will look at the form definition to use, locate it, build the * databean to use, and generate the output form. If follow-on forms are needed these will be generated @@ -88,7 +86,7 @@ * @throws org.jaffa.exceptions.ApplicationExceptions throw if there is an application error that should be repoted to the user */ public static void process(FormPrintRequest request) throws FrameworkException, ApplicationExceptions { - Map<IDataBean,DocumentPrintedListener> printedListeners = new HashMap<IDataBean,DocumentPrintedListener>(); + Map<IDataBean, DocumentPrintedListener> printedListeners = new HashMap<IDataBean, DocumentPrintedListener>(); File outFile = null; UOW uow = new UOW(); FormCache cache = new FormCache(); @@ -97,12 +95,12 @@ // Lookup the printer, to get the output type PrinterDefinition printer = null; String outputType = null; - if(request.getPrinterId() != null) { + if (request.getPrinterId() != null) { printer = PrinterDefinition.findByPK(uow, request.getPrinterId()); - if(printer==null) { + if (printer == null) { log.error("Invalid printer id on form request: Printer = " + request.getPrinterId()); throw new ApplicationExceptions( - new DomainObjectNotFoundException(PrinterDefinitionMeta.getLabelToken()) ); + new DomainObjectNotFoundException(PrinterDefinitionMeta.getLabelToken())); } outputType = printer.getOutputType(); } @@ -111,50 +109,55 @@ String alternateName = request.getFormAlternateName(); String variation = request.getVariation(); String[] keyNames = null; - if(request.getKeys()!=null) - keyNames = (String[]) request.getKeys().keySet().toArray(new String[] {}); + if (request.getKeys() != null) { + keyNames = (String[]) request.getKeys().keySet().toArray(new String[]{}); + } Object firstDom = null; - int documentCounter=0; + int documentCounter = 0; // Main assemble loop if this has follow-on forms - while(formName!=null) { + while (formName != null) { FormDefinition formDefinition = findFormDefinition(uow, formName, alternateName, variation, outputType, keyNames); - if(formDefinition == null) { - if (outputType == null) { - log.error("Form Not Found. Name=" +request.getFormName()+", Alt="+request.getFormAlternateName()+ - ", Variation=" + request.getVariation() + ", OutputType=" + outputType); + if (formDefinition == null) { + if (outputType == null) { + log.error("Form Not Found. Name=" + request.getFormName() + ", Alt=" + request.getFormAlternateName() + + ", Variation=" + request.getVariation() + ", OutputType=" + outputType); throw new ApplicationExceptions(new DomainObjectNotFoundException(FormDefinitionMeta.getLabelToken())); - }else{ - outputType = null; - formDefinition = findFormDefinition(uow, formName, alternateName, variation, outputType, keyNames); - if(formDefinition == null) { - log.error("Form Not Found. Name=" +request.getFormName()+", Alt="+request.getFormAlternateName()+ - ", Variation=" + request.getVariation() + ", OutputType=" + outputType); + } else { + outputType = null; + formDefinition = findFormDefinition(uow, formName, alternateName, variation, outputType, keyNames); + if (formDefinition == null) { + log.error("Form Not Found. Name=" + request.getFormName() + ", Alt=" + request.getFormAlternateName() + + ", Variation=" + request.getVariation() + ", OutputType=" + outputType); throw new ApplicationExceptions(new DomainObjectNotFoundException(FormDefinitionMeta.getLabelToken())); - }else{ - throw new ApplicationExceptions(new ApplicationException("exception.org.jaffa.modules.printing.services.FormProcessor.OutputTypeMismatch") {}); - } - } + } else { + throw new ApplicationExceptions(new ApplicationException("exception.org.jaffa.modules.printing.services.FormProcessor.OutputTypeMismatch") { + }); + } + } } // See if we have the DOM for this form already, if not build it IDataBean data = cache.lookupForm(formDefinition); - if(data == null) { + if (data == null) { // build the form DOM data = buildDataBean(request, formDefinition); cache.addForm(formDefinition, data); - // The first time we get the databean, see if we should be using an alternateName name? - if((data.getFormAlternateName()==null && alternateName!=null ) || - (data.getFormAlternateName()!=null && !data.getFormAlternateName().equals(alternateName)) ) { - log.debug("Form " + formName + " switch to alternateName " + data.getFormAlternateName() + " from " + alternateName); - alternateName = data.getFormAlternateName(); - continue; + // Determine if the form bean specifies a different form alternateName. + // This is only done if alternateName has not already been specified by + // the FormPrintRequest or as a FollowOnFormAlternate. + if (alternateName == null) { + if (data.getFormAlternateName() != null) { + log.debug("Form " + formName + " switch to alternateName " + data.getFormAlternateName() + " from " + alternateName); + alternateName = data.getFormAlternateName(); + continue; + } } } // Add this form for printing - if(engine==null) { + if (engine == null) { // set up the engine engine = new MultiFormPrintEngine(); // get the form type so the correct factory can be set... @@ -168,165 +171,123 @@ String templateName = cache.getTemplate(formDefinition, engine.getEngineType()); // If data.getDocumentRoot() is an object array, add a document for each entry in the array. - if(data.getDocumentRoot()!=null && data.getDocumentRoot().getClass().isArray()) { - Object[] doms = (Object[])data.getDocumentRoot(); - for(int i=0; i<doms.length; i++) { - if (firstDom == null) + if (data.getDocumentRoot() != null && data.getDocumentRoot().getClass().isArray()) { + Object[] doms = (Object[]) data.getDocumentRoot(); + for (int i = 0; i < doms.length; i++) { + if (firstDom == null) { firstDom = doms[i]; + } // Only add document if it has data - if(doms[i]!=null) { + if (doms[i] != null) { documentCounter++; engine.addDocument(templateName, doms[i]); } } } else { - if (firstDom == null) + if (firstDom == null) { firstDom = data.getDocumentRoot(); + } // Only add document if it has data - if(data.getDocumentRoot()!=null) { + if (data.getDocumentRoot() != null) { documentCounter++; engine.addDocument(templateName, data.getDocumentRoot()); } } // Get the DocumentPrintedListerers for this DataBean, if they have not already be aquired - if(!printedListeners.containsKey(data)) + if (!printedListeners.containsKey(data)) { printedListeners.put(data, data.getDocumentPrintedListener()); + } // Get the follow-on form so it will be process in the next iteration formName = formDefinition.getFollowOnFormName(); alternateName = formDefinition.getFollowOnFormAlternate(); } - if(documentCounter==0) { + if (documentCounter == 0) { log.debug("No pages added to engine, dataBeans were null. No output will be generated"); } else { // Now generate the output engine.generate(); // Get the generated output - if(request.getSaveFileName()!=null) + if (request.getSaveFileName() != null) { outFile = engine.writeForm(new File(request.getSaveFileName())); - else + } else { outFile = engine.writeForm(); + } - if(log.isDebugEnabled()) - log.debug("Created file : " + (outFile==null?"NULL!!":outFile.getAbsolutePath()) ); + if (log.isDebugEnabled()) { + log.debug("Created file : " + (outFile == null ? "NULL!!" : outFile.getAbsolutePath())); + } // Send file to printer and email if required FormDelivery.deliver(request, outFile, firstDom); // Invoke all the DocumentPrintedListerer - for(DocumentPrintedListener listener : printedListeners.values()) { - if(listener!= null) - listener.documentPrinted( new EventObject(request) ); + for (DocumentPrintedListener listener : printedListeners.values()) { + if (listener != null) { + listener.documentPrinted(new EventObject(request)); + } } } } finally { - if(uow!=null) + if (uow != null) { uow.rollback(); // This UOW should have not been used for updates!!! - + } // Clean up the temporary file unless it has been written specifically for web publishing - if(outFile!=null) { - if(log.isDebugEnabled()) + if (outFile != null) { + if (log.isDebugEnabled()) { log.debug("FILE NOT CLEANED UP IN DEBUG MODE"); - else if( request.getSaveFileName()==null ) - if(!outFile.delete()) + } else if (request.getSaveFileName() == null) { + if (!outFile.delete()) { log.error("Failed to delete temp file form form " + outFile.getAbsolutePath()); + } + } } } } - /** The following is the old findFormDefinition now superceded by the version below. - private static FormDefinition findFormDefinition(UOW uow, String formName, - String alternateName, String variation, String outputType, String[] keys) - throws FrameworkException { - - FormDefinition form = null; - String var = variation; - while(form==null) { - // Look for the specific form, alternate, output type and keys - Criteria c = new Criteria(); - c.setTable(FormDefinitionMeta.getName()); - c.addCriteria(FormDefinitionMeta.FORM_NAME, formName); - if(alternateName!=null) - c.addCriteria(FormDefinitionMeta.FORM_ALTERNATE, alternateName); - else - c.addCriteria(FormDefinitionMeta.FORM_ALTERNATE, Criteria.RELATIONAL_IS_NULL); - if(outputType!=null) - c.addCriteria(FormDefinitionMeta.OUTPUT_TYPE, outputType); - if(keys!=null && keys.length> 0) { - c.addCriteria(FormDefinitionMeta.DOM_KEY1, keys[0]); - if(keys.length>1) - c.addCriteria(FormDefinitionMeta.DOM_KEY2, keys[1]); - if(keys.length>2) - c.addCriteria(FormDefinitionMeta.DOM_KEY3, keys[2]); - } - - // Use the variation as specified on the first pass, then look for no - // variation the second time - if(var!=null) - c.addCriteria(FormDefinitionMeta.FORM_VARIATION, var); - else - c.addCriteria(FormDefinitionMeta.FORM_VARIATION, Criteria.RELATIONAL_IS_NULL); - - - // Found the form - Collection forms = uow.query(c); - if(forms!=null && forms.size() > 0) { - form = (FormDefinition) forms.iterator().next(); - log.debug("Found form " + form.getFormId() + " using variation " + variation); - } else { - if (var == null) - // Was not found with no variation specified - break; - else { - log.debug("Now looking for form with no variation"); - var = null; - } - } - } - return form; - } - */ - - /** + /** * Find the Form Definition for the given form name, form alternate, variation, output type, - * and keyset. The elements of the input String array of keys are concatenated into one String keyset. + * and keyset. The elements of the input String array of keys are concatenated into one String keyset. * The keyset must match Form Definition DOM key1, key2 or key3. - */ + */ public static FormDefinition findFormDefinition(UOW uow, String formName, String alternateName, String variation, String outputType, String[] keys) throws FrameworkException { - + FormDefinition form = null; - String var = variation; + String var = variation; StringBuffer sBuffer = new StringBuffer(); - for (int i=0; i<keys.length; i++) { + for (int i = 0; i < keys.length; i++) { if (keys[i] != null) { - if (sBuffer.length() > 0) + if (sBuffer.length() > 0) { sBuffer.append(';'); + } sBuffer.append(keys[i]); } } String keySet = sBuffer.toString(); - - while(form==null) { + + while (form == null) { // Look for the specific form, alternate, output type and keys Criteria c = new Criteria(); c.setTable(FormDefinitionMeta.getName()); c.addCriteria(FormDefinitionMeta.FORM_NAME, formName); - - if(alternateName!=null) + + if (alternateName != null) { c.addCriteria(FormDefinitionMeta.FORM_ALTERNATE, alternateName); - else + } else { c.addCriteria(FormDefinitionMeta.FORM_ALTERNATE, Criteria.RELATIONAL_IS_NULL); - - if(outputType!=null) + } + + if (outputType != null) { c.addCriteria(FormDefinitionMeta.OUTPUT_TYPE, outputType); - + } + if (keySet.length() > 0) { AtomicCriteria atomic = new AtomicCriteria(); atomic.addCriteria(FormDefinitionMeta.DOM_KEY1, Criteria.RELATIONAL_EQUALS, keySet); @@ -338,24 +299,25 @@ c.addCriteria(FormDefinitionMeta.DOM_KEY2, Criteria.RELATIONAL_IS_NULL); c.addCriteria(FormDefinitionMeta.DOM_KEY3, Criteria.RELATIONAL_IS_NULL); } - + // Use the variation specified on the first pass, then look for no variation the second time. - if(var!=null) + if (var != null) { c.addCriteria(FormDefinitionMeta.FORM_VARIATION, var); - else + } else { c.addCriteria(FormDefinitionMeta.FORM_VARIATION, Criteria.RELATIONAL_IS_NULL); - + } + Collection forms = uow.query(c); - if(forms!=null && forms.size() > 0) { + if (forms != null && forms.size() > 0) { // Found the Form Definition form = (FormDefinition) forms.iterator().next(); log.debug("Found Form Definition Id " + form.getFormId() + ", Name " + form.getFormName() + ", Alternate " + alternateName + ", Variation " + var + ", keyset " + keySet + "."); } else { - if (var == null) - // The Form Definition was not found with a null variation specified + if (var == null) // The Form Definition was not found with a null variation specified + { break; - else { + } else { log.debug("Now looking for the Form Definition with no variation."); var = null; } @@ -368,15 +330,15 @@ * to build the appropriate bean */ private static IDataBean buildDataBean(FormPrintRequest request, FormDefinition form) - throws FrameworkException, ApplicationExceptions { + throws FrameworkException, ApplicationExceptions { try { IDataBeanFactory dbf = AbstractDataBeanFactory.newInstance(form.getDomFactory()); dbf.setBeanClass(Class.forName(form.getDomClass())); String[] keyNames = null; - if(request.getKeys() != null) { - keyNames = (String[]) request.getKeys().keySet().toArray(new String[] {}); - for (String keyName: keyNames){ + if (request.getKeys() != null) { + keyNames = (String[]) request.getKeys().keySet().toArray(new String[]{}); + for (String keyName : keyNames) { String keyValue = (String) request.getKeys().get(keyName); dbf.setKey(keyName, keyValue); } @@ -385,7 +347,7 @@ return dbf.getInstance(); } catch (ClassNotFoundException e) { ApplicationExceptions aes = new ApplicationExceptions(); - aes.add( new DataBeanClassNotFoundException(e.getMessage(),e) ); + aes.add(new DataBeanClassNotFoundException(e.getMessage(), e)); throw aes; } catch (ApplicationException e) { ApplicationExceptions aes = new ApplicationExceptions(); @@ -393,5 +355,4 @@ throw aes; } } - } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |