nl.iwelcome.connector.google.GoogleAppsService.java Source code

Java tutorial

Introduction

Here is the source code for nl.iwelcome.connector.google.GoogleAppsService.java

Source

/**
 * Copyright (C) 2009-2010 Wilfred Springer
 * Changed by Ernst Vorsteveld
 *
 * Licensed 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.
 */
package nl.iwelcome.connector.google;

import java.io.ByteArrayInputStream;
import java.io.InputStreamReader;
import java.io.Reader;

import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;

import nl.iwelcome.connector.google.domain.GoogleAtom;
import nl.iwelcome.connector.google.domain.GoogleConstants;
import nl.iwelcome.connector.google.domain.GoogleProperty;

import org.springframework.oxm.jaxb.Jaxb2Marshaller;

public class GoogleAppsService {

    private GoogleAppsTemplate googleAppsTemplate;

    private Jaxb2Marshaller marshaller;

    public GoogleAppsService(String email, String password, String loginUrl, String baseUrl, String customerIdUrl,
            String moveToGroupUrl) {
        this.googleAppsTemplate = new GoogleAppsTemplate(email, password, loginUrl, baseUrl, customerIdUrl,
                moveToGroupUrl);
        this.marshaller = new Jaxb2Marshaller();
        marshaller.setClassesToBeBound(GoogleAtom.class, GoogleAtom.class);
    }

    /**
     * Typical message:
     * 
     * <atom:entry xmlns:atom='http://www.w3.org/2005/Atom' xmlns:apps='http://schemas.google.com/apps/2006'>
     *  ... <apps:property name="name" value="new organization unit's name" />
     *     <apps:property name="description" value="new organization description" />
     *     <apps:property name="parentOrgUnitPath" value="new parent path/organization unit" />
     *     <apps:property name="blockInheritance" value="true or false" />
     *     <apps:property name="usersToMove" value="liz@example.com, namrata@example.com, jake@example.com" />
     * </atom:entry>
     */
    public boolean moveUserToOrgUnit(String user, String orgUnit) {
        GoogleAtom customerIdResponse = getCustomerId();
        GoogleAtom moveToOrgUnitRequest = getMoveToOrgUnitRequest(user, orgUnit, customerIdResponse.getId());

        byte[] resultBytes = googleAppsTemplate.moveUserToGroup(customerIdResponse.getId(),
                customerIdResponse.getCustomerId(), orgUnit, moveToOrgUnitRequest);
        return resultBytes != null;
    }

    private GoogleAtom getMoveToOrgUnitRequest(String user, String orgUnit, String customerId) {
        GoogleAtom moveToOrgUnitRequest = new GoogleAtom();
        GoogleProperty[] properties = new GoogleProperty[3];
        GoogleProperty customerIdGoogleProperty = new GoogleProperty(GoogleConstants.CUSTOMER_ID_MESSAGE_FIELD,
                customerId);
        properties[0] = customerIdGoogleProperty;
        GoogleProperty nameGoogleProperty = new GoogleProperty(GoogleConstants.NAME_MESSAGE_FIELD, orgUnit);
        properties[1] = nameGoogleProperty;
        GoogleProperty usersToMoveGoogleProperty = new GoogleProperty(GoogleConstants.USERS_TO_MOVE_MESSAGE_FIELD,
                user);
        properties[2] = usersToMoveGoogleProperty;
        moveToOrgUnitRequest.setProperties(properties);
        return moveToOrgUnitRequest;
    }

    private GoogleAtom getCustomerId() {
        String token = googleAppsTemplate.getToken();
        byte[] bytes = googleAppsTemplate.getCustomerId(token);

        Reader reader = new InputStreamReader(new ByteArrayInputStream(bytes));

        Source source = new StreamSource(reader);
        GoogleAtom googleAtom = (GoogleAtom) marshaller.unmarshal(source);
        return googleAtom;
    }
}