1 /* 2 Copyright (C) 2007 Grid Systems, S.A. 3 4 This library is free software; you can redistribute it and/or 5 modify it under the terms of the GNU Lesser General Public 6 License as published by the Free Software Foundation; either 7 version 2.1 of the License, or (at your option) any later version. 8 9 This library is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 Lesser General Public License for more details. 13 14 You should have received a copy of the GNU Lesser General Public 15 License along with this library; if not, write to the Free Software 16 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 17 */ 18 package nextgrid.api.pom; 19 20 import java.util.Collection; 21 import java.util.List; 22 23 /** 24 * An AbstractProcess represents a process with no implementation binding 25 * details, but only semantic information that can be used to discover compliant 26 * implementations through the grid. 27 * <p> 28 * Such an abstract process must be fulfilled with binding information or 29 * "replaced" by a more specific, yet still abstract, process during enaction. 30 * This replacement is really implemented through a child containment structure 31 * to prevent losing original semantic data: In case of error, the enactor must 32 * be able to revert to the original abstract description and repeat the 33 * discovery phase to reach an alternative service provider. 34 * <p> 35 * The presence of instances of this class within a workflow representation 36 * as leaf nodes marks this workflow as abstract, meaning that it will require 37 * some extra process before being "executable". 38 * <p> 39 * In OWL-WS terms, an AbstractProcessImpl can be mapped to a service that only 40 * contains a profile, but no grounding; that is, it only states service 41 * constraints, but no capabilities. 42 * <p> 43 * During the evaluation of an AbstractProcess, candidates are searched for 44 * its implementation. After that, the process will contain a list of 45 * candidates, all of which link to the abstract process as their parent. 46 * However, unlike ControlProcess, only one of them will be selected at a given 47 * point in time. 48 * 49 * @author Rodrigo Ruiz 50 */ 51 public interface AbstractProcess extends Process { 52 53 /** 54 * Priority value used for processes without an assigned priority. 55 */ 56 int UNDEFINED_PRIORITY = -1; 57 58 //---------------------------------------------------------------------------- 59 // Process Hierarchy Management 60 //---------------------------------------------------------------------------- 61 62 /** 63 * Gets the list of candidates for this abstract process. 64 * 65 * @return The list of candidates for this process 66 */ 67 List<Process> getCandidates(); 68 69 /** 70 * Sets the list of candidates for this abstract process. 71 * 72 * @param candidates The list of candidates 73 */ 74 void setCandidates(Collection<Process> candidates); 75 76 /** 77 * Gets the currently selected implementation candidate. 78 * 79 * @return The candidate process currently selected 80 */ 81 Process getSelected(); 82 83 /** 84 * Selects the specified process as the implementation of this instance. 85 * 86 * @param p The process to select 87 */ 88 void setSelected(Process p); 89 90 //---------------------------------------------------------------------------- 91 // Enaction Management 92 //---------------------------------------------------------------------------- 93 94 /** 95 * Gets the current priority of this process. 96 * 97 * @return The process priority 98 */ 99 int getPriority(); 100 101 /** 102 * Sets the priority of this process. 103 * 104 * @param priority The process priority 105 */ 106 void setPriority(int priority); 107 108 /** 109 * Gets the profile model associated to this instance. 110 * 111 * @return The profile model 112 */ 113 QueryProfile getProfile(); 114 115 /** 116 * Sets the profile model associated to this instance. 117 * 118 * @param profile The profile model 119 */ 120 void setProfile(QueryProfile profile); 121 }