All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.nakedobjects.plugins.remoting.command.client.ServerFacadeProxy Maven / Gradle / Ivy

package org.nakedobjects.plugins.remoting.command.client;

import java.util.Properties;

import org.apache.log4j.Logger;
import org.nakedobjects.metamodel.adapter.oid.Oid;
import org.nakedobjects.metamodel.authentication.AuthenticationSession;
import org.nakedobjects.plugins.remoting.command.shared.requests.Authenticate;
import org.nakedobjects.plugins.remoting.command.shared.requests.AuthoriseUsability;
import org.nakedobjects.plugins.remoting.command.shared.requests.AuthoriseVisibility;
import org.nakedobjects.plugins.remoting.command.shared.requests.ClearAssociation;
import org.nakedobjects.plugins.remoting.command.shared.requests.ClearValue;
import org.nakedobjects.plugins.remoting.command.shared.requests.CloseSession;
import org.nakedobjects.plugins.remoting.command.shared.requests.ExecuteClientAction;
import org.nakedobjects.plugins.remoting.command.shared.requests.ExecuteServerAction;
import org.nakedobjects.plugins.remoting.command.shared.requests.FindInstances;
import org.nakedobjects.plugins.remoting.command.shared.requests.GetObject;
import org.nakedobjects.plugins.remoting.command.shared.requests.GetProperties;
import org.nakedobjects.plugins.remoting.command.shared.requests.HasInstances;
import org.nakedobjects.plugins.remoting.command.shared.requests.OidForService;
import org.nakedobjects.plugins.remoting.command.shared.requests.Request;
import org.nakedobjects.plugins.remoting.command.shared.requests.Resolve;
import org.nakedobjects.plugins.remoting.command.shared.requests.ResolveField;
import org.nakedobjects.plugins.remoting.command.shared.requests.SetAssociation;
import org.nakedobjects.plugins.remoting.command.shared.requests.SetValue;
import org.nakedobjects.plugins.remoting.shared.NakedObjectsRemoteException;
import org.nakedobjects.plugins.remoting.shared.ServerFacade;
import org.nakedobjects.plugins.remoting.shared.data.ClientActionResultData;
import org.nakedobjects.plugins.remoting.shared.data.CriteriaData;
import org.nakedobjects.plugins.remoting.shared.data.Data;
import org.nakedobjects.plugins.remoting.shared.data.EncodeableObjectData;
import org.nakedobjects.plugins.remoting.shared.data.IdentityData;
import org.nakedobjects.plugins.remoting.shared.data.ObjectData;
import org.nakedobjects.plugins.remoting.shared.data.ReferenceData;
import org.nakedobjects.plugins.remoting.shared.data.ServerActionResultData;
import org.nakedobjects.plugins.remoting.command.shared.requests.Response;

/**
 * previously called ClientConnection.
 */
public class ServerFacadeProxy implements ServerFacade {
    
    private static final Logger LOG = Logger.getLogger(ServerFacadeProxy.class);
    
    /**
     * Injected, see {@link #setConnection(CommandClientConnection).
     */
    private CommandClientConnection connection;

    
    ///////////////////////////////////////////////////////////////////
    // init, shutdown
    ///////////////////////////////////////////////////////////////////

    public void init() {
        connection.init();
    }


    public void shutdown() {
        connection.shutdown();
    }

    ///////////////////////////////////////////////////////////////////
    // session
    ///////////////////////////////////////////////////////////////////

    public void closeSession(final AuthenticationSession session) {
        final CloseSession request = new CloseSession(session);
        execute(request);
    }

    

    ///////////////////////////////////////////////////////////////////
    // authenticate, authorize
    ///////////////////////////////////////////////////////////////////

    public AuthenticationSession authenticate(final String data) {
        final Authenticate request = new Authenticate(data);
        execute(request);
        return request.getSession();
    }

    public boolean authoriseUsability(final AuthenticationSession session, final String data) {
        final AuthoriseUsability request = new AuthoriseUsability(session, data);
        execute(request);
        return request.getAuthorised();

    }

    public boolean authoriseVisibility(final AuthenticationSession session, final String data) {
        final AuthoriseVisibility request = new AuthoriseVisibility(session, data);
        execute(request);
        return request.getAuthorised();
    }

    
    ///////////////////////////////////////////////////////////////////
    // setAssociation, setValue, clearAssociation, clearValue
    ///////////////////////////////////////////////////////////////////

    public ObjectData[] setAssociation(
            final AuthenticationSession session,
            final String fieldIdentifier,
            final IdentityData target,
            final IdentityData associate) {
        final SetAssociation request = new SetAssociation(session, fieldIdentifier, target, associate);
        execute(request);
        return request.getChanges();
    }

