content: /*
   * Created by LuaView.
   * Copyright (c) 2017, Alibaba Group. All rights reserved.
   *
   * This source code is licensed under the MIT.
   * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
   */
  
  package com.taobao.luaview.scriptbundle;
  
  import org.luaj.vm2.Prototype;
  
  import java.io.ByteArrayInputStream;
  import java.io.InputStream;
  
  /**
   * 脚本文件类，封装了从服务端下发的脚本，包含脚本名称以及对应的代码
   *
   * @author song
   * @date 15/11/10
   */
  public class ScriptFile {
      //脚本的下载地址
      public String url;
  
      //脚本文件本地地址
      public String baseFilePath;
  
      //文件名称
      public String fileName;
  
      //sign file name
      public String signFileName;
  
      //语法树原型
      public Prototype prototype;
  
      //lua源码二进制数据
      public byte[] scriptData;
  
      //lua源码对应的加密数据
      public byte[] signData;
  
  
      public ScriptFile(final String script, final String fileName) {
          this(null, null, fileName, script != null ? script.getBytes() : null);
      }
  
      public ScriptFile(final String url, final String baseFilePath, final String fileName, final byte[] scriptData) {
          this(url, baseFilePath, fileName, scriptData, null);
      }
  
      public ScriptFile(final String url, final String baseFilePath, final String fileName, final byte[] scriptData, final byte[] signData) {
          this.url = url;
          this.baseFilePath = baseFilePath;
          this.fileName = LuaScriptManager.changeSuffix(fileName, LuaScriptManager.POSTFIX_LUA);//main.lv->main.lua 这里使用真实的lua脚本名称，因为这里的脚本都是被解密过的
          this.signFileName = fileName + LuaScriptManager.POSTFIX_SIGN;//sign文件名称, 使用的是fileName，main.lv.sign
          this.scriptData = scriptData;
          this.signData = signData;
      }
  
      public String getScriptString() {
          return this.scriptData != null ? new String(this.scriptData) : null;
      }
  
      public String getFilePath() {
          if(baseFilePath != null && baseFilePath.endsWith("/")) {
              return new StringBuffer().append(baseFilePath).append(fileName).toString();
          } else {
              return new StringBuffer().append(baseFilePath).append("/").append(fileName).toString();
          }
      }
  
      public InputStream getInputStream() {
          if (scriptData != null) {
              return new ByteArrayInputStream(scriptData);
          }
          return null;
      }
  }
  