Package org.rstudio.studio.client.rmarkdown.ui

Source Code of org.rstudio.studio.client.rmarkdown.ui.RmdFormatOptionsHelper

/*
* RmdFormatOptionsHelper.java
*
* Copyright (C) 2009-14 by RStudio, Inc.
*
* Unless you have received this program directly from RStudio pursuant
* to the terms of a commercial license agreement with RStudio, then
* this program is licensed to you under the terms of version 3 of the
* GNU Affero General Public License. This program is distributed WITHOUT
* ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,
* MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the
* AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.
*
*/
package org.rstudio.studio.client.rmarkdown.ui;

import java.util.List;

import org.rstudio.core.client.files.FileSystemItem;
import org.rstudio.studio.client.common.FilePathUtils;
import org.rstudio.studio.client.rmarkdown.model.RmdFrontMatterOutputOptions;
import org.rstudio.studio.client.rmarkdown.model.RmdTemplateFormatOption;

import com.google.gwt.core.client.JavaScriptObject;

public class RmdFormatOptionsHelper
{
   public final static JavaScriptObject optionsListToJson(
         List<RmdFormatOption> options,
         FileSystemItem document,
         RmdFrontMatterOutputOptions optionList)
   {
      if (optionList == null)
         optionList = RmdFrontMatterOutputOptions.create();
      for (RmdFormatOption option: options)
      {
         if (option.valueIsDefault())
         {
            optionList.removeOption(option.getOption().getName());
         }
         else
         {
            String type = option.getOption().getType();
            if (option.getValue() == null)
            {
               // all nulls are written identically
               addOption(optionList, option.getOption(), null);
            }
            else if (type.equals(RmdTemplateFormatOption.TYPE_BOOLEAN))
            {
               addOption(optionList, option.getOption(),
                         Boolean.parseBoolean(option.getValue()));
            }
            else if (type.equals(RmdTemplateFormatOption.TYPE_FLOAT))
            {
               addOption(optionList, option.getOption(),
                         Float.parseFloat(option.getValue()));
            }
            else if (type.equals(RmdTemplateFormatOption.TYPE_INTEGER))
            {
               addOption(optionList, option.getOption(),
                         Integer.parseInt(option.getValue()));
            }
            else if (type.equals(RmdTemplateFormatOption.TYPE_CHOICE) ||
                     type.equals(RmdTemplateFormatOption.TYPE_STRING))
            {
               addOption(optionList, option.getOption(), option.getValue());
            }
            else if (type.equals(RmdTemplateFormatOption.TYPE_FILE))
            {
               // For file options, compute the path relative to the document
               // if we're starting with an absolute path
               if (document != null &&
                   option.getValue() != null &&
                   FilePathUtils.pathIsAbsolute(option.getValue()))
               {
                  FileSystemItem selFile =
                        FileSystemItem.createFile(option.getValue());
                  // this will be null if no relative path can be found; if
                  // this is the case, we'll use the absolute path as-is
                  String relativePath =
                        selFile.getPathRelativeTo(document.getParentPath());
                  addOption(optionList, option.getOption(),
                            relativePath == null ? option.getValue() :
                                                   relativePath);
               }
               else
               {
                  addOption(optionList, option.getOption(), option.getValue());
               }
            }
         }
      }
      return optionList;
   }
  
   // We need one of these per type since JSNI doesn't unbox templated types
   // for us
   private final native static void addOption (JavaScriptObject optionList,
         RmdTemplateFormatOption option, boolean value) /*-{
      optionList[option.option_name] = value;
   }-*/;

   private final native static void addOption (JavaScriptObject optionList,
         RmdTemplateFormatOption option, String value) /*-{
      optionList[option.option_name] = value;
   }-*/;

   private final native static void addOption (JavaScriptObject optionList,
         RmdTemplateFormatOption option, float value) /*-{
      optionList[option.option_name] = value;
   }-*/;

   private final native static void addOption (JavaScriptObject optionList,
         RmdTemplateFormatOption option, int value) /*-{
      optionList[option.option_name] = value;
   }-*/;
TOP

Related Classes of org.rstudio.studio.client.rmarkdown.ui.RmdFormatOptionsHelper

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.