Author: psharples
Date: Wed Aug 15 14:00:20 2012
New Revision: 1373413

URL: http://svn.apache.org/viewvc?rev=1373413&view=rev
Log:
Fixed bug where there was a NPE when the keystore file could not be loaded for 
the DigSig processor

Modified:
    
incubator/wookie/trunk/src/org/apache/wookie/controller/WidgetsController.java
    incubator/wookie/trunk/src/org/apache/wookie/messages.properties
    incubator/wookie/trunk/src/org/apache/wookie/messages_nl.properties
    incubator/wookie/trunk/src/org/apache/wookie/server/ContextListener.java

Modified: 
incubator/wookie/trunk/src/org/apache/wookie/controller/WidgetsController.java
URL: 
http://svn.apache.org/viewvc/incubator/wookie/trunk/src/org/apache/wookie/controller/WidgetsController.java?rev=1373413&r1=1373412&r2=1373413&view=diff
==============================================================================
--- 
incubator/wookie/trunk/src/org/apache/wookie/controller/WidgetsController.java 
(original)
+++ 
incubator/wookie/trunk/src/org/apache/wookie/controller/WidgetsController.java 
Wed Aug 15 14:00:20 2012
@@ -268,66 +268,70 @@ public class WidgetsController extends C
         fac.setFeatures(Features.getFeatureNames());
         fac.setStartPageProcessor(new StartPageProcessor());
         if (VERIFYSIGNATURE) {
-        InputStream stream = getServletContext().getResourceAsStream(
-            "/WEB-INF/classes/" + KEYSTORE);
-        KeyStore keyStore = KeyStore.getInstance("JKS");
-        keyStore.load(stream, PASSWORD.toCharArray());
-        stream.close();
-        fac.setDigitalSignatureParser(new DigitalSignatureProcessor(keyStore,
-            REJECTINVALID, REJECTUNTRUSTED));
-      }
-       W3CWidget widgetModel = fac.parse(zipFile);
+            InputStream stream = getServletContext().getResourceAsStream(
+                    "/WEB-INF/classes/" + KEYSTORE);
+            if(stream != null){
+                KeyStore keyStore = KeyStore.getInstance("JKS");
+                keyStore.load(stream, PASSWORD.toCharArray());
+                stream.close();
+                fac.setDigitalSignatureParser(new 
DigitalSignatureProcessor(keyStore,
+                        REJECTINVALID, REJECTUNTRUSTED));
+            }else{
+                _logger.error(localizedMessages.getString("WidgetHotDeploy.4") 
+ 
+                        " (/WEB-INF/classes/" + KEYSTORE+") " + 
localizedMessages.getString("WidgetHotDeploy.5"));
+            }
+        }
+        W3CWidget widgetModel = fac.parse(zipFile);
         new WidgetJavascriptSyntaxAnalyzer(fac.getUnzippedWidgetDirectory());
-       // File f = new File();
         //
         // Check if the widget model corresponds to an existing installed 
widget
         //
         IPersistenceManager persistenceManager = 
