Author: seanfinan
Date: Fri Jul 29 22:52:07 2022
New Revision: 1903115

URL: http://svn.apache.org/viewvc?rev=1903115&view=rev
Log:
package inert for abstract AEs.
Pausable abstract AE that has a config param for Pause and a callable method to 
pause some number of seconds.
ExitForcer forces ctakes to exit.  Useful when there are hanging connections to 
external processes.

Added:
    
ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/ae/ExitForcer.java
    ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/ae/inert/
    
ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/ae/inert/PausableAE.java

Added: 
ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/ae/ExitForcer.java
URL: 
http://svn.apache.org/viewvc/ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/ae/ExitForcer.java?rev=1903115&view=auto
==============================================================================
--- 
ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/ae/ExitForcer.java
 (added)
+++ 
ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/ae/ExitForcer.java
 Fri Jul 29 22:52:07 2022
@@ -0,0 +1,60 @@
+package org.apache.ctakes.core.ae;
+
+import org.apache.ctakes.core.ae.inert.PausableAE;
+import org.apache.ctakes.core.pipeline.PipeBitInfo;
+import org.apache.log4j.Logger;
+import org.apache.uima.UimaContext;
+import org.apache.uima.analysis_engine.AnalysisEngineProcessException;
+import org.apache.uima.jcas.JCas;
+import org.apache.uima.resource.ResourceInitializationException;
+
+import javax.swing.*;
+import java.awt.*;
+
+/**
+ * @author SPF , chip-nlp
+ * @since {7/29/2022}
+ */
+@PipeBitInfo(
+      name = "ExitForcer",
+      description = "Forcibly Exits cTAKES.  Use only at the end of a 
pipeline.",
+      role = PipeBitInfo.Role.SPECIAL
+)
+public class ExitForcer extends PausableAE {
+
+   static private final Logger LOGGER = Logger.getLogger( "ExitForcer" );
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public void initialize( final UimaContext context ) throws 
ResourceInitializationException {
+      super.initialize( context );
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public void process( final JCas jcas ) throws 
AnalysisEngineProcessException {
+      // Do nothing
+   }
+
+   /**
+    * Forcibly exit.  If ctakes happens to be running within a gui then a 
message dialog is displayed.
+    * {@inheritDoc}
+    */
+   @Override
+   public void collectionProcessComplete() throws 
AnalysisEngineProcessException {
+      super.collectionProcessComplete();
+      pause( LOGGER );
+      final Frame[] frames = Frame.getFrames();
+      if ( frames != null && frames.length > 0 ) {
+         JOptionPane.showMessageDialog( null, "Processing Complete.  Click OK 
to exit." );
+      }
+      LOGGER.info( "Exiting." );
+      System.exit( 0 );
+   }
+
+
+}

Added: 
ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/ae/inert/PausableAE.java
URL: 
http://svn.apache.org/viewvc/ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/ae/inert/PausableAE.java?rev=1903115&view=auto
==============================================================================
--- 
ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/ae/inert/PausableAE.java
 (added)
+++ 
ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/ae/inert/PausableAE.java
 Fri Jul 29 22:52:07 2022
@@ -0,0 +1,61 @@
+package org.apache.ctakes.core.ae.inert;
+
+import org.apache.ctakes.core.pipeline.PipeBitInfo;
+import org.apache.ctakes.core.util.log.DotLogger;
+import org.apache.log4j.Logger;
+import org.apache.uima.UimaContext;
+import org.apache.uima.fit.component.JCasAnnotator_ImplBase;
+import org.apache.uima.fit.descriptor.ConfigurationParameter;
+import org.apache.uima.resource.ResourceInitializationException;
+
+import java.io.IOException;
+
+/**
+ * @author SPF , chip-nlp
+ * @since {7/29/2022}
+ */
+@PipeBitInfo(
+      name = "PausableAE",
+      description = "Does something.",
+      role = PipeBitInfo.Role.ANNOTATOR
+)
+abstract public class PausableAE extends JCasAnnotator_ImplBase {
+
+   static public final String PAUSE_PARAM = "Pause";
+   static public final String PAUSE_DESC = "Pause for some seconds.  Default 
is 0";
+
+   @ConfigurationParameter(
+         name = PAUSE_PARAM,
+         description = PAUSE_DESC,
+         mandatory = false
+   )
+   protected int _pause = 0;
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public void initialize( final UimaContext context ) throws 
ResourceInitializationException {
+      super.initialize( context );
+   }
+
+   protected void pause() {
+      pause( null );
+   }
+
+   protected void pause( final Logger logger ) {
+      if ( _pause > 0 ) {
+         final long pause = _pause * 1000L;
+         if ( logger != null ) {
+            logger.info( "Pausing " + _pause + " seconds ..." );
+         }
+         try ( DotLogger dotter = new DotLogger() ) {
+            Thread.sleep( pause );
+         } catch ( IOException | InterruptedException multE ) {
+            // do nothing
+         }
+      }
+   }
+
+
+}


Reply via email to