Revision: 41
Author: maka82
Date: Mon Jul 20 14:56:49 2009
Log: It is possible to pause checking process and resume it after that.
http://code.google.com/p/apache-rat-pd/source/detail?r=41

Added:
 /trunk/src/main/java/org/apache/rat/pd/core/PauseListener.java
Modified:
 /trunk/src/main/java/org/apache/rat/pd/core/SourceCodeAnalyser.java

=======================================
--- /dev/null
+++ /trunk/src/main/java/org/apache/rat/pd/core/PauseListener.java Mon Jul 20 14:56:49 2009
@@ -0,0 +1,83 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.rat.pd.core;
+
+import java.io.IOException;
+
+/**
+ *
+ * This is the way to implement something like KeyListener in console
+ * applications. This Thread will listen keystroke and if enter is pressed it
+ * will call proper methods.
+ *
+ * To use this class it is needed to override and implement it's methods onPause
+ * and onResume in derived class (hook design pattern).
+ *
+ *
+ * @author maka
+ *
+ */
+public class PauseListener extends Thread {
+
+       private boolean paused = false;
+
+       @Override
+       public void run() {
+               while (true) {
+                       try {
+                               sleep(500);
+                               // read all input characters and expect enter
+                               while (System.in.available() > 0) {
+                                       System.in.read();
+                                       // only for last one character we do 
something
+                                       if (System.in.available() == 0) {
+                                               paused = !paused;
+                                               if (paused)
+                                                       onPause();
+                                               else
+                                                       onResume();
+                                       }
+                               }
+
+                       } catch (IOException e) {
+                               // swallow exception
+                       } catch (InterruptedException e) {
+                               // swallow exception
+                       }
+               }
+       }
+
+       /**
+        * override this function if want to do something when pause event is
+        * happened
+        */
+       public void onPause() {
+               // override and implement me
+       }
+
+       /**
+        * override this function if want to do something when resume event is
+        * happened
+        */
+       public void onResume() {
+               // override and implement me
+       }
+}
=======================================
--- /trunk/src/main/java/org/apache/rat/pd/core/SourceCodeAnalyser.java Sun Jul 12 17:28:44 2009 +++ /trunk/src/main/java/org/apache/rat/pd/core/SourceCodeAnalyser.java Mon Jul 20 14:56:49 2009
@@ -48,6 +48,8 @@
        private final List<IHeuristicChecker> algorithmsForChecking;
        private final ReportDocument reportDocument;

+       private PauseListener pauseListener;
+       private volatile boolean paused = false;
        private int progressMessageLength;

        public SourceCodeAnalyser(List<ISearchEngine> searchEngines,
@@ -56,6 +58,44 @@
                this.searchEngines = searchEngines;
                this.algorithmsForChecking = algorithmsForChecking;
                this.reportDocument = reportDocument;
+
+               initializeKeyListener();
+       }
+
+       /**
+        * initialize key listener for pause/resume
+        */
+       private void initializeKeyListener(){
+               this.pauseListener = new PauseListener() {
+                       @Override
+                       public void onPause() {
+                               System.out.println("apache-rat-pd is 
paused...");
+                               System.out
+                                               .println("to resume application, 
pres Enter");
+                               SourceCodeAnalyser.this.paused = true;
+                       }
+
+                       @Override
+                       public void onResume() {
+                               System.out.println("apache-rat-pd resumed...");
+                               SourceCodeAnalyser.this.paused = false;
+                       }
+
+               };
+               pauseListener.start();
+
+       }
+
+       /**
+        * this method will make algorithm to sleep until flag paused == true
+        */
+       private void pauseIfNeeded() {
+               while (paused)
+                       try {
+                               Thread.currentThread().sleep(1000);
+                       } catch (InterruptedException e) {
+                               e.printStackTrace();
+                       }
        }

        @Override
@@ -105,6 +145,9 @@

                while (i < tokens.length) {
                        while (j < tokens.length) {
+                               // this method will make application to sleep 
if it is needed
+                               pauseIfNeeded();
+
                                StringBuffer toCheck = combineTokens(tokens, i, 
j);
                                j++;
                                printProgress(tokens.length, j);

Reply via email to