PersistenceManagerFactory.getPersistenceManager();
         if (persistenceManager.findWidgetByGuid(widgetModel.getIdentifier()) 
== null) {
-          
-          //
-          // A new widget was created, so return 201
-          //
-          WidgetFactory.addNewWidget(widgetModel, zipFile,false);
-          NewWidgetBroadcaster.broadcast(properties, 
widgetModel.getIdentifier());
-          returnXml(WidgetImportHelper.createXMLWidgetDocument(widgetModel, 
new File(fac.getUnzippedWidgetDirectory(), "config.xml"), 
getWookieServerURL(request, "").toString(), true), response);
-          return true;
-          
+
+            //
+            // A new widget was created, so return 201
+            //
+            WidgetFactory.addNewWidget(widgetModel, zipFile,false);
+            NewWidgetBroadcaster.broadcast(properties, 
widgetModel.getIdentifier());
+            returnXml(WidgetImportHelper.createXMLWidgetDocument(widgetModel, 
new File(fac.getUnzippedWidgetDirectory(), "config.xml"), 
getWookieServerURL(request, "").toString(), true), response);
+            return true;
+
         } else {
-          
-          //
-          // Widget already exists, so update the widget metadata and 
configuration details
-          // and return 200
-          //
-          
WidgetFactory.update(widgetModel,persistenceManager.findWidgetByGuid(widgetModel.getIdentifier()),false,
 zipFile);
-          returnXml(WidgetImportHelper.createXMLWidgetDocument(widgetModel, 
new File(fac.getUnzippedWidgetDirectory(), "config.xml"), 
getWookieServerURL(request, "").toString(), true), response);
-          return false;
-          
+
+            //
+            // Widget already exists, so update the widget metadata and 
configuration details
+            // and return 200
+            //
+            
WidgetFactory.update(widgetModel,persistenceManager.findWidgetByGuid(widgetModel.getIdentifier()),false,
 zipFile);
+            returnXml(WidgetImportHelper.createXMLWidgetDocument(widgetModel, 
new File(fac.getUnzippedWidgetDirectory(), "config.xml"), 
getWookieServerURL(request, "").toString(), true), response);
+            return false;
+
         }
-        
+
         //
         // Catch specific parsing and validation errors and throw exception 
