Android Open Source - anode Arg Processor






From Project

Back to project page anode.

License

The source code is released under:

Apache License

If you think the Android project anode listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 * Copyright 2011-2012 Paddy Byers//www .  ja  va 2s . c o  m
 *
 *   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.meshpoint.anode.util;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

import org.meshpoint.anode.Constants;

import android.os.Bundle;
import android.util.Log;

/**
 * A class that processes a given commandline together with an optional
 * mapping of resource identifiers and URLs to fetch those resources.
 * 
 * Resources are limited to those that can be fetched with an http GET.
 * 
 * Downloaded resources are cached in an asset directory specific to the
 * application, obtained using the supplied Context.
 * Cached resources are stored in files whose names are a hash of the
 * originating URL. It is safe to reuse the cache directory across
 * multiple invocations of the same app, or across invocations of different
 * apps.
 * 
 * No processing is performed of expiry times of the specified resources
 * so they are downloaded again on each invocation.
 * 
 * Name substitution is performed in the supplied commandline, to map
 * resource specifiers to the local cache filename.
 * 
 * A resource is identified with a Bundle entry of:
 *     get:<key> = <value>
 * and is referenced in the commandline by:
 *     %<key>
 */
public class ArgProcessor {
  
  private static String TAG = "anode::ArgsProcessor";
  private static final String GET_PREFIX   = "get:";

  private Bundle extras;
  private String text;
  private Map<String, URI> uriMap;
  private Map<String, String> filenameMap;

  /**
   * Constructs an instance of ArgProcessor
   * @param extras an optional bundle containing the mapping parameters
   * @param text the string to process
   */
  public ArgProcessor(Bundle extras, String text) {
    this.extras = extras;
    this.text = text;
    uriMap = new HashMap<String, URI>();
    filenameMap = new HashMap<String, String>();
  }
  
  /**
   * Process the text string
   * @return the processed string, with downloaded resource names substituted
   */
  public String processString() {
    if(extras != null) {
      /* extract list of args to get */
      try {
        Set<String> keys = extras.keySet();
        for(String key : keys) {
          if(key.startsWith(GET_PREFIX)) {
            String rawUri = extras.getString(key);
            String rawKey = key.substring(GET_PREFIX.length());
            URI uri = new URI(rawUri);
            String filename = ModuleUtils.getResourceUriHash(rawUri);
            uriMap.put(rawKey, uri);
            filenameMap.put(rawKey, filename);
          }
        }
      } catch(URISyntaxException e) {
        Log.v(TAG, "process exception: aborting; exception: " + e);
        return null;
      }
  
      /* download each asset */
      for(String key : uriMap.keySet()) {
        try {
          ModuleUtils.getResource(uriMap.get(key), filenameMap.get(key));
        } catch(IOException e) {
          Log.v(TAG, "process exception: aborting; exception: " + e + "; resource = " + uriMap.get(key).toString());
          return null;
        }
      }
      
      /* process the commandline */
      for(String key : filenameMap.keySet()) {
        text = text.replace("%" + key, Constants.RESOURCE_DIR + '/' + filenameMap.get(key));
      }
    }
    return text;
  }

  public String[] processArray() {
    /* split the commandline at whitespace */
    processString();
    return text.split("\\s");    
  }
  
}




Java Source Code List

org.meshpoint.anode.AndroidContext.java
org.meshpoint.anode.AnodeActivity.java
org.meshpoint.anode.AnodeReceiver.java
org.meshpoint.anode.AnodeService.java
org.meshpoint.anode.Constants.java
org.meshpoint.anode.Isolate.java
org.meshpoint.anode.RuntimeNative.java
org.meshpoint.anode.Runtime.java
org.meshpoint.anode.bridge.BridgeNative.java
org.meshpoint.anode.bridge.Env.java
org.meshpoint.anode.bridge.Env.java
org.meshpoint.anode.bridge.FinalizeQueue.java
org.meshpoint.anode.bridge.ModuleClassLoader.java
org.meshpoint.anode.bridge.ModuleContext.java
org.meshpoint.anode.bridge.SynchronousOperation.java
org.meshpoint.anode.error.GeneralError.java
org.meshpoint.anode.error.InternalError.java
org.meshpoint.anode.error.ReferenceError.java
org.meshpoint.anode.error.ScriptError.java
org.meshpoint.anode.error.TypeError.java
org.meshpoint.anode.idl.BoundInterface.java
org.meshpoint.anode.idl.Callback.java
org.meshpoint.anode.idl.Dictionary.java
org.meshpoint.anode.idl.Dictionary.java
org.meshpoint.anode.idl.IDLInterface.java
org.meshpoint.anode.idl.IDLInterface.java
org.meshpoint.anode.idl.InterfaceManager.java
org.meshpoint.anode.idl.InterfaceManager.java
org.meshpoint.anode.idl.StubUtil.java
org.meshpoint.anode.idl.Types.java
org.meshpoint.anode.java.Array.java
org.meshpoint.anode.java.Base.java
org.meshpoint.anode.java.Base.java
org.meshpoint.anode.java.ByteArray.java
org.meshpoint.anode.java.DoubleArray.java
org.meshpoint.anode.java.IntegerArray.java
org.meshpoint.anode.java.LongArray.java
org.meshpoint.anode.java.ObjectArray.java
org.meshpoint.anode.js.JSArray.java
org.meshpoint.anode.js.JSByteArray.java
org.meshpoint.anode.js.JSDoubleArray.java
org.meshpoint.anode.js.JSFunction.java
org.meshpoint.anode.js.JSIntegerArray.java
org.meshpoint.anode.js.JSInterface.java
org.meshpoint.anode.js.JSLongArray.java
org.meshpoint.anode.js.JSObjectArray.java
org.meshpoint.anode.js.JSObject.java
org.meshpoint.anode.js.JSValue.java
org.meshpoint.anode.module.IModuleContext.java
org.meshpoint.anode.module.IModuleContext.java
org.meshpoint.anode.module.IModule.java
org.meshpoint.anode.module.IModule.java
org.meshpoint.anode.stub.DictionaryStubGenerator.java
org.meshpoint.anode.stub.PlatformStubGenerator.java
org.meshpoint.anode.stub.StubGenerator.java
org.meshpoint.anode.stub.UserStubGenerator.java
org.meshpoint.anode.stub.util.DirectoryClassLoader.java
org.meshpoint.anode.stub.util.StubGen.java
org.meshpoint.anode.type.ICollection.java
org.meshpoint.anode.type.IFunction.java
org.meshpoint.anode.type.IIndexedCollection.java
org.meshpoint.anode.util.AndroidLog.java
org.meshpoint.anode.util.ArgProcessor.java
org.meshpoint.anode.util.Log.java
org.meshpoint.anode.util.ModuleUtils.java
org.meshpoint.anode.util.PrintStreamLog.java
org.meshpoint.anode.util.TarExtractor.java
org.meshpoint.anode.util.ZipExtractor.java
org.w3c.dom.Array.java
org.w3c.dom.Array.java
org.w3c.dom.ByteArray.java
org.w3c.dom.ByteArray.java
org.w3c.dom.DoubleArray.java
org.w3c.dom.DoubleArray.java
org.w3c.dom.IntegerArray.java
org.w3c.dom.IntegerArray.java
org.w3c.dom.LongArray.java
org.w3c.dom.LongArray.java
org.w3c.dom.ObjectArray.java
org.w3c.dom.ObjectArray.java
org.w3c.dom.PrimitiveArray.java
org.w3c.dom.PrimitiveArray.java