    public ObjectData[] setValue(
            final AuthenticationSession session,
            final String fieldIdentifier,
            final IdentityData target,
            final EncodeableObjectData value) {
        final SetValue request = new SetValue(session, fieldIdentifier, target, value);
        execute(request);
        return request.getChanges();
    }

    public ObjectData[] clearAssociation(
            final AuthenticationSession session,
            final String fieldIdentifier,
            final IdentityData target,
            final IdentityData associate) {
        final ClearAssociation request = new ClearAssociation(session, fieldIdentifier, target, associate);
        execute(request);
        return request.getChanges();
    }

    public ObjectData[] clearValue(final AuthenticationSession session, final String fieldIdentifier, final IdentityData target) {
        final ClearValue request = new ClearValue(session, fieldIdentifier, target);
        execute(request);
        return request.getChanges();
    }

    ///////////////////////////////////////////////////////////////////
    // executeServerAction, executeClientAction
    ///////////////////////////////////////////////////////////////////

    public ServerActionResultData executeServerAction(
            final AuthenticationSession session,
            final String actionType,
            final String actionIdentifier,
            final ReferenceData target,
            final Data[] parameters) {
        final ExecuteServerAction request = new ExecuteServerAction(session, actionType, actionIdentifier, target, parameters);
        execute(request);
        return request.getActionResult();
    }

    public ClientActionResultData executeClientAction(final AuthenticationSession session, final ReferenceData[] data, final int[] types) {
        final ExecuteClientAction request = new ExecuteClientAction(session, data, types);
        execute(request);
        return request.getActionResult();
    }

    ///////////////////////////////////////////////////////////////////
    // getObject, resolveXxx
    ///////////////////////////////////////////////////////////////////

    public ObjectData getObject(final AuthenticationSession session, final Oid oid, final String specificationName) {
        final GetObject request = new GetObject(session, oid, specificationName);
        execute(request);
        return request.getObject();
    }

    public ObjectData resolveImmediately(final AuthenticationSession session, final IdentityData target) {
        final Resolve request = new Resolve(session, target);
        execute(request);
        return request.getUpdateData();
    }

    public Data resolveField(final AuthenticationSession session, final IdentityData target, final String name) {
        final ResolveField request = new ResolveField(session, target, name);
        execute(request);
        return request.getUpdateData();
    }
    
    ///////////////////////////////////////////////////////////////////
    // findInstances, hasInstances
    ///////////////////////////////////////////////////////////////////

    public ObjectData[] findInstances(final AuthenticationSession session, final CriteriaData criteria) {
        final FindInstances request = new FindInstances(session, criteria);
        execute(request);
        return request.getInstances();
    }

    public boolean hasInstances(final AuthenticationSession session, final String fullName) {
        final HasInstances request = new HasInstances(session, fullName);
        execute(request);
        return request.getFlag();
    }

    ///////////////////////////////////////////////////////////////////
    // services
    ///////////////////////////////////////////////////////////////////

    public IdentityData oidForService(final AuthenticationSession session, final String id) {
        final OidForService request = new OidForService(session, id);
        execute(request);
        return request.getData();
    }

    ///////////////////////////////////////////////////////////////////
    // getProperties
    ///////////////////////////////////////////////////////////////////

    public Properties getProperties() {
        final GetProperties request = new GetProperties();
        execute(request);
        return request.getProperties();
    }


    ///////////////////////////////////////////////////////////////////
    // Helpers: execute
    ///////////////////////////////////////////////////////////////////

    private void execute(final Request request) {
        synchronized (connection) {
            final Response response = connection.executeRemotely(request);
            if (request.getId() != response.getId()) {
                throw new NakedObjectsRemoteException("Response out of sequence with respect to the request: " + request.getId()
                        + " & " + response.getId() + " respectively");
            }
            LOG.debug("response " + response);
            request.setResponse(response.getObject());
        }
    }

    protected final Response executeRemotely(final Request request) {
        return null;
    }
    
    ///////////////////////////////////////////////////////////////////
    // Dependencies (injected)
    ///////////////////////////////////////////////////////////////////
    
    /**
     * .NET Property
     * 
     * @property
     */
    public void set_Connection(final CommandClientConnection connection) {
        setConnection(connection);
    }

    public void setConnection(final CommandClientConnection connection) {
        this.connection = connection;
    }


}
// Copyright (c) Naked Objects Group Ltd.




© 2015 - 2025 Weber Informatics LLC | Privacy Policy