blob: de71d129f0c2c4d1aca9d4539faab0c914c227b0 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2015-2019 The University of York, Aston University.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* This Source Code may also be made available under the following Secondary
* Licenses when the conditions for such availability set forth in the Eclipse
* Public License, v. 2.0 are satisfied: GNU General Public License, version 3.
*
* SPDX-License-Identifier: EPL-2.0 OR GPL-3.0
*
* Contributors:
* Antonio Garcia-Dominguez - initial API and implementation
******************************************************************************/
package org.eclipse.hawk.core;
import java.io.File;
import java.util.List;
import org.eclipse.hawk.core.IStateListener.HawkState;
/**
* Interface for a factory of {@link IHawk} objects. Useful for having plugins
* contribute different implementations of {@link IHawk} (which may introduce
* their own dependencies).
*/
public interface IHawkFactory extends IHawkPlugin {
/**
* Basic information about existing instances. This should only have
* the minimum information to be able to recreate an instance.
*/
public final static class InstanceInfo {
public final String name, dbType;
public final HawkState state;
public InstanceInfo(String name, String dbType, HawkState state) {
this.name = name;
this.dbType = dbType;
this.state = state;
}
}
/**
* Creates a new instance of the desired implementation.
*
* @param name
* Name of the Hawk instance to be created.
* @param storageFolder
* Local storage folder for the Hawk instance.
* @param location
* Additional location on top of the storage folder (e.g. a
* Thrift API URL or the URL to a remote graph). This is only
* necessary if {@link #instancesUseLocation()} returns
* <code>true</code>.
* @param credStore
* Credential storage to be used to persist VCS login details.
* @param console
* {@link IConsole} implementation used to print messages.
* @param enabledPlugins
* Plugins that should be enabled in the created instance.
*/
IHawk create(String name, File storageFolder, String location, ICredentialsStore credStore, IConsole console, List<String> enabledPlugins) throws Exception;
/**
* Returns information from all the {@link IHawk} instances that
* already exist at a particular location. The location should be
* disregarded for implementations that return <code>false</code> in
* {@link #instancesUseLocation()}.
*/
InstanceInfo[] listInstances(String location) throws Exception;
/**
* Returns a set of strings with the supported backends at that location,
* or <code>null</code> if we should know about them in some other way
* (e.g. using OSGi configuration elements).
*/
List<String> listBackends(String location) throws Exception;
/**
* Returns a list of all the available plugins at that location, or
* <code>null</code> if we should know about them in some other way
* (e.g. using OSGi configuration elements).
*/
List<IHawkPlugin> listPlugins(String location) throws Exception;
/**
* Indicates whether the created instance should be customized with the
* contents of the extension points in the local installation (
* <code>true</code>) or not ( <code>false</code>).
*/
boolean instancesAreExtensible();
/**
* Indicates whether instances require creating the graph (
* <code>true</code>), or not (<code>false</code>).
*/
boolean instancesCreateGraph();
/**
* Indicates whether instances take a location in addition to the local
* storage folder (<code>true</code>) or not (<code>false</code>).
*/
boolean instancesUseLocation();
@Override
default Category getCategory() {
return Category.INDEX_FACTORY;
}
/**
* Indicates whether the instance is remote (<code>true</code>) or not (<code>false</code>).
*/
boolean isRemote();
}