with error message
         //
     } catch (InvalidStartFileException ex) {
-      _logger.error(ex);
-      throw new InvalidParametersException(
-          localizedMessages.getString("widgets.no-start-file") + "\n" + 
ex.getMessage()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$     
+        _logger.error(ex);
+        throw new InvalidParametersException(
+                localizedMessages.getString("widgets.no-start-file") + "\n" + 
ex.getMessage()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$     
     } catch (BadManifestException ex) {
-      _logger.error(ex);
-      String message = ex.getMessage();
-      if (ex.getMessage() == null || ex.getMessage().equals(""))message = 
localizedMessages.getString("widgets.invalid-config-xml"); //$NON-NLS-1$
-      if (ex instanceof InvalidContentTypeException)
-        message = 
localizedMessages.getString("widgets.unsupported-content-type");//$NON-NLS-1$
-      throw new InvalidParametersException(message);
+        _logger.error(ex);
+        String message = ex.getMessage();
+        if (ex.getMessage() == null || ex.getMessage().equals(""))message = 
localizedMessages.getString("widgets.invalid-config-xml"); //$NON-NLS-1$
+        if (ex instanceof InvalidContentTypeException)
+            message = 
localizedMessages.getString("widgets.unsupported-content-type");//$NON-NLS-1$
+        throw new InvalidParametersException(message);
     } catch (BadWidgetZipFileException ex) {
-      _logger.error(ex);
-      String message = ex.getMessage();
-      if (ex.getMessage() == null || ex.getMessage().equals(""))message = 
localizedMessages.getString("widgets.bad-zip-file"); //$NON-NLS-1$
-      throw new InvalidParametersException(message);
+        _logger.error(ex);
+        String message = ex.getMessage();
+        if (ex.getMessage() == null || ex.getMessage().equals(""))message = 
localizedMessages.getString("widgets.bad-zip-file"); //$NON-NLS-1$
+        throw new InvalidParametersException(message);
     } catch (Exception ex) {
-      _logger.error(ex);
-      throw new InvalidParametersException(
-          localizedMessages.getString("widgets.cant-parse-config-xml") + "\n" 
+ ex.getMessage()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+        _logger.error(ex);
+        throw new InvalidParametersException(
+                localizedMessages.getString("widgets.cant-parse-config-xml") + 
"\n" + ex.getMessage()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
     }
 
   }

Modified: incubator/wookie/trunk/src/org/apache/wookie/messages.properties
URL: 
http://svn.apache.org/viewvc/incubator/wookie/trunk/src/org/apache/wookie/messages.properties?rev=1373413&r1=1373412&r2=1373413&view=diff
==============================================================================
--- incubator/wookie/trunk/src/org/apache/wookie/messages.properties (original)
+++ incubator/wookie/trunk/src/org/apache/wookie/messages.properties Wed Aug 15 
14:00:20 2012
@@ -41,6 +41,8 @@ WidgetHotDeploy.0=Hot deploy disabled
 WidgetHotDeploy.1=Hot deploy error: Unable to move dropped .wgt file to upload 
folder
 WidgetHotDeploy.2=Hot deploy error: file is not a valid widget package
 WidgetHotDeploy.3=Hot deploy error: widget has invalid manifest
+WidgetHotDeploy.4=Unable to load specified key file.
+WidgetHotDeploy.5=Digital Signature Verification is not enabled.
 
 WidgetServiceServlet.0=No valid requestid was found.
 WidgetServiceServlet.1=completed

Modified: incubator/wookie/trunk/src/org/apache/wookie/messages_nl.properties
URL: 
http://svn.apache.org/viewvc/incubator/wookie/trunk/src/org/apache/wookie/messages_nl.properties?rev=1373413&r1=1373412&r2=1373413&view=diff
==============================================================================
--- incubator/wookie/trunk/src/org/apache/wookie/messages_nl.properties 
(original)
+++ incubator/wookie/trunk/src/org/apache/wookie/messages_nl.properties Wed Aug 
15 14:00:20 2012
@@ -41,6 +41,8 @@ WidgetHotDeploy.0=Hot deploy disabled (d
 WidgetHotDeploy.1=Hot deploy error: Unable to move dropped .wgt file to upload 
folder (dutch)
 WidgetHotDeploy.2=Hot deploy error: file is not a valid widget package (dutch)
 WidgetHotDeploy.3=Hot deploy error: widget has invalid manifest (dutch)
+WidgetHotDeploy.4=Unable to load specified key file.(dutch)
+WidgetHotDeploy.5=Digital Signature Verification is not enabled.(dutch)
 
 WidgetServiceServlet.0=No valid requestid was found.(dutch)
 WidgetServiceServlet.1=completed(dutch)

Modified: 
incubator/wookie/trunk/src/org/apache/wookie/server/ContextListener.java
URL: 
http://svn.apache.org/viewvc/incubator/wookie/trunk/src/org/apache/wookie/server/ContextListener.java?rev=1373413&r1=1373412&r2=1373413&view=diff
==============================================================================
--- incubator/wookie/trunk/src/org/apache/wookie/server/ContextListener.java 
(original)
+++ incubator/wookie/trunk/src/org/apache/wookie/server/ContextListener.java 
Wed Aug 15 14:00:20 2012
@@ -57,211 +57,216 @@ import org.apache.wookie.w3c.util.Widget
  *
  */
 public class ContextListener implements ServletContextListener {
-       /*
-        * In the case of the 'log4j.properties' file used within a server 
environment
-        * there is no need to explicitly load the file.  It will be 
automatically loaded as
-        * long as it is placed at the root of the source code. This way it 
eventually is found under...
-        * 
-        *                      '/webappname/WEB-INF/classes'  ...at runtime.
-        */
-       static Logger _logger = 
Logger.getLogger(ContextListener.class.getName());
-       public static Boolean usePreferenceInstanceQueues;
-       public static Boolean useSharedDataInstanceQueues;      
-       
+    /*
+     * In the case of the 'log4j.properties' file used within a server 
environment
+     * there is no need to explicitly load the file.  It will be automatically 
loaded as
+     * long as it is placed at the root of the source code. This way it 
eventually is found under...
+     * 
+     *                         '/webappname/WEB-INF/classes'  ...at runtime.
+     */
+    static Logger _logger = Logger.getLogger(ContextListener.class.getName());
+    public static Boolean usePreferenceInstanceQueues;
+    public static Boolean useSharedDataInstanceQueues;
+
     public void contextInitialized(ServletContextEvent event) {
-               try {
-                       ServletContext context = event.getServletContext();
-                       
WidgetRuntimeHelper.setWebContextPath(context.getContextPath());
-                       /* 
-                        *  load the widgetserver.properties and 
local.widget.properties file
-                        *  and put it into this context as an attribute 
'properties' available to all resources
-                        */
-      File localPropsFile = new File(System.getProperty("user.dir") + 
File.separator + "local.widgetserver.properties");
-      PropertiesConfiguration localConfiguration = new 
PropertiesConfiguration(localPropsFile);
-      CompositeConfiguration configuration = new CompositeConfiguration();
-      configuration.addConfiguration(localConfiguration);
-      configuration.addConfiguration(new 
PropertiesConfiguration("widgetserver.properties"));
-      
-      context.setAttribute("properties", (Configuration) configuration);
-                       
-                       // load these up now so we don't have to do it on every 
request(i.e. filter) in the future
-                       usePreferenceInstanceQueues = 
configuration.getBoolean(WidgetRuntimeHelper.USE_PREFERENCE_INSTANCE_QUEUES);   
  
-                       useSharedDataInstanceQueues = 
configuration.getBoolean(WidgetRuntimeHelper.USE_SHAREDDATA_INSTANCE_QUEUES);   
                  
-                       
-                       /*
-                        * Merge in system properties overrides
-                        */
-                       Iterator<Object> systemKeysIter = 
System.getProperties().keySet().iterator();
-                       while (systemKeysIter.hasNext()) {
-                           String key = systemKeysIter.next().toString();
-                           if (configuration.containsKey(key) || 
key.startsWith("widget.")) {
-                               String setting = configuration.getString(key);
-                               String override = System.getProperty(key);
-                               if ((override != null) && (override.length() > 
0) && !override.equals(setting)) {
-                                   configuration.setProperty(key, override);
-                                   if (setting != null) {
-                                       _logger.info("Overridden server 
configuration property: " + key + "=" +override);
-                                   }
-                               }
-                           }
-                       }
-                       
-                       /*
-                        * Initialize persistence manager factory now, not on 
first request
-                        */
-                       PersistenceManagerFactory.initialize(configuration);
-                       
-                       /*
-                        * Initialise the locale handler
-                        */
-                       LocaleHandler.getInstance().initialize(configuration);
-                       final Locale locale = new 
Locale(configuration.getString("widget.default.locale"));
-                       final Messages localizedMessages = 
LocaleHandler.getInstance().getResourceBundle(locale);
-                       
-                       /* 
-                        *  load the opensocial.properties file and put it into 
this context
-                        *  as an attribute 'opensocial' available to all 
resources
-                        */
-                       File localOpenSocialPropsFile = new 
File(System.getProperty("user.dir") + File.separator + 
"local.opensocial.properties");
+        try {
+            ServletContext context = event.getServletContext();
+            WidgetRuntimeHelper.setWebContextPath(context.getContextPath());
+            /* 
+             *  load the widgetserver.properties and local.widget.properties 
file
+             *  and put it into this context as an attribute 'properties' 
available to all resources
+             */
+            File localPropsFile = new File(System.getProperty("user.dir") + 
File.separator + "local.widgetserver.properties");
+            PropertiesConfiguration localConfiguration = new 
PropertiesConfiguration(localPropsFile);
+            CompositeConfiguration configuration = new 
CompositeConfiguration();
+            configuration.addConfiguration(localConfiguration);
+            configuration.addConfiguration(new 
PropertiesConfiguration("widgetserver.properties"));
+
+            context.setAttribute("properties", (Configuration) configuration);
+
+            // load these up now so we don't have to do it on every 
request(i.e. filter) in the future
+            usePreferenceInstanceQueues = 
configuration.getBoolean(WidgetRuntimeHelper.USE_PREFERENCE_INSTANCE_QUEUES);   
     
+            useSharedDataInstanceQueues = 
configuration.getBoolean(WidgetRuntimeHelper.USE_SHAREDDATA_INSTANCE_QUEUES);   
                     
+
+            /*
+             * Merge in system properties overrides
+             */
+            Iterator<Object> systemKeysIter = 
System.getProperties().keySet().iterator();
+            while (systemKeysIter.hasNext()) {
+                String key = systemKeysIter.next().toString();
+                if (configuration.containsKey(key) || 
key.startsWith("widget.")) {
+                    String setting = configuration.getString(key);
+                    String override = System.getProperty(key);
+                    if ((override != null) && (override.length() > 0) && 
!override.equals(setting)) {
+                        configuration.setProperty(key, override);
+                        if (setting != null) {
+                            _logger.info("Overridden server configuration 
property: " + key + "=" +override);
+                        }
+                    }
+                }
+            }
+
+            /*
+             * Initialize persistence manager factory now, not on first request
+             */
+            PersistenceManagerFactory.initialize(configuration);
+
+            /*
+             * Initialise the locale handler
+             */
+            LocaleHandler.getInstance().initialize(configuration);
+            final Locale locale = new 
Locale(configuration.getString("widget.default.locale"));
+            final Messages localizedMessages = 
LocaleHandler.getInstance().getResourceBundle(locale);
+
+            /* 
+             *  load the opensocial.properties file and put it into this 
context
+             *  as an attribute 'opensocial' available to all resources
+             */
+            File localOpenSocialPropsFile = new 
File(System.getProperty("user.dir") + File.separator + 
"local.opensocial.properties");
             PropertiesConfiguration localOpenSocialConfiguration = new 
PropertiesConfiguration(localOpenSocialPropsFile);
             CompositeConfiguration opensocialConfiguration = new 
CompositeConfiguration();
             
opensocialConfiguration.addConfiguration(localOpenSocialConfiguration);
             opensocialConfiguration.addConfiguration(new 
PropertiesConfiguration("opensocial.properties"));
-                       context.setAttribute("opensocial", (Configuration) 
opensocialConfiguration);
-                       
-                       /*
-                        * Load installed features
-                        */
-                       Features.loadFeatures(context);
-                       
-                       /*
-                        * Run diagnostics
-                        */
-                       Diagnostics.run(context, configuration);
-                       
-                       /*
-                        * Start hot-deploy widget watcher
-                        */
-                       if (configuration.getBoolean("widget.hot_deploy")) {
-                               startWatcher(context, configuration, 
localizedMessages);
-                       } else {
-                               
_logger.info(localizedMessages.getString("WidgetHotDeploy.0"));
-                       }
-               } 
-               catch (ConfigurationException ex) {
-                       _logger.error("ConfigurationException thrown: "+ 
ex.toString());
-               }                                       
-       }
-       
-       /**
-        * Starts a watcher thread for hot-deploy of new widgets dropped into 
the deploy folder
-        * this is controlled using the 
<code>widget.hot_deploy=true|false</code> property 
-        * and configured to look in the folder specified by the 
<code>widget.deployfolder</code> property
-        * @param context the current servlet context
-        * @param configuration the configuration properties
-        */
-       private void startWatcher(final ServletContext context, final 
Configuration configuration, final Messages localizedMessages){
-               /*
-                * Start watching for widget deployment
-                */
-               final File deploy = new 
File(WidgetPackageUtils.convertPathToPlatform(context.getRealPath(configuration.getString("widget.deployfolder"))));
-               final String UPLOADFOLDER = 
context.getRealPath(configuration.getString("widget.useruploadfolder"));
-               final String WIDGETFOLDER = 
context.getRealPath(configuration.getString("widget.widgetfolder"));
-               final String localWidgetFolderPath = 
configuration.getString("widget.widgetfolder");
-               final String[] locales = 
configuration.getStringArray("widget.locales");
-               final String contextPath = context.getContextPath();
-               // Digital signature settings
-           final boolean VERIFYSIGNATURE = 
configuration.getBoolean("widget.deployment.verifysignature");//$NON-NLS-1$
-               final boolean REJECTINVALID= 
configuration.getBoolean("widget.deployment.rejectinvalidsignatures");
-               final boolean REJECTUNTRUSTED= 
configuration.getBoolean("widget.deployment.rejectuntrustedsignatures");
-               final String PASSWORD = 
configuration.getString("widget.deployment.trustedkeystore.password");
-           final String KEYSTORE = 
configuration.getString("widget.deployment.trustedkeystore");//$NON-NLS-1$
-
-
-               Thread thr = new Thread(){
-                       public void run() {
-                               int interval = 5000;
-                               WgtWatcher watcher = new WgtWatcher();
-                               watcher.setWatchDir(deploy);
-                               watcher.setListener(new 
WgtWatcher.FileChangeListener(){
-                                       public void fileModified(File f) {
-                                       // get persistence manager for this 
thread
+            context.setAttribute("opensocial", (Configuration) 
opensocialConfiguration);
+
+            /*
+             * Load installed features
+             */
+            Features.loadFeatures(context);
+
+            /*
+             * Run diagnostics
+             */
+            Diagnostics.run(context, configuration);
+
+            /*
+             * Start hot-deploy widget watcher
+             */
+            if (configuration.getBoolean("widget.hot_deploy")) {
+                startWatcher(context, configuration, localizedMessages);
+            } else {
+                _logger.info(localizedMessages.getString("WidgetHotDeploy.0"));
+            }
+        } 
+        catch (ConfigurationException ex) {
+            _logger.error("ConfigurationException thrown: "+ ex.toString());
+        }
+    }
+
+    /**
+     * Starts a watcher thread for hot-deploy of new widgets dropped into the 
deploy folder
+     * this is controlled using the <code>widget.hot_deploy=true|false</code> 
property 
+     * and configured to look in the folder specified by the 
<code>widget.deployfolder</code> property
+     * @param context the current servlet context
+     * @param configuration the configuration properties
+     */
+    private void startWatcher(final ServletContext context, final 
Configuration configuration, final Messages localizedMessages){
+        /*
+         * Start watching for widget deployment
+         */
+        final File deploy = new 
File(WidgetPackageUtils.convertPathToPlatform(context.getRealPath(configuration.getString("widget.deployfolder"))));
+        final String UPLOADFOLDER = 
context.getRealPath(configuration.getString("widget.useruploadfolder"));
+        final String WIDGETFOLDER = 
context.getRealPath(configuration.getString("widget.widgetfolder"));
+        final String localWidgetFolderPath = 
configuration.getString("widget.widgetfolder");
+        final String[] locales = 
configuration.getStringArray("widget.locales");
+        final String contextPath = context.getContextPath();
+        // Digital signature settings
+        final boolean VERIFYSIGNATURE = 
configuration.getBoolean("widget.deployment.verifysignature");//$NON-NLS-1$
+        final boolean REJECTINVALID= 
configuration.getBoolean("widget.deployment.rejectinvalidsignatures");
+        final boolean REJECTUNTRUSTED= 
configuration.getBoolean("widget.deployment.rejectuntrustedsignatures");
+        final String PASSWORD = 
configuration.getString("widget.deployment.trustedkeystore.password");
+        final String KEYSTORE = 
configuration.getString("widget.deployment.trustedkeystore");//$NON-NLS-1$
+
+
+        Thread thr = new Thread(){
+            public void run() {
+                int interval = 5000;
+                WgtWatcher watcher = new WgtWatcher();
+                watcher.setWatchDir(deploy);
+                watcher.setListener(new WgtWatcher.FileChangeListener(){
+                    public void fileModified(File f) {
+                        // get persistence manager for this thread
                         IPersistenceManager persistenceManager = 
PersistenceManagerFactory.getPersistenceManager();
-                                               try{
-                                                       
persistenceManager.begin();
-                                                       File upload = 
WidgetFileUtils.dealWithDroppedFile(UPLOADFOLDER, f);
-                                                       W3CWidgetFactory fac = 
new W3CWidgetFactory();
-                                                       fac.setLocales(locales);
-                                                       
fac.setLocalPath(contextPath+localWidgetFolderPath);
-                                                       
fac.setOutputDirectory(WIDGETFOLDER);
-                                                       
fac.setFeatures(Features.getFeatureNames());
-                                                       
fac.setStartPageProcessor(new StartPageProcessor());
-              if (VERIFYSIGNATURE) {
-                InputStream stream = context
-                    .getResourceAsStream("/WEB-INF/classes/" + KEYSTORE);
-                KeyStore keyStore = KeyStore.getInstance("JKS");
-                keyStore.load(stream, PASSWORD.toCharArray());
-                stream.close();
-                fac.setDigitalSignatureParser(new DigitalSignatureProcessor(
-                    keyStore, REJECTINVALID, REJECTUNTRUSTED));
-              }
-
-                                                       W3CWidget model = 
fac.parse(upload);
-                                                       
WidgetJavascriptSyntaxAnalyzer jsa = new 
WidgetJavascriptSyntaxAnalyzer(fac.getUnzippedWidgetDirectory());
-                                                       
if(persistenceManager.findWidgetByGuid(model.getIdentifier()) == null) {
-                                                               
WidgetFactory.addNewWidget(model, upload, true);
-                                                               String message 
= model.getLocalName("en") +"' - " + 
localizedMessages.getString("WidgetAdminServlet.19");
-                                                               
_logger.info(message);
-                                                       } else {
-                                                               String message 
= model.getLocalName("en") +"' - " + 
localizedMessages.getString("WidgetAdminServlet.20");
-                                                               
WidgetFactory.update(model, 
persistenceManager.findWidgetByGuid(model.getIdentifier()), true, upload);
-                                                               
_logger.info(message);
-                                                       }
-                                                       
persistenceManager.commit();
-                                                       
NewWidgetBroadcaster.broadcast(configuration, model.getIdentifier());
-                                               } catch (IOException e) {
+                        try{
+                            persistenceManager.begin();
+                            File upload = 
WidgetFileUtils.dealWithDroppedFile(UPLOADFOLDER, f);
+                            W3CWidgetFactory fac = new W3CWidgetFactory();
+                            fac.setLocales(locales);
+                            
fac.setLocalPath(contextPath+localWidgetFolderPath);
+                            fac.setOutputDirectory(WIDGETFOLDER);
+                            fac.setFeatures(Features.getFeatureNames());
+                            fac.setStartPageProcessor(new 
StartPageProcessor());
+                            if (VERIFYSIGNATURE) {
+                                InputStream stream = context
+                                .getResourceAsStream("/WEB-INF/classes/" + 
KEYSTORE);
+                                if(stream != null){
+                                    KeyStore keyStore = 
KeyStore.getInstance("JKS");
+                                    keyStore.load(stream, 
PASSWORD.toCharArray());
+                                    stream.close();
+                                    fac.setDigitalSignatureParser(new 
DigitalSignatureProcessor(
+                                            keyStore, REJECTINVALID, 
REJECTUNTRUSTED));
+                                }else{
+                                    
_logger.error(localizedMessages.getString("WidgetHotDeploy.4") + 
+                                            " (/WEB-INF/classes/" + 
KEYSTORE+") " + localizedMessages.getString("WidgetHotDeploy.5"));
+                                }
+                            }
+
+                            W3CWidget model = fac.parse(upload);
+                            WidgetJavascriptSyntaxAnalyzer jsa = new 
WidgetJavascriptSyntaxAnalyzer(fac.getUnzippedWidgetDirectory());
+                            
if(persistenceManager.findWidgetByGuid(model.getIdentifier()) == null) {
+                                WidgetFactory.addNewWidget(model, upload, 
true);
+                                String message = model.getLocalName("en") +"' 
- " + localizedMessages.getString("WidgetAdminServlet.19");
+                                _logger.info(message);
+                            } else {
+                                String message = model.getLocalName("en") +"' 
- " + localizedMessages.getString("WidgetAdminServlet.20");
+                                WidgetFactory.update(model, 
persistenceManager.findWidgetByGuid(model.getIdentifier()), true, upload);
+                                _logger.info(message);
+                            }
+                            persistenceManager.commit();
+                            NewWidgetBroadcaster.broadcast(configuration, 
model.getIdentifier());
+                        } catch (IOException e) {
                             persistenceManager.rollback();
-                                                       String error = 
f.getName()+":"+localizedMessages.getString("WidgetHotDeploy.1") + " - " + 
e.getLocalizedMessage();
-                                                       _logger.error(error, e);
-                                               } catch 
(BadWidgetZipFileException e) {
+                            String error = 
f.getName()+":"+localizedMessages.getString("WidgetHotDeploy.1") + " - " + 
e.getLocalizedMessage();
+                            _logger.error(error, e);
+                        } catch (BadWidgetZipFileException e) {
                             persistenceManager.rollback();
-                                                       String error = 
f.getName()+":"+localizedMessages.getString("WidgetHotDeploy.2") + " - " + 
e.getLocalizedMessage();
-                                                       _logger.error(error, e);
-                                               } catch (BadManifestException 
e) {
+                            String error = 
f.getName()+":"+localizedMessages.getString("WidgetHotDeploy.2") + " - " + 
e.getLocalizedMessage();
+                            _logger.error(error, e);
+                        } catch (BadManifestException e) {
                             persistenceManager.rollback();
-                                                       String error = 
f.getName()+":"+localizedMessages.getString("WidgetHotDeploy.3") + " - " + 
e.getLocalizedMessage();
-                                                       _logger.error(error, e);
-                                               } catch (Exception e) {
+                            String error = 
f.getName()+":"+localizedMessages.getString("WidgetHotDeploy.3") + " - " + 
e.getLocalizedMessage();
+                            _logger.error(error, e);
+                        } catch (Exception e) {
                             persistenceManager.rollback();
-                                                       String error = 
f.getName()+":"+e.getLocalizedMessage();
-                                                       _logger.error(error, e);
-                                               } finally {
-                                           // close thread persistence manager
-                                           
PersistenceManagerFactory.closePersistenceManager();                            
                        
-                                               }
-                                       }
-                                       public void fileRemoved(File f) {
-                                               // Not implemented - the .wgt 
files are removed as part of the deployment process
-                                       }
-                               });
-                           try {
-                              while (true) {
-                                watcher.check();
-                                Thread.sleep(interval);
-                              }
-                            } catch (InterruptedException iex) {
-                            }
-                       }       
-               };
-               
-               thr.start();
-               
-       }
+                            String error = 
f.getName()+":"+e.getLocalizedMessage();
+                            _logger.error(error, e);
+                        } finally {
+                            // close thread persistence manager
+                            
PersistenceManagerFactory.closePersistenceManager();                            
                       
+                        }
+                    }
+                    public void fileRemoved(File f) {
+                        // Not implemented - the .wgt files are removed as 
part of the deployment process
+                    }
+                });
+                try {
+                    while (true) {
+                        watcher.check();
+                        Thread.sleep(interval);
+                    }
+                } catch (InterruptedException iex) {
+                }
+            }  
+        };
+
+        thr.start();
+
+    }
 
-       public void contextDestroyed(ServletContextEvent event){
+    public void contextDestroyed(ServletContextEvent event){
         /*
          * Terminate persistence manager factory
          */
-           PersistenceManagerFactory.terminate();          
-       }
+        PersistenceManagerFactory.terminate();     
+    }
 }


Reply via email to