com.codename1.ads.AdsService Maven / Gradle / Ivy
/*
* Copyright (c) 2012, Codename One and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Codename One designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Codename One through http://www.codenameone.com/ if you
* need additional information or have any questions.
*/
package com.codename1.ads;
import com.codename1.components.Ads;
import com.codename1.io.ConnectionRequest;
import com.codename1.io.NetworkManager;
import com.codename1.ui.events.ActionEvent;
import com.codename1.ui.html.HTMLComponent;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
/**
* This is an abstract Ads Service.
* Each supported Ad network needs to extend this Service and to implement
* the initService method
*
* @author Chen Fishbein
*/
public abstract class AdsService extends ConnectionRequest {
private String currentAd;
private boolean initialized = false;
private static Class service = InnerActive.class;
/**
* Empty constructor
*/
protected AdsService() {
}
/**
* Initialize the ads service.
*/
public void initialize(Ads adsComponent) {
if (!initialized) {
initService(adsComponent);
initialized = true;
}
}
/**
* init the service requests.
*/
public abstract void initService(Ads adsComponent);
/**
* Creates a new AdsService to be used by the Ads Component
*/
public static AdsService createAdsService() {
try {
AdsService adsService = (AdsService) service.newInstance();
return adsService;
} catch (InstantiationException ex) {
ex.printStackTrace();
} catch (IllegalAccessException ex) {
ex.printStackTrace();
}
return null;
}
/**
* Sets the provider of the ads service.
* @param provider this class needs to extend the AdsService class
*/
public static void setAdsProvider(Class provider){
service = provider;
}
/**
* Returns the last requested ad
*/
public String getCurrentAd() {
return currentAd;
}
/**
* Schedule this service on the Network thread and executes the request
*/
public void requestAd() {
NetworkManager.getInstance().addToQueue(this);
}
/**
* {@inheritDoc}
*/
protected void readResponse(InputStream input) throws IOException {
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buffer = new byte[256];
int len;
while ((len = input.read(buffer)) > 0) {
out.write(buffer, 0, len);
}
int size = out.toByteArray().length;
if (size > 0) {
String s = new String(out.toByteArray(), 0, size, "UTF-8");
currentAd = s;
fireResponseListener(new ActionEvent(currentAd,ActionEvent.Type.Response));
}
}
/**
* This a callback method to inform to the service the Ad is displayed
* @param cmp
*/
public void onAdDisplay(HTMLComponent cmp) {
}
/**
* {@inheritDoc}
*/
protected void handleErrorResponseCode(int code, String message) {
//do nothing, ads failure should not interfere with application flow
System.err.println("error=" + code + " " + message);
}
/**
* {@inheritDoc}
*/
protected void handleRuntimeException(RuntimeException err) {
//do nothing, ads failure should not interfere with application flow
err.printStackTrace();
}
/**
* {@inheritDoc}
*/
protected void handleException(Exception err) {
//do nothing, ads failure should not interfere with application flow
err.printStackTrace();
}
}