Package org.jbpm.ui.orgfunctions

Source Code of org.jbpm.ui.orgfunctions.RunaWFEExecutorsImporter

package org.jbpm.ui.orgfunctions;

import java.util.Hashtable;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;
import javax.security.auth.Subject;

import org.ietf.jgss.GSSContext;
import org.ietf.jgss.GSSCredential;
import org.ietf.jgss.GSSManager;
import org.ietf.jgss.GSSName;
import org.ietf.jgss.Oid;
import org.jbpm.ui.sync.RunaWFESyncResources;
import org.jbpm.ui.sync.RunaWFESyncSettingsPage;
import org.jbpm.ui.sync.SyncResources;
import org.jbpm.ui.sync.SyncSettingsWizardPage;

import ru.runa.af.Executor;
import ru.runa.af.Group;
import ru.runa.af.presentation.AFProfileStrategy;
import ru.runa.af.service.impl.interfaces.AuthenticationService;
import ru.runa.af.service.impl.interfaces.AuthenticationServiceHome;
import ru.runa.af.service.impl.interfaces.ExecutorService;
import ru.runa.af.service.impl.interfaces.ExecutorServiceHome;
import ru.runa.af.service.impl.interfaces.Service;
import ru.runa.af.service.impl.interfaces.ServiceHome;

public class RunaWFEExecutorsImporter extends ExecutorsImporter {
    private InitialContext remoteContext;
    private Subject subject;

    private static RunaWFEExecutorsImporter instance;

    private RunaWFEExecutorsImporter() {
        super(RunaWFESyncResources.INSTANCE);
    }

    public static synchronized RunaWFEExecutorsImporter getInstance() {
        if (instance == null) {
            instance = new RunaWFEExecutorsImporter();
        }
        return instance;
    }
   
    @Override
    public RunaWFESyncResources getResources() {
        return (RunaWFESyncResources) super.getResources();
    }

    @Override
    public void connect() throws Exception {
        Hashtable<String, String> environment = new Hashtable<String, String>();
        environment.put(Context.INITIAL_CONTEXT_FACTORY, getResources().getInitialCtxFactory());
        environment.put(Context.URL_PKG_PREFIXES, getResources().getUrlPkgPrefixes());
        environment.put(Context.PROVIDER_URL, getResources().getProviderUrl());
        remoteContext = new InitialContext(environment);
        AuthenticationService service = getService(AuthenticationServiceHome.JNDI_NAME, AuthenticationServiceHome.class);
        if (SyncResources.LOGIN_MODE_LOGIN_PASSWORD.equals(getResources().getLoginMode())) {
            subject = service.authenticate(getResources().getLogin(), getResources().getPassword());
        } else {
            GSSManager manager = GSSManager.getInstance();
            GSSCredential clientCred = manager.createCredential(GSSCredential.INITIATE_ONLY);
            GSSName peerName = manager.createName("WFServer", null);
            GSSContext context = manager.createContext(peerName, (Oid) null, clientCred, GSSContext.DEFAULT_LIFETIME);
            context.requestMutualAuth(false);

            byte[] token = new byte[0];
            token = context.initSecContext(token, 0, token.length);
            subject = service.authenticate(token);
        }
    }

    @Override
    protected void loadRemoteData() throws Exception {
        ExecutorService executorService = getService(ExecutorServiceHome.JNDI_NAME, ExecutorServiceHome.class);
        Executor[] loaded = executorService.getAll(subject, AFProfileStrategy.EXECUTOR_DEAFAULT_BATCH_PRESENTATOIN_FACTORY.getDefaultBatchPresentation());
        for (Executor executor : loaded) {
            executors.put(executor.getName(), executor instanceof Group);
        }
    }

    private <T extends Service> T getService(String jndiName, Class<? extends ServiceHome> homeClass) throws Exception {
        Object homeRef = remoteContext.lookup(jndiName);
        ServiceHome home = (ServiceHome) PortableRemoteObject.narrow(homeRef, homeClass);
        Service service = (Service) home.getClass().getMethod("create", new Class[0]).invoke(home, new Object[0]);
        return (T) service;
    }

    @Override
    public SyncSettingsWizardPage createConnectionSettingsWizardPage() {
        return new RunaWFESyncSettingsPage();
    }
   
}
TOP

Related Classes of org.jbpm.ui.orgfunctions.RunaWFEExecutorsImporter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.