• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2016 Google Inc.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5  * use this file except in compliance with the License. You may obtain a copy of
6  * the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13  * License for the specific language governing permissions and limitations under
14  * the License.
15  */
16 
17 package com.googlecode.android_scripting.interpreter;
18 
19 import com.googlecode.android_scripting.language.Language;
20 import com.googlecode.android_scripting.language.SupportedLanguages;
21 import com.googlecode.android_scripting.rpc.MethodDescriptor;
22 
23 import java.io.File;
24 import java.util.ArrayList;
25 import java.util.Collection;
26 import java.util.HashMap;
27 import java.util.List;
28 import java.util.Map;
29 
30 /**
31  * Combines all the execution-related specs of a particular interpreter installed in the system.
32  * This class is instantiated through a map received from a concrete InterpreterProfider.
33  *
34  * @author Damon Kohler (damonkohler@gmail.com)
35  * @author Alexey Reznichenko (alexey.reznichenko@gmail.com)
36  */
37 public class Interpreter implements InterpreterPropertyNames {
38 
39   private String mExtension;
40   private String mName;
41   private String mNiceName;
42   private String mInteractiveCommand;
43   private String mScriptExecutionCommand;
44   private File mBinary;
45   private boolean mHasInteractiveMode;
46   private final List<String> mArguments;
47   private final Map<String, String> mEnvironment;
48   private Language mLanguage;
49 
Interpreter()50   public Interpreter() {
51     mArguments = new ArrayList<String>();
52     mEnvironment = new HashMap<String, String>();
53   }
54 
buildFromMaps(Map<String, String> data, Map<String, String> environment_variables, Map<String, String> arguments)55   public static Interpreter buildFromMaps(Map<String, String> data,
56       Map<String, String> environment_variables, Map<String, String> arguments) {
57     String extension = data.get(EXTENSION);
58     String name = data.get(NAME);
59     String niceName = data.get(NICE_NAME);
60     String binary = data.get(BINARY);
61     String interactiveCommand = data.get(INTERACTIVE_COMMAND);
62     String scriptCommand = data.get(SCRIPT_COMMAND);
63     Boolean hasInteractiveMode;
64     if (data.containsKey(HAS_INTERACTIVE_MODE)) {
65       hasInteractiveMode = Boolean.parseBoolean(data.get(HAS_INTERACTIVE_MODE));
66     } else {
67       // Default to true so that older interpreter APKs that don't have this value define still
68       // work.
69       hasInteractiveMode = true;
70     }
71     Interpreter interpreter = new Interpreter();
72     interpreter.setName(name);
73     interpreter.setNiceName(niceName);
74     interpreter.setExtension(extension);
75     interpreter.setBinary(new File(binary));
76     interpreter.setInteractiveCommand(interactiveCommand);
77     interpreter.setScriptCommand(scriptCommand);
78     interpreter.setHasInteractiveMode(hasInteractiveMode);
79     interpreter.setLanguage(SupportedLanguages.getLanguageByExtension(extension));
80     interpreter.putAllEnvironmentVariables(environment_variables);
81     interpreter.addAllArguments(arguments.values());
82     return interpreter;
83   }
84 
85   // TODO(damonkohler): This should take a List<String> since order is important.
addAllArguments(Collection<String> arguments)86   private void addAllArguments(Collection<String> arguments) {
87     mArguments.addAll(arguments);
88   }
89 
getArguments()90   List<String> getArguments() {
91     return mArguments;
92   }
93 
putAllEnvironmentVariables(Map<String, String> environmentVariables)94   private void putAllEnvironmentVariables(Map<String, String> environmentVariables) {
95     mEnvironment.putAll(environmentVariables);
96   }
97 
getEnvironmentVariables()98   public Map<String, String> getEnvironmentVariables() {
99     return mEnvironment;
100   }
101 
setScriptCommand(String executeParameters)102   protected void setScriptCommand(String executeParameters) {
103     mScriptExecutionCommand = executeParameters;
104   }
105 
getScriptCommand()106   public String getScriptCommand() {
107     return mScriptExecutionCommand;
108   }
109 
setInteractiveCommand(String interactiveCommand)110   protected void setInteractiveCommand(String interactiveCommand) {
111     mInteractiveCommand = interactiveCommand;
112   }
113 
getInteractiveCommand()114   public String getInteractiveCommand() {
115     return mInteractiveCommand;
116   }
117 
setBinary(File binary)118   protected void setBinary(File binary) {
119     if (!binary.exists()) {
120       throw new RuntimeException("Binary " + binary + " does not exist!");
121     }
122     mBinary = binary;
123   }
124 
getBinary()125   public File getBinary() {
126     return mBinary;
127   }
128 
setExtension(String extension)129   protected void setExtension(String extension) {
130     mExtension = extension;
131   }
132 
setHasInteractiveMode(boolean hasInteractiveMode)133   protected void setHasInteractiveMode(boolean hasInteractiveMode) {
134     mHasInteractiveMode = hasInteractiveMode;
135   }
136 
hasInteractiveMode()137   public boolean hasInteractiveMode() {
138     return mHasInteractiveMode;
139   }
140 
getExtension()141   public String getExtension() {
142     return mExtension;
143   }
144 
setName(String name)145   protected void setName(String name) {
146     mName = name;
147   }
148 
getName()149   public String getName() {
150     return mName;
151   }
152 
setNiceName(String niceName)153   protected void setNiceName(String niceName) {
154     mNiceName = niceName;
155   }
156 
getNiceName()157   public String getNiceName() {
158     return mNiceName;
159   }
160 
getContentTemplate()161   public String getContentTemplate() {
162     return mLanguage.getContentTemplate();
163   }
164 
setLanguage(Language language)165   protected void setLanguage(Language language) {
166     mLanguage = language;
167   }
168 
getLanguage()169   public Language getLanguage() {
170     return mLanguage;
171   }
172 
getRpcText(String content, MethodDescriptor rpc, String[] values)173   public String getRpcText(String content, MethodDescriptor rpc, String[] values) {
174     return mLanguage.getRpcText(content, rpc, values);
175   }
176 
isInstalled()177   public boolean isInstalled() {
178     return mBinary.exists();
179   }
180 
isUninstallable()181   public boolean isUninstallable() {
182     return true;
183   }
184 }