package org.apache.commons.jcs3.auxiliary.remote.behavior;

/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you 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.
 */

import org.apache.commons.jcs3.auxiliary.AuxiliaryCacheAttributes;
import org.apache.commons.jcs3.auxiliary.remote.RemoteLocation;
import org.apache.commons.jcs3.auxiliary.remote.server.behavior.RemoteType;

/**
 * This specifies what a remote cache configuration object should look like.
 */
public interface ICommonRemoteCacheAttributes
    extends AuxiliaryCacheAttributes
{
    /** The default timeout for the custom RMI socket factory */
    int DEFAULT_RMI_SOCKET_FACTORY_TIMEOUT_MILLIS = 10000;

    /**
     * Gets the remoteTypeName attribute of the IRemoteCacheAttributes object
     * <p>
     * @return The remoteTypeName value
     */
    String getRemoteTypeName();

    /**
     * Sets the remoteTypeName attribute of the IRemoteCacheAttributes object
     * <p>
     * @param s The new remoteTypeName value
     */
    void setRemoteTypeName( String s );

    /**
     * Gets the remoteType attribute of the IRemoteCacheAttributes object
     * <p>
     * @return The remoteType value
     */
    RemoteType getRemoteType();

    /**
     * Sets the remoteType attribute of the IRemoteCacheAttributes object
     * <p>
     * @param p The new remoteType value
     */
    void setRemoteType( RemoteType p );

    /**
     * Gets the remoteServiceName attribute of the IRemoteCacheAttributes object
     * <p>
     * @return The remoteServiceName value
     */
    String getRemoteServiceName();

    /**
     * Sets the remoteServiceName attribute of the IRemoteCacheAttributes object
     * <p>
     * @param s The new remoteServiceName value
     */
    void setRemoteServiceName( String s );

    /**
     * Sets the location attribute of the RemoteCacheAttributes object.
     * <p>
     * @param location The new location value
     */
    void setRemoteLocation( RemoteLocation location );

    /**
     * Sets the location attribute of the RemoteCacheAttributes object.
     * <p>
     * @param host The new remoteHost value
     * @param port The new remotePort value
     */
    void setRemoteLocation( String host, int port );

    /**
     * Gets the location attribute of the RemoteCacheAttributes object.
     * <p>
     * @return The remote location value
     */
    RemoteLocation getRemoteLocation();

    /**
     * Gets the clusterServers attribute of the IRemoteCacheAttributes object
     * <p>
     * @return The clusterServers value
     */
    String getClusterServers();

    /**
     * Sets the clusterServers attribute of the IRemoteCacheAttributes object
     * <p>
     * @param s The new clusterServers value
     */
    void setClusterServers( String s );

    /**
     * Gets the removeUponRemotePut attribute of the IRemoteCacheAttributes object
     * <p>
     * @return The removeUponRemotePut value
     */
    boolean getRemoveUponRemotePut();

    /**
     * Sets the removeUponRemotePut attribute of the IRemoteCacheAttributes object
     * <p>
     * @param r The new removeUponRemotePut value
     */
    void setRemoveUponRemotePut( boolean r );

    /**
     * Gets the getOnly attribute of the IRemoteCacheAttributes object
     * <p>
     * @return The getOnly value
     */
    boolean getGetOnly();

    /**
     * Sets the getOnly attribute of the IRemoteCacheAttributes object
     * <p>
     * @param r The new getOnly value
     */
    void setGetOnly( boolean r );

    /**
     * Should cluster updates be propagated to the locals
     * <p>
     * @return The localClusterConsistency value
     */
    boolean isLocalClusterConsistency();

    /**
     * Should cluster updates be propagated to the locals
     * <p>
     * @param r The new localClusterConsistency value
     */
    void setLocalClusterConsistency( boolean r );

    /**
     * This sets a general timeout on the rmi socket factory. By default the socket factory will
     * block forever.
     * <p>
     * We have a default setting. The default rmi behavior should never be used.
     * <p>
     * @return int milliseconds
     */
    int getRmiSocketFactoryTimeoutMillis();

    /**
     * This sets a general timeout on the RMI socket factory. By default the socket factory will
     * block forever.
     * <p>
     * @param rmiSocketFactoryTimeoutMillis
     */
    void setRmiSocketFactoryTimeoutMillis( int rmiSocketFactoryTimeoutMillis );
}
