This project has retired. For details please refer to its
Attic page.
001 /**
002 * Licensed to the Apache Software Foundation (ASF) under one
003 * or more contributor license agreements. See the NOTICE file
004 * distributed with this work for additional information
005 * regarding copyright ownership. The ASF licenses this file
006 * to you under the Apache License, Version 2.0 (the
007 * "License"); you may not use this file except in compliance
008 * with the License. You may obtain a copy of the License at
009 *
010 * http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing, software
013 * distributed under the License is distributed on an "AS IS" BASIS,
014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015 * See the License for the specific language governing permissions and
016 * limitations under the License.
017 */
018 package org.apache.oozie.dependency;
019
020 import java.net.URI;
021 import java.util.List;
022 import java.util.Set;
023
024 import org.apache.hadoop.conf.Configuration;
025 import org.apache.oozie.action.hadoop.LauncherURIHandler;
026
027 public interface URIHandler {
028
029 /**
030 * Type of the dependency. PULL dependencies are those whose availability is determined by
031 * polling and PUSH dependencies are those whose availability is known from notifications
032 */
033 public enum DependencyType {
034 PULL,
035 PUSH;
036 }
037
038 /**
039 * Initialize the URIHandler
040 *
041 * @param conf Configuration for initialization
042 */
043 public void init(Configuration conf);
044
045 /**
046 * Get the list of uri schemes supported by this URIHandler
047 *
048 * @return supported list of uri schemes
049 */
050 public Set<String> getSupportedSchemes();
051
052 /**
053 * Get the URIHandler that will be used to handle the supported schemes in launcher
054 *
055 * @return LauncherURIHandler that handles URI in the launcher
056 */
057 public Class<? extends LauncherURIHandler> getLauncherURIHandlerClass();
058
059 /**
060 * Get list of classes to ship to launcher for LauncherURIHandler
061 *
062 * @return list of classes to ship to launcher
063 */
064 public List<Class<?>> getClassesForLauncher();
065
066 /**
067 * Get the dependency type of the URI. When the availability of the
068 * URI is to be determined by polling the type is DependencyType.PULL, and
069 * when the availability is received through notifications from a external
070 * entity like a JMS server the type is DependencyType.PUSH
071 *
072 * @return dependency type of URI
073 */
074 public DependencyType getDependencyType(URI uri) throws URIHandlerException;
075
076 /**
077 * Register for notifications in case of a push dependency
078 *
079 * @param uri The URI to check for availability
080 * @param conf Configuration to access the URI
081 * @param user name of the user the URI should be accessed as
082 * @param actionID The id of action which depends on the availability of the uri
083 *
084 * @throws URIHandlerException
085 */
086 public void registerForNotification(URI uri, Configuration conf, String user, String actionID)
087 throws URIHandlerException;
088
089 /**
090 * Unregister from notifications in case of a push dependency
091 *
092 * @param uri The URI to be removed from missing dependency
093 * @param actionID The id of action which was dependent on the uri.
094 *
095 * @throws URIHandlerException
096 */
097 public boolean unregisterFromNotification(URI uri, String actionID);
098
099 /**
100 * Get the Context which can be used to access URI of the same scheme and
101 * host
102 *
103 * @param uri URI which identifies the scheme and host
104 * @param conf Configuration to access the URI
105 * @param user name of the user the URI should be accessed as
106 *
107 * @return Context to access URIs with same scheme and host
108 *
109 * @throws URIHandlerException
110 */
111 public Context getContext(URI uri, Configuration conf, String user) throws URIHandlerException;
112
113 /**
114 * Check if the dependency identified by the URI is available
115 *
116 * @param uri URI of the dependency
117 * @param context Context to access the URI
118 *
119 * @return <code>true</code> if the URI exists; <code>false</code> if the
120 * URI does not exist
121 *
122 * @throws URIHandlerException
123 */
124 public boolean exists(URI uri, Context context) throws URIHandlerException;
125
126 /**
127 * Check if the dependency identified by the URI is available
128 *
129 * @param uri URI of the dependency
130 * @param conf Configuration to access the URI
131 * @param user name of the user the URI should be accessed as. If null the
132 * logged in user is used.
133 *
134 * @return <code>true</code> if the URI exists; <code>false</code> if the
135 * URI does not exist
136 *
137 * @throws URIHandlerException
138 */
139 public boolean exists(URI uri, Configuration conf, String user) throws URIHandlerException;
140
141 /**
142 * Get the URI based on the done flag
143 *
144 * @param uri URI of the dependency
145 * @param doneFlag flag that determines URI availability
146 *
147 * @return the final URI with the doneFlag incorporated
148 *
149 * @throws URIHandlerException
150 */
151 public String getURIWithDoneFlag(String uri, String doneFlag) throws URIHandlerException;
152
153 /**
154 * Check whether the URI is valid or not
155 * @param uri
156 * @return
157 * @throws URIHandlerException
158 */
159 public void validate(String uri) throws URIHandlerException;
160
161 /**
162 * Destroy the URIHandler
163 */
164 public void destroy();
165
166 public static abstract class Context {
167
168 private Configuration conf;
169 private String user;
170
171 /**
172 * Create a Context that can be used to access a URI
173 *
174 * @param conf Configuration to access the URI
175 * @param user name of the user the URI should be accessed as
176 */
177 public Context(Configuration conf, String user) {
178 this.conf = conf;
179 this.user = user;
180 }
181
182 /**
183 * Get the Configuration to access the URI
184 * @return Configuration to access the URI
185 */
186 public Configuration getConfiguration() {
187 return conf;
188 }
189
190 /**
191 * Get the name of the user the URI will be accessed as
192 * @return the user name the URI will be accessed as
193 */
194 public String getUser() {
195 return user;
196 }
197
198 /**
199 * Destroy the Context
200 */
201 public void destroy() {
202 }
203
204 }
205
206 }