PropertiesBuilder.java :  » Installer » jsmooth » net » charabia » jsmoothgen » application » Java Open Source

Java Open Source » Installer » jsmooth 
jsmooth » net » charabia » jsmoothgen » application » PropertiesBuilder.java
/*
  JSmooth: a VM wrapper toolkit for Windows
  Copyright (C) 2003 Rodrigo Reyes <reyes@charabia.net>

  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2 of the License, or
  (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program; if not, write to the Free Software
  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

*/

package net.charabia.jsmoothgen.application;

import java.io.*;

/**
 *
 * @author  Rodrigo
 */
public class PropertiesBuilder
{
    /**
     * Creates a text containing all the relevant properties of a
     * JSmoothModelBean object. The properties are output in the form
     * "key=value".
     * <p>
     * 
     * Note that all the paths are converted to be made relative to
     * the basedir parameter provided. All the paths converted are
     * expected to be relative to the targetted executable binary
     * (before the conversion is applied, that is).
     *
     */
    static public String makeProperties(File basedir, JSmoothModelBean obj)
    {
  StringBuffer out = new StringBuffer();

  addPair("arguments", obj.getArguments(), out);
  addPair("mainclassname", obj.getMainClassName(), out);
  addPair("jvmsearch", makePathConc(obj.getJVMSearchPath()), out);
  addPair("minversion", obj.getMinimumVersion(), out);
  addPair("maxversion", obj.getMaximumVersion(), out);

  addPair("currentdir", obj.getCurrentDirectory(), out);

  if (obj.getEmbeddedJar() && (obj.getJarLocation().trim().length() > 0))
      {
    addPair("embedjar", "true", out);
      }
  else
      {
    addPair("embedjar", "false", out);
      }

  if (obj.getMaximumMemoryHeap() > 1)
      {
    addPair("maxheap", Integer.toString(obj.getMaximumMemoryHeap()), out);
      }

  if (obj.getInitialMemoryHeap() > 1)
      {
    addPair("initialheap", Integer.toString(obj.getInitialMemoryHeap()), out);
      }

  // BundledVM & classpaths are changed to be accessible
  // from the current directory
  File curdir = new File(obj.getExecutableName()).getParentFile();

  if (curdir == null)
      curdir = basedir.getAbsoluteFile();

  if (curdir.isAbsolute() == false)
      {
    curdir = new File(basedir, curdir.toString());
      }


  //  System.out.println("... curdir1 : " + curdir.toString());

  if (obj.getCurrentDirectory() != null)
      {
    File newcurdir = new File(obj.getCurrentDirectory());
    //    System.out.println("... curdir1.5 : " + obj.getCurrentDirectory());

    if ( ! "${EXECUTABLEPATH}".equalsIgnoreCase(obj.getCurrentDirectory()))
        {
      if (newcurdir.isAbsolute() == false)
          {
        curdir = new File(curdir, newcurdir.toString());
          }
      else
          curdir = newcurdir;
        }
      }
  //  System.out.println("... curdir2 : " + curdir.toString());

  if (obj.getBundledJVMPath() != null)
      addPair("bundledvm", getRenormalizedPathIfNeeded(obj.getBundledJVMPath(), basedir, curdir), out);

        if (obj.getClassPath() != null)
        {
            String[] relcp = new String[obj.getClassPath().length];
            for (int i=0; i<relcp.length; i++)
                {
                    relcp[i] = getRenormalizedPathIfNeeded(obj.getClassPath()[i], basedir, curdir);
                }
            addPair("classpath", makePathConc(relcp), out);
        }

  //
  // Adds all the skeleton-specific properties
  //
  if (obj.getSkeletonProperties() != null)
      {
    for (int i=0; i<obj.getSkeletonProperties().length; i++)
        {
      JSmoothModelBean.Property prop = obj.getSkeletonProperties()[i];
      if (prop.getKey() != null)
          {
        String val = prop.getValue();
        if (val == null)
            val = "";
        addPair("skel_" + prop.getKey(), val, out);
          }
        }
      }


  //
  // Adds all the java properties. Those properties are
  // typically passed as -Dname=value arguments for the sun's
  // JVM.
  //

  JavaPropertyPair[] javapairs = obj.getJavaProperties();
        if (javapairs != null)
        {
            addPair("javapropertiescount", new Integer(javapairs.length).toString(), out);
            for (int i=0; i<javapairs.length; i++)
                {
                    addPair("javaproperty_name_" + i, javapairs[i].getName(), out);
                    addPair("javaproperty_value_" + i, javapairs[i].getValue(), out);
                }
        }

  return out.toString();
    }
    
    /**
     * Converts a path relative to previousbasedir into a path
     * relative to newbasedir.
     */
    static public String getRenormalizedPathIfNeeded(String value, File previousbasedir, File newbasedir)
    {
//   File f = new File(value);
//   if (f.isAbsolute())
//       return value;

  if (newbasedir == null)
      return value;

  if (value == null)
      return "";

  File abs = new File(previousbasedir, value).getAbsoluteFile();
  File n = JSmoothModelPersistency.makePathRelativeIfPossible(newbasedir, abs);

  return n.toString();
    }

    static public String escapeString(String str)
    {
  if (str == null)
      return "";

  StringBuffer out = new StringBuffer();
  for (int i=0; i<str.length(); i++)
      {
    char c = str.charAt(i);
    switch(c)
        {
        case '\n':
      out.append("\\n");
      break;
        case '\t':
      out.append("\\t");
      break;
        case '\r':
      out.append("\\r");
      break;
        case '\\':
      out.append("\\\\");
      break;
        default:
      out.append(c);
        }
      }
  return out.toString();
    }
  
    static private void addPair(String name, String value, StringBuffer out)
    {
  out.append(escapeString(name));
  out.append("=");
  out.append(escapeString(value));
  out.append("\n");
    }
  
    static public String makePathConc(String[] elements)
    {
  StringBuffer buf = new StringBuffer();
  if (elements != null)
      for (int i=0; i<elements.length; i++)
    {
        buf.append(elements[i]);
        if ((i+1)<elements.length)
      buf.append(";");
    }
  return buf.toString();
    }

}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.