Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

compiler does not find the NetcdfFileWriter identifiers #29

Open
szabotakacsb opened this issue Jan 28, 2020 · 1 comment
Open

compiler does not find the NetcdfFileWriter identifiers #29

szabotakacsb opened this issue Jan 28, 2020 · 1 comment

Comments

@szabotakacsb
Copy link

I would like to convert String variables to java code to build a NetCDF file from strings. I have some Strings which contain the commands to write a netCDF. For example:

String Variable contains the following strings:
'Variable time; '
'time = ncfile.addVariable(null, "time", DataType.Double, "time");'

String DataA contains:
'ArrayDouble.D1 timeData = new ArrayDouble.D1(countLinesResult); '
'Index ima = timeData.getIndex();'

String DataD contains:
'timeData.setDouble(ima.set(timeIdx),ValueD.get(timeIdx)); '

String DataNC contains:
'ncfile.write(time, timeData); '

each string is public static String. These strings are in NetCDF_writer Class static void getDataNc method. Here is the code:

package meteoread;

/**
 *
 * @author Beata
 */
;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Iterator;
import static meteoread.DownLoad_Meteo.Detected;
import static meteoread.DownLoad_Meteo.ETime;
import static meteoread.DownLoad_Meteo.STime;
import static meteoread.DownLoad_Meteo.Values;
import static meteoread.DownLoad_Meteo.Values2;
import static meteoread.DownLoad_Meteo.id1;
import static meteoread.DownLoad_Meteo.id2;
import static meteoread.DownLoad_Meteo.listString;
import static meteoread.DownLoad_Meteo.res;
import static meteoread.SelectData.result;
import org.mdkt.compiler.InMemoryJavaCompiler;

import ucar.nc2.*;

import ucar.ma2.*;

public class NetCDF_writer {
    private static String okW ="";
    private static int is;
    private static int il;
    private static int di;
    private static int countLinesResult;
    public static String TableNC  = DownLoad_Meteo.Table;
    private static ArrayList<String> s = new ArrayList<String>();
    private static ArrayList<String> s2 = new ArrayList<String>();
   private static ArrayList<String> s3 = new ArrayList<String>();
   private static ArrayList<String> s4 = new ArrayList<String>();
   private static ArrayList<String> s5 = new ArrayList<String>();
   private String[] colName;
    private static ArrayList<String> ValueS = new ArrayList<String>();
    private static ArrayList<Integer> ValueI = new ArrayList<Integer>();
    private static ArrayList<Double> ValueD = new ArrayList<Double>();
    public static String Variables;
    public static String DataA;
    public static String DataD;
    public static String DataNC;

   
 

    static void getDataNc(int id1, int id2, String listString, String location, String Stimenc, String ETimenc)throws Exception {
    
    
        try{
          Connection con = MeteoRead.getConnection();
         PreparedStatement statement= con.prepareStatement("SELECT " + listString + " FROM " +TableNC + " WHERE TIME_ID BETWEEN " +"\"" + STime + "\"" +" AND " + "\"" +ETime + "\"" + " ORDER BY ID");

         ResultSet result = statement.executeQuery();
         ResultSetMetaData rsmd = result.getMetaData();
         

            is = id1;   
      
            il = id2;
            
            di = il-is;
              
            if(is == 1){
             countLinesResult = il;
             }
             else{
             countLinesResult = di;}
            result.first();
            result.previous();
            
                
            ColName = listString.split(",");

            
            NetcdfFileWriter ncfile = NetcdfFileWriter.createNew(NetcdfFileWriter.Version.netcdf4, location, null);
            Dimension timeDim = ncfile.addUnlimitedDimension("time");
            
                       
            s = SelectData.result.get(1);
            s2 = SelectData.result.get(2);
            s3 = SelectData.result.get(3);
            s4 = SelectData.result.get(4);
            s5 = SelectData.result.get(5);


            Variables = "";
            DataA = "";
            DataD = "";
            DataNC = "";
             int n = 0;
          
              while(n < s.size()-1){
           
                 Variables = Variables +" " + s.get(n) + "\n";
                             
                 Variables = Variables +" " + s2.get(n) + "\n";
                 
                     while(result.next()){
                                       
                        Date date2 = dateConv1(result.getString("TIME"));
                 
                         double dateU = ToMATLABDate(date2);
                 
                         if(rsmd.getColumnName(n+1).equals("TIME")){
                     
                           ValueD.add(dateU);
                                    }
                 
                          if(rsmd.getColumnTypeName(n+1)== "VARCHAR" && !rsmd.getColumnName(n+1).equals("TIME")){
                      
                            ValueS.add(result.getString(ColName[n]));
                            }
                    
                          if(rsmd.getColumnTypeName(n+1)== "INTEGER"){
                           
                            ValueI.add(result.getInt(ColName[n]));
                            }
                  
                             if(rsmd.getColumnTypeName(n+1)== "DOUBLE"){
                           
                              ValueD.add(result.getDouble(ColName[n]));
                                                                     }
                                                           }
                     
                       DataA = DataA + s3.get(n) + "\n";
                       DataD = DataD + s4.get(n) + "\n";
                       DataNC = DataNC + s5.get(n) + "\n";
                 
                 
                n++; }
                
           
           
                          
               StringBuffer sourceCode = new StringBuffer();
                sourceCode.append("package meteoread;\n");
                sourceCode.append("public class NetCDF_writer {\n");
                sourceCode.append("   static void getDataNc(int id1, int id2, String listString, String location, String Stimenc, String ETimenc)throws Exception {" +Variables +" ncfile.create();" + "\n" + DataA +" for (int timeIdx = 0; timeIdx < countLinesResult; timeIdx ++){" + DataD + "}"+ DataNC + "}");
                sourceCode.append("}");      
                 Class<?> Netcdf_writer = InMemoryJavaCompiler.compile("meteoread.NetCDF_writer", sourceCode.toString());
                  
           okW = "NC FILE BUILD SUCCESSFULLY";
           okWindow o = new okWindow();
           o.okWindow(okW);
           o.setVisible(true);
           
            } catch(Exception e){
            e.printStackTrace();
            okW = e.toString();
            okWindow o = new okWindow();
            o.okWindow(okW);
            o.setVisible(true);}

            }
    
       
        public static Date dateConv1(String s){
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dateInString = s;
        Date date = new Date();
        
   
        try {

             date = (Date)formatter.parse(dateInString);
        } catch (ParseException e) {
            e.printStackTrace();
        }
         return date;
    }
    
      /**
     * Converts a java.util.Date into a MATLAB Serial Date Number in the local timezone. MATLAB Serial Date Number are
     * doubles counting the number of days since January 0 0000. The time of day is represented in fractions of a whole
     * day.
     *
     * @param date the date to convert
     * @return the date as MATLAB Serial Date Number
     */
    public static double ToMATLABDate(Date date) {
        // Converts a java.util.Date into a MATLAB Serial Date Number taking into account timezones and DST.
        Calendar cal = new GregorianCalendar();
        cal.setTime(date);
        double SerialDateNumber = (date.getTime() + cal.get(Calendar.ZONE_OFFSET) + cal.get(Calendar.DST_OFFSET)) / 1000.0 / 3600.0 / 24.0 ;
        return SerialDateNumber;
    }

    
}

Unfortunately, I got several cannot find symbol error messages. The compiler does not find the NetcdfFileWriter identifiers even though I imported ucar.nc2.* and ucar.ma2.* packages. Could you please write to me how I should fix this issue?

@aklish
Copy link

aklish commented Oct 30, 2020

Did you ever resolve this?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants