/*!
* PENTAHO CORPORATION PROPRIETARY AND CONFIDENTIAL
*
* Copyright 2002 - 2015 Pentaho Corporation (Pentaho). All rights reserved.
*
* NOTICE: All information including source code contained herein is, and
* remains the sole property of Pentaho and its licensors. The intellectual
* and technical concepts contained herein are proprietary and confidential
* to, and are trade secrets of Pentaho and may be covered by U.S. and foreign
* patents, or patents in process, and are protected by trade secret and
* copyright laws. The receipt or possession of this source code and/or related
* information does not convey or imply any rights to reproduce, disclose or
* distribute its contents, or to manufacture, use, or sell anything that it
* may describe, in whole or in part. Any reproduction, modification, distribution,
* or public display of this information without the express written authorization
* from Pentaho is strictly prohibited and in violation of applicable laws and
* international treaties. Access to the source code contained herein is strictly
* prohibited to anyone except those individuals and entities who have executed
* confidentiality and non-disclosure agreements or other agreements with Pentaho,
* explicitly covering such access.
*/
/* Copyright (c) 2008 Google Inc.
*
* 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 org.pentaho.di.trans.steps.googleanalytics;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.services.analytics.Analytics;
import com.google.api.services.analytics.AnalyticsScopes;
import com.google.api.client.auth.oauth2.Credential;
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson2.JacksonFactory;
import org.pentaho.di.core.exception.KettleFileException;
import org.pentaho.di.core.util.Assert;
import org.pentaho.di.core.vfs.KettleVFS;
import java.io.File;
import java.io.IOException;
import java.security.GeneralSecurityException;
public class GoogleAnalyticsApiFacade {
private Analytics analytics;
private final HttpTransport httpTransport;
public static GoogleAnalyticsApiFacade createFor(
String application, String oauthServiceAccount, String oauthKeyFile )
throws GeneralSecurityException, IOException, KettleFileException {
return new GoogleAnalyticsApiFacade(
GoogleNetHttpTransport.newTrustedTransport(),
JacksonFactory.getDefaultInstance(),
application,
oauthServiceAccount,
new File( KettleVFS.getFileObject( oauthKeyFile ).getURL().getPath() )
);
}
public GoogleAnalyticsApiFacade( HttpTransport httpTransport, JsonFactory jsonFactory, String application,
String oathServiceEmail, File keyFile )
throws IOException, GeneralSecurityException {
Assert.assertNotNull( httpTransport, "HttpTransport cannot be null" );
Assert.assertNotNull( jsonFactory, "JsonFactory cannot be null" );
Assert.assertNotBlank( application, "Application name cannot be empty" );
Assert.assertNotBlank( oathServiceEmail, "OAuth Service Email name cannot be empty" );
Assert.assertNotNull( keyFile, "OAuth secret key file cannot be null" );
this.httpTransport = httpTransport;
Credential credential = new GoogleCredential.Builder()
.setTransport( httpTransport )
.setJsonFactory( jsonFactory )
.setServiceAccountScopes( AnalyticsScopes.all() )
.setServiceAccountId( oathServiceEmail )
.setServiceAccountPrivateKeyFromP12File( keyFile )
.build();
analytics = new Analytics.Builder( httpTransport, jsonFactory, credential )
.setApplicationName( application )
.build();
}
public void close() throws IOException {
httpTransport.shutdown();
}
public Analytics getAnalytics() {
return analytics;
}
}