Open-Xchange-RMI

How to provision Open-Xchange with Java RMI

Overview

You need a clone of the backend git repo. Therein you find the com.openexchange.admin.rmi package which contains the RMI bindings to the provisioning interface.

A documentation of the interface is given here: http://software.open-xchange.com/products/appsuite/doc/RMI

Example source is given below.

To build and run, put the .java files shown below in a directory and use something like

javac -d build -cp ~/git/backend.git/com.openexchange.admin.rmi/src:. *.java
java -cp build CreateContext
java -cp build ListContext
java -cp build CreateUser
...

(or a build system / IDE of your choice).

Example: CreateContext.java

import java.util.Map;
import java.util.HashMap;
import java.util.Arrays;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.net.MalformedURLException;
import com.openexchange.admin.rmi.OXContextInterface;
import com.openexchange.admin.rmi.dataobjects.Context;
import com.openexchange.admin.rmi.dataobjects.Credentials;
import com.openexchange.admin.rmi.dataobjects.Database;
import com.openexchange.admin.rmi.dataobjects.User;
import com.openexchange.admin.rmi.dataobjects.UserModuleAccess;
import com.openexchange.admin.rmi.exceptions.ContextExistsException;
import com.openexchange.admin.rmi.exceptions.InvalidCredentialsException;
import com.openexchange.admin.rmi.exceptions.InvalidDataException;
import com.openexchange.admin.rmi.exceptions.NoSuchContextException;
import com.openexchange.admin.rmi.exceptions.StorageException;

public class CreateContext {

    static String RMI_HOSTNAME           = "rmi://192.168.101.84:1099/";

    public static void main(final String args[]) {

        Context ctx = new Context();
        ctx.setId(2001);
        ctx.setName("performance2001");
        ctx.setMaxQuota(100l);
        ctx.addLoginMappings(Arrays.asList("defaultcontext,unfug".split(",")));

        final Integer db = new Integer(3);
        if( null != db ) {
            ctx.setWriteDatabase(new Database(db));
        }

        final Map<String,Map<String,String>> userAttributes = new HashMap<String,Map<String,String>>();
        final Map<String,String> taxMap = new HashMap<String,String>();
        taxMap.put("types", "strangedomain");
        userAttributes.put("taxonomy", taxMap);
        ctx.setUserAttributes(userAttributes);

        User user = new User();
        user.setName("oxadmin");
        user.setDisplay_name("OX Admin");
        user.setGiven_name("OX");
        user.setSur_name("Admin");
        user.setPassword("secret");
        user.setPrimaryEmail("oxadmin@performance2001");
        user.setEmail1("oxadmin@performance2001");
        user.setTimezone("Europe/Berlin");
        user.setLanguage("de_DE");
        String accessCombinationName = "all";

        Credentials auth = new Credentials("oxadminmaster", "secret");

        try {
            final OXContextInterface oxctx = (OXContextInterface) Naming.lookup(RMI_HOSTNAME +OXContextInterface.RMI_NAME);
            Context created = oxctx.create(ctx, user, accessCombinationName, auth);
            System.out.println("Context " + created.getId() + " successfully created.");
        } catch (RemoteException e) {
            e.printStackTrace();
        } catch (StorageException e) {
            e.printStackTrace();
        } catch (InvalidCredentialsException e) {
            e.printStackTrace();
        } catch (InvalidDataException e) {
            e.printStackTrace();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (NotBoundException e) {
            e.printStackTrace();
        } catch (ContextExistsException e) {
            e.printStackTrace();
        }
    }
}