001    /*
002     * Copyright 2005 Stephen McConnell
003     *
004     * Licensed  under the  Apache License,  Version 2.0  (the "License");
005     * you may not use  this file  except in  compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     *   http://www.apache.org/licenses/LICENSE-2.0
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed  under the  License is distributed on an "AS IS" BASIS,
012     * WITHOUT  WARRANTIES OR CONDITIONS  OF ANY KIND, either  express  or
013     * implied.
014     *
015     * See the License for the specific language governing permissions and
016     * limitations under the License.
017     */
018    
019    package net.dpml.station;
020    
021    import java.net.URI;
022    import java.rmi.Remote;
023    import java.rmi.RemoteException;
024    import java.io.IOException;
025    
026    import net.dpml.station.info.ApplicationDescriptor;
027    import net.dpml.station.info.RegistryDescriptor;
028    
029    import net.dpml.lang.UnknownKeyException;
030    import net.dpml.lang.DuplicateKeyException;
031    
032    /**
033     * Registry of application profiles.
034     */
035    public interface ApplicationRegistry extends Remote
036    {
037       /**
038        * The default storage uri.
039        */
040        static final URI DEFAULT_STORAGE_URI = RegistryDescriptor.DEFAULT_STORAGE_URI;
041        
042       /**
043        * Return the array of application keys.
044        * @return the application key array
045        * @exception RemoteException if a transport error occurs
046        */
047        String[] getKeys() throws RemoteException;
048    
049       /**
050        * Return the number of application descriptors in the registry.
051        * @return the application descriptor count
052        * @exception RemoteException if a transport error occurs
053        */
054        int getApplicationDescriptorCount() throws RemoteException;
055        
056       /**
057        * Return an array of all profiles in the registry.
058        * @return the application profiles
059        * @exception RemoteException if a transport error occurs
060        */
061        ApplicationDescriptor[] getApplicationDescriptors() throws RemoteException;
062    
063       /**
064        * Add an application descriptor to the registry.
065        * @param key the application key
066        * @param descriptor the application descriptor
067        * @exception DuplicateKeyException if the key is already assigned
068        * @exception RemoteException if a transport error occurs
069        */
070        void addApplicationDescriptor( String key, ApplicationDescriptor descriptor ) 
071          throws DuplicateKeyException, RemoteException;
072        
073       /**
074        * Get an application descriptor matching the supplied key.
075        * @param key the application key
076        * @return the application descriptor
077        * @exception UnknownKeyException if the key is unknown
078        * @exception RemoteException if a transport error occurs
079        */
080        ApplicationDescriptor getApplicationDescriptor( String key ) 
081          throws UnknownKeyException, RemoteException;
082        
083       /**
084        * Replace an application descriptor within the registry with a supplied descriptor.
085        * @param key the application key
086        * @param descriptor the updated application descriptor
087        * @exception UnknownKeyException if the key is unknown
088        * @exception RemoteException if a transport error occurs
089        */
090        void updateApplicationDescriptor( String key, ApplicationDescriptor descriptor ) 
091          throws UnknownKeyException, RemoteException;
092        
093       /**
094        * Remove an application descriptor from the registry.
095        * @param key the application key
096        * @exception UnknownKeyException if the key is unknown
097        * @exception RemoteException if a transport error occurs
098        */
099        void removeApplicationDescriptor( String key ) 
100          throws UnknownKeyException, RemoteException;
101    
102       /**
103        * Add a registry change listener.
104        * @param listener the registry change listener to add
105        * @exception RemoteException if a transport error occurs
106        */
107        void addRegistryListener( RegistryListener listener ) throws RemoteException;
108    
109       /**
110        * Remove a registry change listener.
111        * @param listener the registry change listener to remove
112        * @exception RemoteException if a transport error occurs
113        */
114        void removeRegistryListener( RegistryListener listener ) throws RemoteException;
115        
116       /**
117        * Request externalization of the registry state. 
118        * @exception IOException if an I/O error occurs
119        * @exception RemoteException if a transport error occurs
120        */
121        void flush() throws IOException, RemoteException;
122    }
123