in progress
[jalview.git] / forester / java / src / org / forester / archaeopteryx / tools / ProcessPool.java
1 // $Id:\r
2 // FORESTER -- software libraries and applications\r
3 // for evolutionary biology research and applications.\r
4 //\r
5 // Copyright (C) 2008-2012 Christian M. Zmasek\r
6 // Copyright (C) 2008-2012 Sanford Burnham Medical Research Institute\r
7 // All rights reserved\r
8 //\r
9 // This library is free software; you can redistribute it and/or\r
10 // modify it under the terms of the GNU Lesser General Public\r
11 // License as published by the Free Software Foundation; either\r
12 // version 2.1 of the License, or (at your option) any later version.\r
13 //\r
14 // This library is distributed in the hope that it will be useful,\r
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of\r
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
17 // Lesser General Public License for more details.\r
18 //\r
19 // You should have received a copy of the GNU Lesser General Public\r
20 // License along with this library; if not, write to the Free Software\r
21 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA\r
22 //\r
23 // Contact: phylosoft @ gmail . com\r
24 // WWW: www.phylosoft.org/forester\r
25 \r
26 package org.forester.archaeopteryx.tools;\r
27 \r
28 import java.util.ArrayList;\r
29 import java.util.List;\r
30 \r
31 public class ProcessPool {\r
32 \r
33     private final static boolean                   DEBUG      = true;\r
34     final static private ArrayList<ProcessRunning> _processes = new ArrayList<ProcessRunning>();\r
35 \r
36     public synchronized ProcessRunning getProcessByIndex( final int i ) {\r
37         return getProcesses().get( i );\r
38     }\r
39 \r
40     public synchronized int size() {\r
41         return getProcesses().size();\r
42     }\r
43 \r
44     public synchronized ProcessRunning getProcessById( final int id ) {\r
45         for( final ProcessRunning p : getProcesses() ) {\r
46             if ( p.getId() == id ) {\r
47                 return p;\r
48             }\r
49         }\r
50         return null;\r
51     }\r
52 \r
53     public synchronized int addProcess( final String name ) {\r
54         final ProcessRunning p = ProcessRunning.createInstance( name );\r
55         final int id = p.getId();\r
56         if ( getProcessById( id ) != null ) {\r
57             throw new IllegalStateException( " process with id " + id + "already exists" );\r
58         }\r
59         getProcesses().add( p );\r
60         if ( DEBUG ) {\r
61             System.out.println( "added: " + p );\r
62         }\r
63         return id;\r
64     }\r
65 \r
66     public synchronized boolean removeProcess( final int id ) {\r
67         final int i = getProcessIndexById( id );\r
68         if ( i >= 0 ) {\r
69             if ( DEBUG ) {\r
70                 final ProcessRunning p = getProcessById( id );\r
71                 System.out.println( " removing: " + p );\r
72             }\r
73             getProcesses().remove( i );\r
74             return true;\r
75         }\r
76         return false;\r
77     }\r
78 \r
79     private synchronized int getProcessIndexById( final int id ) {\r
80         final ProcessRunning p = getProcessById( id );\r
81         if ( p != null ) {\r
82             return p.getId();\r
83         }\r
84         return -1;\r
85     }\r
86 \r
87     private synchronized List<ProcessRunning> getProcesses() {\r
88         return _processes;\r
89     }\r
90 }\r