Project

General

Profile

Download (5.53 KB) Statistics
| Branch: | Revision:

git_sitools_idoc / hesiod / javaExt / src / fr / ias / sitools / filters / basic / BooleanCorotAsteroAndExo.java @ 6552a8ce

1
package fr.ias.sitools.filters.basic;
2

    
3
import java.util.ArrayList;
4
import java.util.Arrays;
5
import java.util.HashMap;
6
import java.util.List;
7
//import java.util.logging.Logger;
8

    
9
import org.restlet.Request;
10
import org.restlet.data.Form;
11
import org.restlet.ext.wadl.ParameterInfo;
12
import org.restlet.ext.wadl.ParameterStyle;
13

    
14
import fr.cnes.sitools.common.validator.Validator;
15
import fr.cnes.sitools.dataset.DataSetApplication;
16
import fr.cnes.sitools.dataset.database.common.RequestFactory;
17
import fr.cnes.sitools.dataset.database.jdbc.RequestSql;
18
import fr.cnes.sitools.dataset.model.Column;
19
import fr.cnes.sitools.dataset.model.DataSet;
20
import fr.cnes.sitools.dataset.model.Predicat;
21
import fr.cnes.sitools.dataset.plugins.filters.core.AbstractFormFilter;
22
import fr.cnes.sitools.datasource.jdbc.business.SitoolsSQLDataSource;
23
import fr.cnes.sitools.datasource.jdbc.business.SitoolsSQLDataSourceFactory;
24
import fr.cnes.sitools.util.SQLUtils;
25

    
26
public class BooleanCorotAsteroAndExo extends AbstractFormFilter {
27
  
28
  /**
29
   * The index of TYPE
30
   */
31
  private static final int TYPE = 0;
32
  /**
33
   * The index of COLUMN
34
   */
35
  private static final int COLUMN = 1;
36
  /**
37
   * The index of Values
38
   */
39
  private static final int VALUES = 2;
40
  /**
41
   * The number of values
42
   */
43
  private static final int NUMBER_OF_VALUES = 4;
44

    
45
  private String[] values;
46
  
47
  private enum TYPE_COMPONENT {
48
    /** DefaultType */
49
    BOOLEAN_CHECKBOX_COROT,
50
    CHECKBOX_COROT_ASTERO
51
  } 
52
 // private static final Logger LOGGER = Logger.getLogger(BooleanCorot.class.getName());
53
  
54
  public BooleanCorotAsteroAndExo() {
55
    super();
56
    this.setName("BooleanCorotAsteroAndExo");
57
    this.setDescription("Required when using BooleanCorot for exo or astero data checkbox");
58
    this.setClassAuthor("MNICOLAS");
59
    this.setClassOwner("IAS");
60
    this.setClassVersion("0.1");
61
    this.setDefaultFilter(true);
62
    
63
    HashMap<String, ParameterInfo> rpd = new HashMap<String, ParameterInfo>();
64

    
65
     ParameterInfo param1 = new ParameterInfo("p[#]", false, "xs:string", ParameterStyle.QUERY, "BOOLEAN_CHECKBOX_COROT|columnAlias1,columnAlias2" +
66
                     ",columnAlias3,columnAlias4|long|short|center|anticenter");
67
     rpd.put("0", param1);
68
     ParameterInfo param2 = new ParameterInfo("p[#]", false, "xs:string", ParameterStyle.QUERY, "CHECKBOX_COROT_ASTERO|columnAlias1,columnAlias2" +
69
                     ",columnAlias3,columnAlias4|long|short|center|anticenter");
70
     rpd.put("1", param2);
71
     this.setRequestParamsDescription(rpd);
72
  }
73

    
74
  @Override
75
  public List<Predicat> createPredicats(Request request, List<Predicat> predicats) throws Exception {
76
    DataSetApplication dsApplication = (DataSetApplication) getContext().getAttributes().get("DataSetApplication");
77
    DataSet ds =  dsApplication.getDataSet();
78

    
79
    Form params = request.getResourceRef().getQueryAsForm();
80
    boolean filterExists = true;
81
    int i = 0;
82
    while (filterExists) {
83
      String index = TEMPLATE_PARAM.replace("#", Integer.toString(i++));
84
      String formParam = params.getFirstValue(index);
85
      if (formParam != null) {
86
        String[] parameters = formParam.split("\\|");
87
        TYPE_COMPONENT[] types = TYPE_COMPONENT.values();
88
        Boolean trouve = false;
89
        for (TYPE_COMPONENT typeCmp : types) {
90
          if (typeCmp.name().equals(parameters[TYPE])) {
91
            trouve = true;
92
          }
93
        }
94
        if (trouve) {
95
          if (checkValues(parameters)) {
96
            String[] columnsAlias = parameters[COLUMN].split(",");
97
            ArrayList<Column> columns = new ArrayList<Column>();
98
            for (String columnAlias : columnsAlias) {
99
              Column col = ds.findByColumnAlias(columnAlias);
100
              if (col != null) {
101
                columns.add(col);
102
              }
103
            }
104
            SitoolsSQLDataSource dsource = SitoolsSQLDataSourceFactory.getDataSource(ds.getDatasource().getId());
105
            RequestSql requestSql = RequestFactory.getRequest(dsource.getDsModel().getDriverClass());
106
            
107
            String longRunColStr = requestSql.convertColumnToString(columns.get(0));
108
            String shortRunColStr = requestSql.convertColumnToString(columns.get(1));
109
            String centerColStr = requestSql.convertColumnToString(columns.get(2));
110
            String anticenterColStr = requestSql.convertColumnToString(columns.get(3));
111
            
112
            boolean longRunValue = Boolean.valueOf(SQLUtils.escapeString(values[0]));
113
            boolean shortRunValue = Boolean.valueOf(SQLUtils.escapeString(values[1]));
114
            boolean centerValue = Boolean.valueOf(SQLUtils.escapeString(values[2]));
115
            boolean anticenterValue = Boolean.valueOf(SQLUtils.escapeString(values[3]));
116

    
117
            
118
            Predicat predicat = new Predicat();
119
            
120
            predicat.setStringDefinition(" AND ("+longRunColStr+" = "+longRunValue+" OR "+shortRunColStr+" = "+shortRunValue+")"+" AND ("+centerColStr+ " = "+ centerValue+" OR "+anticenterColStr+" = "+anticenterValue+")");
121
            predicats.add(predicat);
122
            
123
          }
124
        }
125
      }else {
126
        filterExists = false;
127
      }
128
    }
129
   return predicats;
130
  }
131
  
132
  
133
  /**
134
   * Check the number of values
135
   * 
136
   * @param parameters
137
   *          the values
138
   * @return true if the number of values is correct
139
   */
140
  private boolean checkValues(String[] parameters) {
141
    values = Arrays.copyOfRange(parameters, VALUES, VALUES + NUMBER_OF_VALUES);
142
    if (values.length == NUMBER_OF_VALUES) {
143
      return true;
144
    }
145
    return false;
146
  }
147
  
148
  @Override
149
  public Validator<?> getValidator() {
150
    // TODO Auto-generated method stub
151
    return null;
152
  }
153

    
154
}