/* * Copyright 2010 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 com.samsung.android.c2dm.server; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.util.logging.Level; import java.util.logging.Logger; import javax.jdo.JDOObjectNotFoundException; import javax.jdo.PersistenceManager; import javax.jdo.PersistenceManagerFactory; import com.google.appengine.api.datastore.Key; import com.google.appengine.api.datastore.KeyFactory; /** * Stores config information related to Android Cloud to Device Messaging. * */ class C2DMConfigLoader { private final PersistenceManagerFactory PMF; private static final Logger log = Logger.getLogger(C2DMConfigLoader.class.getName()); String currentToken; C2DMConfigLoader(PersistenceManagerFactory pmf) { this.PMF = pmf; } /** * Update the token. * * Called on "Update-Client-Auth" or when admins set a new token. * @param token */ public void updateToken(String token) { if (token != null) { currentToken = token; PersistenceManager pm = PMF.getPersistenceManager(); try { getC2DMConfig(pm).setAuthToken(token); } finally { pm.close(); } } } /** * Token expired */ public void invalidateCachedToken() { currentToken = null; } /** * Return the auth token. * * It'll first memcache, if not found will use the database. * * @return */ public String getToken() { if (currentToken == null) { currentToken = getC2DMConfig().getAuthToken(); } return currentToken; } public C2DMConfig getC2DMConfig() { PersistenceManager pm = PMF.getPersistenceManager(); try { C2DMConfig dynamicConfig = getC2DMConfig(pm); return dynamicConfig; } finally { pm.close(); } } private C2DMConfig getC2DMConfig(PersistenceManager pm) { Key key = KeyFactory.createKey(C2DMConfig.class.getSimpleName(), 1); C2DMConfig dmConfig = null; try { dmConfig = pm.getObjectById(C2DMConfig.class, key); } catch (JDOObjectNotFoundException e) { // Create a new JDO object dmConfig = new C2DMConfig(); dmConfig.setKey(key); // Must be in classpath, before sending. Do not checkin ! try { InputStream is = this.getClass().getClassLoader().getResourceAsStream("/dataMessagingToken.txt"); if (is != null) { BufferedReader reader = new BufferedReader(new InputStreamReader(is)); String token = reader.readLine(); dmConfig.setAuthToken(token); } } catch (Throwable t) { log.log(Level.SEVERE, "Can't load initial token, use admin console", t); } pm.makePersistent(dmConfig); } return dmConfig; } }