/**
  * get the range including all the versions that have the same minor components
  *
  * @param s1 the precise version we want to get the full range for
  * @return the range ins Cabal syntax
  */
 public static String getMinorRange(final String s1) {
   String[] ss1 = s1.split("\\."); // $NON-NLS-1$
   if (ss1.length > 2) {
     try {
       return ">="
           + ss1[0]
           + "."
           + ss1[1]
           + "."
           + ss1[2]
           + " && <"
           + ss1[0]
           + "."
           + ss1[1]
           + "."
           + (Integer.parseInt(ss1[2]) + 1);
     } catch (NumberFormatException nfe) {
       HaskellCorePlugin.log(nfe);
     }
   } else if (ss1.length > 1) {
     try {
       return ">=" + ss1[0] + "." + ss1[1] + " && <" + ss1[0] + "." + ss1[1] + ".1";
     } catch (NumberFormatException nfe) {
       HaskellCorePlugin.log(nfe);
     }
   }
   return "";
 }
 protected String getMainFileContent(final Map<String, String> vars) {
   /** get module header * */
   vars.put(TemplateVariables.MODULE_NAME, "Main"); // $NON-NLS-1$
   vars.put(TemplateVariables.IMPORTS, ""); // $NON-NLS-1$
   String mod = HaskellCorePlugin.populateTemplate(ICorePreferenceNames.TEMPLATE_MODULE, vars);
   /** get content * */
   vars.put(TemplateVariables.MODULE, mod);
   return HaskellCorePlugin.populateTemplate(ICorePreferenceNames.TEMPLATE_MAIN, vars);
   // return "module Main where"+PlatformUtil.NL+PlatformUtil.NL+"main::IO()"+PlatformUtil.NL+"main
   // = undefined"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 }
 /**
  * get the range including all the versions that have the same major components or above
  *
  * @param s1 the precise version we want to get the full range for
  * @return the range ins Cabal syntax
  */
 public static String getFromMajorRange(final String s1) {
   String[] ss1 = s1.split("\\."); // $NON-NLS-1$
   if (ss1.length > 1) {
     try {
       return ">=" + ss1[0] + "." + ss1[1];
     } catch (NumberFormatException nfe) {
       HaskellCorePlugin.log(nfe);
     }
   }
   return "";
 }
 private void createFile(
     final IProject project, final IPath fileName, final String content, final IProgressMonitor mo)
     throws CoreException {
   try {
     IFile file = project.getFile(fileName);
     // file may exist if project is created from source version control
     if (!file.exists()) {
       InputStream is = new ByteArrayInputStream(content.getBytes(FileUtil.UTF8));
       IProgressMonitor monitor = new SubProgressMonitor(mo, 1);
       file.create(is, true, monitor);
       file.setCharset(FileUtil.UTF8, mo);
     }
   } catch (UnsupportedEncodingException uex) {
     HaskellCorePlugin.log(uex);
   }
 }
 public IEclipsePreferences getCorePrefs() {
   return getPrefsScope().getNode(HaskellCorePlugin.getPluginId());
 }
 public TestCaseWithPreferences(final String name) {
   super(name);
   addQualifier(HaskellCorePlugin.getPluginId());
 }
 public TestCaseWithPreferences() {
   addQualifier(HaskellCorePlugin.getPluginId());
 }
  protected PackageDescription getCabalFile(final Map<String, String> vars) {

    /*String s=CabalSyntax.FIELD_NAME.getCabalName()+":           " + name + NL //$NON-NLS-1$
           + CabalSyntax.FIELD_VERSION.getCabalName()+":        0.1 "+ NL + NL //$NON-NLS-1$
           ;
    if (isLibrary()){
      s+= CabalSyntax.SECTION_LIBRARY.getCabalName() + NL
        + "  "+ CabalSyntax.FIELD_HS_SOURCE_DIRS.getCabalName()+": src" + NL + NL//$NON-NLS-1$ //$NON-NLS-2$
      ;
    }

    if (isExecutable()){
        s+= CabalSyntax.SECTION_EXECUTABLE.getCabalName()+" " + name + NL //$NON-NLS-1$
           + "  "+ CabalSyntax.FIELD_HS_SOURCE_DIRS.getCabalName()+": src" + NL //$NON-NLS-1$ //$NON-NLS-2$
           + "  "+ CabalSyntax.FIELD_MAIN_IS.getCabalName()+": Main.hs"+ NL + NL; //$NON-NLS-1$ //$NON-NLS-2$
    }


    return s;*/
    /*PackageDescription pd=new PackageDescription( name );
    pd.getStanzas().get( 0 ).update( CabalSyntax.FIELD_VERSION, "0.1" ); //$NON-NLS-1$
    pd.getStanzas().get( 0 ).update( CabalSyntax.FIELD_CABAL_VERSION, ">= 1.2" ); //$NON-NLS-1$
    pd.getStanzas().get( 0 ).update( CabalSyntax.FIELD_BUILD_TYPE, "Simple" ); //$NON-NLS-1$
    String userName=PlatformUtil.getCurrentUser();
    if (userName!=null){
      pd.getStanzas().get( 0 ).update( CabalSyntax.FIELD_AUTHOR, userName );
    }

    if (isLibrary()){
      PackageDescriptionStanza pds=pd.addStanza( CabalSyntax.SECTION_LIBRARY, null );
      pds.update( CabalSyntax.FIELD_HS_SOURCE_DIRS, src );
      pds.update( CabalSyntax.FIELD_BUILD_DEPENDS, "base >= 4" ); //$NON-NLS-1$
      pds.update( CabalSyntax.FIELD_GHC_OPTIONS, "-Wall" ); //$NON-NLS-1$
    }

    if (isExecutable()){
      PackageDescriptionStanza pds=pd.addStanza( CabalSyntax.SECTION_EXECUTABLE, name );
      pds.update( CabalSyntax.FIELD_HS_SOURCE_DIRS, src );
      pds.update( CabalSyntax.FIELD_MAIN_IS, "Main.hs" ); //$NON-NLS-1$
      pds.update( CabalSyntax.FIELD_BUILD_DEPENDS, "base >= 4" ); //$NON-NLS-1$
      pds.update( CabalSyntax.FIELD_GHC_OPTIONS, "-Wall" ); //$NON-NLS-1$
    }*/

    String library = ""; // $NON-NLS-1$

    if (isLibrary()) {
      library =
          HaskellCorePlugin.populateTemplate(ICorePreferenceNames.TEMPLATE_CABAL_LIBRARY, vars);
    }
    vars.put(TemplateVariables.LIBRARY, library);

    String exe = ""; // $NON-NLS-1$
    if (isExecutable()) {
      exe = HaskellCorePlugin.populateTemplate(ICorePreferenceNames.TEMPLATE_CABAL_EXE, vars);
    }
    vars.put(TemplateVariables.EXECUTABLE, exe);

    String content = HaskellCorePlugin.populateTemplate(ICorePreferenceNames.TEMPLATE_CABAL, vars);
    PackageDescription pd = PackageDescriptionLoader.load(content);

    for (ICabalContributor c : CabalContributorManager.getContributors()) {
      c.contributeOnNewProject(pd);
    }

    return pd;
  }
 private String getSetupFileContent(final Map<String, String> vars) {
   // return "import Distribution.Simple"+PlatformUtil.NL+"main = defaultMain"+PlatformUtil.NL;
   // //$NON-NLS-1$ //$NON-NLS-2$
   return HaskellCorePlugin.populateTemplate(ICorePreferenceNames.TEMPLATE_CABAL_SETUP, vars);
 }