/** * Licensed to JumpMind Inc under one or more contributor * license agreements. See the NOTICE file distributed * with this work for additional information regarding * copyright ownership. JumpMind Inc licenses this file * to you under the GNU General Public License, version 3.0 (GPLv3) * (the "License"); you may not use this file except in compliance * with the License. * * You should have received a copy of the GNU General Public License, * version 3.0 (GPLv3) along with this library; if not, see * <http://www.gnu.org/licenses/>. * * 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. */ package org.jumpmind.symmetric.service; import java.io.IOException; import java.io.OutputStream; import java.util.List; import org.jumpmind.symmetric.model.Node; import org.jumpmind.symmetric.model.RegistrationRequest; /** * This service provides an API that deals with {@link Node} registration */ public interface IRegistrationService { /** * Register a "Pull Only" node. This type of node has no Symmetric configuration and can only be used to PULL data from another node. * It can never track changes or push data to other nodes. When a node of this type is registered, it must complete all symmetric client * functionality by itself including issue the pull, acknowledging batches, etc. * @param externalId * @param nodeGroupId * @param databaseType * @param databaseVersion */ public Node registerPullOnlyNode(String externalId, String nodeGroupId, String databaseType, String databaseVersion) throws IOException; /** * Register a node for the given group name and external id if the * registration is open. * * @param isRequestedRegistration * An indicator that registration has been requested by the * remote client */ public boolean registerNode(Node node, String remoteHost, String remoteAddress, OutputStream out, boolean isRequestedRegistration) throws IOException; /** * Register a node for the given group name and external id if the * registration is open. * * @param isRequestedRegistration * An indicator that registration has been requested by the * remote client */ public boolean registerNode(Node node, OutputStream out, boolean isRequestedRegistration) throws IOException; /** * Open registration for a single new node given a node group (f.e., * "STORE") and external ID (f.e., "00001"). The unique node ID and password * are generated and stored in the node and node_security tables with the * registration_enabled flag turned on. The next node to try registering for * this node group and external ID will be given this information. * @return the node id */ public String openRegistration(String nodeGroupId, String externalId); public String openRegistration(String nodeGroup, String externalId, String remoteHost, String remoteAddress); public String openRegistration(Node node); public boolean isRegistrationOpen(String nodeGroupId, String externalId); /** * Re-open registration for a single node that already exists in the * database. A new password is generated and the registration_enabled flag * is turned on. The next node to try registering for this node group and * external ID will be given this information. */ public void reOpenRegistration(String nodeId); /** * Mark the passed in node as registered in node_security * @param nodeId is the node that has just finished 'successfully' registering */ public void markNodeAsRegistered(String nodeId); public boolean isAutoRegistration(); /** * Client method which attempts to register with the registration.url to * pull configuration if the node has not already been registered. If the * registration server cannot be reach this method will continue to try with * random sleep periods up to one minute up until the registration succeeds * or the maximum number of attempts has been reached. */ public void registerWithServer(); public List<RegistrationRequest> getRegistrationRequests(boolean includeNodesWithOpenRegistrations); public boolean deleteRegistrationRequest(RegistrationRequest request); public void saveRegistrationRequest(RegistrationRequest request); public boolean isRegisteredWithServer(); /** * Add an entry to the registation_redirect table so that if a node tries to register here. It will be redirected to the correct node. */ public void saveRegistrationRedirect(String externalIdToRedirect, String nodeIdToRedirectTo); public String getRedirectionUrlFor(String externalId); public void requestNodeCopy(); }