1 14 package org.compiere.model; 15 16 import java.io.Serializable ; 17 import java.sql.PreparedStatement ; 18 import java.sql.ResultSet ; 19 import java.sql.SQLException ; 20 import java.util.ArrayList ; 21 import java.util.Properties ; 22 23 import org.compiere.util.Access; 24 import org.compiere.util.DB; 25 import org.compiere.util.Env; 26 import org.compiere.util.Log; 27 28 34 public class MTabVO implements Serializable 35 { 36 39 private MTabVO() 40 { 41 } 43 44 public Properties ctx; 45 46 public int WindowNo; 47 48 public int AD_Window_ID; 49 50 51 public int TabNo; 52 53 55 public int AD_Tab_ID; 56 public String Name = ""; 57 public String Description = ""; 58 public String Help = ""; 59 public boolean IsSingleRow = false; 60 public boolean IsReadOnly = false; 61 public boolean HasTree = false; 62 public int AD_Table_ID; 63 64 public int AD_Column_ID = 0; 65 public String TableName; 66 public boolean IsView = false; 67 public String AccessLevel; 68 public boolean IsSecurityEnabled = false; 69 public boolean IsDeleteable = false; 70 public boolean IsHighVolume = false; 71 public int AD_Process_ID = 0; 72 public String CommitWarning; 73 public String WhereClause; 74 public String OrderByClause; 75 public int TabLevel = 0; 76 public int AD_Image_ID = 0; 77 public int Included_Tab_ID = 0; 78 public String ReplicationType = "L"; 79 80 public boolean IsSortTab = false; 82 public int AD_ColumnSortOrder_ID = 0; 83 public int AD_ColumnSortYesNo_ID = 0; 84 85 public boolean onlyCurrentRows = true; 87 public int onlyCurrentDays = 1; 88 89 90 public ArrayList Fields = null; 91 92 96 public void setCtx (Properties newCtx) 97 { 98 ctx = newCtx; 99 for (int i = 0; i < Fields.size() ; i++) 100 { 101 MFieldVO field = (MFieldVO)Fields.get(i); 102 field.setCtx(newCtx); 103 } 104 } 106 111 protected static String getSQL (MWindowVO mWindowVO) 112 { 113 String sql = "SELECT * FROM AD_Tab_v WHERE AD_Window_ID=?" 115 + " ORDER BY SeqNo"; 116 if (!Env.isBaseLanguage(mWindowVO.ctx, "AD_Window")) 117 sql = "SELECT * FROM AD_Tab_vt WHERE AD_Window_ID=?" 118 + " AND AD_Language='" + Env.getAD_Language(mWindowVO.ctx) + "'" 119 + " ORDER BY SeqNo"; 120 return sql; 121 } 123 124 125 135 public static MTabVO create (MWindowVO wVO, int TabNo, ResultSet rs, boolean isRO, boolean onlyCurrentRows) 136 { 137 Log.trace(Log.l3_Util, "MTabVO.create #" + TabNo); 138 139 MTabVO vo = new MTabVO (); 140 vo.ctx = wVO.ctx; 141 vo.WindowNo = wVO.WindowNo; 142 vo.AD_Window_ID = wVO.AD_Window_ID; 143 vo.TabNo = TabNo; 144 if (!loadTabDetails(vo, rs)) 146 return null; 147 148 if (isRO) 149 { 150 Log.trace(Log.l6_Database, "MTabVO.create", "Tab is ReadOnly"); 151 vo.IsReadOnly = true; 152 } 153 vo.onlyCurrentRows = onlyCurrentRows; 154 155 if (vo.IsSortTab) 157 { 158 vo.Fields = new ArrayList (); } 160 else 161 { 162 createFields (vo); 163 if (vo.Fields == null || vo.Fields.size() == 0) 164 { 165 Log.error("MTabVO.create - No Fields"); 166 return null; 167 } 168 } 169 return vo; 170 } 172 180 public static MTabVO create(Properties ctx, int WindowNo, int AD_Table_ID) 181 { 182 Log.trace(Log.l3_Util, "MTabVO.create"); 183 184 MTabVO vo = new MTabVO (); 185 vo.ctx = ctx; 186 vo.WindowNo = WindowNo; 187 vo.AD_Window_ID = 0; 188 vo.TabNo = 0; 189 boolean resultOK = false; 191 String sql = "SELECT * FROM AD_Tab_v WHERE AD_Table_ID=?"; 192 if (!Env.isBaseLanguage(ctx, "AD_Tab")) 193 sql = "SELECT * FROM AD_Tab_vt WHERE AD_Table_ID=?" 194 + " AND AD_Language='" + Env.getAD_Language(ctx) + "'"; 195 try 196 { 197 PreparedStatement pstmt = DB.prepareStatement(sql); 198 pstmt.setInt(1, AD_Table_ID); 199 ResultSet rs = pstmt.executeQuery(); 200 if (rs.next()) 202 resultOK = loadTabDetails(vo, rs); 203 else 204 Log.trace(Log.l6_Database, "MTabVO.create", "No Tab for AD_Table_ID=" + AD_Table_ID); 205 rs.close(); 207 pstmt.close(); 208 } 209 catch (SQLException e) 210 { 211 Log.error("MTabVO.create(1)", e); 212 } 213 214 if (!resultOK) 215 return null; 216 217 if (vo.IsSortTab) 219 { 220 vo.Fields = new ArrayList (); } 222 else 223 { 224 createFields (vo); 225 if (vo.Fields == null || vo.Fields.size() == 0) 226 { 227 Log.error("MTabVO.create - No Fields"); 228 return null; 229 } 230 } 231 return vo; 232 } 234 240 private static boolean loadTabDetails (MTabVO vo, ResultSet rs) 241 { 242 MRole role = MRole.getDefault(vo.ctx, false); 243 try 244 { 245 vo.AD_Tab_ID = rs.getInt("AD_Tab_ID"); 246 Env.setContext(vo.ctx, vo.WindowNo, vo.TabNo, "AD_Tab_ID", String.valueOf(vo.AD_Tab_ID)); 247 vo.Name = rs.getString("Name"); 248 Env.setContext(vo.ctx, vo.WindowNo, vo.TabNo, "Name", vo.Name); 249 250 boolean showTrl = Env.getContext(vo.ctx, "#ShowTrl").equals("Y") && Env.isMultiLingualDocument(vo.ctx); 252 if (!showTrl && rs.getString("IsTranslationTab").equals("Y")) 253 { 254 Log.trace(Log.l5_DData, "MTabVO.loadTabDetails", "NoTranslationTab - AD_Tab_ID=" + vo.AD_Tab_ID + " " + vo.Name); 255 return false; 256 } 257 boolean showAcct = Env.getContext(vo.ctx, "#ShowAcct").equals("Y"); 259 if (!showAcct && rs.getString("IsInfoTab").equals("Y")) 260 { 261 Log.trace(Log.l5_DData, "MTabVO.loadTabDetails", "NoAcctTab - AD_Tab_ID=" + vo.AD_Tab_ID + " " + vo.Name); 262 return false; 263 } 264 vo.AccessLevel = rs.getString("AccessLevel"); 266 if (!role.canView (vo.ctx, vo.AccessLevel)) { 268 Log.trace(Log.l5_DData, "MTabVO.loadTabDetails", "No Role Access - AD_Tab_ID=" + vo.AD_Tab_ID + " " + vo. Name); 269 return false; 270 } Env.setContext(vo.ctx, vo.WindowNo, vo.TabNo, "AccessLevel", vo.AccessLevel); 272 273 vo.AD_Table_ID = rs.getInt("AD_Table_ID"); 275 Env.setContext(vo.ctx, vo.WindowNo, vo.TabNo, "AD_Table_ID", String.valueOf(vo.AD_Table_ID)); 276 if (!role.isTableAccess(vo.AD_Table_ID, true)) 277 { 278 Log.trace(Log.l5_DData, "MTabVO.loadTabDetails", "No Table Access - AD_Tab_ID=" + vo.AD_Tab_ID + " " + vo. Name); 279 return false; 280 } 281 if (rs.getString("IsReadOnly").equals("Y")) 282 vo.IsReadOnly = true; 283 284 vo.Description = rs.getString("Description"); 286 if (vo.Description == null) 287 vo.Description = ""; 288 vo.Help = rs.getString("Help"); 289 if (vo.Help == null) 290 vo.Help = ""; 291 292 if (rs.getString("IsSingleRow").equals("Y")) 293 vo.IsSingleRow = true; 294 if (rs.getString("HasTree").equals("Y")) 295 vo.HasTree = true; 296 297 vo.AD_Table_ID = rs.getInt("AD_Table_ID"); 298 vo.TableName = rs.getString("TableName"); 299 if (rs.getString("IsView").equals("Y")) 300 vo.IsView = true; 301 vo.AD_Column_ID = rs.getInt("AD_Column_ID"); 303 if (rs.getString("IsSecurityEnabled").equals("Y")) 304 vo.IsSecurityEnabled = true; 305 if (rs.getString("IsDeleteable").equals("Y")) 306 vo.IsDeleteable = true; 307 if (rs.getString("IsHighVolume").equals("Y")) 308 vo.IsHighVolume = true; 309 310 vo.CommitWarning = rs.getString("CommitWarning"); 311 if (vo.CommitWarning == null) 312 vo.CommitWarning = ""; 313 vo.WhereClause = rs.getString("WhereClause"); 314 if (vo.WhereClause == null) 315 vo.WhereClause = ""; 316 vo.OrderByClause = rs.getString("OrderByClause"); 317 if (vo.OrderByClause == null) 318 vo.OrderByClause = ""; 319 320 vo.AD_Process_ID = rs.getInt("AD_Process_ID"); 321 if (rs.wasNull()) 322 vo.AD_Process_ID = 0; 323 vo.AD_Image_ID = rs.getInt("AD_Image_ID"); 324 if (rs.wasNull()) 325 vo.AD_Image_ID = 0; 326 vo.Included_Tab_ID = rs.getInt("Included_Tab_ID"); 327 if (rs.wasNull()) 328 vo.Included_Tab_ID = 0; 329 vo.TabLevel = rs.getInt("TabLevel"); 331 if (rs.wasNull()) 332 vo.TabLevel = 0; 333 vo.IsSortTab = rs.getString("IsSortTab").equals("Y"); 335 if (vo.IsSortTab) 336 { 337 vo.AD_ColumnSortOrder_ID = rs.getInt("AD_ColumnSortOrder_ID"); 338 vo.AD_ColumnSortYesNo_ID = rs.getInt("AD_ColumnSortYesNo_ID"); 339 } 340 try 342 { 343 int index = rs.findColumn ("ReplicationType"); 344 vo.ReplicationType = rs.getString (index); 345 if ("R".equals(vo.ReplicationType)) 346 vo.IsReadOnly = true; 347 } 348 catch (Exception e) 349 { 350 } 351 } 352 catch (SQLException ex) 353 { 354 Log.error("MTabVO.loadTabDetails", ex); 355 return false; 356 } 357 return true; 358 } 360 361 362 363 368 private static boolean createFields (MTabVO mTabVO) 369 { 370 mTabVO.Fields = new ArrayList (); 371 372 String sql = MFieldVO.getSQL(mTabVO); 373 try 374 { 375 PreparedStatement pstmt = DB.prepareStatement(sql); 376 pstmt.setInt(1, mTabVO.AD_Tab_ID); 377 ResultSet rs = pstmt.executeQuery(); 378 while (rs.next()) 379 { 380 MFieldVO voF = MFieldVO.create (mTabVO.ctx, mTabVO.WindowNo, mTabVO.TabNo, mTabVO.AD_Window_ID, mTabVO.IsReadOnly, rs); 381 if (voF != null) 382 mTabVO.Fields.add(voF); 383 } 384 rs.close(); 385 pstmt.close(); 386 } 387 catch (Exception e) 388 { 389 Log.error("MTabVO.createFields", e); 390 return false; 391 } 392 return mTabVO.Fields.size() != 0; 393 } 395 } 397 | Popular Tags |