123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 |
- /*=============================================================================
- Library: CTK
- Copyright (c) German Cancer Research Center,
- Division of Medical and Biological Informatics
- Licensed 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.
- =============================================================================*/
- #ifndef CTKLOCATION_H
- #define CTKLOCATION_H
- #include <ctkPluginFrameworkExport.h>
- #include <QObject>
- class QUrl;
- /**
- * A ctkLocation represents a QUrl which may have a default value, may be read only, may
- * or may not have a current value and may be cascaded on to a parent location.
- */
- struct CTK_PLUGINFW_EXPORT ctkLocation
- {
- /**
- * Constant which defines the filter string for acquiring the service which
- * specifies the instance location.
- */
- static const QString INSTANCE_FILTER;
- /**
- * Constant which defines the filter string for acquiring the service which
- * specifies the install location.
- */
- static const QString INSTALL_FILTER;
- /**
- * Constant which defines the filter string for acquiring the service which
- * specifies the configuration location.
- */
- static const QString CONFIGURATION_FILTER;
- /**
- * Constant which defines the filter string for acquiring the service which
- * specifies the user location.
- */
- static const QString USER_FILTER;
- /**
- * Constant which defines the filter string for acquiring the service which
- * specifies the eclipse home location.
- */
- static const QString CTK_HOME_FILTER;
- virtual ~ctkLocation() {}
- /**
- * Returns <code>true</code> if this location allows a default value to be assigned
- * and <code>false</code> otherwise.
- *
- * @return whether or not this location can have a default value assigned
- */
- virtual bool allowsDefault() const = 0;
- /**
- * Returns the default value of this location if any. If no default is available then
- * <code>null</code> is returned. Note that even locations which allow defaults may still
- * return <code>null</code>.
- *
- * @return the default value for this location or <code>null</code>
- */
- virtual QUrl getDefault() const = 0;
- /**
- * Returns the parent of this location or <code>null</code> if none is available.
- *
- * @return the parent of this location or <code>null</code>
- */
- virtual ctkLocation* getParentLocation() const = 0;
- /**
- * Returns the actual QUrl of this location. If the location's value has been set,
- * that value is returned. If the value is not set and the location allows defaults,
- * the value is set to the default and returned. In all other cases <code>null</code>
- * is returned.
- *
- * @return the URL for this location or <code>null</code> if none
- */
- virtual QUrl getUrl() const = 0;
- /**
- * Returns <code>true</code> if this location has a value and <code>false</code>
- * otherwise.
- *
- * @return boolean value indicating whether or not the value is set
- */
- virtual bool isSet() const = 0;
- /**
- * Returns <code>true</code> if this location represents a read only location and
- * <code>false</code> otherwise. The read only character
- * of a location is not in enforced in any way but rather expresses the intention of the
- * location's creator.
- *
- * @return boolean value indicating whether the location is read only
- */
- virtual bool isReadOnly() const = 0;
- /**
- * Sets and optionally locks the location's value to the given QUrl. If the location
- * already has a value an exception is thrown. If locking is requested and fails, <code>false</code>
- * is returned and the QUrl of this location is not set.
- *
- * @param value the value of this location
- * @param lock whether or not to lock this location
- * @return whether or not the location was successfully set and, if requested, locked.
- * @throws ctkIllegalStateException if the location's value is already set
- * @throws ctkRuntimeException if there was an unexpected problem while acquiring the lock
- */
- virtual bool set(const QUrl& value, bool lock) = 0;
- /**
- * Sets and optionally locks the location's value to the given QUrl using the given lock file. If the location
- * already has a value an exception is thrown. If locking is requested and fails, <code>false</code>
- * is returned and the QUrl of this location is not set.
- *
- * @param value the value of this location
- * @param lock whether or not to lock this location
- * @param lockFilePath the path to the lock file. This path will be used to establish locks on this location.
- * The path may be an absolute path or it may be relative to the given URL. If a <code>null</code>
- * value is used then a default lock path will be used for this location.
- * @return whether or not the location was successfully set and, if requested, locked.
- * @throws ctkIllegalStateException if the location's value is already set
- * @throws ctkRuntimeException if there was an unexpected problem while acquiring the lock
- */
- virtual bool set(const QUrl& value, bool lock, const QString& lockFilePath) = 0;
- /**
- * Attempts to lock this location with a canonical locking mechanism and return
- * <code>true</code> if the lock could be acquired. Not all locations can be
- * locked.
- * <p>
- * Locking a location is advisory only. That is, it does not prevent other applications from
- * modifying the same location
- * </p>
- * @return true if the lock could be acquired; otherwise false is returned
- *
- * @exception ctkRuntimeException if there was an unexpected problem while acquiring the lock
- */
- virtual bool lock() = 0;
- /**
- * Releases the lock on this location. If the location is not already locked, no action
- * is taken.
- */
- virtual void release() = 0;
- /**
- * Returns <code>true</code> if this location is locked and <code>false</code>
- * otherwise.
- * @return boolean value indicating whether or not this location is locked
- * @throws ctkRuntimeException if there was an unexpected problem reading the lock
- */
- virtual bool isLocked() const = 0;
- /**
- * Constructs a new location.
- * @param parent the parent location. A <code>null</code> value is allowed.
- * @param defaultValue the default value of the location. A <code>null</code> value is allowed.
- * @param readonly true if the location is read-only.
- * @return a new location.
- */
- virtual ctkLocation* createLocation(ctkLocation* parent, const QUrl& defaultValue, bool readonly) = 0;
- /**
- * Returns a URL to the specified path within this location. The path
- * of the returned URL may not exist yet. It is the responsibility of the
- * client to create the content of the data area returned if it does not exist.
- * <p>
- * This method can be used to obtain a private area within the given location.
- * For example use the symbolic name of a plugin to obtain a data area specific
- * to that plugin.
- * </p>
- * <p>
- * Clients should check if the location is read only before writing anything
- * to the returned data area. An <code>ctkRuntimeException</code> will be thrown if
- * this method is called and the location URL has not been set and there is
- * no default value for this location.
- * </p>
- *
- * @param path the name of the path to get from this location
- * @return the URL to the data area with the specified path.
- * @throws ctkRuntimeException if the location URL is not already set
- */
- virtual QUrl getDataArea(const QString& path) const = 0;
- };
- Q_DECLARE_INTERFACE(ctkLocation, "org.commontk.service.datalocation.Location")
- #endif // CTKLOCATION_H
|